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",
"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",

View File

@@ -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")