Merge branch 'develop' of https://github.com/frappe/erpnext into party_account_currency_check
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index d28c3a8..1ce927f 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -16,7 +16,7 @@
from erpnext.accounts.doctype.tax_withholding_category.tax_withholding_category import (
get_party_tax_withholding_details,
)
-from erpnext.accounts.party import get_party_account
+from erpnext.accounts.party import get_party_account, get_party_gle_currency
from erpnext.accounts.utils import (
get_account_currency,
get_balance_on,
@@ -48,6 +48,7 @@
self.clearance_date = None
self.validate_party()
+ self.validate_party_account_currency()
self.validate_entries_for_advance()
self.validate_multi_currency()
self.set_amounts_in_company_currency()
@@ -342,6 +343,20 @@
)
)
+ def validate_party_account_currency(self):
+ for d in self.get("accounts"):
+ if d.party_type in ("Customer", "Supplier"):
+ party_gle_currency = get_party_gle_currency(d.party_type, d.party, self.company)
+ party_account_currency = get_account_currency(d.account)
+ party_currency = frappe.db.get_value(d.party_type, d.party, "default_currency")
+
+ if not party_gle_currency and (party_account_currency != party_currency):
+ frappe.throw(
+ _("Party Account {0} currency and default party currency should be same").format(
+ frappe.bold(d.account)
+ )
+ )
+
def check_credit_limit(self):
customers = list(
set(
diff --git a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
index 8e0e62d..be669a9 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
@@ -78,6 +78,7 @@
expense_account="Cost of Goods Sold - TPC",
rate=400,
debit_to="Debtors - TPC",
+ currency="USD",
)
create_sales_invoice(
company=company,
@@ -86,6 +87,7 @@
expense_account="Cost of Goods Sold - TPC",
rate=200,
debit_to="Debtors - TPC",
+ currency="USD",
)
pcv = self.make_period_closing_voucher(submit=False)
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 46013bb..217aac7 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -34,6 +34,7 @@
from erpnext.accounts.party import (
get_party_account,
get_party_account_currency,
+ get_party_gle_currency,
validate_party_frozen_disabled,
)
from erpnext.accounts.utils import get_account_currency, get_fiscal_years, validate_fiscal_year
@@ -167,6 +168,7 @@
self.validate_party()
self.validate_currency()
+ self.validate_party_account_currency()
if self.doctype in ["Purchase Invoice", "Sales Invoice"]:
pos_check_field = "is_pos" if self.doctype == "Sales Invoice" else "is_paid"
@@ -1439,6 +1441,27 @@
# at quotation / sales order level and we shouldn't stop someone
# from creating a sales invoice if sales order is already created
+ def validate_party_account_currency(self):
+ if self.doctype not in ("Sales Invoice", "Purchase Invoice"):
+ return
+
+ if self.is_opening == "Yes":
+ return
+
+ party_type, party = self.get_party()
+ party_gle_currency = get_party_gle_currency(party_type, party, self.company)
+ party_account = (
+ self.get("debit_to") if self.doctype == "Sales Invoice" else self.get("credit_to")
+ )
+ party_account_currency = get_account_currency(party_account)
+
+ if not party_gle_currency and (party_account_currency != self.currency):
+ frappe.throw(
+ _("Party Account {0} currency and document currency should be same").format(
+ frappe.bold(party_account)
+ )
+ )
+
def delink_advance_entries(self, linked_doc_name):
total_allocated_amount = 0
for adv in self.advances: