Skip to content

Commit 8f8b487

Browse files
krishna-254mergify[bot]
authored andcommitted
feat(employee): Add automatic user creation feature and related validations. Create User on Import.
(cherry picked from commit 57f3048)
1 parent cd0a25c commit 8f8b487

2 files changed

Lines changed: 38 additions & 5 deletions

File tree

erpnext/setup/doctype/employee/employee.json

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
"erpnext_user",
3030
"user_id",
3131
"create_user_permission",
32+
"column_break_xwnm",
33+
"create_user_automatically",
3234
"company_details_section",
3335
"company",
3436
"department",
@@ -286,12 +288,20 @@
286288
},
287289
{
288290
"default": "1",
289-
"depends_on": "user_id",
291+
"depends_on": "eval:doc.user_id || doc.create_user_automatically",
290292
"description": "This will restrict user access to other employee records",
291293
"fieldname": "create_user_permission",
292294
"fieldtype": "Check",
293295
"label": "Create User Permission"
294296
},
297+
{
298+
"default": "0",
299+
"depends_on": "eval:doc.__islocal",
300+
"description": "This will create User for this employee depending on the Company Email.",
301+
"fieldname": "create_user_automatically",
302+
"fieldtype": "Check",
303+
"label": "Create User Automatically"
304+
},
295305
{
296306
"allow_in_quick_entry": 1,
297307
"collapsible": 1,
@@ -447,6 +457,7 @@
447457
"fieldname": "company_email",
448458
"fieldtype": "Data",
449459
"label": "Company Email",
460+
"mandatory_depends_on": "create_user_automatically",
450461
"oldfieldname": "company_email",
451462
"oldfieldtype": "Data",
452463
"options": "Email"
@@ -809,14 +820,18 @@
809820
"fieldtype": "Data",
810821
"label": "IBAN",
811822
"options": "IBAN"
823+
},
824+
{
825+
"fieldname": "column_break_xwnm",
826+
"fieldtype": "Column Break"
812827
}
813828
],
814829
"icon": "fa fa-user",
815830
"idx": 24,
816831
"image_field": "image",
817832
"is_tree": 1,
818833
"links": [],
819-
"modified": "2026-02-16 13:06:01.752904",
834+
"modified": "2026-02-19 12:48:22.080419",
820835
"modified_by": "Administrator",
821836
"module": "Setup",
822837
"name": "Employee",

erpnext/setup/doctype/employee/employee.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class Employee(NestedSet):
4949
company: DF.Link
5050
company_email: DF.Data | None
5151
contract_end_date: DF.Date | None
52+
create_user_automatically: DF.Check
5253
create_user_permission: DF.Check
5354
ctc: DF.Currency
5455
current_accommodation_type: DF.Literal["", "Rented", "Owned"]
@@ -125,6 +126,7 @@ def validate(self):
125126
self.set_employee_name()
126127
self.validate_date()
127128
self.validate_email()
129+
self.validate_auto_user_creation()
128130
self.validate_status()
129131
self.validate_reports_to()
130132
self.set_preferred_email()
@@ -159,6 +161,10 @@ def validate_user_details(self):
159161
self.validate_for_enabled_user_id(data.get("enabled", 0))
160162
self.validate_duplicate_user_id()
161163

164+
def validate_auto_user_creation(self):
165+
if self.create_user_automatically and not self.company_email:
166+
frappe.throw(_("Email is mandatory when Create User Automatically is enabled"))
167+
162168
def update_nsm_model(self):
163169
frappe.utils.nestedset.update_nsm(self)
164170

@@ -170,6 +176,19 @@ def on_update(self):
170176
self.update_user_permissions()
171177
self.reset_employee_emails_cache()
172178

179+
def after_insert(self):
180+
if not self.create_user_automatically:
181+
return
182+
183+
if self.user_id:
184+
return
185+
186+
create_user(
187+
employee=self.name,
188+
email=self.company_email,
189+
create_user_permission=self.create_user_permission,
190+
)
191+
173192
def update_user_permissions(self):
174193
if not self.has_value_changed("user_id") and not self.has_value_changed("create_user_permission"):
175194
return
@@ -406,7 +425,7 @@ def create_user(employee, user=None, email=None, create_user_permission=0):
406425
if email:
407426
email = cstr(email).strip().lower()
408427
else:
409-
email = emp.prefered_email
428+
email = emp.company_email
410429

411430
if not email:
412431
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):
436455
user = frappe.new_doc("User")
437456
user.update(
438457
{
439-
"name": emp.employee_name,
458+
"name": email,
440459
"email": email,
441460
"enabled": 1,
442461
"first_name": first_name,
@@ -446,7 +465,6 @@ def create_user(employee, user=None, email=None, create_user_permission=0):
446465
"birth_date": emp.date_of_birth,
447466
"phone": emp.cell_number,
448467
"bio": emp.bio,
449-
"send_welcome_email": 1,
450468
}
451469
)
452470
user.append_roles("Employee")

0 commit comments

Comments
 (0)