Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index b0e5a9d..e763440 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -25,7 +25,6 @@
 wn.require('app/selling/doctype/sales_common/sales_common.js');
 wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/setup/doctype/notification_control/notification_control.js');
 
 // On Load
 // -------
@@ -498,11 +497,9 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Sales Invoice',
-		doctype: 'Sales Invoice'
+	if(cint(wn.boot.notification_settings.sales_invoice)) {
+		cur_frm.email_doc(wn.boot.notification_settings.sales_invoice);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
 
 cur_frm.cscript.convert_into_recurring_invoice = function(doc, dt, dn) {
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index c1e8f28..5f3089f 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -125,7 +125,6 @@
 	def on_update_after_submit(self):
 		self.convert_into_recurring()
 
-
 	def set_pos_fields(self):
 		"""Set retail related fields from pos settings"""
 		pos = webnotes.conn.sql("select * from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1)
diff --git a/buying/doctype/purchase_order/purchase_order.js b/buying/doctype/purchase_order/purchase_order.js
index 584648d..e31cfd7 100644
--- a/buying/doctype/purchase_order/purchase_order.js
+++ b/buying/doctype/purchase_order/purchase_order.js
@@ -21,7 +21,6 @@
 wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
 wn.require('app/buying/doctype/purchase_common/purchase_common.js');
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/setup/doctype/notification_control/notification_control.js');
 
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
 	// set missing values in parent doc
@@ -220,9 +219,7 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Purchase Order',
-		doctype: 'Purchase Order'
+	if(cint(wn.boot.notification_settings.purchase_order)) {
+		cur_frm.email_doc(wn.boot.notification_settings.purchase_order);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
diff --git a/buying/doctype/supplier/supplier.js b/buying/doctype/supplier/supplier.js
index 4fd94f5..1b7f369 100644
--- a/buying/doctype/supplier/supplier.js
+++ b/buying/doctype/supplier/supplier.js
@@ -15,7 +15,6 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 wn.require('app/setup/doctype/contact_control/contact_control.js');
-wn.require('app/support/doctype/communication/communication.js');
 
 cur_frm.cscript.onload = function(doc,dt,dn){
 
@@ -29,7 +28,6 @@
 	// make contact, history list body
 	//cur_frm.cscript.make_cl_body();
 	cur_frm.cscript.make_hl_body();
-	cur_frm.cscript.make_communication_body();
 }
 
 cur_frm.cscript.refresh = function(doc,dt,dn) {
@@ -46,8 +44,13 @@
 		// make lists
 		cur_frm.cscript.make_address(doc,dt,dn);
 		cur_frm.cscript.make_contact(doc,dt,dn);
-		cur_frm.cscript.render_communication_list(doc, cdt, cdn);
 		cur_frm.cscript.make_history(doc,dt,dn);
+		
+		cur_frm.communication_view = new wn.views.CommunicationList({
+			list: wn.model.get("Communication", {"supplier": doc.name}),
+			parent: cur_frm.fields_dict.communication_html.wrapper,
+			doc: doc
+		})		
   }
 }
 
diff --git a/buying/doctype/supplier/supplier.py b/buying/doctype/supplier/supplier.py
index d7f69d6..fec18af 100644
--- a/buying/doctype/supplier/supplier.py
+++ b/buying/doctype/supplier/supplier.py
@@ -18,26 +18,23 @@
 from __future__ import unicode_literals
 import webnotes
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
-from webnotes.model import db_exists
-from webnotes.model.doc import Document, addchild, getchildren, make_autoname
-from webnotes.model.wrapper import getlist, copy_doclist
-from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
-from webnotes import session, form, msgprint, errprint
+from webnotes.utils import cint, cstr, get_defaults
+from webnotes.model.code import get_obj
+from webnotes import form, msgprint
 
-set = webnotes.conn.set
 sql = webnotes.conn.sql
-get_value = webnotes.conn.get_value
-in_transaction = webnotes.conn.in_transaction
 convert_to_lists = webnotes.conn.convert_to_lists
 
-# -----------------------------------------------------------------------------------------
+from utilities.transaction_base import TransactionBase
 
-class DocType:
+class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
 
+	def onload(self):
+		self.add_communication_list()
+
 	def autoname(self):
 		#get default naming conventional from control panel
 		supp_master_name = get_defaults()['supp_master_name']
@@ -59,22 +56,17 @@
 		else:
 			self.doc.name = make_autoname(self.doc.naming_series+'.#####')
 
-	# ----------------------------------------
-	# update credit days and limit in account
-	# ----------------------------------------
 	def update_credit_days_limit(self):
 		sql("update tabAccount set credit_days = '%s' where name = '%s'" % (self.doc.credit_days, self.doc.name + " - " + self.get_company_abbr()))
 
-
 	def on_update(self):
 		if not self.doc.naming_series:
 			self.doc.naming_series = ''
 
-	
 		# create address
 		addr_flds = [self.doc.address_line1, self.doc.address_line2, self.doc.city, self.doc.state, self.doc.country, self.doc.pincode]
 		address_line = "\n".join(filter(lambda x : (x!='' and x!=None),addr_flds))
-		set(self.doc,'address', address_line)
+		webnotes.conn.set(self.doc,'address', address_line)
 
 		# create account head
 		self.create_account_head()
@@ -82,12 +74,9 @@
 		# update credit days and limit in account
 		self.update_credit_days_limit()
 
-
 	def check_state(self):
 		return "\n" + "\n".join([i[0] for i in sql("select state_name from `tabState` where `tabState`.country='%s' " % self.doc.country)])
 	
-	# ACCOUNTS
-	# -------------------------------------------
 	def get_payables_group(self):
 		g = sql("select payables_group from tabCompany where name=%s", self.doc.company)
 		g = g and g[0][0] or ''
@@ -116,7 +105,6 @@
 		
 		return self.doc.supplier_type + " - " + abbr
 
-
 	def validate(self):
 		#validation for Naming Series mandatory field...
 		if get_defaults()['supp_master_name'] == 'Naming Series':
@@ -124,9 +112,6 @@
 				msgprint("Series is Mandatory.")
 				raise Exception
 	
-	
-	# create accont head - in tree under zone + territory
-	# -------------------------------------------------------
 	def create_account_head(self):
 		if self.doc.company :
 			abbr = self.get_company_abbr() 
@@ -142,7 +127,6 @@
 		else : 
 			msgprint("Please select Company under which you want to create account head")
 			
-			
 	def get_contacts(self,nm):
 		if nm:
 			contact_details =convert_to_lists(sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = '%s'"%nm))
@@ -172,16 +156,12 @@
 			from webnotes.model import delete_doc
 			delete_doc('Account', acc[0][0])
 			
-			
 	def on_trash(self):
 		self.delete_supplier_address()
 		self.delete_supplier_contact()
 		self.delete_supplier_communication()
 		self.delete_supplier_account()
 		
-		
-	# on rename
-	# ---------
 	def on_rename(self,newdn,olddn):
 		#update supplier_name if not naming series
 		if get_defaults().get('supp_master_name') == 'Supplier Name':
diff --git a/buying/doctype/supplier/supplier.txt b/buying/doctype/supplier/supplier.txt
index 833c127..a46927b 100644
--- a/buying/doctype/supplier/supplier.txt
+++ b/buying/doctype/supplier/supplier.txt
@@ -2,11 +2,12 @@
  {
   "owner": "Administrator", 
   "docstatus": 0, 
-  "creation": "2012-07-18 20:34:42", 
+  "creation": "2012-11-02 17:17:04", 
   "modified_by": "Administrator", 
-  "modified": "2012-07-18 17:41:49"
+  "modified": "2012-11-30 10:53:32"
  }, 
  {
+  "autoname": "naming_series:", 
   "name": "__common__", 
   "search_fields": "supplier_name,supplier_type", 
   "module": "Buying", 
@@ -33,6 +34,16 @@
   "doctype": "DocType"
  }, 
  {
+  "description": "Note: You Can Manage Multiple Address or Contacts via Addresses & Contacts", 
+  "oldfieldtype": "Section Break", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Basic Info", 
+  "fieldname": "basic_info", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
   "no_copy": 1, 
   "oldfieldtype": "Data", 
   "doctype": "DocField", 
@@ -124,7 +135,6 @@
  }, 
  {
   "doctype": "DocField", 
-  "label": "Communication History", 
   "fieldname": "communication_history", 
   "fieldtype": "Section Break", 
   "permlevel": 0
@@ -246,8 +256,7 @@
   "write": 1, 
   "role": "Purchase Master Manager", 
   "cancel": 1, 
-  "permlevel": 0, 
-  "match": ""
+  "permlevel": 0
  }, 
  {
   "amend": 0, 
diff --git a/home/page/latest_updates/latest_updates.js b/home/page/latest_updates/latest_updates.js
index aef944e..24cab01 100644
--- a/home/page/latest_updates/latest_updates.js
+++ b/home/page/latest_updates/latest_updates.js
@@ -1,4 +1,9 @@
 erpnext.updates = [
+	["30th November 2012", [
+		"Auto Notifications: System will prompt user with pre-set message for auto-notification.",
+		"Employee: Users with role Employee will only be able to see their Employee Records.",
+		"Leave Application: Users with role Employee can now apply for leaves. HR User will be able to set Approval or Rejection.",
+	]],
 	["29th November 2012", [
 		"EMail: Form Emails are now via Communication (with Rich Text Etc.).",
 	]],
diff --git a/hr/doctype/employee/employee.py b/hr/doctype/employee/employee.py
index 0be6830..e65258f 100644
--- a/hr/doctype/employee/employee.py
+++ b/hr/doctype/employee/employee.py
@@ -37,6 +37,8 @@
 				self.doc.name = make_autoname(self.doc.naming_series + '.####')
 			elif ret[0][0]=='Employee Number':
 				self.doc.name = make_autoname(self.doc.employee_number)
+
+		self.doc.employee = self.doc.name
 				
 	def get_retirement_date(self):		
 		import datetime
@@ -51,6 +53,7 @@
 		return ret_sal_struct and ret_sal_struct[0][0] or ''
 
 	def validate(self):
+		self.doc.employee = self.doc.name
 		self.validate_date()
 		self.validate_email()
 		self.validate_name()
diff --git a/hr/doctype/employee/employee.txt b/hr/doctype/employee/employee.txt
index f780836..826df84 100644
--- a/hr/doctype/employee/employee.txt
+++ b/hr/doctype/employee/employee.txt
@@ -1,1069 +1,879 @@
-# DocType, Employee
 [
-
-	# These values are common in all dictionaries
-	{
-		u'creation': '2012-07-03 13:30:40',
-		u'docstatus': 0,
-		u'modified': '2012-11-14 16:54:18',
-		u'modified_by': u'Administrator',
-		u'owner': u'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'_last_update': u'1308918132',
-		'allow_attach': 1,
-		'allow_trash': 1,
-		'colour': u'White:FFF',
-		u'doctype': u'DocType',
-		'document_type': u'Master',
-		'module': u'HR',
-		u'name': u'__common__',
-		'search_fields': u'employee_name',
-		'section_style': u'Tabbed',
-		'server_code_error': u' ',
-		'show_in_menu': 0,
-		'subject': u'%(employee_name)s',
-		'tag_fields': u'status',
-		'version': 1
-	},
-
-	# These values are common for all DocField
-	{
-		u'doctype': u'DocField',
-		u'name': u'__common__',
-		'parent': u'Employee',
-		'parentfield': u'fields',
-		'parenttype': u'DocType'
-	},
-
-	# These values are common for all DocPerm
-	{
-		u'doctype': u'DocPerm',
-		u'name': u'__common__',
-		'parent': u'Employee',
-		'parentfield': u'permissions',
-		'parenttype': u'DocType',
-		'read': 1
-	},
-
-	# DocType, Employee
-	{
-		u'doctype': u'DocType',
-		u'name': u'Employee'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'basic_information',
-		'fieldtype': u'Section Break',
-		'label': u'Basic Information',
-		'oldfieldtype': u'Section Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break0',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'<span class="sys_manager">To setup, please go to Setup > Naming Series</span>',
-		u'doctype': u'DocField',
-		'fieldname': u'naming_series',
-		'fieldtype': u'Select',
-		'label': u'Naming Series',
-		'no_copy': 1,
-		'oldfieldname': u'naming_series',
-		'oldfieldtype': u'Select',
-		'options': u'EMP/',
-		'permlevel': 0,
-		'reqd': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'salutation',
-		'fieldtype': u'Select',
-		'label': u'Salutation',
-		'oldfieldname': u'salutation',
-		'oldfieldtype': u'Select',
-		'options': u'\nMr\nMs',
-		'permlevel': 0,
-		'search_index': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'employee_name',
-		'fieldtype': u'Data',
-		'label': u'Full Name',
-		'oldfieldname': u'employee_name',
-		'oldfieldtype': u'Data',
-		'permlevel': 0,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'employee_number',
-		'fieldtype': u'Data',
-		'in_filter': 1,
-		'label': u'Employee Number',
-		'oldfieldname': u'employee_number',
-		'oldfieldtype': u'Data',
-		'permlevel': 0,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'System User (login) ID. If set, it will become default for all HR forms.',
-		u'doctype': u'DocField',
-		'fieldname': u'user_id',
-		'fieldtype': u'Link',
-		'label': u'User ID',
-		'options': u'Profile',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break1',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'date_of_joining',
-		'fieldtype': u'Date',
-		'label': u'Date of Joining',
-		'oldfieldname': u'date_of_joining',
-		'oldfieldtype': u'Date',
-		'permlevel': 0,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'date_of_birth',
-		'fieldtype': u'Date',
-		'in_filter': 1,
-		'label': u'Date of Birth',
-		'oldfieldname': u'date_of_birth',
-		'oldfieldtype': u'Date',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'gender',
-		'fieldtype': u'Select',
-		'in_filter': 1,
-		'label': u'Gender',
-		'oldfieldname': u'gender',
-		'oldfieldtype': u'Select',
-		'options': u'\nMale\nFemale',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'company',
-		'fieldtype': u'Select',
-		'in_filter': 1,
-		'label': u'Company',
-		'options': u'link:Company',
-		'permlevel': 0,
-		'print_hide': 1,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'employment_details',
-		'fieldtype': u'Section Break',
-		'label': u'Employment Details',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'col_break_21',
-		'fieldtype': u'Column Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'default': u'Active',
-		u'doctype': u'DocField',
-		'fieldname': u'status',
-		'fieldtype': u'Select',
-		'in_filter': 1,
-		'label': u'Status',
-		'oldfieldname': u'status',
-		'oldfieldtype': u'Select',
-		'options': u'\nActive\nLeft',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'employment_type',
-		'fieldtype': u'Link',
-		'in_filter': 1,
-		'label': u'Employment Type',
-		'oldfieldname': u'employment_type',
-		'oldfieldtype': u'Link',
-		'options': u'Employment Type',
-		'permlevel': 0,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Applicable Holiday List',
-		u'doctype': u'DocField',
-		'fieldname': u'holiday_list',
-		'fieldtype': u'Link',
-		'label': u'Holiday List',
-		'oldfieldname': u'holiday_list',
-		'oldfieldtype': u'Link',
-		'options': u'Holiday List',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'col_break_22',
-		'fieldtype': u'Column Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'scheduled_confirmation_date',
-		'fieldtype': u'Date',
-		'in_filter': 1,
-		'label': u'Scheduled Confirmation Date',
-		'oldfieldname': u'scheduled_confirmation_date',
-		'oldfieldtype': u'Date',
-		'permlevel': 0,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'final_confirmation_date',
-		'fieldtype': u'Date',
-		'label': u'Final Confirmation Date',
-		'oldfieldname': u'final_confirmation_date',
-		'oldfieldtype': u'Date',
-		'permlevel': 0,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'contract_end_date',
-		'fieldtype': u'Date',
-		'in_filter': 1,
-		'label': u'Contract End Date',
-		'oldfieldname': u'contract_end_date',
-		'oldfieldtype': u'Date',
-		'permlevel': 0,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'date_of_retirement',
-		'fieldtype': u'Date',
-		'label': u'Date Of Retirement',
-		'oldfieldname': u'date_of_retirement',
-		'oldfieldtype': u'Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'job_profile',
-		'fieldtype': u'Section Break',
-		'label': u'Job Profile',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break2',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'branch',
-		'fieldtype': u'Link',
-		'in_filter': 1,
-		'label': u'Branch',
-		'oldfieldname': u'branch',
-		'oldfieldtype': u'Link',
-		'options': u'Branch',
-		'permlevel': 0,
-		'reqd': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'department',
-		'fieldtype': u'Link',
-		'in_filter': 1,
-		'label': u'Department',
-		'oldfieldname': u'department',
-		'oldfieldtype': u'Link',
-		'options': u'Department',
-		'permlevel': 0,
-		'reqd': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'designation',
-		'fieldtype': u'Link',
-		'in_filter': 1,
-		'label': u'Designation',
-		'oldfieldname': u'designation',
-		'oldfieldtype': u'Link',
-		'options': u'Designation',
-		'permlevel': 0,
-		'reqd': 0,
-		'search_index': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'grade',
-		'fieldtype': u'Link',
-		'in_filter': 1,
-		'label': u'Grade',
-		'oldfieldname': u'grade',
-		'oldfieldtype': u'Link',
-		'options': u'Grade',
-		'permlevel': 0,
-		'reqd': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'reports_to',
-		'fieldtype': u'Link',
-		'label': u'Reports to',
-		'oldfieldname': u'reports_to',
-		'oldfieldtype': u'Link',
-		'options': u'Employee',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'description': u'Provide email id registered in company',
-		u'doctype': u'DocField',
-		'fieldname': u'company_email',
-		'fieldtype': u'Data',
-		'in_filter': 1,
-		'label': u'Email (By company)',
-		'oldfieldname': u'company_email',
-		'oldfieldtype': u'Data',
-		'permlevel': 0,
-		'reqd': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'salary_information',
-		'fieldtype': u'Column Break',
-		'label': u'Salary Information',
-		'oldfieldtype': u'Section Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'salary_mode',
-		'fieldtype': u'Select',
-		'label': u'Salary Mode',
-		'oldfieldname': u'salary_mode',
-		'oldfieldtype': u'Select',
-		'options': u'\nBank\nCash\nCheque',
-		'permlevel': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u"eval:doc.salary_mode == 'Bank'",
-		u'doctype': u'DocField',
-		'fieldname': u'bank_name',
-		'fieldtype': u'Data',
-		'hidden': 0,
-		'in_filter': 1,
-		'label': u'Bank Name',
-		'oldfieldname': u'bank_name',
-		'oldfieldtype': u'Link',
-		'options': u'Suggest',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u"eval:doc.salary_mode == 'Bank'",
-		u'doctype': u'DocField',
-		'fieldname': u'bank_ac_no',
-		'fieldtype': u'Data',
-		'hidden': 0,
-		'label': u'Bank A/C No.',
-		'oldfieldname': u'bank_ac_no',
-		'oldfieldtype': u'Data',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'esic_card_no',
-		'fieldtype': u'Data',
-		'label': u'ESIC CARD No',
-		'oldfieldname': u'esic_card_no',
-		'oldfieldtype': u'Data',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'pf_number',
-		'fieldtype': u'Data',
-		'label': u'PF Number',
-		'oldfieldname': u'pf_number',
-		'oldfieldtype': u'Data',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'gratuity_lic_id',
-		'fieldtype': u'Data',
-		'label': u'Gratuity LIC ID',
-		'oldfieldname': u'gratuity_lic_id',
-		'oldfieldtype': u'Data',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'contact_details',
-		'fieldtype': u'Section Break',
-		'label': u'Contact Details',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break3',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'cell_number',
-		'fieldtype': u'Data',
-		'label': u'Cell Number',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'personal_email',
-		'fieldtype': u'Data',
-		'label': u'Personal Email',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'notice_number_of_days',
-		'fieldtype': u'Int',
-		'label': u'Notice - Number of Days',
-		'oldfieldname': u'notice_number_of_days',
-		'oldfieldtype': u'Int',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'emergency_contact_details',
-		'fieldtype': u'HTML',
-		'label': u'Emergency Contact Details',
-		'options': u'<b>Emergency Contact Details</b>',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'person_to_be_contacted',
-		'fieldtype': u'Data',
-		'label': u'Person To Be Contacted',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'relation',
-		'fieldtype': u'Data',
-		'label': u'Relation',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'emergency_phone_number',
-		'fieldtype': u'Data',
-		'label': u'Emergency Phone Number',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break4',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'permanent_accommodation_type',
-		'fieldtype': u'Select',
-		'label': u'Permanent Accommodation Type',
-		'options': u'\nRented\nOwned',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'permanent_address',
-		'fieldtype': u'Small Text',
-		'label': u'Permanent Address',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'current_accommodation_type',
-		'fieldtype': u'Select',
-		'label': u'Current Accommodation Type',
-		'options': u'\nRented\nOwned',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'current_address',
-		'fieldtype': u'Small Text',
-		'label': u'Current Address',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'personal_details',
-		'fieldtype': u'Section Break',
-		'label': u'Personal Details',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break5',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'pan_number',
-		'fieldtype': u'Data',
-		'label': u'PAN Number',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'passport_number',
-		'fieldtype': u'Data',
-		'label': u'Passport Number',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'date_of_issue',
-		'fieldtype': u'Date',
-		'label': u'Date of Issue',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'valid_upto',
-		'fieldtype': u'Date',
-		'label': u'Valid Upto',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'salary_structure',
-		'fieldtype': u'Button',
-		'hidden': 1,
-		'label': u'Salary Structure',
-		'oldfieldtype': u'Button',
-		'permlevel': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'place_of_issue',
-		'fieldtype': u'Data',
-		'label': u'Place of Issue',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'marital_status',
-		'fieldtype': u'Select',
-		'label': u'Marital Status',
-		'options': u'\nSingle\nMarried\nDivorced\nWidowed',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'blood_group',
-		'fieldtype': u'Select',
-		'label': u'Blood Group',
-		'options': u'\nA+\nA-\nB+\nB-\nAB+\nAB-\nO+\nO-',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break6',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Here you can maintain family details like name and occupation of parent, spouse and children',
-		u'doctype': u'DocField',
-		'fieldname': u'family_background',
-		'fieldtype': u'Small Text',
-		'label': u'Family Background',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Here you can maintain height, weight, allergies, medical concerns etc',
-		u'doctype': u'DocField',
-		'fieldname': u'health_details',
-		'fieldtype': u'Small Text',
-		'label': u'Health Details',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'educational_qualification',
-		'fieldtype': u'Section Break',
-		'label': u'Educational Qualification',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'educational_qualification_details',
-		'fieldtype': u'Table',
-		'label': u'Educational Qualification Details',
-		'options': u'Employee Education',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'career_history',
-		'fieldtype': u'Section Break',
-		'label': u'Career History',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'previous_work_experience',
-		'fieldtype': u'Section Break',
-		'label': u'Previous Work Experience',
-		'options': u'Simple',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'previous_experience_details',
-		'fieldtype': u'Table',
-		'label': u'Employee External Work History',
-		'options': u'Employee External Work History',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'history_in_company',
-		'fieldtype': u'Section Break',
-		'label': u'History In Company',
-		'options': u'Simple',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'experience_in_company_details',
-		'fieldtype': u'Table',
-		'label': u'Employee Internal Work Historys',
-		'options': u'Employee Internal Work History',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'exit',
-		'fieldtype': u'Section Break',
-		'label': u'Exit',
-		'oldfieldtype': u'Section Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break7',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'resignation_letter_date',
-		'fieldtype': u'Date',
-		'label': u'Resignation Letter Date',
-		'oldfieldname': u'resignation_letter_date',
-		'oldfieldtype': u'Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'relieving_date',
-		'fieldtype': u'Date',
-		'in_filter': 1,
-		'label': u'Relieving Date',
-		'oldfieldname': u'relieving_date',
-		'oldfieldtype': u'Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'reason_for_leaving',
-		'fieldtype': u'Data',
-		'label': u'Reason for Leaving',
-		'oldfieldname': u'reason_for_leaving',
-		'oldfieldtype': u'Data',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'leave_encashed',
-		'fieldtype': u'Select',
-		'label': u'Leave Encashed?',
-		'oldfieldname': u'leave_encashed',
-		'oldfieldtype': u'Select',
-		'options': u'\nYes\nNo',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'encashment_date',
-		'fieldtype': u'Date',
-		'label': u'Encashment Date',
-		'oldfieldname': u'encashment_date',
-		'oldfieldtype': u'Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'exit_interview_details',
-		'fieldtype': u'Column Break',
-		'label': u'Exit Interview Details',
-		'oldfieldname': u'col_brk6',
-		'oldfieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'held_on',
-		'fieldtype': u'Date',
-		'label': u'Held On',
-		'oldfieldname': u'held_on',
-		'oldfieldtype': u'Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'reason_for_resignation',
-		'fieldtype': u'Select',
-		'label': u'Reason for Resignation',
-		'oldfieldname': u'reason_for_resignation',
-		'oldfieldtype': u'Select',
-		'options': u'\nBetter Prospects\nHealth Concerns',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'new_workplace',
-		'fieldtype': u'Data',
-		'label': u'New Workplace',
-		'oldfieldname': u'new_workplace',
-		'oldfieldtype': u'Data',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'feedback',
-		'fieldtype': u'Small Text',
-		'label': u'Feedback',
-		'oldfieldname': u'feedback',
-		'oldfieldtype': u'Text',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'file_list',
-		'fieldtype': u'Text',
-		'hidden': 1,
-		'label': u'File List',
-		'permlevel': 0,
-		'print_hide': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'trash_reason',
-		'fieldtype': u'Small Text',
-		'label': u'Trash Reason',
-		'oldfieldname': u'trash_reason',
-		'oldfieldtype': u'Small Text',
-		'permlevel': 1
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		u'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Employee',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		u'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Employee',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		u'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'All'
-	},
-
-	# DocPerm
-	{
-		'cancel': 1,
-		'create': 1,
-		u'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'HR User',
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		'cancel': 1,
-		'create': 1,
-		u'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'HR Manager',
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		u'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'HR User'
-	},
-
-	# DocPerm
-	{
-		u'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'HR Manager'
-	}
+ {
+  "owner": "Administrator", 
+  "docstatus": 0, 
+  "creation": "2012-11-30 11:49:12", 
+  "modified_by": "Administrator", 
+  "modified": "2012-11-30 11:54:31"
+ }, 
+ {
+  "autoname": "naming_series:", 
+  "allow_attach": 1, 
+  "search_fields": "employee_name", 
+  "module": "HR", 
+  "doctype": "DocType", 
+  "document_type": "Master", 
+  "name": "__common__"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Employee", 
+  "doctype": "DocField", 
+  "parenttype": "DocType", 
+  "parentfield": "fields"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Employee", 
+  "amend": 0, 
+  "submit": 0, 
+  "doctype": "DocPerm", 
+  "read": 1, 
+  "parenttype": "DocType", 
+  "parentfield": "permissions"
+ }, 
+ {
+  "name": "Employee", 
+  "doctype": "DocType"
+ }, 
+ {
+  "oldfieldtype": "Section Break", 
+  "doctype": "DocField", 
+  "label": "Basic Information", 
+  "fieldname": "basic_information", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break0", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "print_hide": 1, 
+  "no_copy": 1, 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Employee", 
+  "fieldname": "employee", 
+  "fieldtype": "Data", 
+  "hidden": 1, 
+  "permlevel": 0, 
+  "report_hide": 1
+ }, 
+ {
+  "description": "<span class=\"sys_manager\">To setup, please go to Setup > Naming Series</span>", 
+  "no_copy": 1, 
+  "oldfieldtype": "Select", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Naming Series", 
+  "oldfieldname": "naming_series", 
+  "permlevel": 0, 
+  "fieldname": "naming_series", 
+  "fieldtype": "Select", 
+  "reqd": 0, 
+  "options": "EMP/"
+ }, 
+ {
+  "oldfieldtype": "Select", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Salutation", 
+  "oldfieldname": "salutation", 
+  "trigger": "Client", 
+  "fieldname": "salutation", 
+  "fieldtype": "Select", 
+  "search_index": 0, 
+  "options": "\nMr\nMs", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Full Name", 
+  "oldfieldname": "employee_name", 
+  "fieldname": "employee_name", 
+  "fieldtype": "Data", 
+  "reqd": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Employee Number", 
+  "oldfieldname": "employee_number", 
+  "fieldname": "employee_number", 
+  "fieldtype": "Data", 
+  "search_index": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "description": "System User (login) ID. If set, it will become default for all HR forms.", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "User ID", 
+  "options": "Profile", 
+  "fieldname": "user_id", 
+  "fieldtype": "Link", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break1", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Date of Joining", 
+  "oldfieldname": "date_of_joining", 
+  "fieldname": "date_of_joining", 
+  "fieldtype": "Date", 
+  "reqd": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Date of Birth", 
+  "oldfieldname": "date_of_birth", 
+  "trigger": "Client", 
+  "fieldname": "date_of_birth", 
+  "fieldtype": "Date", 
+  "search_index": 0, 
+  "reqd": 1, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Select", 
+  "doctype": "DocField", 
+  "label": "Gender", 
+  "oldfieldname": "gender", 
+  "options": "\nMale\nFemale", 
+  "fieldname": "gender", 
+  "fieldtype": "Select", 
+  "search_index": 0, 
+  "reqd": 1, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "print_hide": 1, 
+  "doctype": "DocField", 
+  "label": "Company", 
+  "options": "link:Company", 
+  "fieldname": "company", 
+  "fieldtype": "Select", 
+  "reqd": 1, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Employment Details", 
+  "fieldname": "employment_details", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "col_break_21", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "default": "Active", 
+  "oldfieldtype": "Select", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Status", 
+  "oldfieldname": "status", 
+  "permlevel": 0, 
+  "fieldname": "status", 
+  "fieldtype": "Select", 
+  "search_index": 1, 
+  "reqd": 1, 
+  "options": "\nActive\nLeft", 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "doctype": "DocField", 
+  "label": "Employment Type", 
+  "oldfieldname": "employment_type", 
+  "options": "Employment Type", 
+  "fieldname": "employment_type", 
+  "fieldtype": "Link", 
+  "search_index": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "description": "Applicable Holiday List", 
+  "oldfieldtype": "Link", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Holiday List", 
+  "oldfieldname": "holiday_list", 
+  "options": "Holiday List", 
+  "fieldname": "holiday_list", 
+  "fieldtype": "Link", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "col_break_22", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Scheduled Confirmation Date", 
+  "oldfieldname": "scheduled_confirmation_date", 
+  "fieldname": "scheduled_confirmation_date", 
+  "fieldtype": "Date", 
+  "search_index": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Final Confirmation Date", 
+  "oldfieldname": "final_confirmation_date", 
+  "fieldname": "final_confirmation_date", 
+  "fieldtype": "Date", 
+  "search_index": 0, 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Contract End Date", 
+  "oldfieldname": "contract_end_date", 
+  "fieldname": "contract_end_date", 
+  "fieldtype": "Date", 
+  "search_index": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Date Of Retirement", 
+  "oldfieldname": "date_of_retirement", 
+  "fieldname": "date_of_retirement", 
+  "fieldtype": "Date", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Job Profile", 
+  "fieldname": "job_profile", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break2", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Branch", 
+  "oldfieldname": "branch", 
+  "options": "Branch", 
+  "fieldname": "branch", 
+  "fieldtype": "Link", 
+  "reqd": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Department", 
+  "oldfieldname": "department", 
+  "options": "Department", 
+  "fieldname": "department", 
+  "fieldtype": "Link", 
+  "reqd": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Designation", 
+  "oldfieldname": "designation", 
+  "permlevel": 0, 
+  "fieldname": "designation", 
+  "fieldtype": "Link", 
+  "search_index": 1, 
+  "reqd": 0, 
+  "options": "Designation", 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Grade", 
+  "oldfieldname": "grade", 
+  "options": "Grade", 
+  "fieldname": "grade", 
+  "fieldtype": "Link", 
+  "reqd": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "doctype": "DocField", 
+  "label": "Reports to", 
+  "oldfieldname": "reports_to", 
+  "options": "Employee", 
+  "fieldname": "reports_to", 
+  "fieldtype": "Link", 
+  "permlevel": 0
+ }, 
+ {
+  "description": "Provide email id registered in company", 
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Email (By company)", 
+  "oldfieldname": "company_email", 
+  "fieldname": "company_email", 
+  "fieldtype": "Data", 
+  "reqd": 0, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Section Break", 
+  "doctype": "DocField", 
+  "label": "Salary Information", 
+  "width": "50%", 
+  "fieldname": "salary_information", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Select", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Salary Mode", 
+  "oldfieldname": "salary_mode", 
+  "trigger": "Client", 
+  "fieldname": "salary_mode", 
+  "fieldtype": "Select", 
+  "options": "\nBank\nCash\nCheque", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Link", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Bank Name", 
+  "oldfieldname": "bank_name", 
+  "permlevel": 0, 
+  "fieldname": "bank_name", 
+  "fieldtype": "Data", 
+  "depends_on": "eval:doc.salary_mode == 'Bank'", 
+  "hidden": 0, 
+  "options": "Suggest", 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Bank A/C No.", 
+  "oldfieldname": "bank_ac_no", 
+  "fieldname": "bank_ac_no", 
+  "fieldtype": "Data", 
+  "depends_on": "eval:doc.salary_mode == 'Bank'", 
+  "hidden": 0, 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "ESIC CARD No", 
+  "oldfieldname": "esic_card_no", 
+  "fieldname": "esic_card_no", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "PF Number", 
+  "oldfieldname": "pf_number", 
+  "fieldname": "pf_number", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Gratuity LIC ID", 
+  "oldfieldname": "gratuity_lic_id", 
+  "fieldname": "gratuity_lic_id", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Contact Details", 
+  "fieldname": "contact_details", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break3", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Cell Number", 
+  "fieldname": "cell_number", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Personal Email", 
+  "fieldname": "personal_email", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Int", 
+  "doctype": "DocField", 
+  "label": "Notice - Number of Days", 
+  "oldfieldname": "notice_number_of_days", 
+  "fieldname": "notice_number_of_days", 
+  "fieldtype": "Int", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Emergency Contact Details", 
+  "options": "<b>Emergency Contact Details</b>", 
+  "fieldname": "emergency_contact_details", 
+  "fieldtype": "HTML", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Person To Be Contacted", 
+  "fieldname": "person_to_be_contacted", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Relation", 
+  "fieldname": "relation", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Emergency Phone Number", 
+  "fieldname": "emergency_phone_number", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break4", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Permanent Accommodation Type", 
+  "options": "\nRented\nOwned", 
+  "fieldname": "permanent_accommodation_type", 
+  "fieldtype": "Select", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Permanent Address", 
+  "fieldname": "permanent_address", 
+  "fieldtype": "Small Text", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Current Accommodation Type", 
+  "options": "\nRented\nOwned", 
+  "fieldname": "current_accommodation_type", 
+  "fieldtype": "Select", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Current Address", 
+  "fieldname": "current_address", 
+  "fieldtype": "Small Text", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Personal Details", 
+  "fieldname": "personal_details", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break5", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "PAN Number", 
+  "fieldname": "pan_number", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Passport Number", 
+  "fieldname": "passport_number", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Date of Issue", 
+  "fieldname": "date_of_issue", 
+  "fieldtype": "Date", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Valid Upto", 
+  "fieldname": "valid_upto", 
+  "fieldtype": "Date", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Button", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Salary Structure", 
+  "trigger": "Client", 
+  "fieldname": "salary_structure", 
+  "fieldtype": "Button", 
+  "hidden": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Place of Issue", 
+  "fieldname": "place_of_issue", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Marital Status", 
+  "options": "\nSingle\nMarried\nDivorced\nWidowed", 
+  "fieldname": "marital_status", 
+  "fieldtype": "Select", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Blood Group", 
+  "options": "\nA+\nA-\nB+\nB-\nAB+\nAB-\nO+\nO-", 
+  "fieldname": "blood_group", 
+  "fieldtype": "Select", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break6", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "description": "Here you can maintain family details like name and occupation of parent, spouse and children", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Family Background", 
+  "fieldname": "family_background", 
+  "fieldtype": "Small Text", 
+  "permlevel": 0
+ }, 
+ {
+  "description": "Here you can maintain height, weight, allergies, medical concerns etc", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Health Details", 
+  "fieldname": "health_details", 
+  "fieldtype": "Small Text", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Educational Qualification", 
+  "fieldname": "educational_qualification", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Educational Qualification Details", 
+  "options": "Employee Education", 
+  "fieldname": "educational_qualification_details", 
+  "fieldtype": "Table", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Career History", 
+  "fieldname": "career_history", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Previous Work Experience", 
+  "options": "Simple", 
+  "fieldname": "previous_work_experience", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Employee External Work History", 
+  "options": "Employee External Work History", 
+  "fieldname": "previous_experience_details", 
+  "fieldtype": "Table", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "History In Company", 
+  "options": "Simple", 
+  "fieldname": "history_in_company", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Employee Internal Work Historys", 
+  "options": "Employee Internal Work History", 
+  "fieldname": "experience_in_company_details", 
+  "fieldtype": "Table", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Section Break", 
+  "doctype": "DocField", 
+  "label": "Exit", 
+  "fieldname": "exit", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break7", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Resignation Letter Date", 
+  "oldfieldname": "resignation_letter_date", 
+  "fieldname": "resignation_letter_date", 
+  "fieldtype": "Date", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Relieving Date", 
+  "oldfieldname": "relieving_date", 
+  "fieldname": "relieving_date", 
+  "fieldtype": "Date", 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Reason for Leaving", 
+  "oldfieldname": "reason_for_leaving", 
+  "fieldname": "reason_for_leaving", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Select", 
+  "doctype": "DocField", 
+  "label": "Leave Encashed?", 
+  "oldfieldname": "leave_encashed", 
+  "options": "\nYes\nNo", 
+  "fieldname": "leave_encashed", 
+  "fieldtype": "Select", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Encashment Date", 
+  "oldfieldname": "encashment_date", 
+  "fieldname": "encashment_date", 
+  "fieldtype": "Date", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Column Break", 
+  "doctype": "DocField", 
+  "label": "Exit Interview Details", 
+  "oldfieldname": "col_brk6", 
+  "width": "50%", 
+  "fieldname": "exit_interview_details", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Date", 
+  "doctype": "DocField", 
+  "label": "Held On", 
+  "oldfieldname": "held_on", 
+  "fieldname": "held_on", 
+  "fieldtype": "Date", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Select", 
+  "doctype": "DocField", 
+  "label": "Reason for Resignation", 
+  "oldfieldname": "reason_for_resignation", 
+  "options": "\nBetter Prospects\nHealth Concerns", 
+  "fieldname": "reason_for_resignation", 
+  "fieldtype": "Select", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "New Workplace", 
+  "oldfieldname": "new_workplace", 
+  "fieldname": "new_workplace", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Text", 
+  "doctype": "DocField", 
+  "label": "Feedback", 
+  "oldfieldname": "feedback", 
+  "fieldname": "feedback", 
+  "fieldtype": "Small Text", 
+  "permlevel": 0
+ }, 
+ {
+  "print_hide": 1, 
+  "doctype": "DocField", 
+  "label": "File List", 
+  "fieldname": "file_list", 
+  "fieldtype": "Text", 
+  "hidden": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Small Text", 
+  "doctype": "DocField", 
+  "label": "Trash Reason", 
+  "oldfieldname": "trash_reason", 
+  "fieldname": "trash_reason", 
+  "fieldtype": "Small Text", 
+  "permlevel": 1
+ }, 
+ {
+  "create": 0, 
+  "doctype": "DocPerm", 
+  "write": 0, 
+  "role": "Employee", 
+  "cancel": 0, 
+  "permlevel": 0, 
+  "match": "employee"
+ }, 
+ {
+  "create": 0, 
+  "doctype": "DocPerm", 
+  "write": 0, 
+  "role": "Employee", 
+  "cancel": 0, 
+  "permlevel": 1
+ }, 
+ {
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "role": "HR User", 
+  "cancel": 1, 
+  "permlevel": 0, 
+  "match": "company"
+ }, 
+ {
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "role": "HR Manager", 
+  "cancel": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "create": 0, 
+  "doctype": "DocPerm", 
+  "write": 0, 
+  "role": "HR User", 
+  "cancel": 0, 
+  "permlevel": 1
+ }, 
+ {
+  "create": 0, 
+  "doctype": "DocPerm", 
+  "write": 0, 
+  "role": "HR Manager", 
+  "cancel": 0, 
+  "permlevel": 1
+ }
 ]
\ No newline at end of file
diff --git a/hr/doctype/employee_external_work_history/employee_external_work_history.txt b/hr/doctype/employee_external_work_history/employee_external_work_history.txt
index 167675a..8587320 100644
--- a/hr/doctype/employee_external_work_history/employee_external_work_history.txt
+++ b/hr/doctype/employee_external_work_history/employee_external_work_history.txt
@@ -1,120 +1,75 @@
-# DocType, Employee External Work History
 [
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2012-03-27 14:35:59',
-		'docstatus': 0,
-		'modified': '2012-03-27 14:35:59',
-		'modified_by': u'Administrator',
-		'owner': u'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'colour': u'White:FFF',
-		'doctype': 'DocType',
-		'istable': 1,
-		'module': u'HR',
-		'name': '__common__',
-		'section_style': u'Simple',
-		'server_code_error': u' ',
-		'show_in_menu': 0,
-		'version': 3
-	},
-
-	# These values are common for all DocField
-	{
-		'doctype': u'DocField',
-		'name': '__common__',
-		'parent': u'Employee External Work History',
-		'parentfield': u'fields',
-		'parenttype': u'DocType',
-		'permlevel': 0
-	},
-
-	# These values are common for all DocPerm
-	{
-		'create': 1,
-		'doctype': u'DocPerm',
-		'name': '__common__',
-		'parent': u'Employee External Work History',
-		'parentfield': u'permissions',
-		'parenttype': u'DocType',
-		'permlevel': 0,
-		'read': 1,
-		'role': u'All',
-		'write': 1
-	},
-
-	# DocType, Employee External Work History
-	{
-		'doctype': 'DocType',
-		'name': u'Employee External Work History'
-	},
-
-	# DocPerm
-	{
-		'doctype': u'DocPerm'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'company_name',
-		'fieldtype': u'Data',
-		'label': u'Company',
-		'oldfieldname': u'company_name',
-		'oldfieldtype': u'Data'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'designation',
-		'fieldtype': u'Data',
-		'label': u'Designation',
-		'oldfieldname': u'designation',
-		'oldfieldtype': u'Data'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'salary',
-		'fieldtype': u'Currency',
-		'label': u'Salary',
-		'oldfieldname': u'salary',
-		'oldfieldtype': u'Currency'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'address',
-		'fieldtype': u'Small Text',
-		'label': u'Address',
-		'oldfieldname': u'address',
-		'oldfieldtype': u'Small Text'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'contact',
-		'fieldtype': u'Data',
-		'label': u'Contact',
-		'oldfieldname': u'contact',
-		'oldfieldtype': u'Data'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'total_experience',
-		'fieldtype': u'Data',
-		'label': u'Total Experience',
-		'oldfieldname': u'total_experience',
-		'oldfieldtype': u'Data'
-	}
+ {
+  "owner": "Administrator", 
+  "docstatus": 0, 
+  "creation": "2012-07-03 13:29:41", 
+  "modified_by": "Administrator", 
+  "modified": "2012-11-30 11:57:58"
+ }, 
+ {
+  "istable": 1, 
+  "name": "__common__", 
+  "doctype": "DocType", 
+  "module": "HR"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Employee External Work History", 
+  "doctype": "DocField", 
+  "parenttype": "DocType", 
+  "permlevel": 0, 
+  "parentfield": "fields"
+ }, 
+ {
+  "name": "Employee External Work History", 
+  "doctype": "DocType"
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Company", 
+  "oldfieldname": "company_name", 
+  "fieldname": "company_name", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Designation", 
+  "oldfieldname": "designation", 
+  "fieldname": "designation", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "oldfieldtype": "Currency", 
+  "doctype": "DocField", 
+  "label": "Salary", 
+  "oldfieldname": "salary", 
+  "fieldname": "salary", 
+  "fieldtype": "Currency"
+ }, 
+ {
+  "oldfieldtype": "Small Text", 
+  "doctype": "DocField", 
+  "label": "Address", 
+  "oldfieldname": "address", 
+  "fieldname": "address", 
+  "fieldtype": "Small Text"
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Contact", 
+  "oldfieldname": "contact", 
+  "fieldname": "contact", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Total Experience", 
+  "oldfieldname": "total_experience", 
+  "fieldname": "total_experience", 
+  "fieldtype": "Data"
+ }
 ]
\ No newline at end of file
diff --git a/hr/doctype/expense_claim/expense_claim.js b/hr/doctype/expense_claim/expense_claim.js
index 5ed0d37..d890102 100644
--- a/hr/doctype/expense_claim/expense_claim.js
+++ b/hr/doctype/expense_claim/expense_claim.js
@@ -100,8 +100,6 @@
 	cur_frm.cscript.calculate_total(doc,cdt,cdn);
 }
 
-wn.require('app/setup/doctype/notification_control/notification_control.js');
-
 cur_frm.cscript.approve = function(doc,cdt,cdn){
 	cur_frm.cscript.calculate_total(doc,cdt,cdn);
 
@@ -248,12 +246,9 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Expense Claim',
-		doctype: 'Expense Claim',
-		send_to: doc.exp_approver
+	if(cint(wn.boot.notification_settings.expense_claim)) {
+		cur_frm.email_doc(wn.boot.notification_settings.expense_claim);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
 
 cur_frm.fields_dict.employee.get_query = erpnext.utils.employee_query;
\ No newline at end of file
diff --git a/hr/doctype/leave_application/leave_application.js b/hr/doctype/leave_application/leave_application.js
index e8952ca..00df476 100755
--- a/hr/doctype/leave_application/leave_application.js
+++ b/hr/doctype/leave_application/leave_application.js
@@ -14,39 +14,49 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-// ****************************************** onload ********************************************************
 cur_frm.cscript.onload = function(doc, dt, dn) {
   if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
 }
 
+cur_frm.cscript.refresh = function(doc, dt, dn) {
+	cur_frm.set_intro("");
+	if(doc.__islocal && !in_list(user_roles, "HR User")) {
+		cur_frm.set_intro("Fill the form and save it")
+	} else {
+		if(in_list(user_roles, "HR User")) {
+			if(doc.status=="Open") {
+				cur_frm.set_intro("Please Approve (and Submit) or Reject, or re-assign to applicant for further review.");				
+			}
+		} else {
+			if(doc.status=="Open") {
+				cur_frm.set_intro("Leave application is pending approval.");
+			} else if(doc.status=="Approved") {
+				cur_frm.set_intro("Leave application has been approved.");
+			} else if(doc.status=="Rejected") {
+				cur_frm.set_intro("Leave application has been rejected.");
+			}
+		}
+	}
+	
+	if(doc.status=="Approved" && doc.docstatus!=1) {
+		cur_frm.savesubmit()
+	}
+}
 
-// ************************************** client triggers ***************************************************
-// ---------
-// employee
-// ---------
 cur_frm.add_fetch('employee','employee_name','employee_name');
 
 cur_frm.cscript.employee = function (doc, dt, dn){
   get_leave_balance(doc, dt, dn);
 }
 
-// ------------
-// fiscal_year
-// ------------
 cur_frm.cscript.fiscal_year = function (doc, dt, dn){
   get_leave_balance(doc, dt, dn);
 }
 
-// -----------
-// leave type
-// -----------
 cur_frm.cscript.leave_type = function (doc, dt, dn){
   get_leave_balance(doc, dt, dn);
 }
 
-// ---------
-// half day
-// ---------
 cur_frm.cscript.half_day = function(doc, dt, dn) {
   if(doc.from_date) {
     set_multiple(dt,dn,{to_date:doc.from_date});
@@ -54,9 +64,6 @@
   }
 }
 
-// ---------
-// from date
-// ---------
 cur_frm.cscript.from_date = function(doc, dt, dn) {
   if(cint(doc.half_day) == 1){
     set_multiple(dt,dn,{to_date:doc.from_date});
@@ -64,9 +71,6 @@
   calculate_total_days(doc, dt, dn);
 }
 
-// --------
-// to date
-// --------
 cur_frm.cscript.to_date = function(doc, dt, dn) {
   if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){
     msgprint("To Date should be same as From Date for Half Day leave");
@@ -75,20 +79,11 @@
   calculate_total_days(doc, dt, dn);
 }
 
-
-// ******************************************* utilities ****************************************************
-
-// ------------------
-// get leave balance
-// ------------------
 get_leave_balance = function(doc, dt, dn) {
   if(doc.employee && doc.leave_type && doc.fiscal_year)
     get_server_fields('get_leave_balance', '','', doc, dt, dn, 1);
 }
 
-// ---------------
-// calculate days
-// ---------------
 calculate_total_days = function(doc, dt, dn) {
   if(doc.from_date && doc.to_date){
     if(cint(doc.half_day) == 1) set_multiple(dt,dn,{total_leave_days:0.5});
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
index e71a26a..2f7e4a8 100755
--- a/hr/doctype/leave_application/leave_application.py
+++ b/hr/doctype/leave_application/leave_application.py
@@ -38,12 +38,6 @@
 		self.doc = doc
 		self.doclist = doclist 
 
-
-# ******************************************** client triggers ***********************************************
-
-	# ------------------
-	# get leave balance
-	# ------------------
 	def get_leave_balance(self):
 		leave_all = sql("select total_leaves_allocated from `tabLeave Allocation` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
 		leave_all = leave_all and flt(leave_all[0][0]) or 0
@@ -52,10 +46,6 @@
 		ret = {'leave_balance':leave_all - leave_app}
 		return ret
 
-
-# ************************************************ utilities *************************************************
-
-	# -------------------
 	def get_holidays(self):
 		"""
 			get total holidays
@@ -65,10 +55,6 @@
 			tot_hol = sql("select count(*) from `tabHoliday` h1, `tabHoliday List` h2 where h1.parent = h2.name and h1.holiday_date between '%s' and '%s' and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s"% (self.doc.from_date, self.doc.to_date, self.doc.fiscal_year))
 		return tot_hol and flt(tot_hol[0][0]) or 0
 
-	
-	# ---------------------
-	# get total leave days
-	# ---------------------
 	def get_total_leave_days(self):
 		"""
 			Calculates total leave days based on input and holidays
@@ -82,27 +68,15 @@
 			}
 		return ret
 
-
-# ************************************************ validate *************************************************
-
-	# -----------------
-	# validate to date
-	# -----------------
 	def validate_to_date(self):
 		if self.doc.from_date and self.doc.to_date and (getdate(self.doc.to_date) < getdate(self.doc.from_date)):
 			msgprint("To date cannot be before from date")
 			raise Exception
-
-	# --------------------------------
-	# check whether leave type is lwp
-	# --------------------------------
+			
 	def is_lwp(self):
 		lwp = sql("select is_lwp from `tabLeave Type` where name = %s", self.doc.leave_type)
 		return lwp and cint(lwp[0][0]) or 0
 
-	# ------------------------
-	# validate balance leaves
-	# ------------------------
 	def validate_balance_leaves(self):
 		if self.doc.from_date and self.doc.to_date and not self.is_lwp():
 			bal = self.get_leave_balance()
@@ -111,12 +85,8 @@
 			set(self.doc,'leave_balance',flt(bal['leave_balance']))
 			set(self.doc,'total_leave_days',flt(tot_leaves['total_leave_days']))
 			if flt(bal['leave_balance']) < flt(tot_leaves['total_leave_days']):
-				msgprint("Employee : %s cannot apply for %s of more than %s days" % (self.doc.employee, self.doc.leave_type, flt(bal['leave_balance'])))
-				raise Exception
+				msgprint("Warning : There is not enough leave balance")
 
-	#
-	# validate overlapping leaves
-	#
 	def validate_leave_overlap(self):
 		for d in sql("""select name, leave_type, posting_date, from_date, to_date 
 			from `tabLeave Application` 
@@ -128,9 +98,6 @@
  
 			msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : %s" % (self.doc.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name']), raise_exception = 1)
 
-	# ---------------------------------------------------------------------
-	# validate max days for which leave can be applied for particular type
-	# ---------------------------------------------------------------------
 	def validate_max_days(self):
 		max_days = sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
 		max_days = max_days and flt(max_days[0][0]) or 0
@@ -138,12 +105,13 @@
 			msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
 			raise Exception
 
-
-	# ---------
-	# validate
-	# ---------
 	def validate(self):
 		self.validate_to_date()
 		self.validate_balance_leaves()
 		self.validate_leave_overlap()
 		self.validate_max_days()
+		
+	def on_submit(self):
+		if self.doc.status != "Approved":
+			webnotes.msgprint("""Only Approved Leave Applications can be Submitted.""",
+				raise_exception=True)
diff --git a/hr/doctype/leave_application/leave_application.txt b/hr/doctype/leave_application/leave_application.txt
index c87c746..6a33df6 100644
--- a/hr/doctype/leave_application/leave_application.txt
+++ b/hr/doctype/leave_application/leave_application.txt
@@ -1,285 +1,239 @@
-# DocType, Leave Application
 [
-
-	# These values are common in all dictionaries
-	{
-		u'creation': '2012-05-15 12:14:45',
-		u'docstatus': 0,
-		u'modified': '2012-10-02 11:19:44',
-		u'modified_by': u'Administrator',
-		u'owner': u'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'_last_update': u'1310019491',
-		'autoname': u'LAP/.#####',
-		'colour': u'White:FFF',
-		u'doctype': u'DocType',
-		'document_type': u'Transaction',
-		'is_submittable': 1,
-		'module': u'HR',
-		u'name': u'__common__',
-		'search_fields': u'employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year',
-		'section_style': u'Simple',
-		'show_in_menu': 0,
-		'subject': u'From %(employee_name)s, %(designation)s',
-		'tag_fields': u'leave_type',
-		'version': 1
-	},
-
-	# These values are common for all DocField
-	{
-		u'doctype': u'DocField',
-		u'name': u'__common__',
-		'parent': u'Leave Application',
-		'parentfield': u'fields',
-		'parenttype': u'DocType'
-	},
-
-	# These values are common for all DocPerm
-	{
-		u'doctype': u'DocPerm',
-		u'name': u'__common__',
-		'parent': u'Leave Application',
-		'parentfield': u'permissions',
-		'parenttype': u'DocType',
-		'read': 1
-	},
-
-	# DocType, Leave Application
-	{
-		u'doctype': u'DocType',
-		u'name': u'Leave Application'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break0',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'employee',
-		'fieldtype': u'Link',
-		'in_filter': 1,
-		'label': u'Employee',
-		'options': u'Employee',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'employee_name',
-		'fieldtype': u'Data',
-		'in_filter': 1,
-		'label': u'Employee Name',
-		'permlevel': 1,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'leave_type',
-		'fieldtype': u'Select',
-		'in_filter': 1,
-		'label': u'Leave Type',
-		'options': u'link:Leave Type',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'leave_balance',
-		'fieldtype': u'Currency',
-		'label': u'Leave Balance',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'default': u'Today',
-		u'doctype': u'DocField',
-		'fieldname': u'posting_date',
-		'fieldtype': u'Date',
-		'label': u'Posting Date',
-		'no_copy': 1,
-		'permlevel': 1,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'fiscal_year',
-		'fieldtype': u'Select',
-		'in_filter': 1,
-		'label': u'Fiscal Year',
-		'options': u'link:Fiscal Year',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'column_break1',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'half_day',
-		'fieldtype': u'Check',
-		'label': u'Half Day',
-		'permlevel': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'from_date',
-		'fieldtype': u'Date',
-		'label': u'From Date',
-		'permlevel': 0,
-		'search_index': 1,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		u'doctype': u'DocField',
-		'fieldname': u'to_date',
-		'fieldtype': u'Date',
-		'label': u'To Date',
-		'permlevel': 0,
-		'search_index': 1,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'total_leave_days',
-		'fieldtype': u'Currency',
-		'label': u'Total Leave Days',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'description',
-		'fieldtype': u'Small Text',
-		'label': u'Description',
-		'permlevel': 0,
-		'width': u'300px'
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'letter_head',
-		'fieldtype': u'Link',
-		'label': u'Letter Head',
-		'options': u'Letter Head',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'amended_from',
-		'fieldtype': u'Data',
-		'label': u'Amended From',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		u'doctype': u'DocField',
-		'fieldname': u'amendment_date',
-		'fieldtype': u'Date',
-		'label': u'Amendment Date',
-		'permlevel': 1
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		u'doctype': u'DocPerm',
-		'match': u'owner',
-		'permlevel': 0,
-		'role': u'Employee',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
-		u'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'HR User',
-		'submit': 1,
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
-		u'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'HR Manager',
-		'submit': 1,
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		u'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'HR User'
-	},
-
-	# DocPerm
-	{
-		u'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'HR Manager'
-	},
-
-	# DocPerm
-	{
-		u'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Employee'
-	}
+ {
+  "owner": "Administrator", 
+  "docstatus": 0, 
+  "creation": "2012-11-02 17:16:54", 
+  "modified_by": "Administrator", 
+  "modified": "2012-11-30 12:17:27"
+ }, 
+ {
+  "is_submittable": 1, 
+  "autoname": "LAP/.#####", 
+  "name": "__common__", 
+  "search_fields": "employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year", 
+  "module": "HR", 
+  "doctype": "DocType", 
+  "document_type": "Transaction"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Leave Application", 
+  "doctype": "DocField", 
+  "parenttype": "DocType", 
+  "parentfield": "fields"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Leave Application", 
+  "read": 1, 
+  "doctype": "DocPerm", 
+  "parenttype": "DocType", 
+  "parentfield": "permissions"
+ }, 
+ {
+  "name": "Leave Application", 
+  "doctype": "DocType"
+ }, 
+ {
+  "default": "Open", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Status", 
+  "options": "Open\nApproved\nRejected", 
+  "fieldname": "status", 
+  "fieldtype": "Select", 
+  "permlevel": 3
+ }, 
+ {
+  "search_index": 1, 
+  "doctype": "DocField", 
+  "label": "Leave Type", 
+  "options": "link:Leave Type", 
+  "fieldname": "leave_type", 
+  "fieldtype": "Select", 
+  "reqd": 1, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "search_index": 1, 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "From Date", 
+  "trigger": "Client", 
+  "fieldname": "from_date", 
+  "fieldtype": "Date", 
+  "reqd": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "search_index": 1, 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "To Date", 
+  "trigger": "Client", 
+  "fieldname": "to_date", 
+  "fieldtype": "Date", 
+  "reqd": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Half Day", 
+  "trigger": "Client", 
+  "fieldname": "half_day", 
+  "fieldtype": "Check", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break1", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Leave Balance", 
+  "fieldname": "leave_balance", 
+  "fieldtype": "Currency", 
+  "permlevel": 1
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Total Leave Days", 
+  "fieldname": "total_leave_days", 
+  "fieldtype": "Currency", 
+  "permlevel": 1
+ }, 
+ {
+  "search_index": 1, 
+  "doctype": "DocField", 
+  "label": "Employee", 
+  "options": "Employee", 
+  "fieldname": "employee", 
+  "fieldtype": "Link", 
+  "reqd": 1, 
+  "permlevel": 0, 
+  "in_filter": 1
+ }, 
+ {
+  "search_index": 0, 
+  "doctype": "DocField", 
+  "label": "Employee Name", 
+  "fieldname": "employee_name", 
+  "fieldtype": "Data", 
+  "permlevel": 1, 
+  "in_filter": 1
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "sb10", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Reason", 
+  "width": "300px", 
+  "fieldname": "description", 
+  "fieldtype": "Text Editor", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "HR Details", 
+  "fieldname": "sb12", 
+  "fieldtype": "Section Break", 
+  "permlevel": 2
+ }, 
+ {
+  "default": "Today", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Posting Date", 
+  "no_copy": 1, 
+  "fieldname": "posting_date", 
+  "fieldtype": "Date", 
+  "reqd": 1, 
+  "permlevel": 2
+ }, 
+ {
+  "search_index": 0, 
+  "doctype": "DocField", 
+  "label": "Fiscal Year", 
+  "options": "link:Fiscal Year", 
+  "fieldname": "fiscal_year", 
+  "fieldtype": "Select", 
+  "reqd": 1, 
+  "permlevel": 2, 
+  "in_filter": 1
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Letter Head", 
+  "options": "Letter Head", 
+  "fieldname": "letter_head", 
+  "fieldtype": "Link", 
+  "permlevel": 2
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Amended From", 
+  "fieldname": "amended_from", 
+  "fieldtype": "Data", 
+  "permlevel": 2
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Amendment Date", 
+  "fieldname": "amendment_date", 
+  "fieldtype": "Date", 
+  "permlevel": 2
+ }, 
+ {
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "role": "Employee", 
+  "permlevel": 0, 
+  "match": "employee"
+ }, 
+ {
+  "doctype": "DocPerm", 
+  "role": "All", 
+  "permlevel": 1
+ }, 
+ {
+  "amend": 1, 
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "submit": 1, 
+  "write": 1, 
+  "role": "HR User", 
+  "cancel": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "amend": 0, 
+  "create": 0, 
+  "doctype": "DocPerm", 
+  "submit": 0, 
+  "write": 1, 
+  "role": "HR User", 
+  "cancel": 0, 
+  "permlevel": 2
+ }, 
+ {
+  "doctype": "DocPerm", 
+  "role": "All", 
+  "permlevel": 3
+ }, 
+ {
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "role": "HR User", 
+  "permlevel": 3
+ }
 ]
\ No newline at end of file
diff --git a/hr/doctype/leave_application/leave_application_list.js b/hr/doctype/leave_application/leave_application_list.js
index 4bcbab8..4c80e7f 100644
--- a/hr/doctype/leave_application/leave_application_list.js
+++ b/hr/doctype/leave_application/leave_application_list.js
@@ -3,6 +3,7 @@
 	init: function(d) {
 		this._super(d)
 		this.fields = this.fields.concat([
+			"`tabLeave Application`.status",
 			"`tabLeave Application`.employee_name",
 			"`tabLeave Application`.total_leave_days",
 			"`tabLeave Application`.from_date",
@@ -12,8 +13,21 @@
 		this.stats = this.stats.concat(['company']);
 	},
 
+	label_style: {
+		"status": {
+			"Open": "danger",
+			"Approved": "success",
+			"Rejected": "info",
+		}
+	},
+	
 	prepare_data: function(data) {
 		this._super(data);
+
+		data.label_style = this.label_style.status[data.status];		
+		data.status_html = repl('<span class="label \
+			label-%(label_style)s">%(status)s</span>', data);
+
 		data.from_date = wn.datetime.str_to_user(data.from_date);
 		data.to_date = wn.datetime.str_to_user(data.to_date);
 		data.date_range = (data.from_date === data.to_date)
@@ -28,10 +42,10 @@
 		{width: '3%', content: 'check'},
 		{width: '5%', content:'avatar'},
 		{width: '3%', content:'docstatus'},
+		{width: '15%', content:'status_html'},
 		{width: '12%', content:'name'},
-		{width: '37%', content:'employee_name+tags'},
-		{width: '10%', content:'total_leave_days',
-			css: {'color':'#777'}},
-		{width: '30%', content:'date_range'},
+		{width: '25%', content:'employee_name+tags'},
+		{width: '25%', content:'date_range'},
+		{width: '12%', content:'modified'},
 	]
 });
\ No newline at end of file
diff --git a/patches/november_2012/add_employee_field_in_employee.py b/patches/november_2012/add_employee_field_in_employee.py
new file mode 100644
index 0000000..c8e5b36
--- /dev/null
+++ b/patches/november_2012/add_employee_field_in_employee.py
@@ -0,0 +1,6 @@
+import webnotes
+
+def execute():
+	webnotes.clear_perms("Employee")
+	webnotes.reload_doc("hr", "doctype", "employee")
+	webnotes.conn.sql("""update tabEmployee set employee=name""")
diff --git a/patches/november_2012/leave_application_cleanup.py b/patches/november_2012/leave_application_cleanup.py
new file mode 100644
index 0000000..18e69cf
--- /dev/null
+++ b/patches/november_2012/leave_application_cleanup.py
@@ -0,0 +1,9 @@
+import webnotes
+
+def execute():
+	webnotes.clear_perms("Leave Application")
+	webnotes.reload_doc("hr", "doctype", "leave_application")
+	webnotes.conn.sql("""update `tabLeave Application` set status='Approved'
+		where docstatus=1""")
+	webnotes.conn.sql("""update `tabLeave Application` set status='Open'
+		where docstatus=0""")		
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 3128948..100f25b 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -689,4 +689,12 @@
 		'patch_module': 'patches.november_2012',
 		'patch_file': 'add_theme_to_profile',
 	},
+	{
+		'patch_module': 'patches.november_2012',
+		'patch_file': 'add_employee_field_in_employee',
+	},
+	{
+		'patch_module': 'patches.november_2012',
+		'patch_file': 'leave_application_cleanup',
+	},
 ]
\ No newline at end of file
diff --git a/selling/doctype/customer/customer.js b/selling/doctype/customer/customer.js
index 2031fe8..d20b0c9 100644
--- a/selling/doctype/customer/customer.js
+++ b/selling/doctype/customer/customer.js
@@ -15,9 +15,6 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 wn.require('app/setup/doctype/contact_control/contact_control.js');
-wn.require('app/support/doctype/communication/communication.js');
-
-/* ********************************* onload ********************************************* */
 
 cur_frm.cscript.onload = function(doc,dt,dn){
 	// history doctypes and scripts
@@ -32,8 +29,6 @@
   	//cur_frm.cscript.make_sl_body();
 
 	cur_frm.cscript.load_defaults(doc, dt, dn);
-	
-	cur_frm.cscript.make_communication_body();
 }
 
 cur_frm.cscript.load_defaults = function(doc, dt, dn) {
@@ -47,8 +42,6 @@
 cur_frm.add_fetch('lead_name', 'company_name', 'customer_name');
 cur_frm.add_fetch('default_sales_partner','commission_rate','default_commission_rate');
 
-/* ********************************* refresh ********************************************* */
-
 cur_frm.cscript.refresh = function(doc,dt,dn) {
 	if(sys_defaults.cust_master_name == 'Customer Name')
 		hide_field('naming_series');
@@ -57,16 +50,18 @@
 
 	if(doc.__islocal){		
 		hide_field(['address_html','contact_html']);
-		//cur_frm.cscript.set_hl_msg(doc);
- 		//cur_frm.cscript.set_sl_msg(doc);
 	}else{
 		unhide_field(['address_html','contact_html']);
 		// make lists
 		cur_frm.cscript.make_address(doc,dt,dn);
 		cur_frm.cscript.make_contact(doc,dt,dn);
 		cur_frm.cscript.make_history(doc,dt,dn);
-		cur_frm.cscript.render_communication_list(doc, cdt, cdn);
-		//cur_frm.cscript.make_shipping_address(doc,dt,dn);
+
+		cur_frm.communication_view = new wn.views.CommunicationList({
+			list: wn.model.get("Communication", {"customer": doc.name}),
+			parent: cur_frm.fields_dict.communication_html.wrapper,
+			doc: doc
+		});
 	}
 }
 
@@ -117,11 +112,6 @@
 
 }
 
-/* ********************************* client triggers ************************************** */
-
-// ---------------
-// customer group
-// ---------------
 cur_frm.fields_dict['customer_group'].get_query = function(doc,dt,dn) {
 	return 'SELECT `tabCustomer Group`.`name`, `tabCustomer Group`.`parent_customer_group` FROM `tabCustomer Group` WHERE `tabCustomer Group`.`is_group` = "No" AND `tabCustomer Group`.`docstatus`!= 2 AND `tabCustomer Group`.%(key)s LIKE "%s" ORDER BY	`tabCustomer Group`.`name` ASC LIMIT 50';
 }
@@ -130,8 +120,6 @@
 cur_frm.fields_dict.lead_name.get_query = erpnext.utils.lead_query;
 
 
-// Transaction History
-// functions called by these functions are defined in communication.js
 cur_frm.cscript.make_qtn_list = function(parent, doc) {
 	cur_frm.cscript.get_common_list_view(parent, doc, 'Quotation');
 }
@@ -173,7 +161,6 @@
 	cur_frm.cscript.render_list(doc, doctype, parent, ListView);
 }
 
-
 cur_frm.cscript.make_si_list = function(parent, doc) {
 	var ListView = wn.views.ListView.extend({
 		init: function(doclistview) {
diff --git a/selling/doctype/customer/customer.py b/selling/doctype/customer/customer.py
index 0bf499b..975dd89 100644
--- a/selling/doctype/customer/customer.py
+++ b/selling/doctype/customer/customer.py
@@ -18,24 +18,24 @@
 from __future__ import unicode_literals
 import webnotes
 
-from webnotes.utils import cstr, date_diff, flt, formatdate, get_defaults, getdate, has_common, now, nowdate, replace_newlines, sendmail, set_default, user_format, validate_email_add
+from webnotes.utils import cstr, get_defaults
 from webnotes.model.doc import Document, make_autoname
 from webnotes.model.code import get_obj
 from webnotes import msgprint, errprint
 
-set = webnotes.conn.set
 sql = webnotes.conn.sql
 get_value = webnotes.conn.get_value
-convert_to_lists = webnotes.conn.convert_to_lists
 
-# -----------------------------------------------------------------------------------------
+from utilities.transaction_base import TransactionBase
 
-class DocType:
+class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
 	
-# ******************************************************* autoname ***********************************************************
+	def onload(self):
+		self.add_communication_list()
+			
 	def autoname(self):
 		cust_master_name = get_defaults().get('cust_master_name')
 		if cust_master_name == 'Customer Name':
@@ -53,17 +53,9 @@
 		else:
 			self.doc.name = make_autoname(self.doc.naming_series+'.#####')
 
-
-# ******************************************************* triggers ***********************************************************
-	# ----------------
-	# get company abbr
-	# -----------------
 	def get_company_abbr(self):
 		return get_value('Company', self.doc.company, 'abbr')
 
-	# -----------------------------------------------------------------------------------------------------
-	# get parent account(i.e receivables group from company where default account head need to be created)
-	# -----------------------------------------------------------------------------------------------------
 	def get_receivables_group(self):
 		g = sql("select receivables_group from tabCompany where name=%s", self.doc.company)
 		g = g and g[0][0] or '' 
@@ -72,26 +64,15 @@
 			raise Exception
 		return g
 	
-# ******************************************************* validate *********************************************************
-	# ----------------
-	# validate values
-	# ----------------
 	def validate_values(self):
 		# Master name by naming series -> Series field mandatory
 		if get_defaults().get('cust_master_name') == 'Naming Series' and not self.doc.naming_series:
 			msgprint("Series is Mandatory.")
 			raise Exception
 
-	# ---------
-	# validate
-	# ---------
 	def validate(self):
 		self.validate_values()
 
-# ******************************************************* on update *********************************************************
-	# ------------------------
-	# create customer address
-	# ------------------------
 	def create_customer_address(self):
 		addr_flds = [self.doc.address_line1, self.doc.address_line2, self.doc.city, self.doc.state, self.doc.country, self.doc.pincode]
 		address_line = "\n".join(filter(lambda x : (x!='' and x!=None),addr_flds))
@@ -100,15 +81,11 @@
 			address_line = address_line + "\n" + "Phone: " + cstr(self.doc.phone_1)
 		if self.doc.email_id:
 			address_line = address_line + "\n" + "E-mail: " + cstr(self.doc.email_id)
-		set(self.doc,'address', address_line)
+		webnotes.conn.set(self.doc,'address', address_line)
 		
 		telephone = "(O): " + cstr(self.doc.phone_1) +"\n"+ cstr(self.doc.phone_2) + "\n" + "(M): " +	"\n" + "(fax): " + cstr(self.doc.fax_1)
-		set(self.doc,'telephone',telephone)
+		webnotes.conn.set(self.doc,'telephone',telephone)
 
-
-	# ------------------------------------
-	# create primary contact for customer
-	# ------------------------------------
 	def create_p_contact(self,nm,phn_no,email_id,mob_no,fax,cont_addr):
 		c1 = Document('Contact')
 		c1.first_name = nm
@@ -126,10 +103,6 @@
 		c1.customer_group = self.doc.customer_group
 		c1.save(1)
 
-
-	# ------------------------
-	# create customer contact
-	# ------------------------
 	def create_customer_contact(self):
 		contact = sql("select distinct name from `tabContact` where customer_name=%s", (self.doc.customer_name))
 		contact = contact and contact[0][0] or ''
@@ -143,18 +116,10 @@
 				c_detail = sql("select lead_name, company_name, contact_no, mobile_no, email_id, fax, address from `tabLead` where name =%s", self.doc.lead_name, as_dict=1)
 				self.create_p_contact(c_detail and c_detail[0]['lead_name'] or '', c_detail and c_detail[0]['contact_no'] or '', c_detail and c_detail[0]['email_id'] or '', c_detail and c_detail[0]['mobile_no'] or '', c_detail and c_detail[0]['fax'] or '', c_detail and c_detail[0]['address'] or '')
 
-
-	# -------------------
-	# update lead status
-	# -------------------
 	def update_lead_status(self):
 		if self.doc.lead_name:
 			sql("update `tabLead` set status='Converted' where name = %s", self.doc.lead_name)
 
-
-	# -------------------------------------------------------------------------
-	# create accont head - in tree under receivables_group of selected company
-	# -------------------------------------------------------------------------
 	def create_account_head(self):
 		if self.doc.company :
 			abbr = self.get_company_abbr()
@@ -167,15 +132,9 @@
 		else :
 			msgprint("Please Select Company under which you want to create account head")
 
-
-	# ----------------------------------------
-	# update credit days and limit in account
-	# ----------------------------------------
 	def update_credit_days_limit(self):
 		sql("update tabAccount set credit_days = '%s', credit_limit = '%s' where name = '%s'" % (self.doc.credit_days, self.doc.credit_limit, self.doc.name + " - " + self.get_company_abbr()))
 
-
-	#create address and contact from lead
 	def create_lead_address_contact(self):
 		if self.doc.lead_name:
 			details = sql("select name, lead_name, address_line1, address_line2, city, country, state, pincode, phone, mobile_no, fax, email_id from `tabLead` where name = '%s'" %(self.doc.lead_name), as_dict = 1)
@@ -211,9 +170,6 @@
 			except NameError, e:
 				pass
 
-	# ----------
-	# on update
-	# ----------
 	def on_update(self):
 		# create customer addr
 		#self.create_customer_address()
@@ -257,8 +213,6 @@
 		if self.doc.lead_name:
 			sql("update `tabLead` set status='Interested' where name=%s",self.doc.lead_name)
 			
-	# on rename
-	# ---------
 	def on_rename(self,newdn,olddn):
 		#update customer_name if not naming series
 		if get_defaults().get('cust_master_name') == 'Customer Name':
diff --git a/selling/doctype/customer/customer.txt b/selling/doctype/customer/customer.txt
index a20a982..6b174d7 100644
--- a/selling/doctype/customer/customer.txt
+++ b/selling/doctype/customer/customer.txt
@@ -2,11 +2,12 @@
  {
   "owner": "Administrator", 
   "docstatus": 0, 
-  "creation": "2012-10-02 11:27:30", 
+  "creation": "2012-11-02 17:16:46", 
   "modified_by": "Administrator", 
-  "modified": "2012-09-28 12:31:42"
+  "modified": "2012-11-30 10:54:38"
  }, 
  {
+  "autoname": "naming_series:", 
   "name": "__common__", 
   "default_print_format": "Standard", 
   "allow_print": 0, 
@@ -35,6 +36,17 @@
   "doctype": "DocType"
  }, 
  {
+  "description": "Note: You Can Manage Multiple Address or Contacts via Addresses & Contacts", 
+  "oldfieldtype": "Section Break", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Basic Info", 
+  "fieldname": "basic_info", 
+  "fieldtype": "Section Break", 
+  "reqd": 0, 
+  "permlevel": 0
+ }, 
+ {
   "print_hide": 0, 
   "no_copy": 1, 
   "oldfieldtype": "Data", 
@@ -183,7 +195,6 @@
  }, 
  {
   "doctype": "DocField", 
-  "label": "Communication History", 
   "fieldname": "communication_history", 
   "fieldtype": "Section Break", 
   "permlevel": 0
diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js
index 081a57a..0c5bf87 100644
--- a/selling/doctype/lead/lead.js
+++ b/selling/doctype/lead/lead.js
@@ -73,7 +73,6 @@
 		doc: doc,
 		email: doc.email_id
 	})
-		
 }
 
 
diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js
index a729092..3da2ac8 100644
--- a/selling/doctype/opportunity/opportunity.js
+++ b/selling/doctype/opportunity/opportunity.js
@@ -15,7 +15,6 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/support/doctype/communication/communication.js');
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn){
 	erpnext.hide_naming_series();
@@ -26,7 +25,6 @@
 		cur_frm.add_custom_button('Opportunity Lost', cur_frm.cscript['Declare Opportunity Lost']);
 		cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
 	}
-	if(!doc.__islocal) cur_frm.cscript.render_communication_list(doc, cdt, cdn);
 }
 
 // ONLOAD
@@ -48,7 +46,14 @@
 		}
 	} 
 
-	cur_frm.cscript.make_communication_body();
+	if(!doc.__islocal) {
+		cur_frm.communication_view = new wn.views.CommunicationList({
+			list: wn.model.get("Communication", {"opportunity": doc.name}),
+			parent: cur_frm.fields_dict.communication_html.wrapper,
+			doc: doc,
+			email: doc.contact_email
+		});
+	}
 	
 	if(cur_frm.fields_dict.contact_by.df.options.match(/^Profile/)) {
 		cur_frm.fields_dict.contact_by.get_query = erpnext.utils.profile_query;
diff --git a/selling/doctype/opportunity/opportunity.py b/selling/doctype/opportunity/opportunity.py
index 398418a..4f10c80 100644
--- a/selling/doctype/opportunity/opportunity.py
+++ b/selling/doctype/opportunity/opportunity.py
@@ -18,21 +18,15 @@
 from __future__ import unicode_literals
 import webnotes
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.utils import add_days, add_years, cint, cstr, date_diff, flt, getdate
 from webnotes.model import db_exists
-from webnotes.model.doc import Document, addchild, getchildren, make_autoname
-from webnotes.model.wrapper import getlist, copy_doclist
-from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
-from webnotes import session, form, msgprint, errprint
+from webnotes.model.doc import Document, addchild, make_autoname
+from webnotes.model.wrapper import getlist
+from webnotes.model.code import get_obj
+from webnotes import form, msgprint
 
-set = webnotes.conn.set
 sql = webnotes.conn.sql
-get_value = webnotes.conn.get_value
-in_transaction = webnotes.conn.in_transaction
-convert_to_lists = webnotes.conn.convert_to_lists
 	
-# -----------------------------------------------------------------------------------------
-
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
@@ -42,8 +36,8 @@
 		self.fname = 'enq_details'
 		self.tname = 'Opportunity Item'
 
-	def autoname(self):
-		self.doc.name = make_autoname(self.doc.naming_series+'.####')
+	def onload(self):
+		self.add_communication_list()
 		
 	def get_item_details(self, item_code):
 		item = sql("""select item_name, stock_uom, description_html, description, item_group, brand
@@ -94,8 +88,8 @@
 		if self.doc.contact_date and self.doc.contact_date_ref != self.doc.contact_date:
 			if self.doc.contact_by:
 				self.add_calendar_event()
-			set(self.doc, 'contact_date_ref',self.doc.contact_date)
-		set(self.doc, 'status', 'Draft')
+			webnotes.conn.set(self.doc, 'contact_date_ref',self.doc.contact_date)
+		webnotes.conn.set(self.doc, 'status', 'Draft')
 
 	def add_calendar_event(self):
 		desc=''
@@ -169,7 +163,7 @@
 		self.validate_lead_cust()
 
 	def on_submit(self):
-		set(self.doc, 'status', 'Submitted')
+		webnotes.conn.set(self.doc, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		chk = sql("select t1.name from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.docstatus=1 and (t1.status!='Order Lost' and t1.status!='Cancelled') and t2.prevdoc_docname = %s",self.doc.name)
@@ -177,7 +171,7 @@
 			msgprint("Quotation No. "+cstr(chk[0][0])+" is submitted against this Opportunity. Thus can not be cancelled.")
 			raise Exception
 		else:
-			set(self.doc, 'status', 'Cancelled')
+			webnotes.conn.set(self.doc, 'status', 'Cancelled')
 		
 	def declare_enquiry_lost(self,arg):
 		chk = sql("select t1.name from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.docstatus=1 and (t1.status!='Order Lost' and t1.status!='Cancelled') and t2.prevdoc_docname = %s",self.doc.name)
@@ -185,6 +179,6 @@
 			msgprint("Quotation No. "+cstr(chk[0][0])+" is submitted against this Opportunity. Thus 'Opportunity Lost' can not be declared against it.")
 			raise Exception
 		else:
-			set(self.doc, 'status', 'Opportunity Lost')
-			set(self.doc, 'order_lost_reason', arg)
+			webnotes.conn.set(self.doc, 'status', 'Opportunity Lost')
+			webnotes.conn.set(self.doc, 'order_lost_reason', arg)
 			return 'true'
diff --git a/selling/doctype/opportunity/opportunity.txt b/selling/doctype/opportunity/opportunity.txt
index f89a5d2..575cc10 100644
--- a/selling/doctype/opportunity/opportunity.txt
+++ b/selling/doctype/opportunity/opportunity.txt
@@ -2,12 +2,13 @@
  {
   "owner": "Administrator", 
   "docstatus": 0, 
-  "creation": "2012-11-28 11:26:19", 
+  "creation": "2012-11-24 17:21:44", 
   "modified_by": "Administrator", 
-  "modified": "2012-11-16 12:27:49"
+  "modified": "2012-11-30 10:54:00"
  }, 
  {
   "is_submittable": 1, 
+  "autoname": "naming_series:", 
   "name": "__common__", 
   "default_print_format": "Standard", 
   "search_fields": "status,transaction_date,customer,lead,enquiry_type,territory,company", 
@@ -35,6 +36,16 @@
   "doctype": "DocType"
  }, 
  {
+  "description": "Enter customer enquiry for which you might raise a quotation in future", 
+  "oldfieldtype": "Section Break", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Basic Info", 
+  "fieldname": "basic_info", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
   "description": "To manage multiple series please go to Setup > Manage Series", 
   "no_copy": 1, 
   "oldfieldtype": "Select", 
@@ -154,15 +165,14 @@
   "oldfieldtype": "Section Break", 
   "colour": "White:FFF", 
   "doctype": "DocField", 
-  "label": "Communication History", 
   "fieldname": "communication_history", 
   "fieldtype": "Section Break", 
   "permlevel": 0
  }, 
  {
-  "allow_on_submit": 1, 
   "oldfieldtype": "Table", 
   "colour": "White:FFF", 
+  "allow_on_submit": 1, 
   "doctype": "DocField", 
   "label": "Communication HTML", 
   "oldfieldname": "follow_up", 
diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js
index e629975..1b03781 100644
--- a/selling/doctype/quotation/quotation.js
+++ b/selling/doctype/quotation/quotation.js
@@ -24,8 +24,6 @@
 wn.require('app/selling/doctype/sales_common/sales_common.js');
 wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/setup/doctype/notification_control/notification_control.js');
-wn.require('app/support/doctype/communication/communication.js');
 
 // ONLOAD
 // ===================================================================================
@@ -49,7 +47,7 @@
 			hide_field(['customer','customer_address','contact_person', 'customer_name','contact_display', 'customer_group']);
 		}
 	}
-	cur_frm.cscript.make_communication_body();
+	//cur_frm.cscript.make_communication_body();
 	
 	if(cur_frm.fields_dict.contact_by.df.options.match(/^Profile/)) {
 		cur_frm.fields_dict.contact_by.get_query = erpnext.utils.profile_query;
@@ -104,7 +102,14 @@
 	if(doc.customer || doc.lead) $(cur_frm.fields_dict.contact_section.row.wrapper).toggle(true);
 	else $(cur_frm.fields_dict.contact_section.row.wrapper).toggle(false);
 	
-	if (!doc.__islocal) cur_frm.cscript.render_communication_list(doc, cdt, cdn);
+	if (!doc.__islocal) {
+		cur_frm.communication_view = new wn.views.CommunicationList({
+			list: wn.model.get("Communication", {"quotation": doc.name}),
+			parent: cur_frm.fields_dict.communication_html.wrapper,
+			doc: doc,
+			email: doc.contact_email
+		});		
+	}
 }
 
 
@@ -333,9 +338,7 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Quotation',
-		doctype: 'Quotation'
+	if(cint(wn.boot.notification_settings.quotation)) {
+		cur_frm.email_doc(wn.boot.notification_settings.quotation_message);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
\ No newline at end of file
diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py
index 76b1ef6..cef0abe 100644
--- a/selling/doctype/quotation/quotation.py
+++ b/selling/doctype/quotation/quotation.py
@@ -41,7 +41,10 @@
 		self.doclist = doclist
 		self.tname = 'Quotation Item'
 		self.fname = 'quotation_details'
- 
+
+	def onload(self):
+		self.add_communication_list()
+		 
 	# Pull Opportunity Details
 	# --------------------
 	def pull_enq_details(self):
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index f720cfa..6a3dfc4 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -25,7 +25,6 @@
 wn.require('app/selling/doctype/sales_common/sales_common.js');
 wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/setup/doctype/notification_control/notification_control.js');
 
 
 // ONLOAD
@@ -369,9 +368,7 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Sales Order',
-		doctype: 'Sales Order'
+	if(cint(wn.boot.notification_settings.sales_order)) {
+		cur_frm.email_doc(wn.boot.notification_settings.sales_order);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
diff --git a/setup/doctype/notification_control/notification_control.js b/setup/doctype/notification_control/notification_control.js
index b52520a..619d417 100644
--- a/setup/doctype/notification_control/notification_control.js
+++ b/setup/doctype/notification_control/notification_control.js
@@ -22,45 +22,5 @@
       refresh_field('custom_message');
     }
     $c_obj(make_doclist(cdt, cdn),'get_message',doc.select_transaction, callback)
-}
-}
-
-cur_frm.cscript.notify = function(doc, args) {
-	var doc = locals[doc.doctype][doc.name];
-	$c_obj(make_doclist(doc.doctype, doc.name), 'get_formatted_message', {
-		type: args['type'],
-		doctype: args['doctype'],
-		contact_name: args['contact_name'] || doc.contact_display
-	}, function(r, rt) {
-		if(!r.exc) {
-			var res = JSON.parse(r.message);
-			var send_from = (function() {
-				if(user!='Administrator') {
-					return user;
-				} else {
-					return (wn.control_panel.auto_email_id || 
-						'ERPNext Notification<automail@erpnext.com>');
-				}
-			})();
-			if(res.send) {
-				var print_heading = (doc.select_print_heading || args['type'])
-				if(validate_email(args['send_to'] || doc.contact_email || '')) {
-					sendmail(
-						args['send_to'] || doc.contact_email,
-						send_from,
-						send_from,
-						doc.company + " - " + print_heading + " - " + doc.name,
-						res.message,
-						res.print_format
-					);
-					msgprint('This ' + print_heading + ' is being sent to <b>'
-						+ (args['send_to'] || doc.contact_email) + '</b><br />...');
-				} else {
-					msgprint('Invalid/Missing Email Address of Contact. Auto notification for ' 
-						+ print_heading + ' not sent.');
-				}
-			}
-		}
-		//console.log(JSON.parse(r.message));
-	});
+  }
 }
diff --git a/setup/doctype/notification_control/notification_control.py b/setup/doctype/notification_control/notification_control.py
index f8b0ee2..b40ba6e 100644
--- a/setup/doctype/notification_control/notification_control.py
+++ b/setup/doctype/notification_control/notification_control.py
@@ -25,84 +25,17 @@
 
 sql = webnotes.conn.sql
 
-# -----------------------------------------------------------------------------------------
-# Notification control
 class DocType:
 	def __init__(self,d,dl):
 		self.doc, self.doclist = d,dl
 
-	# get message to load in custom text
-	# ----------------------------------
 	def get_message(self, arg):
 		fn = arg.lower().replace(' ', '_') + '_message'
 		v = sql("select value from tabSingles where field=%s and doctype=%s", (fn, 'Notification Control'))
 		return v and v[0][0] or ''
 
-	# set custom text
-	# ---------------
 	def set_message(self, arg = ''):
 		fn = self.doc.select_transaction.lower().replace(' ', '_') + '_message'
 		webnotes.conn.set(self.doc, fn, self.doc.custom_message)
 		msgprint("Custom Message for %s updated!" % self.doc.select_transaction)
 
-	
-	def get_formatted_message(self, args):
-		"""
-			args can contain:
-				* type
-				* doctype
-				* contact_name
-		"""
-		import json
-		args = json.loads(args)
-		res = {
-			'send': 0,
-			'message': self.prepare_message(args),
-			'print_format': self.get_default_print_format(args)
-		}
-
-		dt_small = args.get('doctype').replace(' ', '_').lower()
-		if cint(self.doc.fields.get(dt_small)):
-			res['send'] = 1
-
-		return json.dumps(res)
-
-
-	def prepare_message(self, args):
-		"""
-			Prepares message body
-		"""
-		if args.get('type'):
-			msg_dict = {}
-			msg_dict['message'] = args.get('message') or self.get_message(args.get('type'))
-			msg_dict['company'] = Document('Control Panel', 'Control Panel').company_name
-			msg_dict['salutation'] = "Hi" + (args.get('contact_name') and (" " + args.get('contact_name')) or "")
-			msg_dict['send_from'] = webnotes.conn.sql("""\
-				SELECT CONCAT_WS(' ', first_name, last_name)
-				FROM `tabProfile`
-				WHERE name = %s""", webnotes.session['user'], as_list=1)[0][0] or ''
-			
-			return """\
-				<div>
-					%(salutation)s,
-
-					%(message)s
-					
-					Thanks,
-					%(send_from)s
-					%(company)s
-				</div>""" % msg_dict
-
-		else: return ""
-
-
-	def get_default_print_format(self, args):
-		"""
-			Get default print format from doclayer
-		"""
-		doclayer = get_obj('Customize Form', 'Customize Form')
-		doclayer.doc.doc_type = args.get('doctype')
-		doclayer.get()
-		if doclayer.doc.default_print_format:
-			return doclayer.doc.default_print_format
-		else: return 'Standard'
diff --git a/startup/event_handlers.py b/startup/event_handlers.py
index 7d1f584..07205b8 100644
--- a/startup/event_handlers.py
+++ b/startup/event_handlers.py
@@ -76,6 +76,8 @@
 		import webnotes.model.doctype
 		bootinfo['docs'] += webnotes.model.doctype.get('Event')
 		bootinfo['docs'] += webnotes.model.doctype.get('Search Criteria')
+		bootinfo['notification_settings'] = webnotes.doc("Notification Control", 
+			"Notification Control").get_values()
 		
 		bootinfo['modules_list'] = webnotes.conn.get_global('modules_list')
 		
diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js
index 4a3910a..6295811 100644
--- a/stock/doctype/delivery_note/delivery_note.js
+++ b/stock/doctype/delivery_note/delivery_note.js
@@ -23,7 +23,6 @@
 wn.require('app/selling/doctype/sales_common/sales_common.js');
 wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/setup/doctype/notification_control/notification_control.js');
 
 // ONLOAD
 // ================================================================================================
@@ -327,9 +326,7 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Delivery Note',
-		doctype: 'Delivery Note'
+	if(cint(wn.boot.notification_settings.delivery_note)) {
+		cur_frm.email_doc(wn.boot.notification_settings.delivery_note);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
\ No newline at end of file
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.js b/stock/doctype/purchase_receipt/purchase_receipt.js
index b943314..0ab6681 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -21,7 +21,6 @@
 wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
 wn.require('app/buying/doctype/purchase_common/purchase_common.js');
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/setup/doctype/notification_control/notification_control.js');
 
 //========================== On Load ================================================================
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
@@ -311,9 +310,7 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	var args = {
-		type: 'Purchase Receipt',
-		doctype: 'Purchase Receipt'
+	if(cint(wn.boot.notification_settings.purchase_receipt)) {
+		cur_frm.email_doc(wn.boot.notification_settings.purchase_receipt);
 	}
-	cur_frm.cscript.notify(doc, args);
 }
diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py
index 398a831..37b818e 100644
--- a/utilities/transaction_base.py
+++ b/utilities/transaction_base.py
@@ -238,10 +238,12 @@
 		return dcc	
 	
 
-	def get_formatted_message(self, args):
-		""" get formatted message for auto notification"""
-		return get_obj('Notification Control').get_formatted_message(args)
-
+	def load_notification_message(self):
+		dt = self.doc.doctype.lower().replace(" ", "_")
+		if int(webnotes.conn.get_value("Notification Control", None, dt) or 0):
+			self.doc.fields["__notification_message"] = \
+				webnotes.conn.get_value("Notification Control", None, dt + "_message")
+				
 	def add_communication_list(self):
 		# remove communications if present
 		self.doclist = webnotes.doclist(self.doclist).get({