From ca61e5a214c84130d1a2f950dd80d2ec5fa900f5 Mon Sep 17 00:00:00 2001 From: pandiyan Date: Thu, 11 Jun 2026 13:13:09 +0530 Subject: [PATCH 1/2] fix: show user disable audit log (cherry picked from commit 73d1852773706efb6ec6305fd547f9c21c2643c3) --- erpnext/setup/doctype/employee/employee.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/erpnext/setup/doctype/employee/employee.py b/erpnext/setup/doctype/employee/employee.py index 1db49e7f8a4..282845bef85 100755 --- a/erpnext/setup/doctype/employee/employee.py +++ b/erpnext/setup/doctype/employee/employee.py @@ -150,15 +150,8 @@ class Employee(NestedSet): ) def validate_user_details(self): - if self.user_id: - data = frappe.db.get_value("User", self.user_id, ["enabled"], as_dict=1) - - if not data: - self.user_id = None - return - - self.validate_for_enabled_user_id(data.get("enabled", 0)) - self.validate_duplicate_user_id() + self.validate_for_enabled_user_id() + self.validate_duplicate_user_id() def validate_auto_user_creation(self): if self.create_user_automatically and not ( @@ -296,12 +289,15 @@ class Employee(NestedSet): if not self.relieving_date: throw(_("Please enter relieving date.")) - def validate_for_enabled_user_id(self, enabled): - if enabled is None: + def validate_for_enabled_user_id(self): + if not frappe.db.exists("User", self.user_id): frappe.throw(_("User {0} does not exist").format(self.user_id)) + user = frappe.get_doc("User", self.user_id) + enabled = user.enabled if self.status != "Active" and enabled or self.status == "Active" and enabled == 0: - frappe.db.set_value("User", self.user_id, "enabled", not enabled) + user.enabled = not enabled + user.save(ignore_permissions=True) def validate_duplicate_user_id(self): Employee = frappe.qb.DocType("Employee") From a83002aae60ad9d947a8e6c13a47de921aaf5943 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Thu, 11 Jun 2026 20:58:35 +0530 Subject: [PATCH 2/2] fix: sync employee user status after save --- erpnext/setup/doctype/employee/employee.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/erpnext/setup/doctype/employee/employee.py b/erpnext/setup/doctype/employee/employee.py index 282845bef85..b9def9a7df4 100755 --- a/erpnext/setup/doctype/employee/employee.py +++ b/erpnext/setup/doctype/employee/employee.py @@ -150,6 +150,9 @@ class Employee(NestedSet): ) def validate_user_details(self): + if not self.user_id: + return + self.validate_for_enabled_user_id() self.validate_duplicate_user_id() @@ -172,6 +175,7 @@ class Employee(NestedSet): if self.user_id: self.update_user() self.update_user_permissions() + self.update_user_status() self.reset_employee_emails_cache() def before_insert(self): @@ -293,10 +297,15 @@ class Employee(NestedSet): if not frappe.db.exists("User", self.user_id): frappe.throw(_("User {0} does not exist").format(self.user_id)) + def update_user_status(self): + if not self.user_id: + return + user = frappe.get_doc("User", self.user_id) enabled = user.enabled if self.status != "Active" and enabled or self.status == "Active" and enabled == 0: user.enabled = not enabled + # Keep linked User status in sync from the Employee lifecycle and record the audit log. user.save(ignore_permissions=True) def validate_duplicate_user_id(self):