[fix] Multi currency patch
diff --git a/erpnext/patches/v6_0/multi_currency.py b/erpnext/patches/v6_0/multi_currency.py
index 2b53134..979e03e 100644
--- a/erpnext/patches/v6_0/multi_currency.py
+++ b/erpnext/patches/v6_0/multi_currency.py
@@ -9,8 +9,9 @@
for dt in ("Account", "GL Entry", "Journal Entry",
"Journal Entry Account", "Sales Invoice", "Purchase Invoice", "Customer", "Supplier"):
frappe.reload_doctype(dt)
-
- for company in frappe.get_all("Company", fields=["name", "default_currency", "default_receivable_account"]):
+
+ company_list = frappe.get_all("Company", fields=["name", "default_currency", "default_receivable_account"])
+ for company in company_list:
# update currency in account and gl entry as per company currency
frappe.db.sql("""update `tabAccount` set account_currency = %s
@@ -63,30 +64,40 @@
company=%s
""", (company.default_currency, company.name))
- # Set party account if default currency of party other than company's default currency
- for dt in ("Customer", "Supplier"):
- parties = frappe.get_all(dt)
- for p in parties:
+ # Set party account if default currency of party other than company's default currency
+ for dt in ("Customer", "Supplier"):
+ parties = frappe.get_all(dt)
+ for p in parties:
+ party = frappe.get_doc(dt, p.name)
+
+ for company in company_list:
# Get party GL Entries
party_gle = frappe.db.get_value("GL Entry", {"party_type": dt, "party": p.name,
- "company": company.name}, ["account", "account_currency"], as_dict=True)
-
- party = frappe.get_doc(dt, p.name)
-
+ "company": company.name}, ["account", "account_currency", "name"], as_dict=True)
+
# set party account currency
- if party_gle or not party.party_account_currency:
+ if party_gle:
+ party.party_account_currency = party_gle.account_currency
+ elif not party.party_account_currency:
party.party_account_currency = company.default_currency
# Add default receivable /payable account if not exists
# and currency is other than company currency
+ party_accounts = []
if party.party_account_currency and party.party_account_currency != company.default_currency:
- party_account_exists = False
+ party_account_exists_for_company = False
for d in party.get("accounts"):
if d.company == company.name:
- party_account_exists = True
- break
-
- if not party_account_exists:
+ account_currency = frappe.db.get_value("Account", d.account, "account_currency")
+ if account_currency == party.party_account_currency:
+ party_accounts.append({
+ "company": d.company,
+ "account": d.account
+ })
+ party_account_exists_for_company = True
+ break
+
+ if not party_account_exists_for_company:
party_account = None
if party_gle:
party_account = party_gle.account
@@ -95,12 +106,12 @@
company.default_receivable_account, "account_currency")
if default_receivable_account_currency != company.default_currency:
party_account = company.default_receivable_account
-
+
if party_account:
- party.append("accounts", {
+ party_accounts.append({
"company": company.name,
"account": party_account
})
-
- party.flags.ignore_mandatory = True
- party.save()
\ No newline at end of file
+ party.set("accounts", party_accounts)
+ party.flags.ignore_mandatory = True
+ party.save()
\ No newline at end of file