[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>