// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt // shopping cart frappe.provide("erpnext.e_commerce.shopping_cart"); var shopping_cart = erpnext.e_commerce.shopping_cart; var getParams = function (url) { var params = []; var parser = document.createElement('a'); parser.href = url; var query = parser.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); params[pair[0]] = decodeURIComponent(pair[1]); } return params; }; frappe.ready(function() { var full_name = frappe.session && frappe.session.user_fullname; // update user if(full_name) { $('.navbar li[data-label="User"] a') .html(' ' + full_name); } // set coupon code and sales partner code var url_args = getParams(window.location.href); var referral_coupon_code = url_args['cc']; var referral_sales_partner = url_args['sp']; var d = new Date(); // expires within 30 minutes d.setTime(d.getTime() + (0.02 * 24 * 60 * 60 * 1000)); var expires = "expires="+d.toUTCString(); if (referral_coupon_code) { document.cookie = "referral_coupon_code=" + referral_coupon_code + ";" + expires + ";path=/"; } if (referral_sales_partner) { document.cookie = "referral_sales_partner=" + referral_sales_partner + ";" + expires + ";path=/"; } referral_coupon_code=frappe.get_cookie("referral_coupon_code"); referral_sales_partner=frappe.get_cookie("referral_sales_partner"); if (referral_coupon_code && $(".tot_quotation_discount").val()==undefined ) { $(".txtcoupon").val(referral_coupon_code); } if (referral_sales_partner) { $(".txtreferral_sales_partner").val(referral_sales_partner); } // update login shopping_cart.show_shoppingcart_dropdown(); shopping_cart.set_cart_count(); shopping_cart.show_cart_navbar(); }); $.extend(shopping_cart, { show_shoppingcart_dropdown: function() { $(".shopping-cart").on('shown.bs.dropdown', function() { if (!$('.shopping-cart-menu .cart-container').length) { return frappe.call({ method: 'erpnext.e_commerce.shopping_cart.cart.get_shopping_cart_menu', callback: function(r) { if (r.message) { $('.shopping-cart-menu').html(r.message); } } }); } }); }, update_cart: function(opts) { if (frappe.session.user==="Guest") { if (localStorage) { localStorage.setItem("last_visited", window.location.pathname); } frappe.call('erpnext.e_commerce.api.get_guest_redirect_on_action').then((res) => { window.location.href = res.message || "/login"; }); } else { shopping_cart.freeze(); return frappe.call({ type: "POST", method: "erpnext.e_commerce.shopping_cart.cart.update_cart", args: { item_code: opts.item_code, qty: opts.qty, additional_notes: opts.additional_notes !== undefined ? opts.additional_notes : undefined, with_items: opts.with_items || 0 }, btn: opts.btn, callback: function(r) { shopping_cart.unfreeze(); shopping_cart.set_cart_count(true); if(opts.callback) opts.callback(r); } }); } }, set_cart_count: function(animate=false) { $(".intermediate-empty-cart").remove(); var cart_count = frappe.get_cookie("cart_count"); if(frappe.session.user==="Guest") { cart_count = 0; } if(cart_count) { $(".shopping-cart").toggleClass('hidden', false); } var $cart = $('.cart-icon'); var $badge = $cart.find("#cart-count"); if(parseInt(cart_count) === 0 || cart_count === undefined) { $cart.css("display", "none"); $(".cart-tax-items").hide(); $(".btn-place-order").hide(); $(".cart-payment-addresses").hide(); let intermediate_empty_cart_msg = `
${ __("Cart is Empty") }
`; $(".cart-table").after(intermediate_empty_cart_msg); } else { $cart.css("display", "inline"); $("#cart-count").text(cart_count); } if(cart_count) { $badge.html(cart_count); if (animate) { $cart.addClass("cart-animate"); setTimeout(() => { $cart.removeClass("cart-animate"); }, 500); } } else { $badge.remove(); } }, shopping_cart_update: function({item_code, qty, cart_dropdown, additional_notes}) { shopping_cart.update_cart({ item_code, qty, additional_notes, with_items: 1, btn: this, callback: function(r) { if(!r.exc) { $(".cart-items").html(r.message.items); $(".cart-tax-items").html(r.message.total); $(".payment-summary").html(r.message.taxes_and_totals); shopping_cart.set_cart_count(); if (cart_dropdown != true) { $(".cart-icon").hide(); } } }, }); }, show_cart_navbar: function () { frappe.call({ method: "erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings.is_cart_enabled", callback: function(r) { $(".shopping-cart").toggleClass('hidden', r.message ? false : true); } }); }, toggle_button_class(button, remove, add) { button.removeClass(remove); button.addClass(add); }, bind_add_to_cart_action() { $('.page_content').on('click', '.btn-add-to-cart-list', (e) => { const $btn = $(e.currentTarget); $btn.prop('disabled', true); if (frappe.session.user==="Guest") { if (localStorage) { localStorage.setItem("last_visited", window.location.pathname); } frappe.call('erpnext.e_commerce.api.get_guest_redirect_on_action').then((res) => { window.location.href = res.message || "/login"; }); return; } $btn.addClass('hidden'); $btn.closest('.cart-action-container').addClass('d-flex'); $btn.parent().find('.go-to-cart').removeClass('hidden'); $btn.parent().find('.go-to-cart-grid').removeClass('hidden'); $btn.parent().find('.cart-indicator').removeClass('hidden'); const item_code = $btn.data('item-code'); erpnext.e_commerce.shopping_cart.update_cart({ item_code, qty: 1 }); }); }, freeze() { if (window.location.pathname !== "/cart") return; if (!$('#freeze').length) { let freeze = $('') .appendTo("body"); setTimeout(function() { freeze.addClass("show"); }, 1); } else { $("#freeze").addClass("show"); } }, unfreeze() { if ($('#freeze').length) { let freeze = $('#freeze').removeClass("show"); setTimeout(function() { freeze.remove(); }, 1); } } });