[fix] Map amount in advance payment entry agaionst SO/PO based on party account currency
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 06fe1a3..3db1820 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -587,11 +587,18 @@
jv = get_payment_entry(so)
jv.remark = 'Advance payment received against Sales Order {0}.'.format(so.name)
-
+
party_account = get_party_account(so.company, so.customer, "Customer")
party_account_currency = frappe.db.get_value("Account", party_account, "account_currency")
company_currency = get_company_currency(so.company)
+ if so.company_currency == party_account_currency:
+ exchange_rate = 1
+ else:
+ exchange_rate = get_exchange_rate(party_account_currency, so.company_currency)
+
+ jv.exchange_rate = exchange_rate
+
if party_account_currency == company_currency:
amount = flt(so.base_grand_total) - flt(so.advance_paid)
else:
@@ -599,6 +606,7 @@
# credit customer
jv.get("accounts")[0].account = party_account
+ jv.get("accounts")[0].account_currency = party_account_currency
jv.get("accounts")[0].party_type = "Customer"
jv.get("accounts")[0].party = so.customer
jv.get("accounts")[0].balance = get_balance_on(party_account)
@@ -609,7 +617,10 @@
jv.get("accounts")[0].is_advance = "Yes"
# debit bank
- jv.get("accounts")[1].debit_in_account_currency = amount
+ if jv.get("accounts")[1].account_currency == party_account_currency:
+ jv.get("accounts")[1].debit_in_account_currency = amount
+ else:
+ jv.get("accounts")[1].debit_in_account_currency = amount * exchange_rate
return jv.as_dict()
@@ -630,6 +641,13 @@
party_account_currency = frappe.db.get_value("Account", party_account, "account_currency")
company_currency = get_company_currency(po.company)
+ if po.company_currency == party_account_currency:
+ exchange_rate = 1
+ else:
+ exchange_rate = get_exchange_rate(party_account_currency, po.company_currency)
+
+ jv.exchange_rate = exchange_rate
+
if party_account_currency == company_currency:
amount = flt(po.base_grand_total) - flt(po.advance_paid)
else:
@@ -647,7 +665,10 @@
jv.get("accounts")[0].is_advance = "Yes"
# debit bank
- jv.get("accounts")[1].credit_in_account_currency = amount
+ if jv.get("accounts")[1].account_currency == party_account_currency:
+ jv.get("accounts")[1].credit_in_account_currency = amount
+ else:
+ jv.get("accounts")[1].credit_in_account_currency = amount * exchange_rate
return jv.as_dict()