mirror of
https://github.com/frappe/erpnext.git
synced 2026-04-13 20:05:09 +00:00
feat(employee): Add automatic user creation feature and related validations. Create User on Import.
(cherry picked from commit 57f3048d27)
This commit is contained in:
committed by
Mergify
parent
cd0a25ca17
commit
8f8b48746b
@@ -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",
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user