Test Case Fixes
diff --git a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
index 8e45b3b..8be5f6d 100644
--- a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
@@ -70,7 +70,7 @@
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank USD - _TC")
pe.reference_no = "1"
pe.reference_date = "2016-01-01"
- pe.target_exchange_rate = 50
+ pe.source_exchange_rate = 50
pe.insert()
pe.submit()
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index b355f35..f7d9586 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -6,11 +6,11 @@
import frappe
from frappe import _
from frappe.model.document import Document
-from frappe.utils import flt, get_url, nowdate, getdate
+from frappe.utils import flt, get_url, nowdate
from erpnext.accounts.party import get_party_account
from erpnext.accounts.utils import get_account_currency
from erpnext.setup.utils import get_exchange_rate
-from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
+from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry, get_company_defaults
class PaymentRequest(Document):
def validate(self):
@@ -41,7 +41,6 @@
def on_submit(self):
send_mail = True
self.make_communication_entry()
-
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart":
@@ -87,18 +86,22 @@
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)
+
+ if self.reference_doctype == "Sales Invoice":
+ party_account = ref_doc.debit_to
+ elif self.reference_doctype == "Purchase Invoice":
+ party_account = ref_doc.credit_to
+ else:
+ party_account = get_party_account("Customer", ref_doc.get("customer"), ref_doc.company)
+
+ party_account_currency = ref_doc.get("party_account_currency") or get_account_currency(party_account)
bank_amount = self.grand_total
if party_account_currency == ref_doc.company_currency and party_account_currency != self.currency:
- party_amount = flt(flt(self.grand_total) *
- get_exchange_rate(self.currency, party_account_currency),
- ref_doc.precision("base_grand_total"))
+ party_amount = self.base_grand_total
else:
party_amount = self.grand_total
-
+
payment_entry = get_payment_entry(self.reference_doctype, self.reference_name,
party_amount=party_amount, bank_account=self.payment_account, bank_amount=bank_amount)
@@ -108,6 +111,14 @@
"remarks": "Payment Entry against {0} {1} via Payment Request {2}".format(self.reference_doctype,
self.reference_name, self.name)
})
+
+ company_details = get_company_defaults(ref_doc.company)
+ if payment_entry.difference_amount:
+ payment_entry.append("deductions", {
+ "account": company_details.exchange_gain_loss_account,
+ "cost_center": company_details.cost_center,
+ "amount": payment_entry.difference_amount
+ })
payment_entry.insert(ignore_permissions=True)
payment_entry.submit()
@@ -188,7 +199,6 @@
if args.return_doc:
return pr
-
if args.submit_doc:
pr.insert(ignore_permissions=True)
pr.submit()
diff --git a/erpnext/accounts/doctype/payment_request/test_payment_request.py b/erpnext/accounts/doctype/payment_request/test_payment_request.py
index eb8e558..73c412f 100644
--- a/erpnext/accounts/doctype/payment_request/test_payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/test_payment_request.py
@@ -6,7 +6,7 @@
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, get_gateway_details
+from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request
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')
@@ -62,27 +62,44 @@
self.assertEquals(pr.currency, "USD")
def test_payment_entry(self):
+ frappe.db.set_value("Company", "_Test Company",
+ "exchange_gain_loss_account", "_Test Exchange Gain/Loss - _TC")
+ frappe.db.set_value("Company", "_Test Company",
+ "write_off_account", "_Test Write Off - _TC")
+ frappe.db.set_value("Company", "_Test Company",
+ "cost_center", "_Test Cost Center - _TC")
+
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()
+ pe = 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")
+ self.assertEquals(so_inr.advance_paid, 1000)
si_usd = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC",
- currency="USD", conversion_rate=conversion_rate)
+ 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, payment_gateway="_Test Gateway - USD")
+ mute_email=1, payment_gateway="_Test Gateway - USD", submit_doc=1)
+
+ pe = pr.set_as_paid()
+
+ expected_gle = dict((d[0], d) for d in [
+ ["_Test Receivable USD - _TC", 0, 5000, si_usd.name],
+ [pr.payment_account, 6000.0, 0, None],
+ ["_Test Exchange Gain/Loss - _TC", 0, 1000, None]
+ ])
+
+ gl_entries = frappe.db.sql("""select account, debit, credit, against_voucher
+ from `tabGL Entry` where voucher_type='Payment Entry' and voucher_no=%s
+ order by account asc""", pe.name, as_dict=1)
- jv = pr.set_as_paid()
+ self.assertTrue(gl_entries)
- 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
+ for i, gle in enumerate(gl_entries):
+ self.assertEquals(expected_gle[gle.account][0], gle.account)
+ self.assertEquals(expected_gle[gle.account][1], gle.debit)
+ self.assertEquals(expected_gle[gle.account][2], gle.credit)
+ self.assertEquals(expected_gle[gle.account][3], gle.against_voucher)
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index e155d8e..4af197e 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -168,8 +168,8 @@
if not gl_entries:
gl_entries = frappe.db.sql("""
- select account, posting_date, party_type, party,
- voucher_type, voucher_no, against_voucher_type, against_voucher
+ select account, posting_date, party_type, party, cost_center, fiscal_year,
+ voucher_type, voucher_no, against_voucher_type, against_voucher, cost_center
from `tabGL Entry`
where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no), as_dict=True)
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 2b79219..2b67ceb 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -348,10 +348,12 @@
"""
if self.doctype == "Sales Invoice":
+ party_type = "Customer"
party = self.customer
party_account = self.debit_to
dr_or_cr = "credit_in_account_currency"
else:
+ party_type = "Supplier"
party = self.supplier
party_account = self.credit_to
dr_or_cr = "debit_in_account_currency"
@@ -366,7 +368,7 @@
'against_voucher_type' : self.doctype,
'against_voucher' : self.name,
'account' : party_account,
- 'party_type': 'Customer',
+ 'party_type': party_type,
'party': party,
'is_advance' : 'Yes',
'dr_or_cr' : dr_or_cr,
@@ -683,10 +685,10 @@
party_account_field = "paid_from" if party_type == "Customer" else "paid_to"
payment_type = "Receive" if party_type == "Customer" else "Pay"
payment_entries_against_order, unallocated_payment_entries = [], []
-
+
if order_list or against_all_orders:
if order_list:
- reference_condition = " and t2.reference_name in ({1})"\
+ reference_condition = " and t2.reference_name in ({0})"\
.format(', '.join(['%s'] * len(order_list)))
else:
reference_condition = ""