Merge pull request #4866 from neilLasrado/develop

Fixes in Setup Wizard
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index 4b50747..5967305 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
 from __future__ import unicode_literals
-__version__ = '6.22.1'
+__version__ = '6.23.0'
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index afb9b85..ca7cb7e 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -551,7 +551,7 @@
 		}
 
 @frappe.whitelist()
-def get_payment_entry_against_order(dt, dn, amount=None, journal_entry=False, bank_account=None):
+def get_payment_entry_against_order(dt, dn, amount=None, debit_in_account_currency=None, journal_entry=False, bank_account=None):
 	ref_doc = frappe.get_doc(dt, dn)
 
 	if flt(ref_doc.per_billed, 2) > 0:
@@ -582,6 +582,7 @@
 		"amount_field_party": amount_field_party,
 		"amount_field_bank": amount_field_bank,
 		"amount": amount,
+		"debit_in_account_currency": debit_in_account_currency,
 		"remarks": 'Advance Payment received against {0} {1}'.format(dt, dn),
 		"is_advance": "Yes",
 		"bank_account": bank_account,
@@ -589,7 +590,7 @@
 	})
 
 @frappe.whitelist()
-def get_payment_entry_against_invoice(dt, dn, amount=None, journal_entry=False, bank_account=None):
+def get_payment_entry_against_invoice(dt, dn, amount=None,  debit_in_account_currency=None, journal_entry=False, bank_account=None):
 	ref_doc = frappe.get_doc(dt, dn)
 	if dt == "Sales Invoice":
 		party_type = "Customer"
@@ -614,6 +615,7 @@
 		"amount_field_party": amount_field_party,
 		"amount_field_bank": amount_field_bank,
 		"amount": amount if amount else abs(ref_doc.outstanding_amount),
+		"debit_in_account_currency": debit_in_account_currency,
 		"remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks),
 		"is_advance": "No",
 		"bank_account": bank_account,
@@ -662,10 +664,12 @@
 
 	bank_row.cost_center = cost_center
 
+	amount = args.get("debit_in_account_currency") or args.get("amount")
+	
 	if bank_row.account_currency == args.get("party_account_currency"):
-		bank_row.set(args.get("amount_field_bank"), args.get("amount"))
+		bank_row.set(args.get("amount_field_bank"), amount)
 	else:
-		bank_row.set(args.get("amount_field_bank"), args.get("amount") * exchange_rate)
+		bank_row.set(args.get("amount_field_bank"), amount * exchange_rate)
 
 	# set multi currency check
 	if party_row.account_currency != ref_doc.company_currency \
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
index c9bdc9b..e1fe5a1 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
@@ -1,6 +1,6 @@
 cur_frm.cscript.refresh = function(doc, dt, dn){
 	if(!doc.__islocal){
-		var df = frappe.meta.get_docfield(doc.doctype, "gateway", doc.name);
+		var df = frappe.meta.get_docfield(doc.doctype, "payment_gateway", doc.name);
 		df.read_only = 1;
 	}
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json
index 579c2c2..df8eaeb 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json
@@ -12,7 +12,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "gateway", 
+   "fieldname": "payment_gateway", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -203,30 +203,6 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "payment_success_url", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Payment Success URL", 
-   "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
   }
  ], 
  "hide_heading": 0, 
@@ -238,7 +214,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-01-18 03:53:50.534673", 
+ "modified": "2016-01-21 11:32:10.311015", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Gateway Account", 
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 468f877..fd213a4 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
@@ -8,7 +8,7 @@
 
 class PaymentGatewayAccount(Document):
 	def autoname(self):
-		self.name = self.gateway + " - " + self.currency
+		self.name = self.payment_gateway + " - " + self.currency
 		
 	def validate(self):
 		self.currency = frappe.db.get_value("Account", self.payment_account, "account_currency")
@@ -24,4 +24,4 @@
 	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
+			self.is_default = 1
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.js b/erpnext/accounts/doctype/payment_request/payment_request.js
index b519dee..1f0e9bc 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request.js
@@ -1,8 +1,7 @@
 cur_frm.add_fetch("payment_gateway", "payment_account", "payment_account")
