Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
index e7fb676..edff465 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
@@ -18,8 +18,8 @@
 		if(!doc.voucher_date) set_multiple(dt,dn,{voucher_date:get_today()});
 		if(!doc.due_date) set_multiple(dt,dn,{due_date:get_today()});
 		if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
-		if(!doc.currency && sys_defaults.currency) set_multiple(cdt,cdn,{currency:sys_defaults.currency});
-		if(!doc.price_list_currency) set_multiple(cdt, cdn, {price_list_currency: doc.currency, plc_conversion_rate: 1});
+		if(!doc.currency && sys_defaults.currency) set_multiple(dt,dn,{currency:sys_defaults.currency});
+		if(!doc.price_list_currency) set_multiple(dt, dn, {price_list_currency: doc.currency, plc_conversion_rate: 1});
 
 		//for previously created sales invoice, set required field related to pos
 		if(doc.is_pos ==1) cur_frm.cscript.is_pos(doc, dt, dn);
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index a429b68..53304b0 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -53,7 +53,7 @@
     call_back = function(doc, cdt, cdn){
       cur_frm.cscript.calc_amount(doc, 2);
     }
-    str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty)}
+    str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty), 'conversion_rate':doc.conversion_rate}
     // Updates Conversion Factor, Qty and Purchase Rate
     get_server_fields('get_uom_details',JSON.stringify(str_arg), fname, doc,cdt,cdn,1, call_back);
     // don't make mistake of calling update_stock_qty() the get_uom_details returns stock_qty as per conversion factor properly
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 84bfffb..5bade92 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -165,8 +165,8 @@
 				'qty'				: flt(arg['stock_qty']) / flt(uom[0]['conversion_factor']),
 				'purchase_ref_rate'	: (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0,
 				'purchase_rate'		: (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0,
-				'import_ref_rate'	: (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(self.doc.conversion_rate)) or 0,
-				'import_rate'		: (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(self.doc.conversion_rate)) or 0
+				'import_ref_rate'	: (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(arg['conversion_rate'])) or 0,
+				'import_rate'		: (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(arg['conversion_rate'])) or 0
 			}
 		
 		return ret
diff --git a/erpnext/patches/delete_pur_of_service.py b/erpnext/patches/delete_pur_of_service.py
new file mode 100644
index 0000000..eecece6
--- /dev/null
+++ b/erpnext/patches/delete_pur_of_service.py
@@ -0,0 +1,4 @@
+def execute():
+	import webnotes
+	from webnotes.model import delete_doc
+	delete_doc('DocType', 'Purpose of Service')
diff --git a/erpnext/patches/pending_patches.py b/erpnext/patches/pending_patches.py
new file mode 100644
index 0000000..970af74
--- /dev/null
+++ b/erpnext/patches/pending_patches.py
@@ -0,0 +1,58 @@
+def execute():
+	import webnotes
+	from webnotes.model.code import get_obj
+	from webnotes.modules.module_manager import reload_doc
+	sql = webnotes.conn.sql
+
+	reload_doc('hr', 'doctype', 'appraisal')
+	reload_doc('hr', 'doctype', 'appraisal_detail')
+
+	sql("update `tabDocField` set `hidden` = 0 where fieldname = 'group_or_ledger' and parent = 'Cost Center'")
+	sql("update tabDocPerm set amend = 0 where parent = 'Salary Structure'")
+	sql("update tabDocPerm set cancel = 1 where parent = 'Company' and role = 'System Manager'")
+	
+	if sql("select count(name) from `tabDocField` where label = 'View Ledger Entry' and parent = 'Journal Voucher' and fieldtype = 'Button'")[0][0] > 1:
+		sql("delete from `tabDocField` where label = 'View Ledger Entry' and parent = 'Journal Voucher' and fieldtype = 'Button' limit 1")
+	if sql("select count(name) from `tabDocField` where label = 'Get Balance' and parent = 'Journal Voucher' and fieldtype = 'Button'")[0][0] > 1:
+		sql("delete from `tabDocField` where label = 'Get Balance' and parent = 'Journal Voucher' and fieldtype = 'Button' limit 1")
+	
+	reload_doc('accounts', 'doctype', 'internal_reconciliation')
+	reload_doc('accounts', 'doctype', 'ir_payment_detail')
+	reload_doc('accounts', 'Module Def', 'Accounts')
+		
+
+		
+	if sql("select count(name) from `tabDocField` where label = 'Get Specification Details' and parent = 'QA Inspection Report' and fieldtype = 'Button'")[0][0] > 1:
+		sql("delete from `tabDocField` where label = 'Get Specification Details' and parent = 'QA Inspection Report' and fieldtype = 'Button' limit 1")
+	
+	reload_doc('stock', 'DocType Mapper', 'Purchase Order-Purchase Receipt')
+		
+	reload_doc('accounts', 'doctype', 'cost_center')
+	reload_doc('stock', 'Module Def', 'Stock')
+	sql("delete from `tabModule Def Item` where display_name = 'Serial No' and parent = 'Support'")
+	sql("update `tabDocType` set subject = 'Item Code: %(item_code)s, Warehouse: %(warehouse)s' where name = 'Serial No'")
+
+	# Patch for adding packing related columns (packed by, checked by, shipping mark etc)
+	reload_doc('stock','doctype','delivery_note')
+	sql("update `tabDocField` set allow_on_submit = 1 where fieldname = 'page_break'")
+	sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('indent_details', 'po_details', 'purchase_receipt_details', 'entries', 'sales_order_details', 'delivery_note_details', 'quotation_details') and fieldtype = 'Table'")
+		
+	from webnotes.session_cache import clear_cache
+	clear_cache(webnotes.session['user'])
+
+	# FEATURES SETUP
+	#----------------
+	reload_doc('setup', 'doctype','features_setup')
+	flds = ['page_break', 'projects', 'packing_details', 'discounts', 'brands', 'item_batch_nos', 'after_sales_installations', 'item_searial_nos', 'item_group_in_details', 'exports', 'imports', 'item_advanced', 'sales_extras', 'more_info', 'quality', 'manufacturing', 'pos', 'item_serial_nos']
+	st = "'"+"', '".join(flds)+"'"
+	sql("delete from `tabSingles` where field in (%s) and doctype = 'Features Setup'" % st)
+	sql("delete from `tabDocField` where fieldname in (%s) and parent = 'Features Setup'" % st)
+	sql("delete from `tabDefaultValue` where defkey in (%s) and parent = 'Control Panel'" % st)
+
+	if not sql("select * from `tabDefaultValue` where defkey like 'fs_%' and parent = 'Control Panel'"):
+		rs = sql("select fieldname from tabDocField where parent='Features Setup' and fieldname is not null")
+		fs = get_obj('Features Setup', 'Features Setup')
+		for d in rs:
+			fs.doc.fields[d[0]] = 1
+		fs.doc.save()
+		fs.validate()
diff --git a/erpnext/patches/pos_setting_patch.py b/erpnext/patches/pos_setting_patch.py
new file mode 100644
index 0000000..c202ab7
--- /dev/null
+++ b/erpnext/patches/pos_setting_patch.py
@@ -0,0 +1,6 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("update `tabDocField` set `default` = 1 where fieldname = 'conversion_rate' and parent = 'POS Setting'")
+
+	from webnotes.model import delete_doc
+	delete_doc('DocType', 'POS Settings')
diff --git a/erpnext/patches/reload_doctype.py b/erpnext/patches/reload_doctype.py
new file mode 100644
index 0000000..a63039a
--- /dev/null
+++ b/erpnext/patches/reload_doctype.py
@@ -0,0 +1,4 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('core', 'doctype', 'doctype')
diff --git a/erpnext/patches/reload_po_pr_mapper.py b/erpnext/patches/reload_po_pr_mapper.py
new file mode 100644
index 0000000..c97f20c
--- /dev/null
+++ b/erpnext/patches/reload_po_pr_mapper.py
@@ -0,0 +1,4 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('stock', 'DocType Mapper', 'Purchase Order-Purchase Receipt')
diff --git a/erpnext/projects/doctype/project_control/project_control.py b/erpnext/projects/doctype/project_control/project_control.py
index 4b382a5..ed192d2 100644
--- a/erpnext/projects/doctype/project_control/project_control.py
+++ b/erpnext/projects/doctype/project_control/project_control.py
@@ -130,6 +130,7 @@
 			msg2="""<h2>Two days to complete: %(name)s</h2>
 			<p>This is a reminder for the task %(name)s has been assigned to you 
 				by %(senders_name)s on %(opening_date)s</p>
+			<p><b>Subject:</b> %(subject)s </p>
 			<p><b>Project:</b> %(project)s</p>
 			<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
 			<p><b>Expected End Date:</b> %(exp_end_date)s</p>
diff --git a/erpnext/projects/doctype/ticket/ticket.py b/erpnext/projects/doctype/ticket/ticket.py
index 4dbcfe7..24c9750 100644
--- a/erpnext/projects/doctype/ticket/ticket.py
+++ b/erpnext/projects/doctype/ticket/ticket.py
@@ -97,6 +97,7 @@
 			'opening_date': self.doc.opening_date,
 			'exp_start_date': self.doc.exp_start_date,
 			'exp_end_date' : self.doc.exp_end_date,
+			'subject' : self.doc.subject,
 			'project': self.doc.project,
 			'review_date': self.doc.review_date,
 			'description': self.doc.description
@@ -105,6 +106,7 @@
 		msg2="""<h2>%(name)s</h2>
 			<p>This is a Notification for the task %(name)s that has been assigned to you 
 				by %(senders_name)s on %(opening_date)s</p>
+			<p><b>Subject:</b> %(subject)s </p>
 			<p><b>Project:</b> %(project)s</p>
 			<p><b>Review Date:</b> %(review_date)s</p>
 			<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
diff --git a/erpnext/setup/doctype/manage_account/manage_account.py b/erpnext/setup/doctype/manage_account/manage_account.py
index 5dd2d06..5b1292a 100644
--- a/erpnext/setup/doctype/manage_account/manage_account.py
+++ b/erpnext/setup/doctype/manage_account/manage_account.py
@@ -42,16 +42,16 @@
     def_list = [['fiscal_year',self.doc.current_fiscal_year],
                 ['company',self.doc.default_company],
                 ['currency',self.doc.default_currency],
-                ['price_list_name',self.doc.default_price_list],
-				['price_list_currency', self.doc.default_price_list_currency],
-                ['item_group',self.doc.default_item_group],
-                ['customer_group',self.doc.default_customer_group],
-                ['cust_master_name',self.doc.cust_master_name], 
-                ['supplier_type',self.doc.default_supplier_type],
+                ['price_list_name',self.doc.default_price_list or ''],
+				['price_list_currency', self.doc.default_price_list_currency or ''],
+                ['item_group',self.doc.default_item_group or ''],
+                ['customer_group',self.doc.default_customer_group or ''],
+                ['cust_master_name',self.doc.cust_master_name or ''], 
+                ['supplier_type',self.doc.default_supplier_type or ''],
                 ['supp_master_name',self.doc.supp_master_name], 
-                ['territory',self.doc.default_territory],
-                ['stock_uom',self.doc.default_stock_uom],
-                ['fraction_currency',self.doc.default_currency_fraction],
+                ['territory',self.doc.default_territory or ''],
+                ['stock_uom',self.doc.default_stock_uom or ''],
+                ['fraction_currency',self.doc.default_currency_fraction or ''],
                 ['valuation_method',self.doc.default_valuation_method]]
 
     for d in def_list:
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index c2594e3..2ad1236 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -82,9 +82,12 @@
 
 	#-----------------------------------------------------------------------------------------------------------------------------------
 	def update_series_start(self):
-		ser_det = sql("select name from `tabSeries` where name = %s", self.doc.prefix)
-		if ser_det:
-			sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.starts_from-1,self.doc.prefix))
+		if self.doc.prefix:
+			ser_det = sql("select name from `tabSeries` where name = %s", self.doc.prefix)
+			if ser_det:
+				sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.starts_from-1,self.doc.prefix))
+			else:
+				sql("insert into tabSeries (name, current) values (%s,%s)",(cstr(self.doc.prefix),cint(self.doc.starts_from)-1))
+			msgprint("Series Updated Successfully")
 		else:
