[wip] shopping cart shipping rule, price list cleanup
diff --git a/erpnext/templates/includes/cart.js b/erpnext/templates/includes/cart.js
index e0706f7..e6ce25a 100644
--- a/erpnext/templates/includes/cart.js
+++ b/erpnext/templates/includes/cart.js
@@ -14,28 +14,9 @@
bind_events: function() {
shopping_cart.bind_address_select();
+ shopping_cart.bind_place_order();
+ shopping_cart.bind_change_qty();
- // bind update button
- $(document).on("click", ".item-update-cart button", function() {
- var item_code = $(this).attr("data-item-code");
- shopping_cart.update_cart({
- item_code: item_code,
- qty: $('input[data-item-code="'+item_code+'"]').val(),
- with_doc: 1,
- btn: this,
- callback: function(r) {
- if(!r.exc) {
- shopping_cart.render(r.message);
- var $button = $('button[data-item-code="'+item_code+'"]').addClass("btn-success");
- setTimeout(function() { $button.removeClass("btn-success"); }, 1000);
- }
- },
- });
- });
-
- $(".btn-place-order").on("click", function() {
- shopping_cart.place_order(this);
- });
},
bind_address_select: function() {
@@ -63,95 +44,31 @@
},
- render: function(out) {
- var doc = out.doc;
- var addresses = out.addresses;
-
- var $cart_items = $("#cart-items").empty();
- var $cart_taxes = $("#cart-taxes").empty();
- var $cart_totals = $("#cart-totals").empty();
- var $cart_billing_address = $("#cart-billing-address").empty();
- var $cart_shipping_address = $("#cart-shipping-address").empty();
-
- var no_items = $.map(doc.items || [],
- function(d) { return d.item_code || null;}).length===0;
- if(no_items) {
- shopping_cart.show_error("Cart Empty", frappe._("Go ahead and add something to your cart."));
- $("#cart-addresses").toggle(false);
- return;
- }
-
- var shipping_rule_added = false;
- var taxes_exist = false;
- var shipping_rule_labels = $.map(out.shipping_rules || [], function(rule) { return rule[1]; });
-
- $.each(doc.items || [], function(i, d) {
- shopping_cart.render_item_row($cart_items, d);
+ bind_place_order: function() {
+ $(".btn-place-order").on("click", function() {
+ shopping_cart.place_order(this);
});
-
- $.each(doc.taxes || [], function(i, d) {
- if(out.shipping_rules && out.shipping_rules.length &&
- shipping_rule_labels.indexOf(d.description)!==-1) {
- shipping_rule_added = true;
- shopping_cart.render_tax_row($cart_taxes, d, out.shipping_rules);
- } else {
- shopping_cart.render_tax_row($cart_taxes, d);
- }
-
- taxes_exist = true;
- });
-
- if(out.shipping_rules && out.shipping_rules.length && !shipping_rule_added) {
- shopping_cart.render_tax_row($cart_taxes, {description: "", formatted_tax_amount: ""},
- out.shipping_rules);
- taxes_exist = true;
- }
-
- if(taxes_exist)
- $('<hr>').appendTo($cart_taxes);
-
- shopping_cart.render_tax_row($cart_totals, {
- description: "",
- formatted_tax_amount: __("Total") + ": <strong>" + doc.formatted_grand_total_export + "</strong>"
- });
-
- if(!(addresses && addresses.length)) {
- $cart_shipping_address.html('<p>'+frappe._("Please add a new address")+'</p>');
- } else {
- shopping_cart.render_address($cart_shipping_address, addresses, doc.shipping_address_name);
- shopping_cart.render_address($cart_billing_address, addresses, doc.customer_address);
- }
},
- render_item_row: function($cart_items, doc) {
- doc.image_html = doc.website_image ?
- '<div style="height: 120px; overflow: hidden;"><img src="' + doc.website_image + '" /></div>': "";
+ bind_change_qty: function() {
+ // bind update button
+ $(".cart-items").on("change", ".cart-qty", function() {
+ var item_code = $(this).attr("data-item-code");
+ shopping_cart.update_cart({
+ item_code: item_code,
+ qty: $(this).val(),
+ with_items: 1,
+ btn: this,
+ callback: function(r) {
+ if(!r.exc) {
+ $(".cart-items").html(r.message.items);
+ $(".cart-tax-items").html(r.message.taxes);
+ }
+ $(".tax-grand-total").temp_highlight();
+ },
+ });
+ });
- if(doc.description === doc.item_name) doc.description = "";
-
- $(repl('<div class="row">\
- <div class="col-md-9 col-sm-9">\
- <div class="row">\
- <div class="col-md-2">%(image_html)s</div>\
- <div class="col-md-10">\
- <h5><a href="%(page_name)s">%(item_name)s</a></h5>\
- <p>%(description)s</p>\
- </div>\
- </div>\
- </div>\
- <div class="col-md-3 col-sm-3 text-right">\
- <div class="input-group item-update-cart">\
- <input type="text" placeholder="Qty" value="%(qty)s" \
- data-item-code="%(item_code)s" class="text-right form-control">\
- <div class="input-group-btn">\
- <button class="btn btn-primary" data-item-code="%(item_code)s">\
- <i class="icon-ok"></i></button>\
- </div>\
- </div>\
- <p class="text-muted small" style="margin-top: 10px;">' + __("Rate") + ': %(formatted_rate)s</p>\
- <small style="margin-top: 10px;">%(formatted_amount)s</small>\
- </div>\
- </div><hr>', doc)).appendTo($cart_items);
},
render_tax_row: function($cart_taxes, doc, shipping_rules) {
@@ -201,46 +118,6 @@
});
},
- render_address: function($address_wrapper, addresses, address_name) {
- $.each(addresses, function(i, address) {
- $(repl('<div class="panel panel-default"> \
- <div class="panel-heading"> \
- <div class="row"> \
- <div class="col-md-10 address-title" \
- data-address-name="%(name)s"><strong>%(name)s</strong></div> \
- <div class="col-md-2 text-right"><input type="checkbox" \
- data-address-name="%(name)s"></div> \
- </div> \
- </div> \
- <div class="panel-collapse collapse" data-address-name="%(name)s"> \
- <div class="panel-body text-muted small">%(display)s</div> \
- </div> \
- </div>', address))
- .css({"margin": "10px auto"})
- .appendTo($address_wrapper);
- });
-
- $address_wrapper.find(".panel-heading")
- .find(".address-title")
- .css({"cursor": "pointer"})
- .on("click", function() {
- $address_wrapper.find('.panel-collapse[data-address-name="'
- +$(this).attr("data-address-name")+'"]').collapse("toggle");
- });
-
-
- $address_wrapper.find('input[type="checkbox"][data-address-name="'+ address_name +'"]')
- .prop("checked", true);
-
- $address_wrapper.find(".panel-collapse").collapse({
- parent: $address_wrapper,
- toggle: false
- });
-
- $address_wrapper.find('.panel-collapse[data-address-name="'+ address_name +'"]')
- .collapse("show");
- },
-
place_order: function(btn) {
return frappe.call({
type: "POST",
@@ -267,24 +144,4 @@
$(document).ready(function() {
shopping_cart.bind_events();
- // return frappe.call({
- // type: "POST",
- // method: "erpnext.shopping_cart.cart.get_cart_quotation",
- // callback: function(r) {
- // $("#cart-container").removeClass("hide");
- // $(".loading").remove();
- // if(r.exc) {
- // if(r.exc.indexOf("WebsitePriceListMissingError")!==-1) {
- // shopping_cart.show_error("Configuration Error", frappe._("Price List not configured."));
- // } else if(r["403"]) {
- // shopping_cart.show_error("Not Allowed", frappe._("You need to be logged in to view your cart."));
- // } else {
- // shopping_cart.show_error("Error", frappe._("Something went wrong."));
- // }
- // } else {
- // shopping_cart.set_cart_count();
- // shopping_cart.render(r.message);
- // }
- // }
- // });
});
diff --git a/erpnext/templates/includes/cart/cart_item_line.html b/erpnext/templates/includes/cart/cart_item_line.html
deleted file mode 100644
index cd15763..0000000
--- a/erpnext/templates/includes/cart/cart_item_line.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% from "erpnext/templates/includes/order/order_macros.html" import item_name_and_description %}
-
-<div class="row">
- <div class="col-sm-8 col-xs-6" style="margin-bottom: 10px;">
- {{ item_name_and_description(d) }}
- </div>
- <div class="col-sm-2 col-xs-3 text-right">
- <div>{{ d.get_formatted('qty') }}</div>
- <p class="text-muted small" style="margin-top: 10px;">
- {{ _("Rate") + ': ' + d.get_formatted("rate") }}
- </p>
- </div>
- <div class="col-sm-2 col-xs-3 text-right">
- {{ d.get_formatted("amount") }}
- </div>
-</div>
diff --git a/erpnext/templates/includes/cart/cart_items.html b/erpnext/templates/includes/cart/cart_items.html
new file mode 100644
index 0000000..f7efa78
--- /dev/null
+++ b/erpnext/templates/includes/cart/cart_items.html
@@ -0,0 +1,23 @@
+{% from "erpnext/templates/includes/order/order_macros.html" import item_name_and_description %}
+
+{% for d in doc.items %}
+<div class="cart-item">
+ <div class="row">
+ <div class="col-sm-8 col-xs-6" style="margin-bottom: 10px;">
+ {{ item_name_and_description(d) }}
+ </div>
+ <div class="col-sm-2 col-xs-3 text-right">
+ <span style="max-width: 50px; display: inline-block">
+ <input class="form-control text-right cart-qty"
+ value = "{{ d.get_formatted('qty') }}"
+ data-item-code="{{ d.item_code }}"></span>
+ <p class="text-muted small" style="margin-top: 10px;">
+ {{ _("Rate") + ': ' + d.get_formatted("rate") }}
+ </p>
+ </div>
+ <div class="col-sm-2 col-xs-3 text-right">
+ {{ d.get_formatted("amount") }}
+ </div>
+ </div>
+</div>
+{% endfor %}
diff --git a/erpnext/templates/includes/issue_row.html b/erpnext/templates/includes/issue_row.html
index 8e87fca..2935a24 100644
--- a/erpnext/templates/includes/issue_row.html
+++ b/erpnext/templates/includes/issue_row.html
@@ -2,13 +2,13 @@
<a class="no-decoration" href="/issues?name={{ doc.name }}" no-pjax>
<div class="row">
<div class="col-xs-8">
- <span class="indicator {{ "red" if doc.status=="Open" else "blue" }}">
+ <span class="indicator {{ "red" if doc.status=="Open" else "darkgrey" }}">
{{ doc.name }}</span>
<span style="margin-left: 15px;">
{{ doc.subject }}</span>
</div>
- <div class="col-xs-4 text-right small">
- {{ frappe.format_date(doc.creation) }}
+ <div class="col-xs-4 text-right small text-muted">
+ {{ frappe.format_date(doc.modified) }}
</div>
</div>
</a>
diff --git a/erpnext/templates/includes/order/order_taxes.html b/erpnext/templates/includes/order/order_taxes.html
index 510e1a3..8c8e886 100644
--- a/erpnext/templates/includes/order/order_taxes.html
+++ b/erpnext/templates/includes/order/order_taxes.html
@@ -15,5 +15,8 @@
<div class="row tax-grand-total-row">
<div class="col-xs-6 text-right">{{ _("Grand Total") }}</div>
<div class="col-xs-6 text-right">
- {{ doc.get_formatted("grand_total") }}</div>
+ <span class="tax-grand-total">
+ {{ doc.get_formatted("grand_total") }}
+ </span>
+ </div>
</div>
diff --git a/erpnext/templates/pages/cart.html b/erpnext/templates/pages/cart.html
index 837df3b..a97e658 100644
--- a/erpnext/templates/pages/cart.html
+++ b/erpnext/templates/pages/cart.html
@@ -35,11 +35,9 @@
</div>
</div>
{% if doc.items %}
- {% for d in doc.items %}
- <div class="cart-item">
- {% include "templates/includes/cart/cart_item_line.html" %}
+ <div class="cart-items">
+ {% include "templates/includes/cart/cart_items.html" %}
</div>
- {% endfor %}
{% else %}
<p>{{ _("Cart is Empty") }}</p>
{% endif %}
@@ -48,7 +46,7 @@
<!-- taxes -->
<div class="cart-taxes row small">
<div class="col-sm-8"><!-- empty --></div>
- <div class="col-sm-4">
+ <div class="col-sm-4 cart-tax-items">
{% include "templates/includes/order/order_taxes.html" %}
</div>
</div>