-cur_frm.add_fetch("payment_gateway", "gateway", "gateway")
+cur_frm.add_fetch("payment_gateway", "payment_gateway", "payment_gateway")
 cur_frm.add_fetch("payment_gateway", "message", "message")
 cur_frm.add_fetch("payment_gateway", "payment_url_message", "payment_url_message")
-cur_frm.add_fetch("payment_gateway", "payment_success_url", "payment_success_url")
 
 frappe.ui.form.on("Payment Request", "onload", function(frm, dt, dn){
 	if (frm.doc.reference_doctype) {
@@ -17,18 +16,20 @@
 })
 
 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"));
+	if(!in_list(["Initiated", "Paid"], frm.doc.status) && !frm.doc.__islocal){
+		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"));
+					}
 				}
-			}
+			});
 		});
-	});
+	}
 });
 
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json
index 7655b58..e916034 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.json
+++ b/erpnext/accounts/doctype/payment_request/payment_request.json
@@ -17,6 +17,7 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Payment Details", 
@@ -37,37 +38,14 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Amount", 
-   "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, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Currency", 
+   "label": "Transaction Currency", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Currency", 
@@ -86,18 +64,20 @@
    "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, 
+   "ignore_xss_filter": 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": "", 
+   "precision": "2", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
@@ -115,6 +95,7 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "length": 0, 
@@ -139,6 +120,7 @@
    "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Status", 
@@ -160,10 +142,87 @@
    "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, 
+   "ignore_xss_filter": 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, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 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_account", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Payment Gateway Account", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Payment Gateway Account", 
+   "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": "column_break_9", 
+   "fieldtype": "Column Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "length": 0, 
@@ -184,87 +243,16 @@
    "bold": 0, 
    "collapsible": 0, 
    "fieldname": "payment_gateway", 
-   "fieldtype": "Link", 
+   "fieldtype": "Read Only", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Payment Gateway", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Payment Gateway Account", 
-   "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_success_url", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Payment Success URL", 
-   "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": "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, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Gateway", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "payment_gateway.gateway", 
+   "options": "payment_gateway_account.payment_gateway", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -284,12 +272,13 @@
    "fieldtype": "Read Only", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Payment Account", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "payment_gateway.payment_account", 
+   "options": "payment_gateway_account.payment_account", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -309,6 +298,7 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Recipient and Message", 
@@ -334,6 +324,7 @@
    "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Print Format", 
@@ -359,6 +350,7 @@
    "fieldtype": "Check", 
    "hidden": 1, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Mute Email", 
@@ -383,6 +375,7 @@
    "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Email To", 
@@ -407,6 +400,7 @@
    "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Subject", 
@@ -431,6 +425,7 @@
    "fieldtype": "Text Editor", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Message", 
@@ -455,6 +450,7 @@
    "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Payment URL Message", 
@@ -479,6 +475,7 @@
    "fieldtype": "Data", 
    "hidden": 1, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "payment_url", 
@@ -503,6 +500,7 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Reference Details", 
@@ -527,6 +525,7 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Reference Doctype", 
@@ -552,6 +551,7 @@
    "fieldtype": "Dynamic Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Reference Name", 
@@ -577,6 +577,7 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Amended From", 
@@ -603,7 +604,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-01-11 05:49:28.342786", 
+ "modified": "2016-02-24 16:49:46.832403", 
  "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 ba7413d..bd4cc4d 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -8,12 +8,10 @@
 from frappe.model.document import Document
 from frappe.utils import flt, nowdate, get_url, cstr
 from erpnext.accounts.party import get_party_account
-from erpnext.accounts.utils import get_account_currency, get_balance_on
+from erpnext.accounts.utils import get_account_currency
 from erpnext.accounts.doctype.journal_entry.journal_entry import (get_payment_entry_against_invoice, 
 get_payment_entry_against_order)
 
-from itertools import chain
-
 class PaymentRequest(Document):		
 	def validate(self):
 		self.validate_payment_gateway_account()
@@ -35,7 +33,7 @@
 			frappe.throw(_("Payment Gateway Account is not configured"))
 			
 	def validate_payment_gateway(self):
