[fixes] currency exchange rate and payment gateway account fixes for multicurrency

This commit is contained in:
Saurabh 2016-02-24 12:43:22 +05:30
parent 4a6bbf9b72
commit 6d1dbd6384
2 changed files with 43 additions and 46 deletions

View File

@ -83,23 +83,23 @@ class PaymentRequest(Document):
party_account = get_party_account("Customer", ref_doc.get("customer"), ref_doc.company) party_account = get_party_account("Customer", ref_doc.get("customer"), ref_doc.company)
party_account_currency = get_account_currency(party_account) party_account_currency = get_account_currency(party_account)
debit_in_account_currency = 0.0 debit_in_account_currency = 0.0
if party_account_currency == ref_doc.company_currency: if party_account_currency == ref_doc.company_currency:
amount = self.base_grand_total amount = self.base_grand_total
if self.currency != ref_doc.company_currency: if self.currency != ref_doc.company_currency:
debit_in_account_currency = self.grand_total debit_in_account_currency = self.grand_total
else: else:
amount = self.grand_total amount = debit_in_account_currency = self.grand_total
if self.reference_doctype == "Sales Order": if self.reference_doctype == "Sales Order":
jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name, 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, amount=amount, debit_in_account_currency=debit_in_account_currency , journal_entry=True,
bank_account=self.payment_account) bank_account=self.payment_account)
if self.reference_doctype == "Sales Invoice": if self.reference_doctype == "Sales Invoice":
jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name, 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, amount=amount, debit_in_account_currency=debit_in_account_currency, journal_entry=True,
bank_account=self.payment_account) bank_account=self.payment_account)
@ -211,8 +211,8 @@ def get_amount(ref_doc, dt):
if dt == "Sales Invoice": if dt == "Sales Invoice":
base_grand_total = flt(ref_doc.base_grand_total) base_grand_total = flt(ref_doc.base_grand_total)
grand_total = (flt(ref_doc.base_grand_total) - flt(ref_doc.outstanding_amount)) / flt(ref_doc.conversion_rate, 2) grand_total = flt(ref_doc.outstanding_amount)
if base_grand_total > 0 and grand_total > 0 : if base_grand_total > 0 and grand_total > 0 :
return base_grand_total, grand_total return base_grand_total, grand_total
@ -221,8 +221,8 @@ def get_amount(ref_doc, dt):
def get_gateway_details(args): def get_gateway_details(args):
"""return gateway and payment account of default payment gateway""" """return gateway and payment account of default payment gateway"""
if args.payemnt_gateway: if args.get("payment_gateway"):
return get_payment_gateway_account(args.payemnt_gateway) return get_payment_gateway_account(args.get("payment_gateway"))
if args.cart: if args.cart:
payment_gateway_account = frappe.get_doc("Shopping Cart Settings").payment_gateway_account payment_gateway_account = frappe.get_doc("Shopping Cart Settings").payment_gateway_account

View File

@ -8,6 +8,7 @@ import unittest
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order 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, get_gateway_details
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice 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_records = frappe.get_test_records('Payment Request')
test_dependencies = ["Currency Exchange", "Journal Entry", "Contact", "Address"] test_dependencies = ["Currency Exchange", "Journal Entry", "Contact", "Address"]
@ -44,48 +45,44 @@ class TestPaymentRequest(unittest.TestCase):
frappe.get_doc(method).insert(ignore_permissions=True) frappe.get_doc(method).insert(ignore_permissions=True)
def test_payment_request_linkings(self): def test_payment_request_linkings(self):
SO_INR = make_sales_order(currency="INR") so_inr = make_sales_order(currency="INR")
pr = make_payment_request(dt="Sales Order", dn=SO_INR.name, recipient_id="saurabh@erpnext.com") 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_doctype, "Sales Order")
self.assertEquals(pr.reference_name, SO_INR.name) self.assertEquals(pr.reference_name, so_inr.name)
self.assertEquals(pr.currency, "INR") self.assertEquals(pr.currency, "INR")
SI_USD = create_sales_invoice(currency="USD", conversion_rate=50) conversion_rate = get_exchange_rate("USD", "INR")
pr = make_payment_request(dt="Sales Invoice", dn=SI_USD.name, recipient_id="saurabh@erpnext.com")
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_doctype, "Sales Invoice")
self.assertEquals(pr.reference_name, SI_USD.name) self.assertEquals(pr.reference_name, si_usd.name)
self.assertEquals(pr.currency, "USD") 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", def test_payment_entry(self):
mute_email=1, return_doc=1, payemnt_gateway="_Test Gateway - USD") 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() jv = pr.set_as_paid()
payemnt_gateway_details = get_gateway_details({"payemnt_gateway": "_Test Gateway - USD"}) so_inr = frappe.get_doc("Sales Order", so_inr.name)
accounts = jv.accounts.as_dict() self.assertEquals(so_inr.advance_paid, jv.total_debit)
self.assertEquals(accounts[0].account, "_Test Receivable USD - _TC") conversion_rate = get_exchange_rate("USD", "INR")
self.assertEquals(accounts[0].account, payemnt_gateway_details.payment_account)
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)