[enhance] set customer payable account to new customer as per payment gateway account currency via cart if cart and checkout is enable
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json
index 39330a5..14daba7 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.json
+++ b/erpnext/accounts/doctype/payment_request/payment_request.json
@@ -37,61 +37,13 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "base_rounded_total", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Base Rounded Total", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "2", 
-   "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": "rounded_total", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Rounded Total", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "2", 
-   "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": "currency", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Currency", 
+   "label": "Transaction Currency", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Currency", 
@@ -110,18 +62,44 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "depends_on": "eval:doc.reference_doctype==\"Sales Order\"", 
-   "fieldname": "make_sales_invoice", 
-   "fieldtype": "Check", 
+   "description": "Amount in customer's currency", 
+   "fieldname": "grand_total", 
+   "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Make Sales Invoice", 
+   "label": "Grand Total", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "currency", 
+   "permlevel": 0, 
+   "precision": "2", 
+   "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, 
+   "description": "Amount in company's currency", 
+   "fieldname": "base_grand_total", 
+   "fieldtype": "Currency", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Base Grand Total", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
-   "precision": "", 
+   "precision": "2", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
@@ -184,6 +162,31 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "depends_on": "eval:doc.reference_doctype==\"Sales Order\"", 
+   "fieldname": "make_sales_invoice", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Make Sales Invoice", 
+   "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": "section_break_7", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -603,8 +606,8 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-02-16 12:29:45.290729", 
- "modified_by": "saurabh@erpnext.com", 
+ "modified": "2016-02-19 16:19:55.933694", 
+ "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Request", 
  "name_case": "", 
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 8418567..0ef6aa3 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -87,12 +87,12 @@
 		debit_in_account_currency = 0.0
 		
 		if party_account_currency == ref_doc.company_currency:
-			amount = self.base_rounded_total
+			amount = self.base_grand_total
 			if self.currency != ref_doc.company_currency:
-				debit_in_account_currency = self.rounded_total
+				debit_in_account_currency = self.grand_total
 			
 		else:
-			amount = self.rounded_total
+			amount = self.grand_total
 				
 		if self.reference_doctype == "Sales Order":
 			jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,
@@ -160,7 +160,8 @@
 	
 	gateway_account = get_gateway_details(args)
 	
-	base_rounded_total, rounded_total = get_amount(ref_doc, args.dt)
+	base_grand_total, grand_total = get_amount(ref_doc, args.dt)
+	
 	existing_payment_request = frappe.db.get_value("Payment Request", 
 		{"reference_doctype": args.dt, "reference_name": args.dn})
 	
@@ -175,8 +176,8 @@
 			"payment_account": gateway_account.payment_account,
 			"currency": ref_doc.currency,
 			"make_sales_invoice": args.cart or 0,
-			"base_rounded_total": base_rounded_total,
-			"rounded_total": rounded_total,
+			"base_grand_total": base_grand_total,
+			"grand_total": grand_total,
 			"mute_email": args.mute_email or 0,
 			"email_to": args.recipient_id or "",
 			"subject": "Payment Request for %s"%args.dn,
@@ -207,15 +208,15 @@
 def get_amount(ref_doc, dt):
 	"""get amount based on doctype"""
 	if dt == "Sales Order":
-		base_rounded_total = flt(ref_doc.base_grand_total)
-		rounded_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
+		base_grand_total = flt(ref_doc.base_grand_total)
+		grand_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
 
 	if dt == "Sales Invoice":
-		base_rounded_total = flt(ref_doc.base_grand_total)
-		rounded_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
+		base_grand_total = flt(ref_doc.base_grand_total)
+		grand_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
 	
-	if base_rounded_total > 0 and rounded_total > 0 :
-		return base_rounded_total, rounded_total
+	if base_grand_total > 0 and grand_total > 0 :
+		return base_grand_total, grand_total
 		
 	else:
 		frappe.throw(_("Payment Entry is already created"))
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index d59b179..53a1b6a 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -477,3 +477,17 @@
 		})
 
 	return outstanding_invoices
+
+
+def get_account(account_type=None, root_type=None, is_group=None, account_name=None):
+	"""return account based on matching conditions"""
+	if account_name:
+		if not frappe.db.get_value("Account", {"account_name": account_name}):
+			return False
+		else:
+			return frappe.get_doc("Account", {
+				"account_type": account_type or '',
+				"root_type": root_type or '',
+				"is_group": is_group or 0,
+				"account_name": account_name or ''
+			})
\ No newline at end of file
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 561a50c..b4df27d 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -9,6 +9,7 @@
 from erpnext.utilities.doctype.address.address import get_address_display
 from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings import get_shopping_cart_settings
 from frappe.utils.nestedset import get_root_of
+from erpnext.accounts.utils import get_account
 
 class WebsitePriceListMissingError(frappe.ValidationError): pass
 
@@ -280,7 +281,13 @@
 		user = frappe.session.user
 
 	customer = frappe.db.get_value("Contact", {"email_id": user}, "customer")
-
+	cart_settings = frappe.get_doc("Shopping Cart Settings")
+	
+	debtors_account = ''
+	
+	if cart_settings.enable_checkout:
+		debtors_account = get_debtors_account(cart_settings)
+	
 	if customer:
 		return frappe.get_doc("Customer", customer)
 
@@ -293,6 +300,15 @@
 			"customer_group": get_shopping_cart_settings().default_customer_group,
 			"territory": get_root_of("Territory")
 		})
+		
+		if debtors_account:
+			customer.update({
+				"accounts": [{
+					"company": cart_settings.company,
+					"account": debtors_account.name
+				}]
+			})
+		
 		customer.flags.ignore_mandatory = True
 		customer.insert(ignore_permissions=True)
 
@@ -307,6 +323,32 @@
 
 		return customer
 
+def get_debtors_account(cart_settings):
+	payment_gateway_account_currency = \
+		frappe.get_doc("Payment Gateway Account", cart_settings.payment_gateway_account).currency
+	
+	account_name = _("Debtors ({0})".format(payment_gateway_account_currency))
+	
+	debtors_account = get_account("Receivable", "Asset", is_group=0, account_name=account_name)
+	
+	if not debtors_account:
+		debtors_account = frappe.get_doc({
+			"doctype": "Account",
+			"account_type": "Receivable",
+			"root_type": "Asset",
+			"is_group": 0,
+			"parent_account": get_account(root_type="Asset", is_group=1, \
+				account_name=_("Accounts Receivable")).name,
+			"account_name": account_name,
+			"currency": payment_gateway_account_currency	
+		}).insert(ignore_permissions=True)
+		
+		return debtors_account
+		
+	else:
+		return debtors_account
+		
+
 def get_address_docs(doctype=None, txt=None, filters=None, limit_start=0, limit_page_length=20, party=None):
 	if not party:
 		party = get_customer()
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.js b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.js
index 550e34d..3219d7a 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.js
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.js
@@ -6,5 +6,19 @@
 		if(cur_frm.doc.__onload && cur_frm.doc.__onload.quotation_series) {
 			cur_frm.fields_dict.quotation_series.df.options = cur_frm.doc.__onload.quotation_series;
 		}
+	},
+	refresh: function(){
+		toggle_mandatory(cur_frm)
+	},
+	enable_checkout: function(){
+		toggle_mandatory(cur_frm)
 	}
 });
+
+
+function toggle_mandatory (cur_frm){
+	cur_frm.toggle_reqd("payment_gateway_account", false);
+	if(cur_frm.doc.enabled && cur_frm.doc.enable_checkout) {
+		cur_frm.toggle_reqd("payment_gateway_account", true);
+	}
+}