1 2(function ($) 3{ 4 ItemChooser = function (selector, options) 5 { 6 var self = this; 7 this.items = []; 8 //this.mobileitems = []; 9 this.settings = $.extend({}, $.fn.itemChooser.defaults, options); 10 this.context = $(selector); 11 this.id = $(selector).attr('id'); 12 13 this.selectors = 14 { 15 container: '#' + this.id, 16 commonItemsList: "#" + this.id + " .other-item-block #item-select-common", 17 itemsJSONField: "input[name*='donatedItemsJSONString']", 18 itemsStringField: "input[name*='donatedItemsString']", 19 pickupSizeField: "input[name*='donatedItemsSize']", 20 maxItemSizeField: "input[name*='maxItemSize']", 21 sizeExactField: "input[name*='donatedItemsSizeExact']", 22 customItemToggle: "#" + this.id + " #custom-item-toggle", 23 customItemContainer: "#" + this.id + " #custom-item-controls", 24 newItemField: "", 25 newItemDescField: "#custom-item-controls #custom-item-name", 26 commonCategoryList: "#custom-item-controls #category-select", 27 addItemRow: "#" + this.id + " .add-item-row", 28 selectedItemsContainer: "#" + this.id + " #item-selected-rows", 29 hasCustomItemField: "input[name*='hasCustomItem']", 30 hasAddOnItemMatchField: "input[name*='hasAddOnItemMatch']" 31 }; 32 } 33 34 ItemChooser.prototype.init = function() 35 { 36 var self = this; 37 38 $('#item-select-common').change(function() 39 {
40 self.addOtherItem(); 41 }); 42 43 $("#custom-item-add").on("click", function (e) 44 { 45 e.preventDefault(); 46 //1. validate 47 var qty = $("#custom-item-qty-list").val(); 48 self.addDescItem(qty); 49 var valid = ($("input[name*='donatedItemsSize']").val() > 0 && $.trim($("input[name*='donatedItemsString']").val()) != ""); 50 if(valid) 51 { 52 $('.pickup-next').addClass('opaque'); 53 } 54 }); 55 56 if (typeof editingExisting == 'undefined') { 57 editingExisting = false; 58 } 59 } 60 61 ItemChooser.prototype.setAllItems = function(commonItemsArray, badItems, topItems) 62 { 63 var self = this; 64 if (commonItemsArray) 65 { 66 self.settings.commonItems = commonItemsArray; 67 68 var options = '<option value="" selected="selected">Select an Item</option>'; 69 $.each(self.settings.commonItems, function(index, ci) 70 { 71 if (!ci.IsTopItem) 72 { 73 options = options + '<option value="' + ci.Name + '">' + ci.Name + '</option>'; 74 } 75 }); 76 77 $("#mobile-item-chooser #item-select-common").each(function(i) 78 { 79 $(this).empty().append(options); 80 }); 81 } 82 if (topItems) 83 { 84 self.settings.topItems = topItems; 85 self.settings.matchId = -1; 86 87 if (topItems.length) 88 { 89 $.each(topItems, function(idx, ti) 90 { 91 var topitemindex = ti.TopItemIndex; 92 var id = ti.Id; 93 94 switch(topitemindex) 95 { 96 case 0: 97 $("#item-qty-clothes").data("id", id); 98 self.settings.matchId = id; 99 break; 100 case 1: 101 $("#item-qty-books").data("id", id); 102 break; 103 case 2: 104 $("#item-qty-misc").data("id", id); 105 break; 106 case 3: 107 $("#item-qty-household").data("id", id); 108 break; 109 case 4: 110 $("#item-qty-chair").data("id", id); 111 break; 112 case 5: 113 $("#item-qty-couch").data("id", id); 114 break; 115 default: 116 break; 117 } 118 }); 119 } 120 } 121 if (badItems) 122 { 123 self.settings.badItems = badItems; 124 } 125 var badItemsHtml = '<div class="bad-items-list">'; 126 if (badItems && badItems.length > 0) 127 { 128 for (var i = 0; i < badItems.length; i++) 129 { 130 badItemsHtml += '<div class="bad-item">' + badItems[i] + '</div>'; 131 } 132 } 133 else 134 { 135 badItemsHtml += '<div class="bad-item">None</div>'; 136 } 137 badItemsHtml += '</div>'; 138 139 $('#bad-items-container').html(badItemsHtml); 140 141 } 142 143 ItemChooser.prototype.setCategories = function(commonCategories) 144 { 145 var self = this; 146 if (commonCategories) 147 { 148 self.settings.commonCategories = commonCategories; 149 var options = '<option value="0" selected="selected">(Please select a category)</option>'; 150 $.each(self.settings.commonCategories, function(index, cc) 151 { 152 options = options + '<option value="' + cc.Id + '">' + cc.Name + '</option>'; 153 }); 154 $(self.selectors.commonCategoryList).empty().append(options); 155 } 156 } 157 158 ItemChooser.prototype.setRouteDefaults = function(routeDefaults) 159 { 160 var self = this; 161 if (routeDefaults) 162 { 163 self.settings.routeDefaults = routeDefaults; 164 self.settings.defaultSize = routeDefaults.DefaultSize ? routeDefaults.DefaultSize : 0.2; 165 } 166 } 167 168 ItemChooser.prototype.renderItemRow = function(idx) 169 { 170 var self = this; 171 var item = self.items[idx]; 172 173 if (item.isCustom || item.isPossibleBadItem) 174 { 175 var rowMarkup = '<div class="row red-bg-shade-7 other-item-block rendered-other-item">'+ 176 '<div class="col-xs-6 col-xs-offset-1 item-name top-space-sm">' + 177 '<span class="other-item-name">' + item.CustomItemDisplayName + '</span>' + 178 '</div>'+ 179 '<div class="col-xs-5 item-qty">'+ 180 '<span class="sa-icon minus" data-value="decrease" data-target="#item-qty-list' + idx + '" data-toggle="spinner"></span>' + 181 '<input class="mobile-pickup-item" id="item-qty-list' + idx + '" data-name="' + item.ItemName +'" data-size="5" data-avg="10" data-min="0" value="' + item.quantity + '" disabled="">' + 182 '<span class="sa-icon plus" data-value="increase" data-target="#item-qty-list' + idx + '" data-toggle="spinner"></span>' + 183 '</div>'+ 184 '</div>'; 185 $(rowMarkup).insertBefore($("#other-item-picker")); 186 } 187 else 188 { 189 var rowMarkup = '<div class="row red-bg-shade-7 other-item-block rendered-other-item">'+ 190 '<div class="col-xs-6 col-xs-offset-1 item-name top-space-sm">' + 191 '<span class="other-item-name">' + item.ItemName + '</span>' + 192 '</div>'+ 193 '<div class="col-xs-5 item-qty">'+ 194 '<span class="sa-icon minus" data-value="decrease" data-target="#item-qty-list' + idx + '" data-toggle="spinner"></span>' + 195 '<input class="mobile-pickup-item" id="item-qty-list' + idx + '" data-name="' + item.ItemName +'" data-size="5" data-avg="10" data-min="0" value="' + item.quantity + '" disabled="">' + 196 '<span class="sa-icon plus" data-value="increase" data-target="#item-qty-list' + idx + '" data-toggle="spinner"></span>' + 197 '</div>'+ 198 '</div>'; 199 $(rowMarkup).insertBefore($("#other-item-picker")); 200 } 201 202 } 203 204 ItemChooser.prototype.indexOfItem = function(itemName, ismobile, mapid) 205 { 206 var self = this; 207 var _items = self.items; 208 209 //if (ismobile === true) { _items = self.mobileitems; } 210 if (_items.length > 0 && _items[0].ItemName !== null) 211 { 212 for (var i = 0; i < _items.length; i++) 213 { 214 if ((mapid && mapid == _items[i].Item_id) || _items[i].ItemName.toLowerCase() == itemName.toLowerCase()) return i; 215 } 216 } 217 return -1; 218 } 219 220 ItemChooser.prototype.addItem = function(quantity, item, itemDisplayName, skipConfirm, size, isPossibleBadItem, isCustomItem, avg, catId, catName, catAvgValue, ismobile, ismapped, mapid) 221 { 222 var self = this; 223 224 var silent = false; 225 if (skipConfirm) silent = skipConfirm; 226 var isCustom = false; 227 if (isCustomItem) isCustom = isCustomItem; 228 var isPBI = false; 229 if (isPossibleBadItem) isPBI = isPossibleBadItem; 230 231 var id = null; 232 var itemName; 233 var avgValue = avg ? avg : null; 234 235 var _items = self.items; 236 //if (ismobile === true) { _items = self.mobileitems; } 237 238 if (item) 239 { 240 itemName = item; 241 } 242 else 243 { 244 itemName = $(self.selectors.commonItemsList + " :selected").val(); 245 if (itemName == null) 246 { 247 DN.Utils.ShowError("The item you entered is not in the list of common items we pickup. Please categorize this item so that we can best plan for the pickup."); 248 249 if ($(self.selectors.customItemToggle).length == 1) { $(self.selectors.customItemToggle).click(); } 250 251 $(self.selectors.newItemDescField).val($(self.selectors.newItemField).val()); 252 $(self.selectors.commonCategoryList).focus(); 253 254 return; 255 } 256 else 257 { 258 $(self.selectors.newItemField).val(itemName); 259 } 260 } 261 var itemSize = size ? size : self.settings.defaultSize; 262 var isFound = false; 263 var q = 1; 264 265 if (quantity && !isNaN(quantity)) q = Number(quantity); 266 267 itemName = itemName.replace(/^\s*|\s*$/g, ""); 268 if (itemName.length == 0) {return;} 269 270 var idx = self.indexOfItem(itemName, ismobile); 271 272 var resetNewItemRow = true; 273 if (idx >= 0) 274 { 275 resetNewItemRow = false; 276 _items[idx].quantity += Number(q); 277 278 $("#item-qty-list"+idx).val(_items[idx].quantity); 279 } 280 else 281 { 282 if (isCustomItem) resetNewItemRow = false; 283 //TODO need better way to check for item limit 284 var existingitems = self.items; 285 //if (ismobile === true) { existingitems = self.items.concat(self.mobileitems); } 286 if (!silent && (existingitems.length + itemName.length + 4) > 512) 287 { 288 DN.Utils.ShowError("The pickup item number limit has been reached. Unable to add item."); 289 return; 290 } 291 292 if ((ismobile && !ismapped) || isCustom || isPBI) 293 { 294 _items.push({ Item_id: id, ItemName: itemName, size: itemSize, quantity: Number(q), avgValue: avgValue, isCustom: isCustom, isPossibleBadItem: isPBI, Category_id: catId, Category: catName, CategoryAvgValue: catAvgValue, CustomItemDisplayName: itemDisplayName, isMobileItem: ismobile }); 295 idx = _items.length - 1; 296 } 297 else if (self.settings.commonItems && self.settings.commonItems.length > 0) 298 { 299 for (var i = 0; i < self.settings.commonItems.length; i++) 300 { 301 //If the name matches -or- it's a mapped item and the Ids match 302 if (self.settings.commonItems[i].Name.toLowerCase() == itemName.toLowerCase() || 303 (ismapped && self.settings.commonItems[i].Id == mapid)) 304 { 305 id = self.settings.commonItems[i].Id; 306 itemSize = self.settings.commonItems[i].PickupSize; 307 itemName = self.settings.commonItems[i].Name; 308 avgValue = self.settings.commonItems[i].AvgValue; 309 catId = self.settings.commonItems[i].CategoryId; 310 catName = self.settings.commonItems[i].CategoryName; 311 catAvgValue = self.settings.commonItems[i].CategoryAvgValue; 312 313 if (!silent && self.settings.commonItems[i].MessagePrompt != null && self.settings.commonItems[i].MessagePrompt.length > 0 && editingExisting == false && $('.ui-dialog.ui-resizable:visible').find('.ui-dialog-title').text('Confirm').length <= 1) 314 { 315 var prompt = self.settings.commonItems[i].MessagePrompt + "\r\n\r\nClick OK to add this item, or CANCEL to
315not add at this time."; 316 DN.Utils.ShowCustomConfirm 317 ( 318 prompt, "Confirm", 319 [{ 320 text: "OK", 321 click: function() 322 { 323 _items.push({ Item_id: id, ItemName: itemName, size: itemSize, quantity: Number(q), avgValue: avgValue, isCustom: isCustom, isPossibleBadItem: isPBI, Category_id: catId, Category: catName, CategoryAvgValue: catAvgValue, CustomItemDisplayName: itemDisplayName, isMobileItem: ismobile }); 324 idx = _items.length - 1; 325 $(this).dialog("destroy"); 326 327 self.updateItems(itemName); 328 }, 329 'class' : 'btn btn-default dialog-confirm' 330 }, 331 { 332 text: "CANCEL", 333 click: function() 334 { 335 $('input.mobile-pickup-item[data-name="'+ itemName +'"]').prev().trigger('click'); 336 $(this).dialog("destroy"); 337 self.updateItems(itemName); 338 }, 339 'class' : 'btn btn-default dialog-cancel' 340 }] 341 ); 342 } 343 else 344 { 345 _items.push({ Item_id: id, ItemName: itemName, size: itemSize, quantity: Number(q), avgValue: avgValue, isCustom: isCustom, isPossibleBadItem: isPBI, Category_id: catId, Category: catName, CategoryAvgValue: catAvgValue, CustomItemDisplayName: itemDisplayName, isMobileItem: ismobile }); 346 idx = _items.length - 1; 347 } 348 break; 349 } 350 } 351 } 352 } 353 354 if (!ismobile && resetNewItemRow) 355 { 356 $("#item-select-common").val(""); 357 $("#item-qty-other").val("0"); 358 } 359 self.updateItems(itemName); 360 } 361 362 ItemChooser.prototype.changeQuantity = function(newQuantity, idx, ismobile, replaceQTY) 363 { 364 var self = this; 365 var _items = self.items; 366 367 //if (ismobile === true) { _items = self.mobileitems; } 368 if (idx >= 0) 369 { 370 var _item = _items[idx]; 371 var _itemName = _item.ItemName; 372 var _oldQty = _item.quantity; 373 var _updateQTY = Number(newQuantity); 374 if (!replaceQTY) 375 { 376 _updateQTY = _oldQty + Number(newQuantity); 377 } 378 379 _item.quantity = Number(_updateQTY); 380 if (_item.quantity < 0) _item.quantity = 0; 381 _items[idx] = _item; 382 383 var _newitems = []; 384 $.each(_items, function(i, t) 385 { 386 if (t.quantity > 0) _newitems.push(t); 387 }); 388 self.items = _newitems; 389 if (satruck.mydonations && 390 satruck.mydonations !== null && 391 satruck.mydonations.config.donationsList && 392 satruck.mydonations.config.donationsList !== null && 393 satruck.mydonations.config.donationsList !== undefined) { 394 var existingDonation = _.find(satruck.mydonations.config.donationsList, function (donation) { 395 return donation.DonationTypeSummary.Pickup_id == satruck.mydonations.wipId; 396 }); 397 existingDonation.DonationDetails.DonationTypeDetail.PickupOrderItems = _newitems; 398 } 399 } 400 401 self.updateItems(_itemName); 402 } 403 404 ItemChooser.prototype.updateItems = function(saveItemIdxName) 405 { 406 var self = this; 407 var options = ''; 408 var isSelected = false; 409 var totalSize = 0; 410 var maxItemSize = 0; 411 var itemsStr = ''; 412 var itemsJSON = []; 413 var badItemsList = ''; 414 //var isPossibleBadItem = false; 415 var matchingBadItems = []; 416 var allBadItems = []; 417 var searchStr; 418 var saveIdx = 0; 419 var ct = 0; 420 var hasCustomItem = false; 421 var tealium_name_string = ""; 422 var tealium_qty_string = ""; 423 var tealium_value_string = ""; 424 var add_on_match_id = self.settings.matchId; 425 var has_add_on_match_id = false; 426 427 //combine items for wip 428 var _items = self.items; 429 //if (satruck.config.ismobile == true) { _items = self.items.concat(self.mobileitems); } 430 431 //clear markup to re-render 432 $($('.rendered-other-item')).remove(); 433 for (var i = 0; i < _items.length; i++) 434 { 435 if (_items[i].quantity >= 1) 436 { 437 if (self.settings.badItems && self.settings.badItems.length > 0) 438 { 439 // isPossibleBadItem = false; 440 searchStr = _items[i].ItemName.toLowerCase(); 441 if (searchStr.length > 5) 442 { 443 searchStr = searchStr.substring(0, 5);
444 } 445 matchingBadItems = $.grep(self.settings.badItems, function (val) 446 { 447 if (val.toLowerCase().indexOf(searchStr) >= 0) 448 return true; 449 else 450 return false; 451 }); 452 if (matchingBadItems.length > 0) 453 { 454 $.merge(allBadItems, matchingBadItems); 455 } 456 } 457 458 //Markup added 459 if (!_items[i].isMobileItem) self.renderItemRow(i); 460 461 itemsJSON.push(_items[i]); 462 itemsStr += (i > 0 ? ',' : '') + _items[i].ItemName + '-' + _items[i].quantity + (_items[i].isPossibleBadItem ? '*' : ''); 463 totalSize += (_items[i].quantity * _items[i].size); 464 tealium_name_string += (i > 0 ? ',' : '') + _items[i].ItemName; 465 tealium_qty_string += (i > 0 ? ',' : '') + _items[i].quantity; 466 tealium_value_string += (i > 0 ? ',' : '') + (_items[i].avgValue ? _items[i].avgValue : "0.00"); 467 468 if (_items[i].size > maxItemSize) 469 { 470 maxItemSize = _items[i].size; 471 } 472 473 if (_items[i].Item_id == add_on_match_id) 474 { 475 has_add_on_match_id = true; 476 } 477 ct++; 478 } 479 else if (saveItemIdxName == _items[i].ItemName) 480 { 481 saveIdx = ct; 482 } 483 484 if (_items[i].isCustom == true) 485 { 486 hasCustomItem = true; 487 } 488 } 489 490 if (allBadItems.length > 0) 491 { 492 for (var i = 0; i < allBadItems.length; i++) 493 { 494 badItemsList += '<option>' + allBadItems[i] + '</option>'; 495 } 496 } 497 498 // round when saving 499 var intSize = 0; 500 if (totalSize <= 0.5) 501 intSize = 1; 502 else 503 intSize = Math.round(totalSize); 504 505 $(self.selectors.itemsJSONField).val(JSON.stringify(itemsJSON)); 506 $(self.selectors.itemsStringField).val(itemsStr); 507 $(self.selectors.pickupSizeField).val(intSize); 508 $(self.selectors.hasAddOnItemMatchField).val(has_add_on_match_id); 509 510 $(self.selectors.hasCustomItemField).val(hasCustomItem); 511 512 //Tealium 513 utag_data.donate_DonatedItems = itemsStr; 514 utag_data.donate_PickupSize = intSize; 515 utag_data.product_id = itemsStr; 516 utag_data.product_name = tealium_name_string; 517 utag_data.unit_price = tealium_value_string; 518 utag_data.product_quantity = tealium_qty_string; 519 utag_data.donate_HasCustomItem = hasCustomItem; 520 utag_data.donate_ItemArray = _items; 521 utag_data.donate_ItemQty = tealium_qty_string; 522 //New Tealium Tags 523 utag_view = utag_data; 524 utag_view.login_status = satruck.account.is_logged_in() ? "Logged In" : "Not Logged In"; 525 utag_view.page_name = "ARC | schedule pickup:select items" 526 utag_view.site_section = "Schedule Pickup"; 527 utag_view.site_type = "ARC"; 528 if (typeof utag != 'undefined' && utag != null) { 529 utag.view(utag_view); 530 } 531 532 //utag_data.site_section = "Schedule Pickup"; 533 //utag_data.site_type = "ARC"; 534 //utag_data.login_status = satruck.account.is_logged_in() ? "Logged In" : "Not Logged In"; 535 536 //Added to handle updating items when there is an add-on during confirmation 537 var today = new Date(); 538 var UTC_TIMESTAMP = today.toUTCString(); 539 var wip = satruck.config._loadWorkflowData(); 540 541 if (wip.id && wip.id !== undefined && !satruck.mydonations) { 542 wip.donation.items = $.parseJSON($("input[name*='donatedItemsJSONString']").val()); 543 wip.donation.itemsString = $("input[name*='donatedItemsString']").val(); 544 wip.donation.pickupSize = $("input[name*='donatedItemsSize']").val(); 545 wip.donation.hasCustomItem = $("input[name*='hasCustomItem']").val(); 546 wip.donation.sizeExact = $("input[name*='donatedItemsSizeExact']").val(); 547 wip.donation.maxSize = $("input[name*='maxItemSize']").val(); 548 wip.donation.hasMatchId = $("input[name*='hasAddOnItem']").val(); 549 wip.donation.matchId = add_on_match_id; 550 satruck.config._persistWorkflowData(wip); 551 $("#confirm-items").text(wip.donation.itemsString); 552 } else if (window._ && window._ !== null && satruck.mydonations.config.donationsList && satruck.mydonations.config.donationsList !== null) { 553 554 // The following applies to editing an existing donation in the MyDonations workflow 555 556 // Identify the existing donation being edited from the global donations array 557 var existingDonation = _.find(satruck.mydonations.config.donationsList, function (donation) { 558 return donation.DonationTypeSummary.Pickup_id == satruck.mydonations.wipId; 559 }); 560 561 var tempString = ''; 562 563 // This method cleans up the PickupOrderItems array of this existing donation
564 _.each(existingDonation.DonationDetails.DonationTypeDetail.PickupOrderItems, function (item) { 565 if (item.quantity && item.quantity !== undefined) { 566 item.Quantity = item.quantity; 567 item.AvgValue = item.avgValue; 568 item.IsCustom = item.isCustom || (item.IsCustom === true); 569 item.IsPossibleBadItem = item.isPossibleBadItem; 570 item.Size = item.size; 571 item.Category_id = item.category_id || item.Category_id; 572 item.Category = item.category || item.Category; 573 item.CategoryAvgValue = item.categoryAvgValue || item.CategoryAvgValue; 574 } 575 576 if (item.IsCustom === true) { 577 existingDonation.DonationDetails.DonationTypeDetail.HasCustomItem = true; 578 } 579 tempString += ''+ item.ItemName + '-' + item.Quantity + ', '; 580 581 }); 582 583 var updatedItemCount = _.sum(existingDonation.DonationDetails.DonationTypeDetail.PickupOrderItems, function (item) { 584 return item.Quantity; 585 }); 586 587 existingDonation.DonationDetails.DonationTypeDetail.Items = tempString.slice(0, -2); 588 existingDonation.DonationDetails.DonationTypeDetail.ItemCount = updatedItemCount; 589 existingDonation.DonationTypeSummary.ItemCount = updatedItemCount; 590 existingDonation.DonationDetails.DonationTypeDetail.PickupSize = Number($("input[name*='donatedItemsSize']").val()); 591 } 592 } 593 594 ItemChooser.prototype.addOtherItem = function() 595 { 596 //var parentDiv = $ctl.parents().eq(2); 597 var item = $('#item-select-common').val(); 598 var quantity = $("#item-qty-other").val(); 599 var itemindex = $("#mobile-item-chooser").itemChooser("indexOfItem", item, true); 600 if (quantity == 0) quantity = 1; 601 if (itemindex < 0) 602 { 603 $("#mobile-item-chooser").itemChooser("addItem", quantity, item, item, false, null, null, null, null, null, null, null, null, null, false); 604 } 605 else 606 { 607 $("#mobile-item-chooser").itemChooser("changeQuantity", quantity, itemindex, false); 608 } 609 } 610 611 ItemChooser.prototype.addDescItem = function(quantity) 612 { 613 var self = this; 614 /// <summary>Add a user described item and verify that it doesn't match against the bad items list</summary> 615 var itemName = $(self.selectors.newItemDescField).val().replace(/-/g, " "); 616 //var id = $(self.selectors.commonCategoryList).val(); 617 var avgValue; 618 var size = "0"; 619 var catId = Number($(self.selectors.commonCategoryList).val()); 620 var catName; 621 var catAvgValue; 622 var isPossibleBadItem = false; 623 var isCustom = true; 624 625 if (self.settings.commonCategories && self.settings.commonCategories.length) 626 { 627 var cc = self.settings.commonCategories.findObject("Name", $(self.selectors.commonCategoryList + " :selected").text()); 628 if (cc) 629 { 630 //This may still be null, but using it if it exists 631 //avgValue = cc.AvgValue ? cc.AvgValue : 0.00; 632 size = cc.PickupSize; 633 catName = cc.Name; 634 catAvgValue = cc.AvgValue ? cc.AvgValue : 0.00; 635 } 636 } 637 638 if (catId == "0") 639 { 640 DN.Utils.ShowError("Please select a category for this item."); 641 $(self.selectors.commonCategoryList).focus(); 642 return false; 643 } 644 else if (!itemName) 645 { 646 DN.Utils.ShowError("Please enter a description for this item."); 647 $(self.selectors.newItemDescField).focus(); 648 return false; 649 } 650 651 if (self.settings.badItems && self.settings.badItems.length > 0) 652 { 653 var matchingBadItems = []; 654 matchingBadItems = $.grep(self.settings.badItems, function (val) 655 { 656 var words = itemName.split(" "); 657 var lval = val.toLowerCase(); 658 for (var j = 0; j < words.length; j++) 659 if (lval.indexOf(words[j].toLowerCase()) >= 0) return true; 660 return false; 661 }); 662 663 if (matchingBadItems.length > 0 && editingExisting == false) 664 { 665 var prompt = itemName + " may be on the Items We Can't Use list. Would you still like to schedule it?\r"; 666 DN.Utils.ShowConfirm 667 ( 668 prompt, "Confirm", 669 function() 670 { 671 isPossibleBadItem = true; 672 //isCustom = false; 673 avgValue = null; 674 catAvgValue = null; 675 676 var itemDisplayName = itemName; 677 itemName = itemName + "[" + size + "X]"; 678 self.addItem(quantity, itemName, itemDisplayName, false, size, isPossibleBadItem, isCustom, avgValue, catId, catName, catAvgValue); 679 $(self.selectors.hasCustomItemField).val("true"); 680 //Clear custom item select 681 $(self.selectors.newItemDescField).val(""); 682 $(self.selectors.commonCategoryList).val("0"); 683 $("#custom-item-qty-list").val("1"); 684 }, 685 function(){} 686 ); 687 } 688 else if (matchingBadItems.length > 0 && editingExisting == true) { 689 isPossibleBadItem = true; 690 avgValue = null; 691 catAvgValue = null; 692 693 var itemDisplayName = itemName; 694 itemName = itemName + "[" + size + "X]"; 695 avgValue = catAvgValue; 696 self.addItem(quantity, itemName, itemDisplayName, false, size, isPossibleBadItem, isCustom, avgValue, catId, catName, catAvgValue, false); 697 $(self.selectors.hasCustomItemField).val("true"); 698 //Clear custom item select 699 $(self.selectors.newItemDescField).val(""); 700 $(self.selectors.commonCategoryList).val("0"); 701 $("#custom-item-qty-list").val("1"); 702 } 703 else 704 { 705 var itemDisplayName = itemName; 706 itemName = itemName + "[" + size + "X]"; 707 avgValue = catAvgValue; 708 self.addItem(quantity, itemName, itemDisplayName, false, size, isPossibleBadItem, isCustom, avgValue, catId, catName, catAvgValue, false); 709 $(self.selectors.hasCustomItemField).val("true"); 710 //Clear custom item select 711 $(self.selectors.newItemDescField).val(""); 712 $(self.selectors.commonCategoryList).val("0"); 713 $("#custom-item-qty-list").val("1"); 714 } 715 } 716 else 717 { 718 var itemDisplayName = itemName; 719 itemName = itemName + "[" + size + "X]"; 720 self.addItem(quantity, itemName, itemDisplayName, false, size, isPossibleBadItem, isCustom, avgValue, catId, catName, catAvgValue, false); 721 $(self.selectors.hasCustomItemField).val("true"); 722 //Clear custom item select 723 $(self.selectors.newItemDescField).val(""); 724 $(self.selectors.commonCategoryList).val("0"); 725 $("#custom-item-qty-list").val("1"); 726 } 727 } 728 729 ItemChooser.prototype.setInitialItems = function (initialItems, callback) { 730 731 var self = this; 732 this.items = []; 733 734 var existingDonation = _.find(satruck.mydonations.config.donationsList, function (donation) { 735 return donation.DonationTypeSummary.Pickup_id == satruck.mydonations.wipId; 736 }); 737 738 // Rest value on each load 739 $('.mobile-pickup-item').each(function (i, v) { 740 $(this).val(0); 741 }); 742 743 $('.other-item-block.rendered-other-item').each(function () { 744 $(this).remove(); 745 }); 746 747 $.each(initialItems, function (i, n) { 748 749 $('.mobile-pickup-item:not(.common):not([data-name="Other"])').each(function (i, v) { 750 751 if (n.Item_id !== null) { 752 if (Number($(this).data("id")) === n.Item_id) { 753 var qty = n.Quantity; 754 for (var i = 1; i <= qty; i++) { 755 $(this).next().trigger('click'); 756 } 757 } 758 } else { 759 if (Number($(this).data("name")) == n.ItemName) { 760 var qty = n.Quantity; 761 for (var i = 1; i <= qty; i++) { 762 $(this).next().trigger('click'); 763 } 764 } 765 } 766 767 }); 768 769 if (n.IsCustom === false) { 770 771 $('#item-select-common option').each(function () { 772 if (this.value == n.ItemName) { 773 $('#item-select-common').val(n.ItemName).trigger('change'); 774 var qty = n.Quantity; 775 for (var i = 1; i < qty; i++) { 776 $('.mobile-pickup-item[data-name="' + n.ItemName + '"]').next().trigger('click'); 777 } 778 } 779 }); 780 } else { 781 var cleanName = n.ItemName.replace(/\[.*?\]/gmi, ''); 782 $('#custom-item-name').val(cleanName); 783 if (n.Category_id == null || n.Category_id == undefined) { 784 $('#category-select option:last').prop('selected', true); 785 } else { 786 $('#category-select option[value=' + n.Category_id + ']').prop('selected', true); 787 } 788 789 $('#custom-item-add').trigger('click'); 790 var qty = n.Quantity; 791 for (var i = 1; i < qty; i++) {category-select 792 $('.mobile-pickup-item[data-name^="' + cleanName + '"]').next().trigger('click'); 793 } 794 } 795 796 }); 797 798 callback(); 799 } 800 801 $.fn.itemChooser = function (param) 802 { 803 // Determine if this element had been initialized (searchPanel object stored in elements data store) 804 if (typeof this.data("itemchooser_obj") == "undefined") 805 { 806 // Create a new plugin object and store a reference in this elements data store 807 var _ic = new ItemChooser(this, param); 808 _ic.init(); 809 810 this.data("itemchooser_obj", _ic); 811 } 812 else 813 { 814 // Get this elements SearchPanel reference 815 var _ic = this.data("itemchooser_obj"); 816 817 // Determine if the first passed parameter is a plugin method 818 if (_ic[param]) 819 { 820 // Call the method 821 return _ic[param].apply(_ic, Array.prototype.slice.call(arguments,1
821)); 822 } 823 else 824 throw 'ITEMCHOOSER_METHOD_NOT_FOUND'; 825 } 826 } 827 $.fn.itemChooser.defaults = 828 { 829 badItems: [], 830 commonItems: [{Name:'2 Pcs Sectional Sofa'},{Name:'3 Pcs Sectional Sofa'},{Name:'4 Pcs or up Sectional Sofa'},{Name:'Air Conditioner'},{Name:'Chair'},{Name:'Crib'},{Name:'Daybed'},{Name:'Footboard'},{Name:'Guitar'}], 831 commonCategories: [], 832 defaultSize: 0.2, 833 afterUpdate: null 834 } 835 836})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.