[fixes] Create payment gateway account
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
index f537200..5e13626 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
@@ -165,7 +165,7 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Payment Transaction Message", 
+   "label": "Payment Request Message", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -190,7 +190,7 @@
  "issingle": 1, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2015-12-17 12:26:28.440728", 
+ "modified": "2015-12-24 17:31:52.014492", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Accounts Settings", 
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 1a8b645..f82a68f 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -538,7 +538,7 @@
 		}
 
 @frappe.whitelist()
-def get_payment_entry_against_order(dt, dn):
+def get_payment_entry_against_order(dt, dn, args=None):
 	ref_doc = frappe.get_doc(dt, dn)
 
 	if flt(ref_doc.per_billed, 2) > 0:
@@ -556,10 +556,13 @@
 	party_account = get_party_account(party_type, ref_doc.get(party_type.lower()), ref_doc.company)
 	party_account_currency = get_account_currency(party_account)
 
-	if party_account_currency == ref_doc.company_currency:
-		amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid)
+	if not args or not args["amount"]:
+		if party_account_currency == ref_doc.company_currency:
+			amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid)
+		else:
+			amount = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
 	else:
-		amount = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
+		amount = args["amount"]
 
 	return get_payment_entry(ref_doc, {
 		"party_type": party_type,
@@ -569,11 +572,13 @@
 		"amount_field_bank": amount_field_bank,
 		"amount": amount,
 		"remarks": 'Advance Payment received against {0} {1}'.format(dt, dn),
-		"is_advance": "Yes"
+		"is_advance": "Yes",
+		"bank_account": args["bank_account"] if args else None,
+		"return_obj": args["return_obj"] if args else None
 	})
 
 @frappe.whitelist()
-def get_payment_entry_against_invoice(dt, dn):
+def get_payment_entry_against_invoice(dt, dn, args=None):
 	ref_doc = frappe.get_doc(dt, dn)
 	if dt == "Sales Invoice":
 		party_type = "Customer"
@@ -597,9 +602,11 @@
 		"party_account_currency": ref_doc.party_account_currency,
 		"amount_field_party": amount_field_party,
 		"amount_field_bank": amount_field_bank,
-		"amount": abs(ref_doc.outstanding_amount),
+		"amount": args["amount"] if args else abs(ref_doc.outstanding_amount),
 		"remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks),
-		"is_advance": "No"
+		"is_advance": "No",
+		"bank_account": args["bank_account"] if args else None,
+		"return_obj": args["return_obj"] if args else None
 	})
 
 def get_payment_entry(ref_doc, args):
@@ -653,7 +660,7 @@
 
 	jv.set_amounts_in_company_currency()
 	jv.set_total_debit_credit()
-
+	
 	return jv if args.get("return_obj") else jv.as_dict()
 
 @frappe.whitelist()
diff --git a/erpnext/accounts/doctype/payment_gateway/payment_gateway.json b/erpnext/accounts/doctype/payment_gateway/payment_gateway.json
index 4f81632..d2d8a78 100644
--- a/erpnext/accounts/doctype/payment_gateway/payment_gateway.json
+++ b/erpnext/accounts/doctype/payment_gateway/payment_gateway.json
@@ -13,54 +13,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "payment_gateway_details", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Payment Gateway Details", 
-   "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": "is_default", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Is Default", 
-   "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": "Data", 
    "hidden": 0, 
@@ -80,56 +32,6 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "payment_account", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Payment Account", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Account", 
-   "permlevel": 0, 
-   "precision": "", 
-   "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": "currency", 
-   "fieldtype": "Read Only", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Currency", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "payment_account.account_currency", 
-   "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, 
@@ -141,7 +43,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2015-12-22 19:07:36.491109", 
+ "modified": "2015-12-23 22:32:32.690126", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Gateway", 
@@ -167,46 +69,6 @@
    "share": 1, 
    "submit": 0, 
    "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Accounts Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
   }
  ], 
  "read_only": 0, 