-		if self.gateway == "PayPal":
+		if self.payment_gateway == "PayPal":
 			if not frappe.db.get_value("PayPal Settings", None, "api_username"):
 				if not frappe.conf.paypal_username:
 					frappe.throw(_("PayPal Settings missing"))
@@ -49,14 +47,10 @@
 	
 	def on_cancel(self):
 		self.set_as_cancelled()
-		
-	def on_update_after_submit(self):
-		pass
-	
-	def set_status(self):
-		pass
 	
 	def get_payment_url(self):
+		""" This is blanck method to trigger hooks call from individual payment gateway app
+		  which will return respective payment gateway"""
 		pass
 	
 	def make_invoice(self):
@@ -69,6 +63,7 @@
 	def send_payment_request(self):
 		self.payment_url = get_url("/api/method/erpnext.accounts.doctype.payment_request.payment_request.generate_payment_request?name={0}".format(self.name))
 		if self.payment_url:
+			frappe.db.set_value(self.doctype, self.name, "payment_url", self.payment_url)
 			frappe.db.set_value(self.doctype, self.name, "status", "Initiated")
 			
 	def set_as_paid(self):
@@ -82,29 +77,44 @@
 		
 	def create_journal_entry(self):
 		"""create entry"""
-		payment_details = {
-			"amount": self.amount,
-			"journal_entry": True,
-			"bank_account": self.payment_account
-		}
-		
 		frappe.flags.ignore_account_permission = True
+		
+		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
+		
+		party_account = get_party_account("Customer", ref_doc.get("customer"), ref_doc.company)
+		party_account_currency = get_account_currency(party_account)
+				
+		debit_in_account_currency = 0.0
+				
+		if party_account_currency == ref_doc.company_currency:
+			amount = flt(flt(self.grand_total) * \
+				flt(ref_doc.conversion_rate, ref_doc.precision("conversion_rate")), \
+				ref_doc.precision("base_grand_total"))
+			
+			if self.currency != ref_doc.company_currency:
+				debit_in_account_currency = self.grand_total
+			
+		else:
+			amount = debit_in_account_currency = self.grand_total
 				
 		if self.reference_doctype == "Sales Order":
-			jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,\
-			 amount=self.amount, journal_entry=True, bank_account=self.payment_account)
+			jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,
+			 amount=amount, debit_in_account_currency=debit_in_account_currency , journal_entry=True, 
+			 bank_account=self.payment_account)
 			
-		if self.reference_doctype == "Sales Invoice":
-			jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,\
-			 amount=self.amount, journal_entry=True, bank_account=self.payment_account)
+		if self.reference_doctype == "Sales Invoice":			
+			jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,
+			 amount=amount, debit_in_account_currency=debit_in_account_currency, journal_entry=True,
+			 bank_account=self.payment_account)
 			
 		jv.update({
 			"voucher_type": "Journal Entry",
 			"posting_date": nowdate()
-		})		
+		})
+		
 		jv.insert(ignore_permissions=True)
 		jv.submit()
-		
+
 		#set status as paid for Payment Request
 		frappe.db.set_value(self.doctype, self.name, "status", "Paid")
 		
@@ -148,22 +158,26 @@
 	
 	args = frappe._dict(args)
 	ref_doc = frappe.get_doc(args.dt, args.dn)
+	
 	gateway_account = get_gateway_details(args)
 	
+	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})
+	
 	if existing_payment_request:
 		pr = frappe.get_doc("Payment Request", existing_payment_request)
-	else:
+		
+	else:	
 		pr = frappe.new_doc("Payment Request")
-
 		pr.update({
-			"payment_gateway": gateway_account.name,
-			"gateway": gateway_account.gateway,
+			"payment_gateway_account": gateway_account.name,
+			"payment_gateway": gateway_account.payment_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),
+			"grand_total": grand_total,
 			"mute_email": args.mute_email or 0,
 			"email_to": args.recipient_id or "",
 			"subject": "Payment Request for %s"%args.dn,
@@ -180,11 +194,12 @@
 		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
 			
@@ -193,31 +208,37 @@
 def get_amount(ref_doc, dt):
 	"""get amount based on doctype"""
 	if dt == "Sales Order":
-		amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid)
-
+		grand_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
+		
 	if dt == "Sales Invoice":
