[enhance] i. facility to send PR email; ii. update cart, item view and order view;
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.js b/erpnext/accounts/doctype/payment_request/payment_request.js
index 5d11fb5..2665a13 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request.js
@@ -3,11 +3,30 @@
 cur_frm.add_fetch("payment_gateway", "message", "message")
 
 frappe.ui.form.on("Payment Request", "onload", function(frm, dt, dn){
-	frappe.call({
-		method:"erpnext.accounts.doctype.payment_request.payment_request.get_print_format_list",
-		args: {"ref_doctype": frm.doc.reference_doctype},
-		callback:function(r){
-			set_field_options("print_format", r.message["print_format"])
-		}
+	if (frm.doc.reference_doctype) {
+		frappe.call({
+			method:"erpnext.accounts.doctype.payment_request.payment_request.get_print_format_list",
+			args: {"ref_doctype": frm.doc.reference_doctype},
+			callback:function(r){
+				set_field_options("print_format", r.message["print_format"])
+			}
+		})
+	}	
+})
+
+frappe.ui.form.on("Payment Request", "refresh", function(frm) {
+	frm.add_custom_button(__('Resend Payment Email'), function(){
+		frappe.call({
+			method:"erpnext.accounts.doctype.payment_request.payment_request.resend_payment_email",
+			args: {"docname": frm.doc.name},
+			freeze: true,
+			freeze_message: __("Sending"),
+			callback:function(r){
+				if(!r.exc) {
+					frappe.msgprint(__("Message Sent"))
+				}
+			}
+		})
 	})
-})
\ No newline at end of file
+})
+
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json
index d69454c..64d38b3 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.json
+++ b/erpnext/accounts/doctype/payment_request/payment_request.json
@@ -37,18 +37,17 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "currency", 
-   "fieldtype": "Link", 
+   "fieldname": "amount", 
+   "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Currency", 
+   "label": "Amount", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Currency", 
    "permlevel": 0, 
-   "precision": "", 
+   "precision": "2", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
@@ -62,17 +61,18 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "amount", 
-   "fieldtype": "Currency", 
+   "fieldname": "currency", 
+   "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Amount", 
+   "label": "Currency", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "Currency", 
    "permlevel": 0, 
-   "precision": "2", 
+   "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
@@ -134,6 +134,55 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "Draft", 
+   "fieldname": "status", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Status", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "\nDraft\nInitiated\nPaid\nFailed\nCancelled", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "section_break_7", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "payment_gateway", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -159,6 +208,29 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "column_break_9", 
+   "fieldtype": "Column Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "gateway", 
    "fieldtype": "Read Only", 
    "hidden": 0, 
@@ -209,32 +281,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "default": "", 
-   "fieldname": "status", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Status", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "\nInitiated\nPaid\nFailed\nCancelled", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
    "fieldname": "recipient_and_message", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -383,7 +429,7 @@
    "collapsible": 0, 
    "fieldname": "payment_url", 
    "fieldtype": "Data", 
-   "hidden": 0, 
+   "hidden": 1, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
@@ -509,7 +555,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2015-12-30 17:43:10.626907", 
+ "modified": "2016-01-06 03:53:19.686537", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Request", 
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 6d1ea97..e45525c 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -15,6 +15,7 @@
 
 class PaymentRequest(Document):		
 	def validate(self):
+		self.validate_payment_gateway_account()
 		self.validate_payment_request()
 		self.validate_currency()
 
@@ -27,6 +28,17 @@
 		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
 		if ref_doc.currency != frappe.db.get_value("Account", self.payment_account, "account_currency"):
 			frappe.throw(_("Transaction currency is not similar to Gateway Currency"))
+			
+	def validate_payment_gateway_account(self):
+		if not self.payment_gateway:
+			frappe.throw(_("Payment Gateway Account is not configured"))
+			
+	def validate_payment_gateway(self):
+		if self.gateway == "PayPal":
+			if not frappe.db.get_value("PayPal Settings", None, "api_username"):
+				if not frappe.conf.paypal_username:
+					frappe.throw(_("PayPal Settings missing"))
+			
 		
 	def on_submit(self):
 		if not self.mute_email:
@@ -36,8 +48,8 @@
 		self.make_communication_entry()
 	
 	def on_cancel(self):