-			sql("insert into tabSeries (name, current) values (%s,%s)",(cstr(self.doc.prefix),cint(self.doc.starts_from)-1))
-		msgprint("Series Updated Successfully")
+			msgprint("Please select prefix first")
diff --git a/erpnext/setup/page/setup/setup.js b/erpnext/setup/page/setup/setup.js
index f536c70..b3a195e 100644
--- a/erpnext/setup/page/setup/setup.js
+++ b/erpnext/setup/page/setup/setup.js
@@ -168,7 +168,7 @@
     ['Manage Trash',2,'Trash','','Restore trashed items'],
     ['Import Data',2,'Import Data','','Import data from CSV files'],
     ['Manage Users',2,'My Company','','Add / remove users and manage their roles'],
-    ['Web Forms',2,'Webforms','', 'Code to embed forms in yor website'],
+    //['Web Forms',2,'Webforms','', 'Code to embed forms in yor website'],
     ['Permissions Manager',2,'Permission Engine','', 'Manage all permissions from one tool'],
     //['Property Setter',1,'Property Setter','', 'Customize properties of a Form (DocType) or Field'],
     ['Customize Form View',3,'DocLayer','', 'Customize properties of a Form (DocType) or Field'],
@@ -235,8 +235,7 @@
   this.buying = {'Buying':[['Supplier Type',1,'Supplier Type','','Manage supplier classifications'],
     ['Supplier',1,'Supplier','id'+NEWLINE+'supplier_type'+NEWLINE+'supplier_status'+NEWLINE+'company','Supplier master']]};
   
