fix: call validate before setting repost flag
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 1b1485f..85ed126 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -11,6 +11,9 @@
import erpnext
from erpnext.accounts.deferred_revenue import validate_service_stop_date
from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
+from erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger import (
+ validate_docs_for_deferred_accounting,
+)
from erpnext.accounts.doctype.sales_invoice.sales_invoice import (
check_if_return_invoice_linked_with_payment_entry,
get_total_in_party_account_currency,
@@ -484,6 +487,11 @@
_("Stock cannot be updated against Purchase Receipt {0}").format(item.purchase_receipt)
)
+ def validate_for_repost(self):
+ self.validate_write_off_account()
+ self.validate_expense_account()
+ validate_docs_for_deferred_accounting([], [self.name])
+
def on_submit(self):
super(PurchaseInvoice, self).on_submit()
@@ -531,8 +539,7 @@
]
child_tables = {"items": ("expense_account",), "taxes": ("account_head",)}
self.needs_repost = self.check_if_fields_updated(fields_to_check, child_tables)
- self.validate_write_off_account()
- self.validate_expense_account()
+ self.validate_for_repost()
self.db_set("repost_required", self.needs_repost)
def make_gl_entries(self, gl_entries=None, from_repost=False):
diff --git a/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.py b/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.py
index e533fed..dbb0971 100644
--- a/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.py
+++ b/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.py
@@ -21,29 +21,8 @@
def validate_for_deferred_accounting(self):
sales_docs = [x.voucher_no for x in self.vouchers if x.voucher_type == "Sales Invoice"]
- docs_with_deferred_revenue = frappe.db.get_all(
- "Sales Invoice Item",
- filters={"parent": ["in", sales_docs], "docstatus": 1, "enable_deferred_revenue": True},
- fields=["parent"],
- as_list=1,
- )
-
purchase_docs = [x.voucher_no for x in self.vouchers if x.voucher_type == "Purchase Invoice"]
- docs_with_deferred_expense = frappe.db.get_all(
- "Purchase Invoice Item",
- filters={"parent": ["in", purchase_docs], "docstatus": 1, "enable_deferred_expense": 1},
- fields=["parent"],
- as_list=1,
- )
-
- if docs_with_deferred_revenue or docs_with_deferred_expense:
- frappe.throw(
- _("Documents: {0} have deferred revenue/expense enabled for them. Cannot repost.").format(
- frappe.bold(
- comma_and([x[0] for x in docs_with_deferred_expense + docs_with_deferred_revenue])
- )
- )
- )
+ validate_docs_for_deferred_accounting(sales_docs, purchase_docs)
def validate_for_closed_fiscal_year(self):
if self.vouchers:
@@ -184,3 +163,26 @@
doc.make_gl_entries()
frappe.db.commit()
+
+
+def validate_docs_for_deferred_accounting(sales_docs, purchase_docs):
+ docs_with_deferred_revenue = frappe.db.get_all(
+ "Sales Invoice Item",
+ filters={"parent": ["in", sales_docs], "docstatus": 1, "enable_deferred_revenue": True},
+ fields=["parent"],
+ as_list=1,
+ )
+
+ docs_with_deferred_expense = frappe.db.get_all(
+ "Purchase Invoice Item",
+ filters={"parent": ["in", purchase_docs], "docstatus": 1, "enable_deferred_expense": 1},
+ fields=["parent"],
+ as_list=1,
+ )
+
+ if docs_with_deferred_revenue or docs_with_deferred_expense:
+ frappe.throw(
+ _("Documents: {0} have deferred revenue/expense enabled for them. Cannot repost.").format(
+ frappe.bold(comma_and([x[0] for x in docs_with_deferred_expense + docs_with_deferred_revenue]))
+ )
+ )