-		pass
-	
+		self.set_cancelled()
+		
 	def on_update_after_submit(self):
 		pass
 	
@@ -127,20 +139,20 @@
 	
 	args = frappe._dict(args)
 	ref_doc = get_reference_doc_details(args.dt, args.dn)
-	name, gateway, payment_account, message = get_gateway_details(args)
+	gateway_account = get_gateway_details(args)
 	
 	pr = frappe.new_doc("Payment Request")
 	pr.update({
-		"payment_gateway": name,
-		"gateway": gateway,
-		"payment_account": payment_account,
+		"payment_gateway": gateway_account.name,
+		"gateway": gateway_account.gateway,
+		"payment_account": gateway_account.payment_account,
 		"currency": ref_doc.currency,
 		"make_sales_invoice": args.cart or 0,
 		"amount": get_amount(ref_doc, args.dt),
 		"mute_email": args.mute_email or 0,
 		"email_to": args.recipient_id or "",
 		"subject": "Payment Request for %s"%args.dn,
-		"message": message,
+		"message": gateway_account.message,
 		"reference_doctype": args.dt,
 		"reference_name": args.dn
 	})
@@ -181,11 +193,16 @@
 def get_gateway_details(args):
 	"""return gateway and payment account of default payment gateway"""
 	if args.payemnt_gateway:
-		return frappe.db.get_value("Payment Gateway Account", args.payemnt_gateway, 
-			["name", "gateway", "payment_account", "message"])
-		
-	return frappe.db.get_value("Payment Gateway Account", {"is_default": 1}, 
-		["name", "gateway", "payment_account", "message"])
+		gateway_account = frappe.db.get_value("Payment Gateway Account", args.payemnt_gateway, 
+			["name", "gateway", "payment_account", "message"], as_dict=1)
+	
+	gateway_account = frappe.db.get_value("Payment Gateway Account", {"is_default": 1}, 
+		["name", "gateway", "payment_account", "message"], as_dict=1)
+	
+	if not gateway_account:
+		frappe.throw(_("Payment Gateway Account is not configured"))
+	
+	return gateway_account
 
 @frappe.whitelist()
 def get_print_format_list(ref_doctype):
@@ -213,4 +230,8 @@
 		frappe.respond_as_web_page(_("Invalid Payment Request"), 
 			_("Payment Request has been canceled by vendor"), success=False, 
 			http_status_code=frappe.ValidationError.http_status_code)
+			
+@frappe.whitelist(allow_guest=True)
+def resend_payment_email(docname):
+	return frappe.get_doc("Payment Request", docname).send_email()
 		
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_request/payment_request_list.js b/erpnext/accounts/doctype/payment_request/payment_request_list.js
new file mode 100644
index 0000000..0caf1c2
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_request/payment_request_list.js
@@ -0,0 +1,17 @@
+frappe.listview_settings['Payment Request'] = {
+	add_fields: ["status"],
+	get_indicator: function(doc) {
+		if(doc.status == "Draft") {
+			return [__("Draft"), "darkgrey", "status,=,Draft"];
+		}
+		else if(doc.status == "Initiated") {
+			return [__("Initiated"), "green", "status,=,Initiated"];
+		}
+		else if(doc.status == "Paid") {
+			return [__("Paid"), "blue", "status,=,Paid"];
+		}
+		else if(doc.status == "Cancelled") {
+			return [__("Cancelled"), "orange", "status,=,Cancelled"];
+		}
+	}	
+}
diff --git a/erpnext/public/js/shopping_cart.js b/erpnext/public/js/shopping_cart.js
index d437d74..63231d9 100644
--- a/erpnext/public/js/shopping_cart.js
+++ b/erpnext/public/js/shopping_cart.js
@@ -44,13 +44,22 @@
 
 	set_cart_count: function() {
 		var cart_count = getCookie("cart_count");
-		var $cart = $('.dropdown [data-label="Cart"]');
-		var $badge = $cart.find(".badge");
+		var $cart = $('.cart-icon');
+		var $badge = $cart.find("#cart-count");
+
+		if(cart_count === "0") {
+			$cart.css("display", "none");
+		}
+		else {
+			$cart.css("display", "inline");
+		}
+		
+		
 		if(cart_count) {
-			if($badge.length === 0) {
-				var $badge = $('<span class="badge pull-right"></span>')
-					.prependTo($cart.find("a").addClass("badge-hover"));
-			}
+			// if($badge.length === 0) {
+// 				var $badge = $('<span class="badge"></span>')
+// 					.appendTo($cart.find("a").addClass("badge-hover"));
+// 			}
 			$badge.html(cart_count);
 		} else {
 			$badge.remove();
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index b721374..a6ec617 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -41,46 +41,47 @@
 					}
 				}
 
