feat(employee): Add automatic user creation feature and related validations. Create User on Import.

(cherry picked from commit 57f3048d27)
This commit is contained in:
Krishna Shirsath
2026-02-19 15:51:53 +05:30
committed by Mergify
parent cd0a25ca17
commit 8f8b48746b
2 changed files with 38 additions and 5 deletions

View File

@@ -29,6 +29,8 @@
"erpnext_user", "erpnext_user",
"user_id", "user_id",
"create_user_permission", "create_user_permission",
"column_break_xwnm",
"create_user_automatically",
"company_details_section", "company_details_section",
"company", "company",
"department", "department",
@@ -286,12 +288,20 @@
}, },
{ {
"default": "1", "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", "description": "This will restrict user access to other employee records",
"fieldname": "create_user_permission", "fieldname": "create_user_permission",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Create User Permission" "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, "allow_in_quick_entry": 1,
"collapsible": 1, "collapsible": 1,
@@ -447,6 +457,7 @@
"fieldname": "company_email", "fieldname": "company_email",
"fieldtype": "Data", "fieldtype": "Data",
"label": "Company Email", "label": "Company Email",
"mandatory_depends_on": "create_user_automatically",
"oldfieldname": "company_email", "oldfieldname": "company_email",
"oldfieldtype": "Data", "oldfieldtype": "Data",
"options": "Email" "options": "Email"
@@ -809,6 +820,10 @@
"fieldtype": "Data", "fieldtype": "Data",
"label": "IBAN", "label": "IBAN",
"options": "IBAN" "options": "IBAN"
},
{
"fieldname": "column_break_xwnm",
"fieldtype": "Column Break"
} }
], ],
"icon": "fa fa-user", "icon": "fa fa-user",
@@ -816,7 +831,7 @@
"image_field": "image", "image_field": "image",
"is_tree": 1, "is_tree": 1,
"links": [], "links": [],
"modified": "2026-02-16 13:06:01.752904", "modified": "2026-02-19 12:48:22.080419",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Setup", "module": "Setup",
"name": "Employee", "name": "Employee",

View File

@@ -49,6 +49,7 @@ class Employee(NestedSet):
company: DF.Link company: DF.Link
company_email: DF.Data | None company_email: DF.Data | None
contract_end_date: DF.Date | None contract_end_date: DF.Date | None
create_user_automatically: DF.Check
create_user_permission: DF.Check create_user_permission: DF.Check
ctc: DF.Currency ctc: DF.Currency
current_accommodation_type: DF.Literal["", "Rented", "Owned"] current_accommodation_type: DF.Literal["", "Rented", "Owned"]
@@ -125,6 +126,7 @@ class Employee(NestedSet):
self.set_employee_name() self.set_employee_name()
self.validate_date() self.validate_date()
self.validate_email() self.validate_email()
self.validate_auto_user_creation()
self.validate_status() self.validate_status()
self.validate_reports_to() self.validate_reports_to()
self.set_preferred_email() self.set_preferred_email()
@@ -159,6 +161,10 @@ class Employee(NestedSet):
self.validate_for_enabled_user_id(data.get("enabled", 0)) self.validate_for_enabled_user_id(data.get("enabled", 0))
self.validate_duplicate_user_id() 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): def update_nsm_model(self):
frappe.utils.nestedset.update_nsm(self) frappe.utils.nestedset.update_nsm(self)
@@ -170,6 +176,19 @@ class Employee(NestedSet):
self.update_user_permissions() self.update_user_permissions()
self.reset_employee_emails_cache() 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): def update_user_permissions(self):
if not self.has_value_changed("user_id") and not self.has_value_changed("create_user_permission"): if not self.has_value_changed("user_id") and not self.has_value_changed("create_user_permission"):
return return
@@ -406,7 +425,7 @@ def create_user(employee, user=None, email=None, create_user_permission=0):
if email: if email:
email = cstr(email).strip().lower() email = cstr(email).strip().lower()
else: else:
email = emp.prefered_email email = emp.company_email
if not email: if not email:
frappe.throw(_("Email is required to create a user")) 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 = frappe.new_doc("User")
user.update( user.update(
{ {
"name": emp.employee_name, "name": email,
"email": email, "email": email,
"enabled": 1, "enabled": 1,
"first_name": first_name, "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, "birth_date": emp.date_of_birth,
"phone": emp.cell_number, "phone": emp.cell_number,
"bio": emp.bio, "bio": emp.bio,
"send_welcome_email": 1,
} }
) )
user.append_roles("Employee") user.append_roles("Employee")