blob: dbb93a94b10ff249b4093054d5750b161feb6bf4 [file] [log] [blame]
Anand Doshi885e0742015-03-03 14:55:30 +05301// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
Rushabh Mehta3daa49a2014-10-21 16:16:30 +05302// License: GNU General Public License v3. See license.txt
3
4// js inside blog page
5
6// shopping cart
7frappe.provide("shopping_cart");
8
9$.extend(shopping_cart, {
10 show_error: function(title, text) {
Rushabh Mehtafc3d8712015-07-10 10:11:07 +053011 $("#cart-container").html('<div class="msg-box"><h4>' +
12 title + '</h4><p class="text-muted">' + text + '</p></div>');
Rushabh Mehta3daa49a2014-10-21 16:16:30 +053013 },
14
15 bind_events: function() {
Rushabh Mehta3d766862015-09-16 18:52:52 +053016 shopping_cart.bind_address_select();
Rushabh Mehta8ffd4832015-09-17 16:28:30 +053017 shopping_cart.bind_place_order();
18 shopping_cart.bind_change_qty();
Kanchan Chauhana756e3f2016-06-22 15:51:42 +053019 shopping_cart.bind_dropdown_cart_buttons();
Rushabh Mehta3daa49a2014-10-21 16:16:30 +053020 },
Kanchan Chauhana756e3f2016-06-22 15:51:42 +053021
Rushabh Mehta3d766862015-09-16 18:52:52 +053022 bind_address_select: function() {
23 $(".cart-addresses").find('input[data-address-name]').on("click", function() {
24 if($(this).prop("checked")) {
25 var me = this;
26
27 return frappe.call({
28 type: "POST",
29 method: "erpnext.shopping_cart.cart.update_cart_address",
30 args: {
31 address_fieldname: $(this).attr("data-fieldname"),
32 address_name: $(this).attr("data-address-name")
33 },
34 callback: function(r) {
35 if(!r.exc) {
Rushabh Mehta72fbf902015-09-17 18:29:44 +053036 $(".cart-tax-items").html(r.message.taxes);
Rushabh Mehta3d766862015-09-16 18:52:52 +053037 }
38 }
39 });
40 } else {
41 return false;
42 }
43 });
44
45 },
46
Rushabh Mehta8ffd4832015-09-17 16:28:30 +053047 bind_place_order: function() {
48 $(".btn-place-order").on("click", function() {
49 shopping_cart.place_order(this);
Rushabh Mehta3daa49a2014-10-21 16:16:30 +053050 });
Rushabh Mehta3daa49a2014-10-21 16:16:30 +053051 },
52
Rushabh Mehta8ffd4832015-09-17 16:28:30 +053053 bind_change_qty: function() {
54 // bind update button
55 $(".cart-items").on("change", ".cart-qty", function() {
56 var item_code = $(this).attr("data-item-code");
Kanchan Chauhana756e3f2016-06-22 15:51:42 +053057 var newVal = $(this).val();
58 shopping_cart.shopping_cart_update(item_code, newVal);
Kanchan Chauhan239b3512016-05-02 11:43:44 +053059 });
Kanchan Chauhanc8d47da2016-06-22 15:46:38 +053060
61 $(".cart-items").on('click', '.number-spinner button', function () {
62 var btn = $(this),
Kanchan Chauhana756e3f2016-06-22 15:51:42 +053063 input = btn.closest('.number-spinner').find('input'),
64 oldValue = input.val().trim(),
Kanchan Chauhanc8d47da2016-06-22 15:46:38 +053065 newVal = 0;
66
67 if (btn.attr('data-dir') == 'up') {
Kanchan Chauhanc8d47da2016-06-22 15:46:38 +053068 newVal = parseInt(oldValue) + 1;
69 } else {
70 if (oldValue > 1) {
71 newVal = parseInt(oldValue) - 1;
72 }
73 }
Kanchan Chauhana756e3f2016-06-22 15:51:42 +053074 input.val(newVal);
75 var item_code = input.attr("data-item-code");
76 shopping_cart.shopping_cart_update(item_code, newVal);
Kanchan Chauhanc8d47da2016-06-22 15:46:38 +053077 });
Kanchan Chauhan239b3512016-05-02 11:43:44 +053078 },
Kanchan Chauhanb3573a82016-05-09 12:30:58 +053079
Rushabh Mehta3daa49a2014-10-21 16:16:30 +053080 render_tax_row: function($cart_taxes, doc, shipping_rules) {
81 var shipping_selector;
82 if(shipping_rules) {
83 shipping_selector = '<select class="form-control">' + $.map(shipping_rules, function(rule) {
84 return '<option value="' + rule[0] + '">' + rule[1] + '</option>' }).join("\n") +
85 '</select>';
86 }
87
88 var $tax_row = $(repl('<div class="row">\
89 <div class="col-md-9 col-sm-9">\
90 <div class="row">\
91 <div class="col-md-9 col-md-offset-3">' +
92 (shipping_selector || '<p>%(description)s</p>') +
93 '</div>\
94 </div>\
95 </div>\
96 <div class="col-md-3 col-sm-3 text-right">\
97 <p' + (shipping_selector ? ' style="margin-top: 5px;"' : "") + '>%(formatted_tax_amount)s</p>\
98 </div>\
99 </div>', doc)).appendTo($cart_taxes);
100
101 if(shipping_selector) {
102 $tax_row.find('select option').each(function(i, opt) {
103 if($(opt).html() == doc.description) {
104 $(opt).attr("selected", "selected");
105 }
106 });
107 $tax_row.find('select').on("change", function() {
108 shopping_cart.apply_shipping_rule($(this).val(), this);
109 });
110 }
111 },
112
113 apply_shipping_rule: function(rule, btn) {
114 return frappe.call({
115 btn: btn,
116 type: "POST",
117 method: "erpnext.shopping_cart.cart.apply_shipping_rule",
118 args: { shipping_rule: rule },
119 callback: function(r) {
120 if(!r.exc) {
121 shopping_cart.render(r.message);
122 }
123 }
124 });
125 },
126
Rushabh Mehta3daa49a2014-10-21 16:16:30 +0530127 place_order: function(btn) {
128 return frappe.call({
129 type: "POST",
130 method: "erpnext.shopping_cart.cart.place_order",
131 btn: btn,
132 callback: function(r) {
133 if(r.exc) {
134 var msg = "";
135 if(r._server_messages) {
136 msg = JSON.parse(r._server_messages || []).join("<br>");
137 }
138
139 $("#cart-error")
140 .empty()
141 .html(msg || frappe._("Something went wrong!"))
142 .toggle(true);
143 } else {
Anand Doshida858cc2015-02-24 17:50:44 +0530144 window.location.href = "/orders/" + encodeURIComponent(r.message);
Rushabh Mehta3daa49a2014-10-21 16:16:30 +0530145 }
146 }
147 });
148 }
149});
150
Kanchan Chauhana756e3f2016-06-22 15:51:42 +0530151frappe.ready(function() {
Saurabh69f99752016-01-06 16:41:50 +0530152 $(".cart-icon").hide();
Rushabh Mehta3daa49a2014-10-21 16:16:30 +0530153 shopping_cart.bind_events();
Rushabh Mehta3daa49a2014-10-21 16:16:30 +0530154});
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530155
156function show_terms() {
157 var html = $(".cart-terms").html();
158 frappe.msgprint(html);
159}