diff --git a/erpnext/accounts/doctype/payment_gateway/payment_gateway.py b/erpnext/accounts/doctype/payment_gateway/payment_gateway.py
index f756a86..569a041 100644
--- a/erpnext/accounts/doctype/payment_gateway/payment_gateway.py
+++ b/erpnext/accounts/doctype/payment_gateway/payment_gateway.py
@@ -7,15 +7,5 @@
 from frappe.model.document import Document
 
 class PaymentGateway(Document):
-	def validate(self):
-		self.update_default_payment_gateway()
-		self.set_as_default()
-	
-	def update_default_payment_gateway(self):
-		if self.is_default:
-			frappe.db.sql("""update `tabPayment Gateway` set is_default = 0
-				where is_default = 1 """)
-		
-	def set_as_default(self):
-		if not frappe.db.get_value("Payment Gateway", {"is_default": 1, "name": ("!=", self.name)}, "name"):
-			self.is_default = 1
+	pass
+			
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_gateway_account/__init__.py b/erpnext/accounts/doctype/payment_gateway_account/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway_account/__init__.py
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
new file mode 100644
index 0000000..c9bdc9b
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
@@ -0,0 +1,6 @@
+cur_frm.cscript.refresh = function(doc, dt, dn){
+	if(!doc.__islocal){
+		var df = frappe.meta.get_docfield(doc.doctype, "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
new file mode 100644
index 0000000..e52225a
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json
@@ -0,0 +1,172 @@
+{
+ "allow_copy": 0, 
+ "allow_import": 0, 
+ "allow_rename": 0, 
+ "creation": "2015-12-23 21:31:52.699821", 
+ "custom": 0, 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "", 
+ "fields": [
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "is_default", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Is Default", 
+   "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": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Gateway", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Payment Gateway", 
+   "permlevel": 0, 
+   "precision": "", 
+   "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": "payment_account", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Payment Account", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Account", 
+   "permlevel": 0, 
+   "precision": "", 
+   "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": "currency", 
+   "fieldtype": "Read Only", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Currency", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "payment_account.account_currency", 
+   "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, 
+ "hide_toolbar": 0, 
+ "idx": 0, 
+ "in_create": 0, 
+ "in_dialog": 0, 
+ "is_submittable": 0, 
+ "issingle": 0, 
+ "istable": 0, 
+ "max_attachments": 0, 
+ "modified": "2015-12-24 17:02:34.520800", 
+ "modified_by": "Administrator", 
+ "module": "Accounts", 
+ "name": "Payment Gateway Account", 
+ "name_case": "", 
+ "owner": "Administrator", 
+ "permissions": [
+  {
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Administrator", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 0, 
+   "write": 1
+  }, 
+  {
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Accounts Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 0, 
+   "write": 1
+  }
+ ], 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "sort_field": "modified", 
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
new file mode 100644
index 0000000..8cee085
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class PaymentGatewayAccount(Document):
+	def autoname(self):
+		self.name = self.gateway + " - " + self.currency
+		
+	def validate(self):
+		self.update_default_payment_gateway()
+		self.set_as_default()
+	
+	def update_default_payment_gateway(self):
+		if self.is_default:
+			frappe.db.sql("""update `tabPayment Gateway Account` set is_default = 0
+				where is_default = 1 """)
+		
+	def set_as_default(self):
+		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_gateway_account/test_payment_gateway_account.py b/erpnext/accounts/doctype/payment_gateway_account/test_payment_gateway_account.py
new file mode 100644
index 0000000..84c3bc4
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway_account/test_payment_gateway_account.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+import unittest
+
+# test_records = frappe.get_test_records('Payment Gateway Account')
+
+class TestPaymentGatewayAccount(unittest.TestCase):
+	pass
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.js b/erpnext/accounts/doctype/payment_request/payment_request.js
index e0c1e14..c8863ec 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request.js
@@ -1,4 +1,5 @@
 cur_frm.add_fetch("payment_gateway", "payment_account", "payment_account")
+cur_frm.add_fetch("payment_gateway", "gateway", "gateway")
 
 frappe.ui.form.on("Payment Request", "onload", function(frm, dt, dn){
 	frappe.call({
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json
index 13eeb8b..a0dd9f4 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.json
+++ b/erpnext/accounts/doctype/payment_request/payment_request.json
@@ -118,7 +118,32 @@
    "label": "Payment Gateway", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Payment Gateway", 
+   "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": "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", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -135,7 +160,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "fieldname": "payment_account", 
-   "fieldtype": "Link", 
+   "fieldtype": "Read Only", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
@@ -143,7 +168,7 @@
    "label": "Payment Account", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Account", 
+   "options": "payment_gateway.payment_account", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -459,7 +484,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2015-12-22 20:18:08.853333", 
+ "modified": "2015-12-23 23:49:22.755235", 
  "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 bac19ec..97b0081 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -7,7 +7,8 @@
 from frappe.model.document import Document
 from frappe.utils import flt, today
 from frappe import _
-from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry
+from erpnext.accounts.doctype.journal_entry.journal_entry import (get_payment_entry_against_invoice, 
+get_payment_entry_against_order)
 from erpnext.accounts.party import get_party_account
 from erpnext.accounts.utils import get_account_currency, get_balance_on
 from itertools import chain
@@ -18,14 +19,14 @@
 		
 	def validate_payment_request(self):
 		if frappe.db.get_value("Payment Request", {"reference_name": self.reference_name, 
-			"name": ("!=", self.name), "status": "Paid", "docstatus": 1}, "name"):
+			"name": ("!=", self.name), "status": ("not in", ["Initiated", "Paid"]), "docstatus": 1}, "name"):
 			frappe.throw(_("Payment Request already exist"))
 		
 	def on_submit(self):
 		if not self.mute_email:
 			self.send_payment_request()
 			self.send_email()
-			
+
 		self.make_communication_entry()
 	
 	def on_cancel(self):
@@ -38,7 +39,7 @@
 		pass
 	
 	def send_payment_request(self):
-		if self.payment_gateway == "PayPal":
+		if self.gateway == "PayPal":
 			from paypal_integration.express_checkout import set_express_checkout
 			self.payment_url = set_express_checkout(self.amount, self.currency, {"doctype": self.doctype, 
 				"docname": self.name})
@@ -50,52 +51,36 @@
 		if frappe.session.user == "Guest":
 			frappe.set_user("Administrator")
 			
-		return self.create_journal_voucher_entry()
+		return self.create_journal_entry()
 	
-	def create_journal_voucher_entry(self):
-		"""create voucher entry"""
+	def create_journal_entry(self):
+		"""create entry"""
 		payment_details = {
-			"party_type": "Customer",
-			"amount_field_party": "credit_in_account_currency",
-			"amount_field_bank": "debit_in_account_currency",
 			"amount": self.amount,
 			"return_obj": True
 		}
 		
-		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) 
-		
-		if self.reference_doctype == "Sales Order":
-			party_account = get_party_account("Customer", ref_doc.get('customer'), ref_doc.company)
-			payment_details.update({
-				"party_account": party_account,
-				"party_account_currency": get_account_currency(party_account),
-				"remarks": 'Advance Payment received against {0} {1}'.format(self.reference_doctype, self.reference_name),
-				"is_advance": "Yes"
-			})
-		if self.reference_doctype == "Sales Invoice":
-			payment_details.update({
-				"party_account": ref_doc.debit_to,
-				"party_account_currency": ref_doc.party_account_currency,
-				"remarks": 'Payment received against {0} {1}. {2}'.format(self.reference_doctype, self.reference_name, ref_doc.remarks),
-				"is_advance": "No"
-			})
-		
 		account_details = frappe.db.get_value("Account", self.payment_account,
 					["account_currency", "account_type"], as_dict=1)
-					
+		
 		payment_details["bank_account"] = {
 			"account": self.payment_account,
 			"balance": get_balance_on(self.payment_account),
 			"account_currency": account_details.account_currency,
 			"account_type": account_details.account_type
 		}
-		
-		#create voucher entry
-		jv =  get_payment_entry(ref_doc, payment_details)
+				
+		if self.reference_doctype == "Sales Order":
+			jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name, payment_details)
+			
+		if self.reference_doctype == "Sales Invoice":
+			jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name, payment_details)
+			
 		jv.update({
 			"voucher_type": "Journal Entry",
 			"posting_date": today()
-		})
+		})		
+
 		jv.submit()
 		
 		#set status as paid for Payment Request
@@ -136,11 +121,12 @@
 	"""Make payment request"""
 	args = frappe._dict(args)
 	ref_doc = get_reference_doc_details(args.dt, args.dn)
-	payment_gateway, payment_account = get_gateway_details(args)
+	name, gateway, payment_account = get_gateway_details(args)
 	
 	pr = frappe.new_doc("Payment Request")
 	pr.update({
-		"payment_gateway": payment_gateway,
+		"payment_gateway": name,
+		"gateway": gateway,
 		"payment_account": payment_account,
 		"currency": ref_doc.currency,
 		"amount": get_amount(ref_doc, args.dt),
@@ -185,9 +171,9 @@
 def get_gateway_details(args):
 	"""return gateway and payment account of default payment gateway"""
 	if args.payemnt_gateway:
-		frappe.db.get_value("Payment Gateway", args.payemnt_gateway, ["gateway", "payment_account"])
+		return frappe.db.get_value("Payment Gateway Account", args.payemnt_gateway, ["name", "gateway", "payment_account"])
 		
-	return frappe.db.get_value("Payment Gateway", {"is_default": 1}, ["gateway", "payment_account"])
+	return frappe.db.get_value("Payment Gateway Account", {"is_default": 1}, ["name", "gateway", "payment_account"])
 
 @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 bfc54f9..a2008cc 100644
--- a/erpnext/accounts/doctype/payment_request/test_payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/test_payment_request.py
@@ -12,17 +12,22 @@
 
 test_dependencies = ["Currency Exchange", "Journal Entry", "Contact", "Address"]
 
+payment_gateway = {
+	"doctype": "Payment Gateway",
+	"gateway": "_Test Gateway"
+}
+
 payment_method = [
 	{
-		"doctype": "Payment Gateway",
+		"doctype": "Payment Gateway Account",
 		"is_default": 1,
-		"gateway": "_Test Gateway INR",
+		"gateway": "_Test Gateway",
 		"payment_account": "_Test Bank - _TC",
 		"currency": "INR"
 	},
 	{
-		"doctype": "Payment Gateway",
-		"gateway": "_Test Gateway USD",
+		"doctype": "Payment Gateway Account",
+		"gateway": "_Test Gateway",
 		"payment_account": "_Test Bank - _TC",
 		"currency": "USD"
 	}
@@ -30,9 +35,13 @@
 
 class TestPaymentRequest(unittest.TestCase):
 	def setUp(self):
-		for gateway in payment_method:
-			if not frappe.db.get_value("Payment Gateway", gateway["gateway"], "name"):
-				frappe.get_doc(gateway).insert(ignore_permissions=True)
+		if not frappe.db.get_value("Payment Gateway", payment_gateway["gateway"], "name"):
+			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"], 
+				"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")
@@ -63,7 +72,7 @@
 			currency="USD", conversion_rate=50)
 
 		pr = make_payment_request(dt="Sales Invoice", dn=SI_USD.name, recipient_id="saurabh@erpnext.com",
-			mute_email=1, submit_doc=1, payemnt_gateway="_Test Gateway USD")
+			mute_email=1, submit_doc=1, payemnt_gateway="_Test Gateway - USD")
 		jv = pr.set_paid()
 
 		self.assertEquals(jv.accounts[0].account, "_Test Receivable USD - _TC")