diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 6257865992..70ebee1ef6 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -148,12 +148,22 @@ cur_frm.fields_dict['items'].grid.get_field("item_code").get_query = function(do } cur_frm.fields_dict['credit_to'].get_query = function(doc) { - return{ - filters:{ - 'account_type': 'Payable', - 'root_type': 'Liability', - 'is_group': 0, - 'company': doc.company + // filter on Account + if (doc.supplier) { + return { + filters: { + 'account_type': 'Payable', + 'is_group': 0, + 'company': doc.company + } + } + } else { + return { + filters: { + 'report_type': 'Balance Sheet', + 'is_group': 0, + 'company': doc.company + } } } } diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 22089373b1..a43e553ea0 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -91,8 +91,12 @@ class PurchaseInvoice(BuyingController): throw(_("Conversion rate cannot be 0 or 1")) def validate_credit_to_acc(self): - account_type = frappe.db.get_value("Account", self.credit_to, "account_type") - if account_type != "Payable": + account = frappe.db.get_value("Account", self.credit_to, ["account_type", "report_type"], as_dict=True) + + if account.report_type != "Balance Sheet": + frappe.throw(_("Credit To account must be a Balance Sheet account")) + + if self.supplier and account.account_type != "Payable": frappe.throw(_("Credit To account must be a Payable account")) def check_for_stopped_status(self): diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 5e59078d75..cb211c5e1c 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -405,10 +405,22 @@ cur_frm.cscript.on_submit = function(doc, cdt, cdn) { } cur_frm.set_query("debit_to", function(doc) { - return{ - filters: [ - ['Account', 'root_type', '=', 'Asset'], - ['Account', 'account_type', '=', 'Receivable'] - ] + // filter on Account + if (doc.customer) { + return { + filters: { + 'account_type': 'Receivable', + 'is_group': 0, + 'company': doc.company + } + } + } else { + return { + filters: { + 'report_type': 'Balance Sheet', + 'is_group': 0, + 'company': doc.company + } + } } }); diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 12740160de..92e3c0dbd6 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -271,8 +271,12 @@ class SalesInvoice(SellingController): reconcile_against_document(lst) def validate_debit_to_acc(self): - account_type = frappe.db.get_value("Account", self.debit_to, "account_type") - if account_type != "Receivable": + account = frappe.db.get_value("Account", self.debit_to, ["account_type", "report_type"], as_dict=True) + + if account.report_type != "Balance Sheet": + frappe.throw(_("Debit To account must be a Balance Sheet account")) + + if self.customer and account.account_type != "Receivable": frappe.throw(_("Debit To account must be a Receivable account")) def validate_fixed_asset_account(self):