-  this.maintenance = {'Maintenance':[['Serial No',1,'Serial No','item_code'+NEWLINE+'status'+NEWLINE+'pr_no'+NEWLINE+'delivery_note_no'+NEWLINE+'customer_name','Manage unique serial numbers for items'],
-    ['Purpose of Service',1,'Purpose of Service','','Purpose of service master']]};
+  this.maintenance = {'Maintenance':[['Serial No',1,'Serial No','item_code'+NEWLINE+'status'+NEWLINE+'pr_no'+NEWLINE+'delivery_note_no'+NEWLINE+'customer_name','Manage unique serial numbers for items']]};
   
   this.production = {'Production':[['Bill of Materials',1,'Bill Of Materials','id'+NEWLINE+'item'+NEWLINE+'description'+NEWLINE+'operating_cost'+NEWLINE+'maintained_by','Muti-level bill of materials and operations'],
     ['Workstation',1,'Workstation','id'+NEWLINE+'workstation_name'+NEWLINE+'warehouse'+NEWLINE+'description','Workstation master']]};
diff --git a/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt b/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
index 196d028..67738bd 100644
--- a/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
+++ b/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
-		'modified': '2011-10-12 10:49:40',
+		'modified': '2012-01-05 11:21:23',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -22,7 +22,6 @@
 	# These values are common for all Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'map': 'Yes',
 		'name': '__common__',
 		'parent': 'Purchase Order-Purchase Receipt',
 		'parentfield': 'field_mapper_details',