-		amount = abs(ref_doc.outstanding_amount)
-	
-	if amount > 0:
-		return amount
+		grand_total = flt(ref_doc.outstanding_amount)
+		
+	if grand_total > 0 :
+		return grand_total
+		
 	else:
 		frappe.throw(_("Payment Entry is already created"))
 		
 def get_gateway_details(args):
 	"""return gateway and payment account of default payment gateway"""
-	if args.payemnt_gateway:
-		gateway_account = frappe.db.get_value("Payment Gateway Account", args.payemnt_gateway, 
-			["name", "gateway", "payment_account", "message", "payment_url_message", "payment_success_url"],
-			 as_dict=1)
+	if args.get("payment_gateway"):
+		return get_payment_gateway_account(args.get("payment_gateway"))
+		
+	if args.cart:
+		payment_gateway_account = frappe.get_doc("Shopping Cart Settings").payment_gateway_account
+		return get_payment_gateway_account(payment_gateway_account)
 	
-	gateway_account = frappe.db.get_value("Payment Gateway Account", {"is_default": 1}, 
-		["name", "gateway", "payment_account", "message", "payment_url_message", "payment_success_url"], 
-			as_dict=1)
+	gateway_account = get_payment_gateway_account({"is_default": 1})
 	
 	if not gateway_account:
 		frappe.throw(_("Payment Gateway Account is not configured"))
 	
 	return gateway_account
+	
+def get_payment_gateway_account(args):
+	return frappe.db.get_value("Payment Gateway Account", args, 
+		["name", "payment_gateway", "payment_account", "message", "payment_url_message"], 
+			as_dict=1)
 
 @frappe.whitelist()
 def get_print_format_list(ref_doctype):
diff --git a/erpnext/accounts/doctype/payment_request/test_payment_request.py b/erpnext/accounts/doctype/payment_request/test_payment_request.py
index 49c604a..eb8e558 100644
--- a/erpnext/accounts/doctype/payment_request/test_payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/test_payment_request.py
@@ -6,8 +6,9 @@
 import frappe
 import unittest
 from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
-from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request
+from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, get_gateway_details
 from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
+from erpnext.setup.utils import get_exchange_rate
 # test_records = frappe.get_test_records('Payment Request')
 
 test_dependencies = ["Currency Exchange", "Journal Entry", "Contact", "Address"]
@@ -21,13 +22,13 @@
 	{
 		"doctype": "Payment Gateway Account",
 		"is_default": 1,
-		"gateway": "_Test Gateway",
+		"payment_gateway": "_Test Gateway",
 		"payment_account": "_Test Bank - _TC",
 		"currency": "INR"
 	},
 	{
 		"doctype": "Payment Gateway Account",
-		"gateway": "_Test Gateway",
+		"payment_gateway": "_Test Gateway",
 		"payment_account": "_Test Bank USD - _TC",
 		"currency": "USD"
 	}
@@ -39,41 +40,49 @@
 			frappe.get_doc(payment_gateway).insert(ignore_permissions=True)
 			
 		for method in payment_method:
