mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-22 14:39:19 +00:00
fix: Expense account currency validation in Landed Cost voucher (#21073)
* fix: Expense account currency validation in Landed Cost voucher * fix: Remove unused imports
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
|
import erpnext
|
||||||
from frappe.desk.reportview import get_match_cond, get_filters_cond
|
from frappe.desk.reportview import get_match_cond, get_filters_cond
|
||||||
from frappe.utils import nowdate, getdate
|
from frappe.utils import nowdate, getdate
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
@@ -129,23 +130,26 @@ def supplier_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
})
|
})
|
||||||
|
|
||||||
def tax_account_query(doctype, txt, searchfield, start, page_len, filters):
|
def tax_account_query(doctype, txt, searchfield, start, page_len, filters):
|
||||||
|
company_currency = erpnext.get_company_currency(filters.get('company'))
|
||||||
|
|
||||||
tax_accounts = frappe.db.sql("""select name, parent_account from tabAccount
|
tax_accounts = frappe.db.sql("""select name, parent_account from tabAccount
|
||||||
where tabAccount.docstatus!=2
|
where tabAccount.docstatus!=2
|
||||||
and account_type in (%s)
|
and account_type in (%s)
|
||||||
and is_group = 0
|
and is_group = 0
|
||||||
and company = %s
|
and company = %s
|
||||||
|
and account_currency = %s
|
||||||
and `%s` LIKE %s
|
and `%s` LIKE %s
|
||||||
order by idx desc, name
|
order by idx desc, name
|
||||||
limit %s, %s""" %
|
limit %s, %s""" %
|
||||||
(", ".join(['%s']*len(filters.get("account_type"))), "%s", searchfield, "%s", "%s", "%s"),
|
(", ".join(['%s']*len(filters.get("account_type"))), "%s", "%s", searchfield, "%s", "%s", "%s"),
|
||||||
tuple(filters.get("account_type") + [filters.get("company"), "%%%s%%" % txt,
|
tuple(filters.get("account_type") + [filters.get("company"), company_currency, "%%%s%%" % txt,
|
||||||
start, page_len]))
|
start, page_len]))
|
||||||
if not tax_accounts:
|
if not tax_accounts:
|
||||||
tax_accounts = frappe.db.sql("""select name, parent_account from tabAccount
|
tax_accounts = frappe.db.sql("""select name, parent_account from tabAccount
|
||||||
where tabAccount.docstatus!=2 and is_group = 0
|
where tabAccount.docstatus!=2 and is_group = 0
|
||||||
and company = %s and `%s` LIKE %s limit %s, %s"""
|
and company = %s and account_currency = %s and `%s` LIKE %s limit %s, %s""" #nosec
|
||||||
% ("%s", searchfield, "%s", "%s", "%s"),
|
% ("%s", "%s", searchfield, "%s", "%s", "%s"),
|
||||||
(filters.get("company"), "%%%s%%" % txt, start, page_len))
|
(filters.get("company"), company_currency, "%%%s%%" % txt, start, page_len))
|
||||||
|
|
||||||
return tax_accounts
|
return tax_accounts
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from frappe.utils import flt
|
|||||||
from frappe.model.meta import get_field_precision
|
from frappe.model.meta import get_field_precision
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
||||||
|
from erpnext.accounts.doctype.account.account import get_account_currency
|
||||||
|
|
||||||
class LandedCostVoucher(Document):
|
class LandedCostVoucher(Document):
|
||||||
def get_items_from_purchase_receipts(self):
|
def get_items_from_purchase_receipts(self):
|
||||||
@@ -43,6 +44,7 @@ class LandedCostVoucher(Document):
|
|||||||
else:
|
else:
|
||||||
self.validate_applicable_charges_for_item()
|
self.validate_applicable_charges_for_item()
|
||||||
self.validate_purchase_receipts()
|
self.validate_purchase_receipts()
|
||||||
|
self.validate_expense_accounts()
|
||||||
self.set_total_taxes_and_charges()
|
self.set_total_taxes_and_charges()
|
||||||
|
|
||||||
def check_mandatory(self):
|
def check_mandatory(self):
|
||||||
@@ -71,6 +73,14 @@ class LandedCostVoucher(Document):
|
|||||||
frappe.throw(_("Row {0}: Cost center is required for an item {1}")
|
frappe.throw(_("Row {0}: Cost center is required for an item {1}")
|
||||||
.format(item.idx, item.item_code))
|
.format(item.idx, item.item_code))
|
||||||
|
|
||||||
|
def validate_expense_accounts(self):
|
||||||
|
company_currency = erpnext.get_company_currency(self.company)
|
||||||
|
for account in self.taxes:
|
||||||
|
if get_account_currency(account.expense_account) != company_currency:
|
||||||
|
frappe.throw(msg=_(""" Row {0}: Expense account currency should be same as company's default currency.
|
||||||
|
Please select expense account with account currency as {1}""")
|
||||||
|
.format(account.idx, frappe.bold(company_currency)), title=_("Invalid Account Currency"))
|
||||||
|
|
||||||
def set_total_taxes_and_charges(self):
|
def set_total_taxes_and_charges(self):
|
||||||
self.total_taxes_and_charges = sum([flt(d.amount) for d in self.get("taxes")])
|
self.total_taxes_and_charges = sum([flt(d.amount) for d in self.get("taxes")])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user