@@ -50,6 +49,7 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'supplier',
+		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'supplier'
 	},
@@ -59,6 +59,7 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
+		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'company'
 	},
@@ -68,6 +69,7 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'currency',
+		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'currency'
 	},
@@ -76,6 +78,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_detail_docname'
 	},
@@ -84,6 +87,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -92,6 +96,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -101,6 +106,7 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'item_code',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'item_code'
 	},
@@ -109,6 +115,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'received_qty'
 	},
@@ -117,6 +124,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'qty'
 	},
@@ -125,6 +133,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.conversion_factor)',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'stock_qty'
 	},
@@ -133,6 +142,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.import_rate)',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'import_amount'
 	},
@@ -141,6 +151,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.purchase_rate)',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'amount'
 	},
@@ -149,6 +160,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'schedule_date',
+		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'schedule_date'
 	},
@@ -157,6 +169,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'net_total',
+		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'net_total'
 	},
@@ -165,6 +178,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'grand_total',
+		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'grand_total'
 	},
@@ -173,10 +187,20 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'total_tax',
+		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'total_tax'
 	},
 
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'transaction_date',
+		'map': 'No',
+		'match_id': 0,
+		'to_field': 'transaction_date'
+	},
+
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 881a176..6a228c1 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -307,7 +307,6 @@
 	# item re-order
 	# -------------
 	def reorder_item(self,doc_type,doc_name):