-			if not frappe.db.get_value("Payment Gateway Account", {"gateway": method["gateway"], 
+			if not frappe.db.get_value("Payment Gateway Account", {"payment_gateway": method["payment_gateway"], 
 				"currency": method["currency"]}, "name"):
 				frappe.get_doc(method).insert(ignore_permissions=True)
 			
 	def test_payment_request_linkings(self):
-		SO_INR = make_sales_order(currency="INR")
-		pr = make_payment_request(dt="Sales Order", dn=SO_INR.name, recipient_id="saurabh@erpnext.com")
-		
+		so_inr = make_sales_order(currency="INR")
+		pr = make_payment_request(dt="Sales Order", dn=so_inr.name, recipient_id="saurabh@erpnext.com")
+
 		self.assertEquals(pr.reference_doctype, "Sales Order")
-		self.assertEquals(pr.reference_name, SO_INR.name)
+		self.assertEquals(pr.reference_name, so_inr.name)
 		self.assertEquals(pr.currency, "INR")
-		
-		SI_USD = create_sales_invoice(currency="USD", conversion_rate=50)
-		pr = make_payment_request(dt="Sales Invoice", dn=SI_USD.name, recipient_id="saurabh@erpnext.com")
+
+		conversion_rate = get_exchange_rate("USD", "INR")
+
+		si_usd = create_sales_invoice(currency="USD", conversion_rate=conversion_rate)
+		pr = make_payment_request(dt="Sales Invoice", dn=si_usd.name, recipient_id="saurabh@erpnext.com")
 
 		self.assertEquals(pr.reference_doctype, "Sales Invoice")
-		self.assertEquals(pr.reference_name, SI_USD.name)
+		self.assertEquals(pr.reference_name, si_usd.name)
 		self.assertEquals(pr.currency, "USD")
-	
-	def test_payment_entry(self):
-		SO_INR = make_sales_order(currency="INR")
-		pr = make_payment_request(dt="Sales Order", dn=SO_INR.name, recipient_id="saurabh@erpnext.com", 
-			mute_email=1, submit_doc=1)	 
-		jv = pr.set_as_paid()
-		
-		SO_INR = frappe.get_doc("Sales Order", SO_INR.name)
-		
-		self.assertEquals(SO_INR.advance_paid, jv.total_debit)
-		
-		SI_USD = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC",
-			currency="USD", conversion_rate=50)
 
-		pr = make_payment_request(dt="Sales Invoice", dn=SI_USD.name, recipient_id="saurabh@erpnext.com",
-			mute_email=1, return_doc=1, payemnt_gateway="_Test Gateway - USD")
-		
-		self.assertRaises(frappe.ValidationError, pr.save)
-		
-		
+	def test_payment_entry(self):
+		so_inr = make_sales_order(currency="INR")
+		pr = make_payment_request(dt="Sales Order", dn=so_inr.name, recipient_id="saurabh@erpnext.com",
+			mute_email=1, submit_doc=1)
+		jv = pr.set_as_paid()
+
+		so_inr = frappe.get_doc("Sales Order", so_inr.name)
+
+		self.assertEquals(so_inr.advance_paid, jv.total_debit)
+
+		conversion_rate = get_exchange_rate("USD", "INR")
+
+		si_usd = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC",
+			currency="USD", conversion_rate=conversion_rate)
+
+		pr = make_payment_request(dt="Sales Invoice", dn=si_usd.name, recipient_id="saurabh@erpnext.com",
+			mute_email=1, return_doc=1, payment_gateway="_Test Gateway - USD")
+
+		jv = pr.set_as_paid()
+
+		payment_gateway_details = get_gateway_details({"payment_gateway": "_Test Gateway - USD"})
+				
+		self.assertEquals(jv.accounts[0].account, "_Test Receivable USD - _TC")
+		self.assertEquals(jv.accounts[1].account, payment_gateway_details.payment_account)
+		
\ No newline at end of file
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index d59b179..36ff1ab 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -477,3 +477,15 @@
 		})
 
 	return outstanding_invoices
+
+
+def get_account(account_type=None, root_type=None, is_group=None, account_currency=None, company=None):
+	"""return account based on matching conditions"""
+	return frappe.db.get_value("Account", {
+		"account_type": account_type or '',
+		"root_type": root_type or '',
+		"is_group": is_group or 0,
+		"account_currency": account_currency or frappe.defaults.get_defaults().currency,
+		"company": company or frappe.defaults.get_defaults().company
+	}, "name")
+	
\ No newline at end of file
diff --git a/erpnext/change_log/v6/v6_23_0.md b/erpnext/change_log/v6/v6_23_0.md
new file mode 100644
index 0000000..d6f48a7
--- /dev/null
+++ b/erpnext/change_log/v6/v6_23_0.md
@@ -0,0 +1,10 @@
+- Material Request for manufacturing, plan production based on Material Request via Production Planning Tool
+- Merged **STOP** and **Close** button to a single button **Close**
+- Reorder level can be set as zero
+- Added Stock balance in Quotation Item table
+- **Payment Request and Payment Gateway**
+	- Create Payment Request from Sales Order / Sales Invoice
+	- Install paypal_integration application and setup as a Payment Gateway
+	- Give link of PayPal payment page to your customer
+	- On sucessful payment, system will create payment entry automatically and update Payment Request status
+	- Payment option in shopping cart
\ No newline at end of file
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index d77c0f7..5645981 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.22.1"
+app_version = "6.23.0"
 app_email = "info@erpnext.com"
 app_license = "GNU General Public License (v3)"
 source_link = "https://github.com/frappe/erpnext"
