blob: db6c5714ec3feb90a4a7043a00b9114c5e9468dd [file] [log] [blame]
Anand Doshiab690292013-06-13 11:21:35 +05301// ERPNext - web based ERP (http://erpnext.com)
2// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17// js inside blog page
18
19$(document).ready(function() {
20 // make list of items in the cart
Anand Doshi3dceb842013-06-19 14:57:14 +053021 // wn.cart.render();
Anand Doshic2a35272013-06-19 17:19:20 +053022 wn.cart.bind_events();
Anand Doshi3dceb842013-06-19 14:57:14 +053023 wn.call({
Anand Doshic2a35272013-06-19 17:19:20 +053024 type: "POST",
Anand Doshi3dceb842013-06-19 14:57:14 +053025 method: "website.helpers.cart.get_cart_quotation",
Anand Doshi3dceb842013-06-19 14:57:14 +053026 callback: function(r) {
27 console.log(r);
28 $("#cart-container").removeClass("hide");
29 $(".progress").remove();
30 if(r.exc) {
31 if(r.exc.indexOf("WebsitePriceListMissingError")!==-1) {
32 wn.cart.show_error("Oops!", "Price List not configured.");
Anand Doshiedbf3e12013-07-02 11:40:16 +053033 } else if(r["403"]) {
34 wn.cart.show_error("Hey!", "You need to be logged in to view your cart.");
Anand Doshi3dceb842013-06-19 14:57:14 +053035 } else {
36 wn.cart.show_error("Oops!", "Something went wrong.");
37 }
38 } else {
Anand Doshic2a35272013-06-19 17:19:20 +053039 wn.cart.render(r.message);
Anand Doshi3dceb842013-06-19 14:57:14 +053040 }
41
42 }
43 });
Anand Doshiab690292013-06-13 11:21:35 +053044});
45
46// shopping cart
47if(!wn.cart) wn.cart = {};
48$.extend(wn.cart, {
Anand Doshi3dceb842013-06-19 14:57:14 +053049 show_error: function(title, text) {
50 $("#cart-container").html('<div class="well"><h4>' + title + '</h4> ' + text + '</div>');
51 },
52
Anand Doshic2a35272013-06-19 17:19:20 +053053 bind_events: function() {
54 // bind update button
55 $(document).on("click", ".item-update-cart button", function() {
Anand Doshic2a35272013-06-19 17:19:20 +053056 var item_code = $(this).attr("data-item-code");
57 wn.cart.update_cart({
58 item_code: item_code,
59 qty: $('input[data-item-code="'+item_code+'"]').val(),
60 with_doclist: 1,
61 btn: this,
62 callback: function(r) {
63 if(!r.exc) {
64 wn.cart.render(r.message);
65 var $button = $('button[data-item-code="'+item_code+'"]').addClass("btn-success");
66 setTimeout(function() { $button.removeClass("btn-success"); }, 1000);
67 }
68 },
69 });
70 });
Anand Doshiedbf3e12013-07-02 11:40:16 +053071
72 $("#cart-add-shipping-address").on("click", function() {
73 window.location.href = "address?address_fieldname=shipping_address_name";
74 });
75
76 $("#cart-add-billing-address").on("click", function() {
77 window.location.href = "address?address_fieldname=customer_address";
78 });
Anand Doshic2a35272013-06-19 17:19:20 +053079 },
80
Anand Doshiedbf3e12013-07-02 11:40:16 +053081 render: function(out) {
82 var doclist = out.doclist;
83 var addresses = out.addresses;
84
85 var $cart_items = $("#cart-items").empty();
86 var $cart_taxes = $("#cart-taxes").empty();
87 var $cart_billing_address = $("#cart-billing-address").empty();
88 var $cart_shipping_address = $("#cart-shipping-address").empty();
Anand Doshic2a35272013-06-19 17:19:20 +053089
Anand Doshiedbf3e12013-07-02 11:40:16 +053090 var no_items = $.map(doclist, function(d) { return d.item_code || null;}).length===0;
91 if(no_items) {
Anand Doshic2a35272013-06-19 17:19:20 +053092 wn.cart.show_error("Empty :-(", "Go ahead and add something to your cart.");
Anand Doshiedbf3e12013-07-02 11:40:16 +053093 $("#cart-addresses").toggle(false);
Anand Doshic2a35272013-06-19 17:19:20 +053094 return;
95 }
96
97 $.each(doclist, function(i, doc) {
98 if(doc.doctype === "Quotation Item") {
Anand Doshiedbf3e12013-07-02 11:40:16 +053099 wn.cart.render_item_row($cart_items, doc);
Anand Doshic2a35272013-06-19 17:19:20 +0530100 }
101 });
102
Anand Doshiedbf3e12013-07-02 11:40:16 +0530103 if(!(addresses && addresses.length)) {
104 $cart_shipping_address.html('<div class="well">Hey! Go ahead and add an address</div>');
Anand Doshiab690292013-06-13 11:21:35 +0530105 } else {
Anand Doshiedbf3e12013-07-02 11:40:16 +0530106 wn.cart.render_address($cart_shipping_address, addresses, doclist[0].shipping_address_name);
107 wn.cart.render_address($cart_billing_address, addresses, doclist[0].customer_address);
Anand Doshiab690292013-06-13 11:21:35 +0530108 }
Anand Doshiabc10032013-06-14 17:44:03 +0530109 },
110
Anand Doshiedbf3e12013-07-02 11:40:16 +0530111 render_item_row: function($cart_items, doc) {
112 doc.image_html = doc.image ?
113 '<div style="height: 120px; overflow: hidden;"><img src="' + doc.image + '" /></div>' :
114 '{% include "app/website/templates/html/product_missing_image.html" %}';
115
116 if(!doc.web_short_description) doc.web_short_description = doc.description;
117
118 $(repl('<div class="row">\
119 <div class="col col-lg-9 col-sm-9">\
120 <div class="row">\
121 <div class="col col-lg-3">%(image_html)s</div>\
122 <div class="col col-lg-9">\
123 <h4><a href="%(page_name)s">%(item_name)s</a></h4>\
124 <p>%(web_short_description)s</p>\
125 </div>\
126 </div>\
127 </div>\
128 <div class="col col-lg-3 col-sm-3">\
129 <div class="input-group item-update-cart">\
130 <input type="text" placeholder="Qty" value="%(qty)s" \
131 data-item-code="%(item_code)s">\
132 <div class="input-group-btn">\
133 <button class="btn btn-primary" data-item-code="%(item_code)s">\
134 <i class="icon-ok"></i></button>\
135 </div>\
136 </div>\
137 <p style="margin-top: 10px;">at %(formatted_rate)s</p>\
138 <small class="text-muted" style="margin-top: 10px;">= %(formatted_amount)s</small>\
139 </div>\
140 </div><hr>', doc)).appendTo($cart_items);
141 },
142
143 render_address: function($address_wrapper, addresses, address_name) {
144 $.each(addresses, function(i, address) {
145 $(repl('<div class="accordion-group"> \
146 <div class="accordion-heading"> \
147 <div class="row"> \
148 <div class="col col-lg-10 address-title" \
149 data-address-name="%(name)s"><strong>%(name)s</strong></div> \
150 <div class="col col-lg-2"><input type="checkbox" \
151 data-address-name="%(name)s"></div> \
152 </div> \
153 </div> \
154 <div class="accordion-body collapse" data-address-name="%(name)s"> \
155 <div class="accordion-inner">%(display)s</div> \
156 </div> \
157 </div>', address))
158 .css({"margin": "10px auto"})
159 .appendTo($address_wrapper);
160 });
161
162 $address_wrapper.find(".accordion-heading")
163 .css({
164 "background-color": "#eee",
165 "padding": "10px",
166 })
167 .find(".address-title")
168 .css({"cursor": "pointer"})
169 .on("click", function() {
170 $address_wrapper.find('.accordion-body[data-address-name="'
171 +$(this).attr("data-address-name")+'"]').collapse("toggle");
172 });
173
174 $address_wrapper.find('input[type="checkbox"]').on("click", function() {
175 if($(this).is(":checked")) {
176 var me = this;
177 $address_wrapper.find('input[type="checkbox"]').each(function(i, chk) {
178 if($(chk).attr("data-address-name")!=$(me).attr("data-address-name")) {
179 $(chk).removeAttr("checked");
180 }
181 });
182
183 wn.call({
184 type: "POST",
185 method: "website.helpers.cart.update_cart_address",
186 args: {
187 address_fieldname: $address_wrapper.attr("data-fieldname"),
188 address_name: $(this).attr("data-address-name")
189 },
190 callback: function(r) {
191 if(!r.exc) {
192 wn.cart.render(r.message);
193 }
194 }
195 });
196 } else {
197 return false;
198 }
199 });
200
201 $address_wrapper.find('input[type="checkbox"][data-address-name="'+ address_name +'"]')
202 .attr("checked", "checked");
203
204 $address_wrapper.find(".accordion-body").collapse({
205 parent: $address_wrapper,
206 toggle: false
207 });
208
209 $address_wrapper.find('.accordion-body[data-address-name="'+ address_name +'"]')
210 .collapse("show");
211 }
Anand Doshiab690292013-06-13 11:21:35 +0530212});