-		msgprint(get_value('Manage Account', None, 'auto_indent'))
 		if get_value('Manage Account', None, 'auto_indent'):
 			#check if re-order is required
 			indent_detail_fields = sql("select re_order_level,item_name,description,brand,item_group,lead_time_days,min_order_qty,email_notify from tabItem where item_code = %s",(self.doc.item_code),as_dict=1)
@@ -331,7 +330,7 @@
 		indent_details_child.item_code = self.doc.item_code
 		indent_details_child.uom = self.doc.stock_uom
 		indent_details_child.warehouse = self.doc.warehouse
-		indent_details_child.schedule_date= add_days(nowdate(),i['lead_time_days'])
+		indent_details_child.schedule_date= add_days(nowdate(),cint(i['lead_time_days']))
 		indent_details_child.item_name = i['item_name']
 		indent_details_child.description = i['description']
 		indent_details_child.item_group = i['item_group']
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 7399530..5cb4276 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -15,14 +15,14 @@
   if(!doc.transaction_date) set_multiple(dt,dn,{transaction_date:get_today()});
   if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
   if(doc.__islocal && doc.customer) cur_frm.cscript.pull_item_details_onload(doc,dt,dn);
-  if(!doc.price_list_currency) set_multiple(cdt, cdn, {price_list_currency: doc.currency, plc_conversion_rate: 1});
-
+  if(!doc.price_list_currency) {
+	set_multiple(dt, dn, {price_list_currency: doc.currency, plc_conversion_rate:1});
+}
   if(!doc.posting_time) doc.posting_time = wn.datetime.get_cur_time()
     
   if(doc.__islocal){
     hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
   }   
-
 }
 
 cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
