From ff2f3ef1b13e4a06a1d1004202a5269c045a2523 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 4 Jul 2016 11:41:14 +0530 Subject: [PATCH] Test Case Fixes --- .../payment_entry/test_payment_entry.py | 2 +- .../payment_request/payment_request.py | 32 +++++++++----- .../payment_request/test_payment_request.py | 43 +++++++++++++------ erpnext/accounts/general_ledger.py | 4 +- erpnext/controllers/accounts_controller.py | 8 ++-- 5 files changed, 59 insertions(+), 30 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py index 8e45b3bdde..8be5f6d847 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 @@ class TestPaymentEntry(unittest.TestCase): 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 b355f35a03..f7d95862ba 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -6,11 +6,11 @@ from __future__ import unicode_literals 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 @@ class PaymentRequest(Document): 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 @@ class PaymentRequest(Document): 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 @@ class PaymentRequest(Document): "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 @@ def make_payment_request(**args): 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 eb8e55875c..73c412f247 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 @@ from __future__ import unicode_literals 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 @@ class TestPaymentRequest(unittest.TestCase): 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 e155d8e813..4af197e42c 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -168,8 +168,8 @@ def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None, 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 2b79219f30..2b67ceb243 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -348,10 +348,12 @@ class AccountsController(TransactionBase): """ 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 @@ class AccountsController(TransactionBase): '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 @@ def get_advance_payment_entries(party_type, party, party_account, 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 = ""