1 2ACC.cart = { 3 4 _autoload: [ 5 "bindHelp", 6 "cartRestoration", 7 "bindCartPage", 8 "bindMultiDEntryRemoval", 9 "bindMultidCartProduct", 10 ["bindApplyVoucher", $("#js-voucher-apply-btn").length != 0], 11 ["bindToReleaseVoucher", $("#js-applied-vouchers").length != 0], 12 "bindCartPlaceOrder", 13 "bindProductCodeToWishList", 14"bindDisableSubmitButtonOnFormSubmit", 15 "bindCartAlertDismiss", 16 "bindPotentialPromotion", 17 "bindStickyCartBtn" 18 ], 19 20 bindHelp: function () { 21 $(document).on("click", ".js-cart-help", function (e) { 22 e.preventDefault(); 23 var title = $(this).data("help"); 24 ACC.colorbox.open(title, { 25 html: $(".js-help-popup-content").html(), 26 width: "300px" 27 }); 28 }) 29 }, 30 31 cartRestoration: function () { 32 $('.cartRestoration').click(function () { 33 var sCartUrl = $(this).data("cartUrl"); 34 window.location = sCartUrl; 35 }); 36 }, 37 38 bindCartPage: function () { 39 // link to display the multi-d grid in read-only mode 40 $(document).on("click", '.js-show-editable-grid', function (event) { 41 ACC.cart.populateAndShowEditableGrid(this, event); 42 }); 43 44 }, 45 bindMultiDEntryRemoval: function () { 46 $(document).on("click", '.js-submit-remove-product-multi-d', function () { 47 var itemIndex = $(this).data("index"); 48 var $form = $('#updateCartForm' + itemIndex); 49 var initialCartQuantity = $form.find('input[name=initialQuantity]'); 50 var cartQuantity = $form.find('input[name=quantity]'); 51 var entryNumber = $form.find('input[name=entryNumber]').val(); 52 var productCode = $form.find('input[name=productCode]').val(); 53 54 cartQuantity.val(0); 55 initialCartQuantity.val(0); 56 57 ACC.track.trackRemoveFromCart(productCode, initialCartQuantity, cartQuantity.val()); 58 59 var method = $form.attr("method") ? $form.attr("method").toUpperCase() : "GET"; 60 $.ajax({ 61 url: $form.attr("action"), 62 data: $form.serialize(), 63 type: method, 64 success: function (data) { 65 location.reload(); 66 }, 67 error: function () { 68 alert("Failed to remove quantity. Error details [" + xht + ", " + textStatus + ", " + ex + "]"); 69 } 70 71 }); 72 73 }); 74 }, 75 76 77 populateAndShowEditableGrid: function (element, event) { 78 var readOnly = $(element).data("readOnlyMultidGrid"); 79 var itemIndex = $(element).data("index"); 80 grid = $("#ajaxGrid" + itemIndex); 81 82 var gridEntries = $('#grid' + itemIndex); 83 var strSubEntries = gridEntries.data("sub-entries"); 84 var arrSubEntries = strSubEntries.split(','); 85 var firstVariantCode = arrSubEntries[0].split(':')[0]; 86 87 $(element).toggleClass('open'); 88 89 var targetUrl = gridEntries.data("target-url"); 90 91 var mapCodeQuantity = new Object(); 92 for (var i = 0; i < arrSubEntries.length; i++) { 93 var arrValue = arrSubEntries[i].split(":"); 94 mapCodeQuantity[arrValue[0]] = arrValue[1]; 95 } 96 97 if (grid.children('#cartOrderGridForm').length > 0) { 98 grid.slideToggle("slow"); 99 } 100 else { 101 var method = "GET"; 102 $.ajax({ 103 url: targetUrl, 104 data: {productCode: firstVariantCode, readOnly: readOnly}, 105 type: method, 106 success: function (data) { 107 grid.html(data); 108 $("#ajaxGrid").removeAttr('id'); 109 var $gridContainer = grid.find(".product-grid-container"); 110 var numGrids = $gridContainer.length; 111 for (var i = 0; i < numGrids; i++) { 112 ACC.cart.getProductQuantity($gridContainer.eq(i), mapCodeQuantity, i); 113 } 114 grid.slideDown("slow"); 115 ACC.cart.coreCartGridTableActions(element, mapCodeQuantity); 116 ACC.productorderform.coreTableScrollActions(grid.children('#cartOrderGridForm')); 117 }, 118 error: function (xht, textStatus, ex) { 119 alert("Failed to get variant matrix. Error details [" + xht + ", " + textStatus + ", " + ex + "]"); 120 } 121 122 }); 123 } 124 }, 125 126 127 coreCartGridTableActions: function (element, mapCodeQuantity) { 128 ACC.productorderform.bindUpdateFutureStockButton(".update_future_stock_button"); 129 ACC.productorderform.bindVariantSelect($(".variant-select-btn"), 'cartOrderGridForm'); 130 var itemIndex = $(element).data("index"); 131 var skuQuantityClass = '.sku-quantity'; 132 133 var quantityBefore = 0; 134 var grid = $('#ajaxGrid' + itemIndex + " .product-grid-container"); 135 136 grid.on('focusin', skuQuantityClass, function (event) { 137 quantityBefore = jQuery.trim(this.value); 138 139 $(this).parents('tr').next('.variant-summary').remove(); 140 if ($(this).parents('table').data(ACC.productorderform.selectedVariantData)) { 141 ACC.productorderform.selectedVariants = $(this).parents('table').data(ACC.productorderform.selectedVariantData); 142 } else { 143 ACC.productorderform.selectedVariants = []; 144 } 145 146 if (quantityBefore == "") { 147 quantityBefore = 0; 148 this.value = 0; 149 } 150 }); 151 152 grid.on('focusout keypress', skuQuantityClass, function (event) { 153 var code = event.keyCode || event.which || event.charCode; 154 155 if (code != 13 && code != undefined) { 156 return; 157 } 158 159 var quantityAfter = 0; 160 var gridLevelTotalPrice = ""; 161 162 var indexPattern = "[0-9]+"; 163 var currentIndex = parseInt($(this).attr("id").match(indexPattern)); 164 165 this.value = ACC.productorderform.filterSkuEntry(this.value); 166 167 quantityAfter = jQuery.trim(this.value); 168 var variantCode = $("input[id='cartEntries[" + currentIndex + "].sku']").val(); 169 170 if (isNaN(jQuery.trim(this.value))) { 171 this.value = 0; 172 } 173 174 if (quantityAfter == "") { 175 quantityAfter = 0; 176 this.value = 0; 177 } 178 179 var $gridTotalValue = grid.find("[data-grid-total-id=" + 'total_value_' + currentIndex + "]"); 180 var currentPrice = $("input[id='productPrice[" + currentIndex + "]']").val(); 181 182 if (quantityAfter > 0) { 183 gridLevelTotalPrice = ACC.productorderform.formatTotalsCurrency(parseFloat(currentPrice) * parseInt(quantityAfter)); 184 } 185 186 $gridTotalValue.html(gridLevelTotalPrice); 187 188 var _this = this; 189 var priceSibling = $(this).siblings('.price'); 190 var propSibling = $(this).siblings('.variant-prop'); 191 var currentSkuId = $(this).next('.td_stock').data('sku-id'); 192 var currentBaseTotal = $(this).siblings('.data-grid-total'); 193 194 if (this.value != quantityBefore) { 195 var newVariant = true;
196 ACC.productorderform.selectedVariants.forEach(function (item, index) { 197 if (item.id === currentSkuId) { 198 newVariant = false; 199 200 if(_this.value === '0' || _this.value === 0){ 201 ACC.productorderform.selectedVariants.splice(index, 1); 202 } else { 203 ACC.productorderform.selectedVariants[index].quantity = _this.value; 204 ACC.productorderform.selectedVariants[index].total = ACC.productorderform.updateVariantTotal(priceSibling, _this.value, currentBaseTotal); 205 } 206 } 207 }); 208 209 if(newVariant && this.value > 0){ 210 // update variantData 211 ACC.productorderform.selectedVariants.push({ 212 id: currentSkuId, 213 size: propSibling.data('variant-prop'), 214 quantity: _this.value, 215 total: ACC.productorderform.updateVariantTotal(priceSibling, _this.value, currentBaseTotal) 216 }); 217 } 218 } 219 ACC.productorderform.showSelectedVariant($(this).parents('table')); 220 if (this.value > 0 && this.value != quantityBefore) { 221 $(this).parents('table').addClass('selected'); 222 } else { 223 if (ACC.productorderform.selectedVariants.length === 0) { 224 $(this).parents('table').removeClass('selected').find('.variant-summary').remove(); 225 226 } 227 } 228 229 if (quantityBefore != quantityAfter) { 230 var method = "POST"; 231 $.ajax({ 232 url: ACC.config.encodedContextPath + '/cart/updateMultiD', 233 data: {productCode: variantCode, quantity: quantityAfter, entryNumber: -1}, 234 type: method, 235 success: function (data, textStatus, xhr) { 236 ACC.cart.refreshCartData(data, -1, quantityAfter, itemIndex); 237 mapCodeQuantity[variantCode] = quantityAfter; 238 }, 239 error: function (xhr, textStatus, error) { 240 var redirectUrl = xhr.getResponseHeader("redirectUrl"); 241 var connection = xhr.getResponseHeader("Connection"); 242 // check if error leads to a redirect 243 if (redirectUrl !== null) { 244 window.location = redirectUrl; 245 // check if error is caused by a closed connection 246 } else if (connection === "close") { 247 window.location.reload(); 248 } 249 } 250 }); 251 } 252 }); 253 }, 254 255 refreshCartData: function (cartData, entryNum, quantity, itemIndex) { 256 // if cart is empty, we need to reload the whole page 257 if (cartData.entries.length == 0) { 258 location.reload(); 259 } 260 else { 261 var form; 262 263 if (entryNum == -1) // grouped item 264 { 265 form = $('.js-qty-form' + itemIndex); 266 var productCode = form.find('input[name=productCode]').val(); 267 268 var quantity = 0; 269 var entryPrice = 0; 270 for (var i = 0; i < cartData.entries.length; i++) { 271 var entry = cartData.entries[i]; 272 if (entry.product.code == productCode) { 273 quantity = entry.quantity; 274 entryPrice = entry.totalPrice; 275 ACC.cart.updateEntryNumbersForCartMenuData(entry); 276 break; 277 } 278 } 279 280 if (quantity == 0) { 281 location.reload(); 282 } 283 else { 284 form.find(".qtyValue").html(quantity); 285 form.parent().parent().find(".js-item-total").html(entryPrice.formattedValue); 286 } 287 } 288 289 ACC.cart.refreshCartPageWithJSONResponse(cartData); 290 } 291 }, 292 293 refreshCartPageWithJSONResponse: function (cartData) { 294 // refresh mini cart 295 ACC.minicart.updateMiniCartDisplay(); 296 $('.js-cart-top-totals').html($("#cartTopTotalSectionTemplate").tmpl(cartData)); 297 $('div .cartpotproline').remove(); 298 $('div .cartproline').remove(); 299 $('.js-cart-totals').remove(); 300 $('#ajaxCartPotentialPromotionSection').html($("#cartPotentialPromotionSectionTemplate").tmpl(cartData)); 301 $('#ajaxCartPromotionSection').html($("#cartPromotionSectionTemplate").tmpl(cartData)); 302 $('#ajaxCart').html($("#cartTotalsTemplate").tmpl(cartData)); 303 ACC.quote.bindQuoteDiscount(); 304 }, 305 306 updateEntryNumbersForCartMenuData: function (entry) { 307 var entryNumbers = ""; 308 $.each(entry.entries, function(index, subEntry) { 309 if(index != 0){ 310 entryNumbers = entryNumbers + ";"; 311 } 312 entryNumbers = entryNumbers + subEntry.entryNumber; 313 }); 314 $('.js-execute-entry-action-button').data('actionEntryNumbers',entryNumbers); 315 }, 316 317 getProductQuantity: function (gridContainer, mapData, i) { 318 var tables = gridContainer.find("table"); 319 320 $.each(tables, function (index, currentTable) { 321 var skus = jQuery.map($(currentTable).find("input[type='hidden'].sku"), function (o) { 322 return o.value 323 }); 324 var quantities = jQuery.map($(currentTable).find("input[type='textbox'].sku-quantity"), function (o) { 325 return o 326 }); 327 var selectedVariants = []; 328 329 $.each(skus, function (index, skuId) {
330 var quantity = mapData[skuId]; 331 if (quantity != undefined) { 332 quantities[index].value = quantity; 333 334 var indexPattern = "[0-9]+"; 335 var currentIndex = parseInt(quantities[index].id.match(indexPattern)); 336 var gridTotalValue = gridContainer.find("[data-grid-total-id=" + 'total_value_' + currentIndex + "]"); 337 var gridLevelTotalPrice = ""; 338 var currentPrice = $("input[id='productPrice[" + currentIndex + "]']").val(); 339 if (quantity > 0) { 340 gridLevelTotalPrice = ACC.productorderform.formatTotalsCurrency(parseFloat(currentPrice) * parseInt(quantity)); 341 } 342 gridTotalValue.html(gridLevelTotalPrice); 343 344 selectedVariants.push({ 345 id: skuId, 346 size: $(quantities[index]).siblings('.variant-prop').data('variant-prop'), 347 quantity: quantity, 348 total: gridLevelTotalPrice 349 }); 350 } 351 }); 352 353 if (selectedVariants.length != 0) { 354 $.tmpl(ACC.productorderform.$variantSummaryTemplate, { 355 variants: selectedVariants 356 }).appendTo($(currentTable).addClass('selected')); 357 $(currentTable).find('.variant-summary .variant-property').html($(currentTable).find('.variant-detail').data('variant-property')); 358 $(currentTable).data(ACC.productorderform.selectedVariantData, selectedVariants); 359 } 360 }); 361 362 }, 363 364 bindMultidCartProduct: function () { 365 // link to display the multi-d grid in read-only mode 366 $(document).on("click",'.showQuantityProduct', function (event){ 367 ACC.multidgrid.populateAndShowGrid(this, event, true); 368 }); 369 370 // link to display the multi-d grid in read-only mode 371 $(document).on("click",'.showQuantityProductOverlay', function (event){ 372 ACC.multidgrid.populateAndShowGridOverlay(this, event); 373 }); 374 375 }, 376 377 bindApplyVoucher: function () { 378 379 $(".js-voucher-apply-btn").on("click", function (e) { 380 var voucherCodeVal = $(this).parents('#applyVoucherForm').find('.js-voucher-code-text').val(); 381 $(".js-voucher-code-text").val(voucherCodeVal); 382 ACC.cart.handleApplyVoucher(e, voucherCodeVal); 383 }); 384 385 $(".js-voucher-code-text").on("keypress", function (e) { 386 var voucherCodeVal = $(this).val(); 387 $(".js-voucher-code-text").val(voucherCodeVal); 388 var code = (e.keyCode ? e.keyCode : e.which); 389 if (code == 13) { 390 ACC.cart.handleApplyVoucher(e, voucherCodeVal); 391 } 392 393 }); 394 $(".js-voucher-code-text").keyup(function() { 395 396 var voucherCode = $(this).val().length; 397 if (voucherCode == 0) { 398 $(".validationCoupon").hide(); 399 } 400 }); 401 }, 402 403 handleApplyVoucher: function (e, voucherVal) { 404 var voucherCode = $.trim(voucherVal); 405 if (voucherCode != '' && voucherCode.length > 0) { 406 if ($(window).width() > 991) { 407 sessionStorage.setItem("cartPageScroll", $(e.currentTarget).parents(".table-summarize").offset().top); 408 } 409 $("#applyVoucherForm").submit(); 410 } 411 }, 412 413 bindToReleaseVoucher: function () { 414 $('.js-release-voucher-remove-btn').on("click", function (event) { 415 sessionStorage.setItem("cartPageScroll", $(this).offset().top); 416 $(this).closest('form').submit(); 417 }); 418 }, 419 //Cart page placeOrder submit and validation 420 bindCartPlaceOrder: function () { 421 422 $('.js-cart-placeOrder').on("click", function (event) { 423 424 $(this).closest('form').submit(); 425 426 }); 427 428 $(".backOrderCartUpdate").click(function(){ 429 $('#parLoading').show(); 430 var formId=$(this).attr("id"); 431 var form = $('.'+formId);
432 var productCode = form.find('input[name=productCode]').val(); 433 var initialCartQuantity = form.find('input[name=initialQuantity]').val(); 434 var isBackOrderEnabled = form.find('input[name=isBackOrderEnabled]').val(); 435 var newCartQuantity = form.find('input[name=quantity]').val()?form.find('input[name=quantity]').val():form.find('select[name=quantity]').val(); 436 ACC.track.trackUpdateCart(productCode, initialCartQuantity, newCartQuantity); 437 sessionStorage.setItem("cartPageScroll", $(this).offset().top+100); 438 form.submit(); 439 return true; 440 $('#parLoading').hide(); 441 return false; 442 }); 443 }, 444 bindProductCodeToWishList: function () { 445 446 //On cart page load it will add product code to js-wishListPopup div 447 if($('.cart-list .product').length>0) 448 { 449 var productList = []; 450 var productOutletPromoFlagList = []; 451 var productOutletDiscountList = []; 452 $('.cart-list .product').each(function () { 453 454 var productCode=$(this).find('.js-execute-entry-action-button').attr("data-entry-product-code"); 455 var productOultetPromoFlag=$(this).find('.js-execute-entry-action-button').attr("data-entry-product-outlet-promo-flag"); 456 var productOutletDiscount=$(this).find('.js-execute-entry-action-button').attr("data-entry-product-outlet-discount"); 457 if (productCode) { 458 productList.push(productCode); 459 productOutletPromoFlagList.push(productOultetPromoFlag); 460 productOutletDiscountList.push(productOutletDiscount); 461 } 462 463 464 }); 465 $('.js-wishListPopup').attr('data-product-code', productList); 466 $('.js-wishListPopup').attr('data-outlet-promo-flag', productOutletPromoFlagList); 467 $('.js-wishListPopup').attr('data-outlet-discount', productOutletDiscountList); 468 469 } 470 }, 471 472 bindCartAlertDismiss: function() { 473 $('[data-dismiss="alert"]').click(function() { 474 $(this).parents().find('.global-alerts').removeClass('global-alerts'); 475 }); 476 if ($(window).width() > 991) { 477 setTimeout(function(){ 478 $('.globalMessagesCart .global-alerts .alert-info').remove(); 479 }, 10000); 480 } 481 }, 482 483 bindPotentialPromotion: function() { 484 if ($(window).width() < 992) { 485 var cartElement = $('.cart-page-list .table-wrap .table-cart').first(); 486 cartElement.prepend($('.cartpotproline')); 487 cartElement.prepend($('#ajaxCartPotentialPromotionSection')); 488 } 489 490 }, 491 492 bindDisableSubmitButtonOnFormSubmit:function(){ 493 $("form").submit(function(){ 494 var isDisableBtn = false; 495 if($(this).closest(".page-cartPage").length > 0){ 496 isDisableBtn = true; 497 } 498 if($(this).closest(".page-multiStepCheckoutSummaryPage").length > 0 ){ 499 isDisableBtn = true; 500 } 501 502 if(isDisableBtn){ 503 var btn = $(this).find("button").attr("disabled","disabled"); 504 $(this).find("a.btn-primary").attr("disabled","disabled"); 505 } 506 507 }); 508 509 }, 510 bindStickyCartBtn: function() { 511 if($(window).width() > 991 && $("body").hasClass('page-cartPage') && $(".table-wrap--summarize").length) { 512 if(sessionStorage.getItem("cartPageScroll") != null && sessionStorage.getItem("cartPageScroll") != undefined){ 513 var cartScrollPosition = sessionStorage.getItem("cartPageScroll"); 514 if(cartScrollPosition > window.innerHeight) { 515 $('html, body').animate({ 516 // 'scrollTop' : cartScrollPosition-140 517 'scrollTop' : cartScrollPosition-($('.globalMessagesCart').height()+200) 518 }); 519 } 520 sessionStorage.removeItem("cartPageScroll"); 521 } 522 if(($(window).outerHeight()+$(window).scrollTop()) > $(".cart-page-wishList").offset().top) { 523 $('.cartSticky-Desktop').fadeOut(500); 524 } else { 525 $('.cartSticky-Desktop').fadeIn(500); 526 } 527 var $globalmessagesContainer = $('.cart-wrapper .globalMessagesCart'); 528 if($(window).scrollTop() > $(".cart-thead").offset().top-40) { 529 $('.cart-wrapper .globalMessagesCart .stickyPlaceholder').addClass('container'); 530 if($('.nav-desktop').hasClass('nav-down')) { 531 $globalmessagesContainer.addClass('stickyNavMessages').removeClass('stickyMessages'); 532 } 533 else { 534 $globalmessagesContainer.addClass('stickyMessages').removeClass('stickyNavMessages'); 535 } 536 } else { 537 $('.cart-wrapper .globalMessagesCart .stickyPlaceholder').removeClass('container'); 538 $globalmessagesContainer.removeClass('stickyMessages stickyNavMessages'); 539 } 540 541 var ScrolledCart;
542 $(window).scroll(function(event){ 543 ScrolledCart = true; 544 }); 545 546 setInterval(function() { 547 if (ScrolledCart) { 548 hasScrolledCart(); 549 ScrolledCart = false; 550 } 551 }, 200); 552 553 function hasScrolledCart() { 554 if(($(window).outerHeight()+$(window).scrollTop()) > $(".cart-page-wishList").offset().top) { 555 $('.cartSticky-Desktop').fadeOut(500); 556 } else { 557 $('.cartSticky-Desktop').fadeIn(500); 558 } 559 560 if(($(window).scrollTop() > $(".cart-thead").offset().top-40) || ($('.nav-desktop').hasClass('nav-down') && $(window).scrollTop() > $(".cart-thead").offset().top-80)) { 561 $('.cart-wrapper .globalMessagesCart .stickyPlaceholder').addClass('container'); 562 if($('.nav-desktop').hasClass('nav-down')) { 563 $globalmessagesContainer.addClass('stickyNavMessages').removeClass('stickyMessages'); 564 $('.nav-desktop').addClass('cartStickyBar'); 565 } 566 else { 567 $globalmessagesContainer.addClass('stickyMessages').removeClass('stickyNavMessages'); 568 $('.nav-desktop').removeClass('cartStickyBar'); 569 } 570 } else { 571 $('.cart-wrapper .globalMessagesCart .stickyPlaceholder').removeClass('container'); 572 $globalmessagesContainer.removeClass('stickyMessages stickyNavMessages'); 573 $('.nav-desktop').removeClass('cartStickyBar'); 574 } 575 } 576 577 } 578 } 579 }; 580$(function() { 581 582 try{ 583 584 /* @author: 1digitals 585 * 586 * .free class adds a grey background to the promotion products in entryRootGroup tag free class is added 587 for products having promotion, but promotion may not be applied in those scenarios we should be toggling the grey background*/ 588 589 var promoCodeOne = getEntryNumbersFromPromoCodeOne(); 590 removeDuplicateEntriesFromPromoCodeTwo(promoCodeOne); 591 function getEntryNumbersFromPromoCodeOne(){ 592 var entryNums = []; 593 $.each($(".promotionCode.one"), function(i,e){ 594 entryNums.push($(e).attr("entrynum")); 595 }); 596 return entryNums; 597 } 598 function removeDuplicateEntriesFromPromoCodeTwo(entryNums){ 599 $.each($(".promotionCode.two"), function(i,e){ 600 if(entryNums.indexOf($(e).attr("entrynum")) !== -1){ 601 $(e).remove(); 602 } 603 }); 604 } 605 606 var freeProductTitleList = $(".promotion-bundle-title"); 607 var promotionCode = $(".promotionCode"); 608 var entryNumbers = []; 609 var cartPickList = $("div[data-cartpicklist]"); 610 611 if(freeProductTitleList.length <= 0){ 612 613 $(".product").removeClass("free"); 614 }else{ 615 var titleList = []; 616 $.each(freeProductTitleList,function(index,title){ 617 titleList.push($(title).attr("promotionTitle")); 618 }); 619 $.each(promotionCode,function(index,ele){ 620 var productCode = $(ele).attr("productCode"); 621 if(!titleList.includes(ele.value)){ 622 $(".product[productCode='"+productCode+"']").removeClass("free"); 623 $(".recommended[sourceproduct='"+productCode+"']").hide(); 624 }else{ 625 $(".product[productCode='"+productCode+"']").addClass("free"); 626 627 } 628 629 }); 630 } 631 /* SW-1007,SW-1427 632 * A foreach loop to group products based on promotion name, entry number 633 */ 634 635 $.each(freeProductTitleList,function(index,ele){ 636 var promotionTitle = $(ele).attr("promotiontitle"); 637 var productCodeList = getProductCodeHavingPromotion(promotionTitle); 638 var entryNumberCodeList = getEntryNumberHavingPromotion(promotionTitle); 639 640 $.each(entryNumberCodeList,function(index,entryCode){ 641 var productRow = $(".product[entrynumber='"+entryCode+"']"); 642 643 $.each(productRow,function(index,product){ 644 if($.inArray($(product).attr("entrynumber"),entryNumbers)<0){ 645 if(!$(product).hasClass("free-product")){ 646 if($(product).next('tr').is('.outofstock, .avaibility')) 647 { 648 var oosEle = $(product).next('tr'); 649 $(ele).after(oosEle); 650 $(ele).after($(product)); 651 }else{ 652 $(ele).after($(product)); 653 } 654 }else{ 655 if($(product).next('tr').is('.outofstock, .avaibility')) 656 { 657 var oosEle = $(product).next('tr'); 658 $("tr[promotionTitle='"+promotionTitle+"']").after(oosEle); 659 $("tr[promotionTitle='"+promotionTitle+"']").after($(product)); 660 }else{ 661 $("tr[promotionTitle='"+promotionTitle+"']").after($(product)); 662 } 663 } 664 entryNumbers.push($(product).attr("entrynumber")); 665 } 666 }); 667 668 }); 669 hideRecProRowForPromotionProduct(productCodeList); 670 }); 671 672 673 /* WEB-381 */ 674 var lastProductRowIndex = $("tr.product").length -1; 675 var lastProductRow = $("tr.product")[lastProductRowIndex]; 676 var sourceProductCode = $(lastProductRow).attr("productcode"); 677 var lastRecProductRowIndex = $('.recommended[sourceproduct="'+sourceProductCode+'"]').length -1; 678 var lastRecProductRow = $('.recommended[sourceproduct="'+sourceProductCode+'"]')[lastRecProductRowIndex]; 679 if(!$(lastRecProductRow).hasClass("promoRecommended")){ 680 $(lastRecProductRow).removeClass("hide"); 681 $(lastRecProductRow).show(); 682 } 683 684 /*$.each(freeProductTitleList,function(index,ele){ 685 var promotionTitle = $(ele).attr("promotiontitle");
686 var productCodeList = getProductCodeHavingPromotion(promotionTitle); 687 var productCodeEntered = []; 688 689 $.each(productCodeList,function(index,productCode){ 690 var productRow = $(".product[productCode='"+productCode+"']"); 691 692 $.each(productRow,function(index,product){ 693 if($.inArray($(product).attr("productCode"),productCodeEntered)<0 && 694 $.inArray($(product).attr("entrynumber"),entryNumbers)<0){ 695 if(!$(product).hasClass("free-product")){ 696 $(ele).after($(product)); 697 }else{ 698 699 //var elements = $("input[productCode='"+$(product).attr("productCode")+"']"); 700 var elements = $("input[productCode='"+$(product).attr("productCode")+"'][value='"+promotionTitle+"']"); 701 $.each(elements,function(index,ele){ 702 var title = $(ele).attr("promotionTitle"); 703 if(title == promotionTitle){ 704 $("tr[promotionTitle='"+promotionTitle+"']").after($(product)); 705 } 706 }); 707 } 708 productCodeEntered.push($(product).attr("productCode")); 709 entryNumbers.push($(product).attr("entrynumber")); 710 } 711 }); 712 713 }); 714 hideRecProRowForPromotionProduct(productCodeList); 715 });*/ 716 717 /* SW-1007,SW-1427 718 * Method to get product code list based on promotion title 719 * Input element with type hidden and class promotionCode are is added to DOM with productCode and promotionTile as value 720 * 721 * */ 722 function getProductCodeHavingPromotion(promotionTitle){ 723 var productCodeList = []; 724 $.each(promotionCode,function(index,ele){ 725 var productCode = $(ele).attr("productCode"); 726 if(promotionTitle == ele.value){ 727 productCodeList.push(productCode); 728 } 729 730 }); 731 return productCodeList; 732 } 733 734 function getEntryNumberHavingPromotion(promotionTitle){ 735 var entryNumberCodeList = []; 736 $.each($(promotionCode),function(index,ele){ 737 if(promotionTitle === ele.value){ 738 var entryNumberCode = $(ele).attr("entrynum"); 739 entryNumberCodeList.push(entryNumberCode); 740 } 741 742 }); 743 return entryNumberCodeList; 744 } 745 746 /* 747 * SW-1427 748 * Function to hide recommended product row for 749 * product part of promotion 750 * 751 */ 752 function hideRecProRowForPromotionProduct(productCodeList){ 753 var recProducts = $(".recommended"); 754 755 $.each(recProducts,function(index,product){ 756 var sourceProductCode = $(product).attr("sourceProduct"); 757 if(productCodeList.includes(sourceProductCode)){ 758 $(".recommended[sourceProduct='"+sourceProductCode+"']").hide(); 759 $(".recommended[sourceproduct='"+sourceProductCode+"']").addClass("promoRecommended"); 760 } 761 }); 762 } 763 764 //Update Quantity for recommended product row 765 $('.mirrorpdpAddtoCartInput').on("keyup change",function () { 766 var value = $(this).val(); 767 $(this).val(value); 768 $(this).closest(".recommended").find('.qty_rec_product').val(value); 769 770 }); 771 772 //Remove recommended product row and add to a list in a session object 773 $(".recommendedProductRemove").click(function(){ 774 $(this).closest(".recommended").remove(); 775 776 }); 777 778 //Remove entries from grouping if not part of any promotion 779 $.each($("tr[entrynumber]"),function(index,ele){ 780 var entryNum = $(ele).attr("entrynumber"); 781 var splittedEntry = $(ele).attr("splittedEntry"); 782 if(entryNumbers.includes(entryNum) && splittedEntry == "false"){ 783 $(".product[entrynumber='"+entryNum+"']").addClass("free"); 784 } else{ 785 $(".product[entrynumber='"+entryNum+"']").removeClass("free"); 786 } 787 788 }); 789 790 791 //Add recommended product to cart and page refresh 792 $(".recommendedAddToCart").click(function(e){ 793 e.preventDefault(); 794 $('#parLoading').show(); 795 var url = $(this).closest("form").attr('action'); 796 $.ajax({ 797 type: "POST", 798 url: url, 799 data: $(this).closest("form").serialize(), // serializes the form's elements. 800 success: function (response) { 801 if(!ACC.product.isEmpty(response)) { 802 if (!ACC.product.isEmpty(response.oosProductInUnappliedPromotion)) { 803 $('#promotionOOSProductModal').modal('show'); 804 $('#promotionOOSProductModal .errorMessageSection').html(htmlDecode(response.oosProductInUnappliedPromotion)); 805 $('body').find('div').removeClass('modal-backdrop'); 806 $(document).on("hidden.bs.modal","#promotionOOSProductModal",function(e){ 807 window.location.href = window.location.href; 808 }); 809 } else if (!ACC.product.isEmpty(response.errorMessage.volumeRestrictedQty)
809) { 810 $('.recommended:not(.hide) #recommendedProductMessageModal').modal('show'); 811 $('.recommended:not(.hide) #recommendedProductMessageModal .volumeRestriction').removeClass("hidden"); 812 $('.recommended:not(.hide) #recommendedProductMessageModal #volumeRestrictedQuantity').text(response.errorMessage.volumeRestrictedQtyValue); 813 $('body').find('div').removeClass('modal-backdrop'); 814 } else if (!ACC.product.isEmpty(response.errorMessage.priceRowNotFound)) { 815 $('.recommended:not(.hide) #recommendedProductMessageModal').modal('show'); 816 $('.recommended:not(.hide) #recommendedProductMessageModal .priceRowNotFound').removeClass("hidden"); 817 $('body').find('div').removeClass('modal-backdrop'); 818 } else if (!ACC.product.isEmpty(response.errorMessage.maxOrderQuantityExceeded)) { 819 $('.recommended:not(.hide) #recommendedProductMessageModal').modal('show'); 820 $('.recommended:not(.hide) #recommendedProductMessageModal .maxOrderQuantityExceeded').removeClass("hidden"); 821 $('body').find('div').removeClass('modal-backdrop'); 822 } else if (!ACC.product.isEmpty(response.errorMessage.noStock)) { 823 $('.recommended:not(.hide) #recommendedProductMessageModal').modal('show'); 824 $('.recommended:not(.hide) #recommendedProductMessageModal .noStock').removeClass("hidden"); 825 $('body').find('div').removeClass('modal-backdrop'); 826 } else if (!ACC.product.isEmpty(response.errorMessage.lowStock)) { 827 $('.recommended:not(.hide) #recommendedProductMessageModal').modal('show'); 828 $('.recommended:not(.hide) #recommendedProductMessageModal .lowStock').removeClass("hidden"); 829 $('body').find('div').removeClass('modal-backdrop'); 830 } else if (!ACC.product.isEmpty(response.errorMessage.reduceMaxOrderQuantityExceeded)) { 831 $('.recommended:not(.hide) #recommendedProductMessageModal').modal('show'); 832 $('.recommended:not(.hide) #recommendedProductMessageModal .reduceMaxOrderQuantityExceeded').removeClass("hidden"); 833 $('body').find('div').removeClass('modal-backdrop'); 834 } else { 835 console.log("recommended product added successfully "); 836 window.location.href = window.location.href; 837 } 838 } else { 839 console.log("Error occured for recommended product "); 840 $('#parLoading').hide(); 841 } 842 }, 843 error: function (response) { 844 console.log("Error occured for recommended product "); 845 $('#parLoading').hide(); 846 } 847 }); 848 }); 849 850 $(document).on("hidden.bs.modal","#recommendedProductMessageModal",function(e){ 851 window.location.href = window.location.href; 852 }); 853 //Clear jquery session object on logout 854 $("#salon-logout").click(function(){ 855 $.session.clear(); 856 }); 857 //Clear jquery session object on login 858 $(".btn-login-custom").click(function(){ 859 $.session.clear(); 860 }); 861 862 863 if(cartPickList.attr("data-cartpicklist") == "true"){ 864 cartPickList.removeClass("hide"); 865 $('#modal-promotion-products-display .modal-content').replaceWith(cartPickList); 866 $('#modal-promotion-products-display').modal(); 867 ACC.product.bindqtyValue(); 868 //ACC.productDetail.checkDropDownForPopup(); 869 } 870 871 $("tr[class='avaibility'] input[name='entryNumber']").each(function(){ 872 $("tr[entrynumber="+$(this).val()+"]").after($(this).parent()); 873 }) 874 $.each($("tr.free"),function(index,ele){ 875 var thisIndex = this.rowIndex+1; 876 console.log(this.rowIndex); 877 console.log(thisIndex); 878 if(!$('.table-cart tr:eq('+thisIndex+')').hasClass('free') && !$('.table-cart tr:eq('+thisIndex+')').hasClass('avaibility') && !$('.table-cart tr:eq('+thisIndex+')').hasClass('outofstock')){ 879 $(this).css("border-bottom", "2px solid #ebebeb" ); 880 } 881 }); 882 $.each($("tr.promotion-bundle-title, tr.cart-bundle-details"),function(index,ele){ 883 var thisIndex = this.rowIndex-1; 884 if($('.table-cart tr:eq('+thisIndex+')').hasClass('free') || $('.table-cart tr:eq('+thisIndex+')').hasClass('last-bundle-product') ){ 885 $('<tr class="emptySpace"><td></td></tr>').insertBefore($(this)) 886 } 887 }); 888 889 }catch(err){ 890 891 } 892 893 $(".showLoader").click(function(e){ 894 var disablePlaceOrderButton=$('.disablePlaceOrderButton').attr("js-disable-place-order-button"); 895 if(disablePlaceOrderButton != "true") 896 { 897 $('#parLoading').show(); 898 } 899 }); 900 901 $(".freeSelection").click(function(e) { 902 e.preventDefault(); 903 var promotionCodeDetails = $(this).attr("promotionCode");
904 var productCode = $(".promotionCode.two." + promotionCodeDetails).attr("productCode"); 905 var entryNumber = $(".promotionCode.two." + promotionCodeDetails).attr("entryNum"); 906 907 $.ajax({ 908 url: ACC.config.encodedContextPath + "/picklist/edit", 909 type: 'POST', 910 data: { "entryNumber": entryNumber, "productCode": productCode }, 911 async: false, 912 dataType: "text", 913 success: function(response) { 914 console.log("Success"); 915 console.log(response); 916 var result = $.parseJSON(response); 917 $('#modal-promotion-products-display .modal-content').replaceWith(result.addToCartLayer); 918 $('#modal-promotion-products-display').modal(); 919 920 ACC.productDetail.checkDropDownForPopup(); 921 ACC.product.bindSelectDisplay(); 922 ACC.product.bindqtyValue(); 923 924 925 }, 926 error: function(error) { 927 console.log("error"); 928 console.log(error); 929 $('#modal-promotion-products-display .modal-content').replaceWith(error.responseText); 930 $('#modal-promotion-products-display').modal(); 931 } 932 }); 933 }); 934 935}); 936 937function htmlDecode(input) { 938 var doc = new DOMParser().parseFromString(input, "text/html"); 939 return doc.documentElement.textContent; 940} 941function statcb(result) { 942 alert(result.status); 943 if (result.status) { 944 console.log(result.status); 945 } 946 } 947 948 949$(".cartLoader").click(function(e){ 950 $("#showLoading").show(); 951}); 952
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.