From 957b47f351abd792ec82132f500034ad7937ee2d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 11:36:15 +0530 Subject: [PATCH] fix: skip party validation for payroll & it's journal & GL entry submission (backport #49638) (#49826) * fix: skip party validation for payroll & it's journal & GL entry submission (#49638) * fix: skip validation for manual je & gl submission linked with payroll entry * refactor: change condition * fix: add checkbox in jouranl entry account and passed it true from payroll to skip party validation * refactor: add checkbox to skip party validation in journal entry (cherry picked from commit 35474d997dad7353fe2adb47dee059e04122aa5c) # Conflicts: # erpnext/accounts/doctype/journal_entry/journal_entry.json # erpnext/accounts/doctype/journal_entry/journal_entry.py * fix: conflicts raised because of cherry pick while backporting * fix: conflicts --------- Co-authored-by: Raheel Khan --- erpnext/accounts/doctype/gl_entry/gl_entry.py | 4 ++-- .../doctype/journal_entry/journal_entry.json | 11 ++++++++++- .../accounts/doctype/journal_entry/journal_entry.py | 13 ++++++++++--- .../journal_entry_account.json | 2 +- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index 510e6b1dcbc..0f3216ae772 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -131,8 +131,8 @@ class GLEntry(Document): if not self.is_cancelled and not (self.party_type and self.party): account_type = frappe.get_cached_value("Account", self.account, "account_type") - # skipping validation for payroll entry creation in case party is not required - if not frappe.flags.party_not_required_for_receivable_payable: + + if not frappe.flags.party_not_required: # skipping validation if party is not required if account_type == "Receivable": frappe.throw( _("{0} {1}: Customer is required against Receivable account {2}").format( diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.json b/erpnext/accounts/doctype/journal_entry/journal_entry.json index 4184bdaabb9..4f904d87998 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.json +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.json @@ -59,6 +59,7 @@ "addtional_info", "mode_of_payment", "payment_order", + "party_not_required", "column_break3", "is_opening", "stock_entry", @@ -543,6 +544,14 @@ "label": "Is System Generated", "no_copy": 1, "read_only": 1 + }, + { + "default": "0", + "fieldname": "party_not_required", + "fieldtype": "Check", + "hidden": 1, + "label": "Party Not Required", + "no_copy": 1 } ], "icon": "fa fa-file-text", @@ -557,7 +566,7 @@ "table_fieldname": "payment_entries" } ], - "modified": "2024-07-18 15:32:29.413598", + "modified": "2025-09-29 13:05:46.982277", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry", diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 82132ce70be..9d3c9eb501e 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -72,6 +72,7 @@ class JournalEntry(AccountsController): multi_currency: DF.Check naming_series: DF.Literal["ACC-JV-.YYYY.-"] paid_loan: DF.Data | None + party_not_required: DF.Check pay_to_recd_from: DF.Data | None payment_order: DF.Link | None posting_date: DF.Date @@ -543,10 +544,10 @@ class JournalEntry(AccountsController): for d in self.get("accounts"): account_type = frappe.get_cached_value("Account", d.account, "account_type") - # skipping validation for payroll entry creation - skip_validation = frappe.flags.party_not_required_for_receivable_payable if account_type in ["Receivable", "Payable"]: - if not (d.party_type and d.party) and not skip_validation: + if ( + not (d.party_type and d.party) and not self.party_not_required + ): # skipping validation if party_not_required is passed via payroll entry frappe.throw( _( "Row {0}: Party Type and Party is required for Receivable / Payable account {1}" @@ -1139,6 +1140,11 @@ class JournalEntry(AccountsController): } ) + # set flag to skip party validation + account_type = frappe.get_cached_value("Account", d.account, "account_type") + if account_type in ["Receivable", "Payable"] and self.party_not_required: + frappe.flags.party_not_required = True + gl_map.append( self.get_gl_dict( row, @@ -1166,6 +1172,7 @@ class JournalEntry(AccountsController): merge_entries=merge_entries, update_outstanding=update_outstanding, ) + frappe.flags.party_not_required = False if cancel: cancel_exchange_gain_loss_journal(frappe._dict(doctype=self.doctype, name=self.name)) diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json index 45c2b4ce764..5d31c627381 100644 --- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json +++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json @@ -286,7 +286,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2025-07-25 04:45:28.117715", + "modified": "2025-09-29 13:01:48.916517", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry Account",