@@ -34,7 +34,6 @@
 // REFRESH
 // ================================================================================================
 cur_frm.cscript.refresh = function(doc, cdt, cdn) { 
-
   cur_frm.clear_custom_buttons();
  
   if(doc.per_billed < 100 && doc.docstatus==1) cur_frm.add_custom_button('Make Invoice', cur_frm.cscript['Make Sales Invoice']);
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
index d5c90b5..c47ec22 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -46,14 +46,15 @@
     import datetime
     self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
     count = 0
+    sql("delete from `tabMaintenance Schedule Detail` where parent='%s'" %(self.doc.name))
     for d in getlist(self.doclist, 'item_maintenance_detail'):
       self.validate_maintenance_detail()
-      s_list =[]
+      s_list =[]	
       s_list = self.create_schedule_list(d.start_date, d.end_date, d.no_of_visits)
-      
       for i in range(d.no_of_visits):        
         child = addchild(self.doc,'maintenance_schedule_detail','Maintenance Schedule Detail',1,self.doclist)
         child.item_code = d.item_code
+        child.item_name = d.item_name
         child.scheduled_date = s_list[i].strftime('%Y-%m-%d')
         if d.serial_no:
           child.serial_no = d.serial_no
@@ -61,8 +62,51 @@
         count = count+1
         child.incharge_name = d.incharge_name
         child.save(1)
+        
     self.on_update()
-  
+
+
+
+  def on_submit(self):
+    if not getlist(self.doclist, 'maintenance_schedule_detail'):
+      msgprint("Please click on 'Generate Schedule' to get schedule")
+      raise Exception
+    self.check_serial_no_added()
+    self.validate_serial_no_warranty()
+    self.validate_schedule()
+
+    email_map ={}
+    for d in getlist(self.doclist, 'item_maintenance_detail'):
+      if d.serial_no:
+        self.update_amc_date(d.serial_no, d.end_date)
+
+      if d.incharge_name not in email_map:
+      	e = sql("select email_id, name from `tabSales Person` where name='%s' " %(d.incharge_name),as_dict=1)[0]
+        email_map[d.incharge_name] = (e['email_id'])
+
+      scheduled_date =sql("select scheduled_date from `tabMaintenance Schedule Detail` \
+        where incharge_name='%s' and item_code='%s' and parent='%s' " %(d.incharge_name, \
+        d.item_code, self.doc.name), as_dict=1, debug=1)
+
+      for key in scheduled_date:
+        if email_map[d.incharge_name]:
+          self.add_calender_event(key["scheduled_date"],email_map[d.incharge_name],d.item_code)     
+    set(self.doc, 'status', 'Submitted')    
+    
+
+  def add_calender_event(self,scheduled_date,incharge_email,item_code):
+    """ Add calendar event for Maintenece Schedule in calendar of Allocated person"""
+    event = Document('Event')
+    event.owner = incharge_email
+    event.description = "Item Code:%s and Reference:%s" %(item_code,self.doc.name)
+    event.event_date = scheduled_date
+    event.event_hour =  '10:00'
+    event.event_type = 'Private'
+    event.ref_type = 'Maintenance Schedule'
+    event.ref_name = self.doc.name
+    event.save(1)
+
+
   #get schedule dates
   #----------------------
   def create_schedule_list(self, start_date, end_date, no_of_visit):
@@ -97,6 +141,8 @@
       msgprint("Weekly periodicity can be set for period of atleast 1 week or more")
       raise Exception
   
+
+
   #get count on the basis of periodicity selected
   #----------------------------------------------------
   def get_no_of_visits(self, arg):
@@ -121,6 +167,8 @@
     ret = {'no_of_visits':count}
     return ret
   
+
+
   def validate_maintenance_detail(self):
     if not getlist(self.doclist, 'item_maintenance_detail'):
       msgprint("Please enter Maintaince Details first")
@@ -269,21 +317,15 @@
           msgprint("Please click on 'Generate Schedule' to fetch serial no added for item "+m.item_code)
           raise Exception
   
-  def on_submit(self):
-    if not getlist(self.doclist, 'maintenance_schedule_detail'):
-      msgprint("Please click on 'Generate Schedule' to get schedule")
-      raise Exception
-    self.check_serial_no_added()
-    self.validate_serial_no_warranty()
-    self.validate_schedule()
-    for d in getlist(self.doclist, 'item_maintenance_detail'):
-      if d.serial_no:
-        self.update_amc_date(d.serial_no, d.end_date)
-    set(self.doc, 'status', 'Submitted')    
-
+  
   
   def on_cancel(self):
     for d in getlist(self.doclist, 'item_maintenance_detail'):
       if d.serial_no:
         self.update_amc_date(d.serial_no, '')
     set(self.doc, 'status', 'Cancelled')
+    sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name))
+  def on_trash(self):
+    sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name))
+    
+