diff --git a/erpnext/setup/doctype/employee/employee.json b/erpnext/setup/doctype/employee/employee.json index 4069813e318..94dca869eda 100644 --- a/erpnext/setup/doctype/employee/employee.json +++ b/erpnext/setup/doctype/employee/employee.json @@ -29,6 +29,8 @@ "erpnext_user", "user_id", "create_user_permission", + "column_break_xwnm", + "create_user_automatically", "company_details_section", "company", "department", @@ -286,12 +288,20 @@ }, { "default": "1", - "depends_on": "user_id", + "depends_on": "eval:doc.user_id || doc.create_user_automatically", "description": "This will restrict user access to other employee records", "fieldname": "create_user_permission", "fieldtype": "Check", "label": "Create User Permission" }, + { + "default": "0", + "depends_on": "eval:doc.__islocal", + "description": "This will create User for this employee depending on the Company Email.", + "fieldname": "create_user_automatically", + "fieldtype": "Check", + "label": "Create User Automatically" + }, { "allow_in_quick_entry": 1, "collapsible": 1, @@ -447,6 +457,7 @@ "fieldname": "company_email", "fieldtype": "Data", "label": "Company Email", + "mandatory_depends_on": "create_user_automatically", "oldfieldname": "company_email", "oldfieldtype": "Data", "options": "Email" @@ -809,6 +820,10 @@ "fieldtype": "Data", "label": "IBAN", "options": "IBAN" + }, + { + "fieldname": "column_break_xwnm", + "fieldtype": "Column Break" } ], "icon": "fa fa-user", @@ -816,7 +831,7 @@ "image_field": "image", "is_tree": 1, "links": [], - "modified": "2026-02-16 13:06:01.752904", + "modified": "2026-02-19 12:48:22.080419", "modified_by": "Administrator", "module": "Setup", "name": "Employee", diff --git a/erpnext/setup/doctype/employee/employee.py b/erpnext/setup/doctype/employee/employee.py index 48819a70ef4..cb5e2504b3e 100755 --- a/erpnext/setup/doctype/employee/employee.py +++ b/erpnext/setup/doctype/employee/employee.py @@ -49,6 +49,7 @@ class Employee(NestedSet): company: DF.Link company_email: DF.Data | None contract_end_date: DF.Date | None + create_user_automatically: DF.Check create_user_permission: DF.Check ctc: DF.Currency current_accommodation_type: DF.Literal["", "Rented", "Owned"] @@ -125,6 +126,7 @@ class Employee(NestedSet): self.set_employee_name() self.validate_date() self.validate_email() + self.validate_auto_user_creation() self.validate_status() self.validate_reports_to() self.set_preferred_email() @@ -159,6 +161,10 @@ class Employee(NestedSet): self.validate_for_enabled_user_id(data.get("enabled", 0)) self.validate_duplicate_user_id() + def validate_auto_user_creation(self): + if self.create_user_automatically and not self.company_email: + frappe.throw(_("Email is mandatory when Create User Automatically is enabled")) + def update_nsm_model(self): frappe.utils.nestedset.update_nsm(self) @@ -170,6 +176,19 @@ class Employee(NestedSet): self.update_user_permissions() self.reset_employee_emails_cache() + def after_insert(self): + if not self.create_user_automatically: + return + + if self.user_id: + return + + create_user( + employee=self.name, + email=self.company_email, + create_user_permission=self.create_user_permission, + ) + def update_user_permissions(self): if not self.has_value_changed("user_id") and not self.has_value_changed("create_user_permission"): return @@ -406,7 +425,7 @@ def create_user(employee, user=None, email=None, create_user_permission=0): if email: email = cstr(email).strip().lower() else: - email = emp.prefered_email + email = emp.company_email if not email: frappe.throw(_("Email is required to create a user")) @@ -436,7 +455,7 @@ def create_user(employee, user=None, email=None, create_user_permission=0): user = frappe.new_doc("User") user.update( { - "name": emp.employee_name, + "name": email, "email": email, "enabled": 1, "first_name": first_name, @@ -446,7 +465,6 @@ def create_user(employee, user=None, email=None, create_user_permission=0): "birth_date": emp.date_of_birth, "phone": emp.cell_number, "bio": emp.bio, - "send_welcome_email": 1, } ) user.append_roles("Employee")