-				// material request
-				if(!doc.order_type || ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1
-					&& flt(doc.per_delivered, 2) < 100) {
-						cur_frm.add_custom_button(__('Material Request'), this.make_material_request);
-				}
-
-				// make purchase order
-				if(flt(doc.per_delivered, 2) < 100 && allow_purchase) {
-					cur_frm.add_custom_button(__('Purchase Order'), cur_frm.cscript.make_purchase_order);
-				}
-
-				if(flt(doc.per_billed)==0) {
-					cur_frm.add_custom_button(__('Payment'), cur_frm.cscript.make_bank_entry);
-					cur_frm.add_custom_button(__('Make Payment Request'), this.make_payment_request);
-				}
-
 				if (this.frm.has_perm("submit")) {
 					// stop
 					if(flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed) < 100) {
-							cur_frm.add_custom_button(__('Stop'), this.stop_sales_order)
+							cur_frm.add_custom_button(__('Stop'), this.stop_sales_order, __("Status"))
 						}
 
 
-					cur_frm.add_custom_button(__('Close'), this.close_sales_order)
-				}
-
-				// maintenance
-				if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)===-1) {
-					cur_frm.add_custom_button(__('Maint. Visit'), this.make_maintenance_visit);
-					cur_frm.add_custom_button(__('Maint. Schedule'), this.make_maintenance_schedule);
+					cur_frm.add_custom_button(__('Close'), this.close_sales_order, __("Status"))
 				}
 
 				// delivery note
 				if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1 && allow_delivery) {
-					cur_frm.add_custom_button(__('Delivery'), this.make_delivery_note).addClass("btn-primary");
+					cur_frm.add_custom_button(__('Delivery'), this.make_delivery_note, __("Make"));
+					cur_frm.page.set_inner_btn_group_as_primary(__("Make"));
 				}
 
 				// sales invoice
 				if(flt(doc.per_billed, 2) < 100) {
-					cur_frm.add_custom_button(__('Invoice'), this.make_sales_invoice).addClass("btn-primary");
+					cur_frm.add_custom_button(__('Invoice'), this.make_sales_invoice, __("Make"));
+				}
+
+				// material request
+				if(!doc.order_type || ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1
+					&& flt(doc.per_delivered, 2) < 100) {
+						cur_frm.add_custom_button(__('Material Request'), this.make_material_request, __("Make"));
+				}
+
+				// make purchase order
+				if(flt(doc.per_delivered, 2) < 100 && allow_purchase) {
+					cur_frm.add_custom_button(__('Purchase Order'), cur_frm.cscript.make_purchase_order, __("Make"));
+				}
+
+				if(flt(doc.per_billed)==0) {
+					cur_frm.add_custom_button(__('Payment Request'), this.make_payment_request, __("Make"));
+					cur_frm.add_custom_button(__('Payment'), cur_frm.cscript.make_bank_entry, __("Make"));
+				}
+
+				// maintenance
+				if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)===-1) {
+					cur_frm.add_custom_button(__('Maintenance Visit'), this.make_maintenance_visit, __("Make"));
+					cur_frm.add_custom_button(__('Maintenance Schedule'), this.make_maintenance_schedule, __("Make"));
 				}
 
 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index dc21bd5..8bc96e6 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -288,11 +288,26 @@
 
 		frappe.db.set_value("Sales Order", self.name, "per_delivered", flt(delivered_qty/tot_qty) * 100,
 		update_modified=False)
+	
+	def set_indicator(self):
+		"""Set indicator for portal"""
+		if self.per_billed < 100 and self.per_delivered < 100:
+			self.indicator_color = "orange"
+			self.indicator_title = _("Not Paid and Not Delivered")
+		
+		elif self.per_billed == 100 and self.per_delivered < 100:
+			self.indicator_color = "orange"
+			self.indicator_title = _("Paid and Not Delivered")
 
