Merge pull request #7279 from KanchanChauhan/automate-user-creation

Create User button in Employee if no User ID selected
diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js
index fe83f40..c24a6bc 100755
--- a/erpnext/hr/doctype/employee/employee.js
+++ b/erpnext/hr/doctype/employee/employee.js
@@ -48,8 +48,8 @@
 
 });
 frappe.ui.form.on('Employee',{
-	prefered_contact_email:function(frm){
-		frm.events.update_contact(frm)
+	prefered_contact_email:function(frm){		
+		frm.events.update_contact(frm)		
 	},
 	personal_email:function(frm){
 		frm.events.update_contact(frm)
@@ -74,5 +74,19 @@
 			}
 		});
 	},
+	create_user: function(frm) {
+		if (!frm.doc.prefered_email)
+		{
+			frappe.throw(__("Please enter Preferred Contact Email"))
+		}
+		frappe.call({
+			method: "erpnext.hr.doctype.employee.employee.create_user",
+			args: { employee: cur_frm.doc.name },
+			callback: function(r)
+			{
+				frm.set_value("user_id", r.message)
+			}
+		});
+	}
 });
 cur_frm.cscript = new erpnext.hr.EmployeeController({frm: cur_frm});
diff --git a/erpnext/hr/doctype/employee/employee.json b/erpnext/hr/doctype/employee/employee.json
index 5ded5a0..62ca61c 100644
--- a/erpnext/hr/doctype/employee/employee.json
+++ b/erpnext/hr/doctype/employee/employee.json
@@ -217,6 +217,35 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "depends_on": "eval:(!doc.user_id)", 
+   "fieldname": "create_user", 
+   "fieldtype": "Button", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Create User", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "image", 
    "fieldtype": "Attach Image", 
    "hidden": 1, 
@@ -2244,7 +2273,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-11-07 05:15:16.925799", 
+ "modified": "2016-12-19 17:24:22.941738", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Employee", 
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 58d1262..881853d 100755
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -6,7 +6,7 @@
 
 from frappe.utils import getdate, validate_email_add, today, add_years
 from frappe.model.naming import make_autoname
-from frappe import throw, _
+from frappe import throw, _, scrub
 import frappe.permissions
 from frappe.model.document import Document
 from erpnext.utilities.transaction_base import delete_events
@@ -39,6 +39,7 @@
 		self.validate_status()
 		self.validate_employee_leave_approver()
 		self.validate_reports_to()
+		self.validate_prefered_email()
 
 		if self.user_id:
 			self.validate_for_enabled_user_id()
@@ -153,6 +154,11 @@
 	def on_trash(self):
 		delete_events(self.doctype, self.name)
 
+	def validate_prefered_email(self):
+		if not self.get(scrub(self.prefered_contact_email)):
+			frappe.msgprint(_("Please enter " + self.prefered_contact_email))
+
+
 def get_timeline_data(doctype, name):
 	'''Return timeline for attendance'''
 	return dict(frappe.db.sql('''select unix_timestamp(att_date), count(*)
@@ -250,3 +256,34 @@
 		sales_person = frappe.db.get_value("Sales Person", {"Employee": employee})
 		if sales_person:
 			frappe.db.set_value("Sales Person", sales_person, "enabled", 0)
+
+@frappe.whitelist()
+def create_user(employee, user = None):
+	emp = frappe.get_doc("Employee", employee)
+
+	employee_name = emp.employee_name.split(" ")
+	middle_name = last_name = ""
+
+	if len(employee_name) >= 3:
+		last_name = " ".join(employee_name[2:])
+		middle_name = employee_name[1]
+	elif len(employee_name) == 2:
+		last_name = employee_name[1]
+
+	first_name = employee_name[0]
+	
+	user = frappe.new_doc("User")
+	user.update({
+		"name": emp.employee_name,
+		"email": emp.prefered_email,
+		"enabled": 1,
+		"first_name": first_name,
+		"middle_name": middle_name,
+		"last_name": last_name,
+		"gender": emp.gender,
+		"birth_date": emp.date_of_birth,
+		"phone": emp.cell_number,
+		"bio": emp.bio
+	})
+	user.insert()
+	return user.name
\ No newline at end of file