diff --git a/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py b/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
index 302513f..d4d5329 100644
--- a/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
+++ b/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
@@ -23,6 +23,10 @@
 	def validate_bom(self):
 		if cstr(self.current_bom) == cstr(self.new_bom):
 			frappe.throw(_("Current BOM and New BOM can not be same"))
+			
+		if frappe.db.get_value("BOM", self.current_bom, "item") \
+			!= frappe.db.get_value("BOM", self.new_bom, "item"):
+				frappe.throw(_("The selected BOMs are not for the same item"))
 
 	def update_new_bom(self):
 		current_bom_unitcost = frappe.db.sql("""select total_cost/quantity
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index e5ec454..76bffc2 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -246,6 +246,6 @@
 erpnext.patches.v6_16.create_manufacturer_records
 execute:frappe.db.sql("update `tabPricing Rule` set title=name where title='' or title is null") #2016-01-27
 erpnext.patches.v6_20.set_party_account_currency_in_orders
-erpnext.patches.v6_19.comment_feed_communication
+#erpnext.patches.v6_19.comment_feed_communication
 erpnext.patches.v6_21.fix_reorder_level
 erpnext.patches.v6_21.rename_material_request_fields
diff --git a/erpnext/selling/page/sales_funnel/sales_funnel.py b/erpnext/selling/page/sales_funnel/sales_funnel.py
index eb3b996..4d12efd 100644
--- a/erpnext/selling/page/sales_funnel/sales_funnel.py
+++ b/erpnext/selling/page/sales_funnel/sales_funnel.py
@@ -17,7 +17,7 @@
 		and status != "Passive" """, (from_date, to_date))[0][0]
 
 	opportunities = frappe.db.sql("""select count(*) from `tabOpportunity`
-		where docstatus = 1 and (date(`creation`) between %s and %s)
+		where (date(`creation`) between %s and %s)
 		and status != "Lost" """, (from_date, to_date))[0][0]
 
 	quotations = frappe.db.sql("""select count(*) from `tabQuotation`
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 561a50c..012aaf7 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_currency=payment_gateway_account_currency, company=cart_settings.company)
+	
+	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, company=cart_settings.company),
+			"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);
+	}
+}
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
index fbc9ba0..4c462c2 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
@@ -19,9 +19,11 @@
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Enable Shopping Cart", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -39,9 +41,11 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -60,10 +64,12 @@
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Company", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Company", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -82,11 +88,13 @@
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Price List", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Price List", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -104,9 +112,11 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -126,10 +136,12 @@
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Default Customer Group", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Customer Group", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -148,15 +160,141 @@
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Quotation Series", 
+   "length": 0, 
    "no_copy": 0, 
    "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": 1, 
+   "collapsible_depends_on": "eval:doc.enable_checkout", 
+   "fieldname": "section_break_8", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Checkout Settings", 
+   "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": "enable_checkout", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Enable Checkout", 
+   "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, 
+   "default": "Orders", 
+   "description": "After payment completion redirect user to selected page.", 
+   "fieldname": "payment_success_url", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Payment Success Url", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "\nOrders\nInvoices\nMy Account", 
+   "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": "column_break_11", 
+   "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": "payment_gateway_account", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Payment Gateway Account", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Payment Gateway Account", 
+   "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
   }
  ], 
  "hide_heading": 0, 
@@ -168,7 +306,8 @@
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
- "modified": "2015-09-17 07:56:09.176098", 
+ "max_attachments": 0, 
+ "modified": "2016-02-09 15:45:03.389220", 
  "modified_by": "Administrator", 
  "module": "Shopping Cart", 
  "name": "Shopping Cart Settings", 
@@ -196,5 +335,6 @@
   }
  ], 
  "read_only": 0, 
- "read_only_onload": 0
+ "read_only_onload": 0, 
+ "sort_order": "ASC"
 }
\ No newline at end of file
diff --git a/erpnext/templates/includes/cart/cart_address.html b/erpnext/templates/includes/cart/cart_address.html
index 44964da..1af8f0b 100644
--- a/erpnext/templates/includes/cart/cart_address.html
+++ b/erpnext/templates/includes/cart/cart_address.html
@@ -1,12 +1,15 @@
 {% from "erpnext/templates/includes/cart/cart_macros.html"
     import show_address %}
 <div class="row">
+	{% if addresses|length == 1%}
+		{% set select_address = True %}
+	{% endif %}
 	<div class="col-sm-6">
 		<h4>{{ _("Shipping Address") }}</h4>
 		<div id="cart-shipping-address" class="panel-group"
 			data-fieldname="shipping_address_name">
             {% for address in addresses %}
-                {{ show_address(address, doc, "shipping_address_name") }}
+                {{ show_address(address, doc, "shipping_address_name", select_address) }}
             {% endfor %}
         </div>
 		<a class="btn btn-default btn-sm" href="/addresses">
@@ -17,7 +20,7 @@
 		<div id="cart-billing-address" class="panel-group"
 			data-fieldname="customer_address">
             {% for address in addresses %}
-                {{ show_address(address, doc, "customer_address") }}
+                {{ show_address(address, doc, "customer_address", select_address) }}
             {% endfor %}
         </div>
 	</div>
diff --git a/erpnext/templates/includes/cart/cart_macros.html b/erpnext/templates/includes/cart/cart_macros.html
index 250b487..fd95dba 100644
--- a/erpnext/templates/includes/cart/cart_macros.html
+++ b/erpnext/templates/includes/cart/cart_macros.html
@@ -1,5 +1,6 @@
-{% macro show_address(address, doc, fieldname) %}
+{% macro show_address(address, doc, fieldname, select_address=False) %}
 {% set selected=address.name==doc.get(fieldname) %}
+
 <div class="panel panel-default">
 	<div class="panel-heading">
 		<div class="row">
diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html
index fae55f3..03e625d 100644
--- a/erpnext/templates/pages/order.html
+++ b/erpnext/templates/pages/order.html
@@ -1,4 +1,4 @@
-{% extends "templates/web.html" %}
+t{% extends "templates/web.html" %}
 
 {% block header %}
 <h1>{{ doc.name }}</h1>
@@ -82,14 +82,16 @@
 <div class="cart-taxes row small">
     <div class="col-sm-8"><!-- empty --></div>
     <div class="col-sm-4">
-        {% 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"
-			        class="btn btn-primary btn-sm">Pay {{ doc.get_formatted("grand_total") }} </a>
-			</p>
+		{% if enabled_checkout %}
+	        {% 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"
+				        class="btn btn-primary btn-sm">Pay {{ doc.get_formatted("grand_total") }} </a>
+				</p>
 			</div>
+			{% endif %}
 		{% endif %}
 	</div>
 </div>
diff --git a/erpnext/templates/pages/order.py b/erpnext/templates/pages/order.py
index 4824d44..bf1514a 100644
--- a/erpnext/templates/pages/order.py
+++ b/erpnext/templates/pages/order.py
@@ -15,6 +15,8 @@
 	context.parents = frappe.form_dict.parents
 	context.payment_ref = frappe.db.get_value("Payment Request", 
 		{"reference_name": frappe.form_dict.name}, "name")
-		
+	
+	context.enabled_checkout = frappe.get_doc("Shopping Cart Settings").enable_checkout
+			
 	if not context.doc.has_website_permission("read"):
 		frappe.throw(_("Not Permitted"), frappe.PermissionError)
diff --git a/setup.py b/setup.py
index 885d74b..cfbc311 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.22.1"
+version = "6.23.0"
 requirements = parse_requirements("requirements.txt", session="")
 
 setup(