+		else:
+			self.indicator_color = "green"
+			self.indicator_title = _("Paid")
+			
 def get_list_context(context=None):
 	from erpnext.controllers.website_list_for_contact import get_list_context
 	list_context = get_list_context(context)
 	list_context["title"] = _("My Orders")
+	list_context["parents"] = [{"title": _("My Account"), "name": "me"}]
 	return list_context
 
 @frappe.whitelist()
diff --git a/erpnext/shopping_cart/utils.py b/erpnext/shopping_cart/utils.py
index 7794a8f..79c6739 100644
--- a/erpnext/shopping_cart/utils.py
+++ b/erpnext/shopping_cart/utils.py
@@ -28,12 +28,12 @@
 	cart_enabled = is_cart_enabled()
 	context["shopping_cart_enabled"] = cart_enabled
 
-	if cart_enabled:
-		post_login = [
-			{"label": _("Cart"), "url": "cart", "class": "cart-count"},
-			{"class": "divider"}
-		]
-		context["post_login"] = post_login + context.get("post_login", [])
+	# if cart_enabled:
+# 		post_login = [
+# 			{"label": _("Cart"), "url": "cart", "class": "cart-count"},
+# 			{"class": "divider"}
+# 		]
+# 		context["post_login"] = post_login + context.get("post_login", [])
 
 def update_my_account_context(context):
 	if is_cart_enabled():
diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html
index dc48e0d..b62f306 100644
--- a/erpnext/templates/generators/item.html
+++ b/erpnext/templates/generators/item.html
@@ -71,18 +71,8 @@
                             style="display: none;
     						padding-left: 0px; padding-right: 0px;
                             padding-top: 10px;">
-    						<div>
-                                <input class="form-control"
-                                    type="text" style="max-width: 140px;">
-                            </div>
-    						<div style="margin-top: 10px;">
-    							<button class="btn btn-default btn-sm">
-                                {{ _("Update") }}</button>
-    						</div>
-                            <div style="margin-top: 5px;">
-                                <a href="/cart" class="text-muted small">
-                                    {{ _("View Cart") }}</a>
-                            </div>
+    						<div class="btn btn-success">
+    							{{ _("Item added to cart") }}</div>
     					</div>
                     </div>
 				</div>
diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html
index 36e23a5..3bd6ad3 100644
--- a/erpnext/templates/pages/order.html
+++ b/erpnext/templates/pages/order.html
@@ -1,12 +1,14 @@
 {% extends "templates/web.html" %}
 
 {% block header %}
-<h1>
-	{{ doc.name }}
-</h1>
+<h1>{{ doc.name }}</h1>
 <!-- <h6 class="text-muted">{{ doc._title or doc.doctype }}</h6> -->
 {% endblock %}
 
+{% block breadcrumbs %}
+	{% include "templates/includes/breadcrumbs.html" %}
+{% endblock %}
+
 {% block style %}
 <style>
     {% include "templates/includes/order/order.css" %}
@@ -22,12 +24,6 @@
         <span class="indicator {{ doc.indicator_color or "darkgrey" }}">
             {{ doc.indicator_title or doc.status or "Submitted" }}
         </span>
-		{% if doc.base_net_total == doc.advance_paid and payment_ref%}
-		<div>
-			<span class="indicator green" data-toggle="tooltip" title=" Reference Id: {{payment_ref}}"> Paid</span>
-		</div>
-		{% endif %}
-		
 	</div>
     <div class="col-xs-6 text-muted text-right h6">
         {{ doc.get_formatted("transaction_date") }}
@@ -87,7 +83,8 @@
 <div class="cart-taxes row small">
     <div class="col-sm-8"><!-- empty --></div>
     <div class="col-sm-4">
-        {% if doc.per_billed <= 0 %}
+        {% if (doc.doctype=="Sales Order" and doc.per_billed <= 0) 
+			or (doc.doctype=="Sales Invoice" and doc.outstanding_amount > 0) %}
 		<div class="page-header-actions-block" data-html-block="header-actions">
 			<p>
 			    <a href="/api/method/erpnext.accounts.doctype.payment_request.payment_request.make_payment_request?dn={{ doc.name }}&dt={{ doc.doctype }}&submit_doc=1&mute_email=1&cart=1"