Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index 6cf4b96..93c1037 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
 from __future__ import unicode_literals
-__version__ = '6.21.0'
+__version__ = '6.21.1'
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
index dd971ad..468f877 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
@@ -11,6 +11,8 @@
 		self.name = self.gateway + " - " + self.currency
 		
 	def validate(self):
+		self.currency = frappe.db.get_value("Account", self.payment_account, "account_currency")
+		
 		self.update_default_payment_gateway()
 		self.set_as_default_if_not_set()
 	
@@ -20,5 +22,6 @@
 				where is_default = 1 """)
 		
 	def set_as_default_if_not_set(self):
-		if not frappe.db.get_value("Payment Gateway Account", {"is_default": 1, "name": ("!=", self.name)}, "name"):
-			self.is_default = 1
+		if not frappe.db.get_value("Payment Gateway Account", 
+			{"is_default": 1, "name": ("!=", self.name)}, "name"):
+				self.is_default = 1
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 9e29697..ba7413d 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -23,7 +23,7 @@
 	def validate_payment_request(self):
 		if frappe.db.get_value("Payment Request", {"reference_name": self.reference_name, 
 			"name": ("!=", self.name), "status": ("not in", ["Initiated", "Paid"]), "docstatus": 1}, "name"):
-			frappe.throw(_("Payment Request already exists {0}".fomart(self.reference_name)))
+			frappe.throw(_("Payment Request already exists {0}".format(self.reference_name)))
 	
 	def validate_currency(self):
 		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
@@ -150,37 +150,43 @@
 	ref_doc = frappe.get_doc(args.dt, args.dn)
 	gateway_account = get_gateway_details(args)
 	
-	pr = frappe.new_doc("Payment Request")
-	pr.update({
-		"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": gateway_account.message,
-		"payment_url_message": gateway_account.payment_url_message,
-		"payment_success_url": gateway_account.payment_success_url,
-		"reference_doctype": args.dt,
-		"reference_name": args.dn
-	})
+	existing_payment_request = frappe.db.get_value("Payment Request", 
+		{"reference_doctype": args.dt, "reference_name": args.dn})
+	if existing_payment_request:
+		pr = frappe.get_doc("Payment Request", existing_payment_request)
+	else:
+		pr = frappe.new_doc("Payment Request")
+
+		pr.update({
+			"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": gateway_account.message,
+			"payment_url_message": gateway_account.payment_url_message,
+			"payment_success_url": gateway_account.payment_success_url,
+			"reference_doctype": args.dt,
+			"reference_name": args.dn
+		})
 	
-	if args.return_doc:
-		return pr
-		
-	if args.submit_doc:
-		pr.insert(ignore_permissions=True)
-		pr.submit()
-		
-		if args.cart:
-			generate_payment_request(pr.name)
-			frappe.db.commit()
-		
-		if not args.cart:	
+		if args.return_doc:
 			return pr
+		
+		if args.submit_doc:
+			pr.insert(ignore_permissions=True)
+			pr.submit()
+	
+	if args.cart:
+		generate_payment_request(pr.name)
+		frappe.db.commit()
+	
+	if not args.cart:	
+		return pr
 			
 	return pr.as_dict()
 
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index e3a018e..759e820 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -7,7 +7,7 @@
 app_description = """ERP made simple"""
 app_icon = "icon-th"
 app_color = "#e74c3c"
-app_version = "6.21.0"
+app_version = "6.21.1"
 app_email = "info@erpnext.com"
 app_license = "GNU General Public License (v3)"
 source_link = "https://github.com/frappe/erpnext"
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 58c68e8..6f36bdb 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -270,7 +270,7 @@
 				me.apply_pricing_rule();
 			}
 		}
-		
+
 		var set_party_account = function(set_pricing) {
 			if (in_list(["Sales Invoice", "Purchase Invoice"], me.frm.doc.doctype)) {
 				if(me.frm.doc.doctype=="Sales Invoice") {
@@ -280,25 +280,27 @@
 					var party_type = "Supplier";
 					var party_account_field = 'credit_to';
 				}
-				
-				return frappe.call({
-					method: "erpnext.accounts.party.get_party_account",
-					args: {
-						company: me.frm.doc.company,
-						party_type: party_type,
-						party: me.frm.doc[frappe.model.scrub(party_type)]
-					},
-					callback: function(r) {
-						if(!r.exc && r.message) {
-							me.frm.set_value(party_account_field, r.message);
-							set_pricing();
+
+				if(me.frm.doc[frappe.model.scrub(party_type)]) {
+					return frappe.call({
+						method: "erpnext.accounts.party.get_party_account",
+						args: {
+							company: me.frm.doc.company,
+							party_type: party_type,
+							party: me.frm.doc[frappe.model.scrub(party_type)]
+						},
+						callback: function(r) {
+							if(!r.exc && r.message) {
+								me.frm.set_value(party_account_field, r.message);
+								set_pricing();
+							}
 						}
-					}
-				});
+					});
+				}
 			} else {
 				set_pricing();
 			}
-			
+
 		}
 
 		if (this.frm.doc.posting_date) var date = this.frm.doc.posting_date;
diff --git a/erpnext/selling/doctype/installation_note_item/installation_note_item.json b/erpnext/selling/doctype/installation_note_item/installation_note_item.json
index 758c47f..5be7ca1 100644
--- a/erpnext/selling/doctype/installation_note_item/installation_note_item.json
+++ b/erpnext/selling/doctype/installation_note_item/installation_note_item.json
@@ -26,6 +26,7 @@
    "options": "Item", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -37,32 +38,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "description", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Description", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "description", 
-   "oldfieldtype": "Data", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_width": "300px", 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "300px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
    "fieldname": "serial_no", 
    "fieldtype": "Small Text", 
    "hidden": 0, 
@@ -76,6 +51,7 @@
    "oldfieldtype": "Small Text", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "180px", 
    "read_only": 0, 
    "report_hide": 0, 
@@ -89,6 +65,58 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "qty", 
+   "fieldtype": "Float", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Installed Qty", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "qty", 
+   "oldfieldtype": "Currency", 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "description", 
+   "fieldtype": "Text Editor", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Description", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "description", 
+   "oldfieldtype": "Data", 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "print_width": "300px", 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0, 
+   "width": "300px"
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "prevdoc_detail_docname", 
    "fieldtype": "Data", 
    "hidden": 1, 
@@ -102,6 +130,7 @@
    "oldfieldtype": "Data", 
    "permlevel": 0, 
    "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
    "print_width": "150px", 
    "read_only": 1, 
    "report_hide": 0, 
@@ -128,6 +157,7 @@
    "oldfieldtype": "Data", 
    "permlevel": 0, 
    "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
    "print_width": "150px", 
    "read_only": 1, 
    "report_hide": 0, 
@@ -154,6 +184,7 @@
    "oldfieldtype": "Data", 
    "permlevel": 0, 
    "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
    "print_width": "150px", 
    "read_only": 1, 
    "report_hide": 0, 
@@ -162,30 +193,6 @@
    "set_only_once": 0, 
    "unique": 0, 
    "width": "150px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "qty", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Installed Qty", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "qty", 
-   "oldfieldtype": "Currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
   }
  ], 
  "hide_heading": 0, 
@@ -197,12 +204,14 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:47.713471", 
+ "menu_index": 0, 
+ "modified": "2016-02-10 00:18:55.558356", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Installation Note Item", 
  "owner": "Administrator", 
  "permissions": [], 
  "read_only": 0, 
- "read_only_onload": 0
+ "read_only_onload": 0, 
+ "sort_order": "ASC"
 }
\ No newline at end of file
diff --git a/erpnext/setup/setup_wizard/sample_data.py b/erpnext/setup/setup_wizard/sample_data.py
index 095264f..0e9ef06 100644
--- a/erpnext/setup/setup_wizard/sample_data.py
+++ b/erpnext/setup/setup_wizard/sample_data.py
@@ -15,7 +15,7 @@
 	selling_items = frappe.get_all("Item", filters = {"is_sales_item": 1})
 	buying_items = frappe.get_all("Item", filters = {"is_purchase_item": 1})
 	customers = frappe.get_all("Customer")
-	
+
 	if selling_items and customers:
 		for i in range(3):
 			customer = random.choice(customers).name
@@ -45,7 +45,7 @@
 
 	b.insert(ignore_permissions=True)
 
-	b.add_comment("This is a dummy record")
+	b.add_comment('Comment', text="This is a dummy record")
 
 def make_quote(selling_items, customer):
 	qtn = frappe.get_doc({
@@ -62,7 +62,7 @@
 
 	qtn.insert(ignore_permissions=True)
 
-	qtn.add_comment("This is a dummy record")
+	qtn.add_comment('Comment', text="This is a dummy record")
 
 def make_material_request(buying_items):
 	for i in buying_items:
@@ -78,7 +78,7 @@
 		mr.insert()
 		mr.submit()
 
-		mr.add_comment("This is a dummy record")
+		mr.add_comment('Comment', text="This is a dummy record")
 
 
 def make_issue():
diff --git a/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json b/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
index be92998..f8e5041 100644
--- a/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
+++ b/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
@@ -7,6 +7,7 @@
  "custom": 0, 
  "docstatus": 0, 
  "doctype": "DocType", 
+ "document_type": "Document", 
  "fields": [
   {
    "allow_on_submit": 0, 
@@ -24,6 +25,7 @@
    "options": "Item", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "100px", 
    "read_only": 0, 
    "report_hide": 0, 
@@ -37,6 +39,29 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "column_break_2", 
+   "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": "item_name", 
    "fieldtype": "Data", 
    "hidden": 0, 
@@ -48,6 +73,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "200px", 
    "read_only": 1, 
    "report_hide": 0, 
@@ -74,6 +100,31 @@
    "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": 1, 
+   "fieldname": "desc_section", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Description", 
+   "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, 
@@ -97,6 +148,31 @@
    "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": "quantity_section", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Quantity", 
+   "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, 
@@ -119,6 +195,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "100px", 
    "read_only": 0, 
    "report_hide": 0, 
@@ -132,31 +209,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "stock_uom", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "UOM", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "UOM", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_width": "100px", 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "100px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
    "fieldname": "net_weight", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -168,6 +220,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "100px", 
    "read_only": 0, 
    "report_hide": 0, 
@@ -181,6 +234,55 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "column_break_10", 
+   "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": "stock_uom", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "UOM", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "UOM", 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "print_width": "100px", 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0, 
+   "width": "100px"
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "weight_uom", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -193,6 +295,7 @@
    "options": "UOM", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "100px", 
    "read_only": 0, 
    "report_hide": 0, 
@@ -217,6 +320,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -239,6 +343,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -256,7 +361,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:51.313759", 
+ "modified": "2016-02-09 14:46:32.332667", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Packing Slip Item", 
diff --git a/setup.py b/setup.py
index ff91cb8..3754eb5 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup, find_packages
 from pip.req import parse_requirements
 
-version = "6.21.0"
+version = "6.21.1"
 requirements = parse_requirements("requirements.txt", session="")
 
 setup(