synced timestamps
diff --git a/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt b/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt
index 3ceb9b2..981e64a 100644
--- a/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt
+++ b/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:34',
 		'docstatus': 0,
-		'modified': '2011-06-15 14:42:33',
+		'modified': '2011-08-09 11:14:09',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -23,6 +23,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'map': 'Yes',
+		'match_id': 1,
 		'name': '__common__',
 		'parent': 'Delivery Note-Receivable Voucher',
 		'parentfield': 'field_mapper_details',
@@ -48,261 +49,14 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 1,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'currency',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'currency'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 13,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'price_list_name',
-		'idx': 14,
-		'match_id': 0,
-		'to_field': 'price_list_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge',
-		'idx': 15,
-		'match_id': 0,
-		'to_field': 'charge'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 16,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 17,
-		'match_id': 0,
-		'to_field': 'terms'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 18,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 19,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 20,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'batch_no',
-		'idx': 21,
-		'match_id': 1,
-		'to_field': 'batch_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'serial_no',
-		'idx': 22,
-		'match_id': 1,
-		'to_field': 'serial_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 23,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
-		'idx': 24,
-		'match_id': 1,
+		'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt)) / flt(obj.basic_rate)',
 		'to_field': 'qty'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 25,
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'base_ref_rate',
-		'idx': 26,
-		'match_id': 1,
-		'to_field': 'base_ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'ref_rate',
-		'idx': 27,
-		'match_id': 1,
-		'to_field': 'ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'basic_rate',
-		'idx': 28,
-		'match_id': 1,
-		'to_field': 'basic_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 29,
-		'match_id': 1,
 		'to_field': 'delivery_note'
 	},
 
@@ -310,8 +64,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 30,
-		'match_id': 1,
 		'to_field': 'dn_detail'
 	},
 
@@ -319,8 +71,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'prevdoc_docname',
-		'idx': 31,
-		'match_id': 1,
 		'to_field': 'sales_order'
 	},
 
@@ -328,286 +78,27 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'prevdoc_detail_docname',
-		'idx': 32,
-		'match_id': 1,
 		'to_field': 'so_detail'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 33,
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 34,
-		'match_id': 1,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.basic_rate)',
-		'idx': 35,
-		'match_id': 1,
+		'from_field': 'eval: flt(obj.amount) - flt(obj.billed_amt)',
 		'to_field': 'amount'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.export_rate)',
-		'idx': 36,
-		'match_id': 1,
+		'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt)) * flt(obj.export_rate)/flt(obj.basic_rate)',
 		'to_field': 'export_amount'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'adj_rate',
-		'idx': 37,
-		'match_id': 1,
-		'to_field': 'adj_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 38,
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 39,
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 40,
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 41,
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 42,
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 43,
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 44,
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tax_amount',
-		'idx': 45,
-		'match_id': 2,
-		'to_field': 'tax_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total',
-		'idx': 46,
-		'match_id': 2,
-		'to_field': 'total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_person',
-		'idx': 47,
-		'match_id': 3,
-		'to_field': 'sales_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_designation',
-		'idx': 48,
-		'match_id': 3,
-		'to_field': 'sales_designation'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_percentage',
-		'idx': 49,
-		'match_id': 3,
-		'to_field': 'allocated_percentage'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_amount',
-		'idx': 50,
-		'match_id': 3,
-		'to_field': 'allocated_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'incentives',
-		'idx': 51,
-		'match_id': 3,
-		'to_field': 'incentives'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 52,
-		'match_id': 0,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'campaign',
-		'idx': 53,
-		'match_id': 0,
-		'to_field': 'campaign'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 54,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_partner',
-		'idx': 55,
-		'match_id': 0,
-		'to_field': 'sales_partner'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'commission_rate',
-		'idx': 56,
-		'match_id': 0,
-		'to_field': 'commission_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total_commission',
-		'idx': 57,
-		'match_id': 0,
-		'to_field': 'total_commission'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 58,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'net_total',
-		'idx': 59,
-		'match_id': 0,
-		'to_field': 'net_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total',
-		'idx': 60,
-		'match_id': 0,
-		'to_field': 'grand_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'project_name',
-		'idx': 61,
-		'match_id': 0,
-		'to_field': 'project_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'warehouse',
-		'idx': 62,
-		'match_id': 1,
-		'to_field': 'warehouse'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Delivery Note',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Receivable Voucher',
 		'validation_logic': 'docstatus=1'
@@ -618,11 +109,10 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'delivery_note_details',
 		'from_table': 'Delivery Note Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'entries',
 		'to_table': 'RV Detail',
-		'validation_logic': '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1'
+		'validation_logic': 'amount > ifnull(billed_amt, 0) and docstatus = 1'
 	},
 
 	# Table Mapper Detail
@@ -630,7 +120,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'other_charges',
 		'from_table': 'RV Tax Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'other_charges',
 		'to_table': 'RV Tax Detail',
@@ -642,7 +131,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_team',
 		'from_table': 'Sales Team',
-		'idx': 4,
 		'match_id': 3,
 		'to_field': 'sales_team',
 		'to_table': 'Sales Team',
diff --git a/accounts/DocType Mapper/Project-Receivable Voucher/Project-Receivable Voucher.txt b/accounts/DocType Mapper/Project-Receivable Voucher/Project-Receivable Voucher.txt
index 2a77358..0854802 100644
--- a/accounts/DocType Mapper/Project-Receivable Voucher/Project-Receivable Voucher.txt
+++ b/accounts/DocType Mapper/Project-Receivable Voucher/Project-Receivable Voucher.txt
@@ -14,7 +14,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Project',
-		'idx': 1,
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Project-Receivable Voucher',
@@ -26,13 +25,16 @@
 
 	# These values are common for all Field Mapper Detail
 	{
+		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
+		'from_field': 'customer',
 		'map': 'Yes',
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Project-Receivable Voucher',
 		'parentfield': 'field_mapper_details',
-		'parenttype': 'DocType Mapper'
+		'parenttype': 'DocType Mapper',
+		'to_field': 'customer'
 	},
 
 	# These values are common for all DocType Mapper
@@ -52,35 +54,7 @@
 
 	# Field Mapper Detail
 	{
-		'checking_operator': '=',
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 1,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 2,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 3,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 4,
-		'to_field': 'territory'
+		'doctype': 'Field Mapper Detail'
 	},
 
 	# Table Mapper Detail
diff --git a/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt b/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt
index 76bdd1e..aa4e787 100644
--- a/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt
+++ b/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
 		'modified': '2011-05-13 11:26:20',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -23,6 +23,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'map': 'Yes',
+		'match_id': 1,
 		'name': '__common__',
 		'parent': 'Purchase Order-Payable Voucher',
 		'parentfield': 'field_mapper_details',
@@ -48,153 +49,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 1,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'currency',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'currency'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'supplier'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_name',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'supplier_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_name',
-		'idx': 6,
-		'match_id': 1,
-		'to_field': 'supplier_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_address',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'supplier_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 13,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
-		'idx': 16,
-		'match_id': 1,
 		'to_field': 'qty'
 	},
 
@@ -202,8 +57,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'purchase_rate',
-		'idx': 17,
-		'match_id': 1,
 		'to_field': 'rate'
 	},
 
@@ -211,44 +64,20 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.purchase_rate)',
-		'idx': 18,
-		'match_id': 1,
 		'to_field': 'amount'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'import_rate',
-		'idx': 19,
-		'match_id': 1,
-		'to_field': 'import_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.import_rate)',
-		'idx': 20,
-		'match_id': 1,
 		'to_field': 'import_amount'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 21,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 22,
-		'match_id': 1,
 		'to_field': 'purchase_order'
 	},
 
@@ -256,124 +85,13 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 23,
-		'match_id': 1,
 		'to_field': 'po_detail'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 24,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 25,
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'category',
-		'idx': 26,
-		'match_id': 2,
-		'to_field': 'category'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'add_deduct_tax',
-		'idx': 27,
-		'match_id': 2,
-		'to_field': 'add_deduct_tax'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 28,
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 29,
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 30,
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 31,
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 32,
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'cost_center',
-		'idx': 33,
-		'match_id': 2,
-		'to_field': 'cost_center'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 34,
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'project_name',
-		'idx': 35,
-		'match_id': 0,
-		'to_field': 'project_name'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Purchase Order',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Payable Voucher',
 		'validation_logic': 'docstatus =1'
@@ -384,7 +102,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'po_details',
 		'from_table': 'PO Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'entries',
 		'to_table': 'PV Detail',
@@ -396,7 +113,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'purchase_tax_details',
 		'from_table': 'Purchase Tax Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'purchase_tax_details',
 		'to_table': 'Purchase Tax Detail',
diff --git a/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt b/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt
index 73967d9..d363acb 100644
--- a/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt
+++ b/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
 		'modified': '2011-05-13 12:18:34',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -23,6 +23,7 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'map': 'Yes',
+		'match_id': 1,
 		'name': '__common__',
 		'parent': 'Purchase Receipt-Payable Voucher',
 		'parentfield': 'field_mapper_details',
@@ -48,153 +49,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 1,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'supplier'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'supplier_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_address',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'supplier_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'currency',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'currency'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 13,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 16,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
-		'idx': 17,
-		'match_id': 1,
 		'to_field': 'qty'
 	},
 
@@ -202,8 +57,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'purchase_rate',
-		'idx': 18,
-		'match_id': 1,
 		'to_field': 'rate'
 	},
 
@@ -211,26 +64,13 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.purchase_rate)',
-		'idx': 19,
-		'match_id': 1,
 		'to_field': 'amount'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'import_rate',
-		'idx': 20,
-		'match_id': 1,
-		'to_field': 'import_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.import_rate)',
-		'idx': 21,
-		'match_id': 1,
 		'to_field': 'import_amount'
 	},
 
@@ -238,8 +78,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 22,
-		'match_id': 1,
 		'to_field': 'purchase_receipt'
 	},
 
@@ -247,8 +85,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'prevdoc_docname',
-		'idx': 23,
-		'match_id': 1,
 		'to_field': 'purchase_order'
 	},
 
@@ -256,8 +92,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 24,
-		'match_id': 1,
 		'to_field': 'pr_detail'
 	},
 
@@ -265,125 +99,14 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'prevdoc_detail_docname',
-		'idx': 25,
-		'match_id': 1,
 		'to_field': 'po_detail'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 26,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 27,
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'category',
-		'idx': 28,
-		'match_id': 2,
-		'to_field': 'category'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'add_deduct_tax',
-		'idx': 29,
-		'match_id': 2,
-		'to_field': 'add_deduct_tax'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 30,
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 31,
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 32,
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 33,
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 34,
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'cost_center',
-		'idx': 35,
-		'match_id': 2,
-		'to_field': 'cost_center'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 36,
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'project_name',
-		'idx': 37,
-		'match_id': 0,
-		'to_field': 'project_name'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'purchase_receipt_details',
 		'from_table': 'Purchase Receipt Detail',
-		'idx': 1,
 		'match_id': 1,
 		'to_field': 'entries',
 		'to_table': 'PV Detail',
@@ -394,7 +117,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Purchase Receipt',
-		'idx': 2,
 		'match_id': 0,
 		'to_table': 'Payable Voucher',
 		'validation_logic': 'docstatus=1'
@@ -405,7 +127,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'purchase_tax_details',
 		'from_table': 'Purchase Tax Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'purchase_tax_details',
 		'to_table': 'Purchase Tax Detail',
diff --git a/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt b/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt
index 7280ba5..f1f7710 100644
--- a/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt
+++ b/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:36',
 		'docstatus': 0,
-		'modified': '2011-05-16 17:34:21',
+		'modified': '2011-08-08 16:56:40',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -50,7 +50,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer',
-		'idx': 1,
 		'match_id': 0,
 		'to_field': 'customer'
 	},
@@ -58,170 +57,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge',
-		'idx': 13,
-		'match_id': 0,
-		'to_field': 'charge'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 14,
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'price_list_name',
-		'idx': 15,
-		'match_id': 0,
-		'to_field': 'price_list_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'currency',
-		'idx': 16,
-		'match_id': 0,
-		'to_field': 'currency'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 17,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 18,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 19,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 20,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
-		'idx': 21,
+		'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt))/flt(obj.basic_rate)',
 		'match_id': 1,
 		'to_field': 'qty'
 	},
@@ -229,62 +65,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'base_ref_rate',
-		'idx': 22,
-		'match_id': 1,
-		'to_field': 'base_ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'name',
-		'idx': 22,
-		'match_id': 1,
-		'to_field': 'so_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'ref_rate',
-		'idx': 23,
-		'match_id': 1,
-		'to_field': 'ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 23,
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'basic_rate',
-		'idx': 24,
-		'match_id': 1,
-		'to_field': 'basic_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 25,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 26,
 		'match_id': 1,
 		'to_field': 'sales_order'
 	},
@@ -292,35 +73,15 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 27,
-		'match_id': 1,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 29,
 		'match_id': 1,
-		'to_field': 'export_rate'
+		'to_field': 'so_detail'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 30,
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.basic_rate)',
-		'idx': 31,
+		'from_field': 'eval:flt(obj.amount) - flt(obj.billed_amt)',
 		'match_id': 1,
 		'to_field': 'amount'
 	},
@@ -328,261 +89,16 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.export_rate)',
-		'idx': 32,
+		'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt))* flt(obj.export_rate)/flt(obj.basic_rate)',
 		'match_id': 1,
 		'to_field': 'export_amount'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'adj_rate',
-		'idx': 33,
-		'match_id': 1,
-		'to_field': 'adj_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 34,
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 35,
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 36,
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 37,
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 38,
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total_amount',
-		'idx': 39,
-		'match_id': 2,
-		'to_field': 'total_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 39,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total_tax_amount',
-		'idx': 40,
-		'match_id': 2,
-		'to_field': 'total_tax_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 41,
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'cost_center_other_charges',
-		'idx': 42,
-		'match_id': 2,
-		'to_field': 'cost_center_other_charges'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 43,
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tax_amount',
-		'idx': 44,
-		'match_id': 2,
-		'to_field': 'tax_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total',
-		'idx': 45,
-		'match_id': 2,
-		'to_field': 'total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 46,
-		'match_id': 0,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'campaign',
-		'idx': 47,
-		'match_id': 0,
-		'to_field': 'campaign'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tc_name',
-		'idx': 48,
-		'match_id': 0,
-		'to_field': 'tc_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'select_print_heading',
-		'idx': 49,
-		'match_id': 0,
-		'to_field': 'select_print_heading'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 50,
-		'match_id': 0,
-		'to_field': 'terms'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'net_total',
-		'idx': 51,
-		'match_id': 0,
-		'to_field': 'net_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total',
-		'idx': 52,
-		'match_id': 0,
-		'to_field': 'grand_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'other_charges_total',
-		'idx': 53,
-		'match_id': 0,
-		'to_field': 'other_charges_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rounded_total',
-		'idx': 54,
-		'match_id': 0,
-		'to_field': 'rounded_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'in_words',
-		'idx': 55,
-		'match_id': 0,
-		'to_field': 'in_words'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total_export',
-		'idx': 56,
-		'match_id': 0,
-		'to_field': 'grand_total_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rounded_total_export',
-		'idx': 57,
-		'match_id': 0,
-		'to_field': 'rounded_total_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'in_words_export',
-		'idx': 58,
-		'match_id': 0,
-		'to_field': 'in_words_export'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'project_name',
-		'idx': 59,
 		'match_id': 0,
 		'to_field': 'project_name'
 	},
@@ -590,80 +106,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_partner',
-		'idx': 60,
-		'match_id': 0,
-		'to_field': 'sales_partner'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_designation',
-		'idx': 61,
-		'match_id': 3,
-		'to_field': 'sales_designation'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'commission_rate',
-		'idx': 62,
-		'match_id': 0,
-		'to_field': 'commission_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total_commission',
-		'idx': 63,
-		'match_id': 0,
-		'to_field': 'total_commission'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_percentage',
-		'idx': 64,
-		'match_id': 3,
-		'to_field': 'allocated_percentage'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_person',
-		'idx': 65,
-		'match_id': 3,
-		'to_field': 'sales_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_amount',
-		'idx': 66,
-		'match_id': 3,
-		'to_field': 'allocated_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'incentives',
-		'idx': 67,
-		'match_id': 3,
-		'to_field': 'incentives'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'reserved_warehouse',
-		'idx': 68,
 		'match_id': 1,
 		'to_field': 'warehouse'
 	},
@@ -672,7 +115,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Sales Order',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Receivable Voucher',
 		'validation_logic': 'docstatus=1'
@@ -683,11 +125,10 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_order_detail',
 		'from_table': 'Sales Order Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'entries',
 		'to_table': 'RV Detail',
-		'validation_logic': '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1'
+		'validation_logic': 'amount > ifnull(billed_amt, 0) and docstatus = 1'
 	},
 
 	# Table Mapper Detail
@@ -695,7 +136,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'other_charges',
 		'from_table': 'RV Tax Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'other_charges',
 		'to_table': 'RV Tax Detail',
@@ -707,7 +147,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_team',
 		'from_table': 'Sales Team',
-		'idx': 4,
 		'match_id': 3,
 		'to_field': 'sales_team',
 		'to_table': 'Sales Team',
diff --git a/accounts/doctype/loan/loan.js b/accounts/doctype/loan/loan.js
deleted file mode 100644
index 5a45362..0000000
--- a/accounts/doctype/loan/loan.js
+++ /dev/null
@@ -1,54 +0,0 @@
-$.extend(cur_frm.cscript, {
-	Generate: function(doc, dt, dn) {
-		cur_frm.cscript.clear_installments(doc);
-		for(var i=0; i< doc.no_of_installments; i++) {
-			d = LocalDB.add_child(doc, 'Loan Installment', 'installments');
-			d.amount = doc.loan_amount / doc.no_of_installments;
-			d.due_date = dateutil.add_months(doc.start_date, i+1);
-		}
-		cur_frm.refresh();
-	},
-/*	submit:function(doc){
-		data=doc.get_values();
-
-		data['']=
-		$c_obj(make_doclist(dt,dn),'loan_post',data,function(){});
-	},*/
-	refresh: function(doc) {
-		cur_frm.cscript.hide_show_buttons(doc);
-	},
-	hide_show_buttons: function(doc) {
-		if(doc.docstatus==0) {
-			hide_field('Installment Reciept'); unhide_field('Generate');
-		} else if (doc.docstatus==1) {
-			unhide_field('Installment Reciept');hide_field('Generate');
-		}
-	},
-	clear_installments: function(doc) {
-		$.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'),
-			function(i, d) {
-				LocalDB.delete_doc('Loan Installment', d.name);
-			}
-		)
-	},
-	'Installment Reciept': function(doc, dt, dn) {
-		var d = new wn.widgets.Dialog({
-			width: 500,
-			title: 'Add a new payment installment',
-			fields: [
-				{fieldtype:'Data', label:'Cheque Number', fieldname:'cheque_number', reqd:1},
-				{fieldtype:'Date', label:'Cheque Date', fieldname:'cheque_date', reqd:1},
-				{fieldtype:'Link', label:'Bank Account', fieldname:'bank_account', reqd:1, options:'Account'},
-				{fieldtype:'Button', label:'Update',fieldname:'update'}
-			]
-		})
-		d.show();
-		d.fields_dict.update.input.onclick = function() {
-			var data = d.get_values();
-
-			if(data) {
-				$c_obj(make_doclist(dt,dn),'loan_installment_post',data,function(){cur_frm.refresh(); d.hide();});
-			}
-		}
-	}
-})
diff --git a/accounts/doctype/loan/loan.py b/accounts/doctype/loan/loan.py
deleted file mode 100644
index 9f0bcb5..0000000
--- a/accounts/doctype/loan/loan.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import webnotes
-from webnotes.model.doc import make_autoname, Document, addchild
-from webnotes import msgprint
-from webnotes.utils import get_defaults
-import json
-from accounts.utils import post_jv
-sql = webnotes.conn.sql
-
-class DocType:
-	def __init__(self, doc, doclist):
-		self.doc, self.doclist = doc, doclist
-
-	def autoname(self):
-		"""
-			Create Loan Id using naming_series pattern
-		"""
-		self.doc.name = make_autoname(self.doc.naming_series+ '.#####')
-
-	def loan_post(self):
-		data['voucher_type']='Loan Issue'
-		data['naming_series']='JV'
-		data['fiscal_year'] = get_defaults()['fiscal_year'] # To be modified to take care
-		data['company'] = get_defaults()['company']
-		data['debit_account'] = self.doc['receivable_account']
-		data['credit_account'] = self.doc['account']
-		data['amount'] = self.doc.loan_amount
-		jv_name=post_jv(data)
-
-	def loan_installment_post(self, args):
-		"""
-			Posts the loan receipt into Journal Voucher
-		"""
-		next_inst = sql("select amount,name from `tabLoan Installment` where parent=%s and ifnull(cheque_number,'')='' order by due_date limit 1",self.doc.name)
-
-		data = json.loads(args)
-		data['voucher_type']='Loan Receipt'
-		data['naming_series']='JV'
-		data['amount']=next_inst[0][0]
-		data['debit_account']=data.get('bank_account')
-		data['credit_account']=self.doc.account
-		data['fiscal_year']=get_defaults()['fiscal_year']
-		data['company']=get_defaults()['company']
-		jv_name=post_jv(data)
-
-		sql("update `tabLoan Installment` set cheque_number=%s, cheque_date=%s, jv_number=%s where name=%s",(data.get('cheque_number'),data.get('cheque_date'),jv_name,next_inst[0][1]))
-
-		self.doclist = [Document(d.doctype, d.name) for d in self.doclist]
-
diff --git a/accounts/doctype/loan/loan.txt b/accounts/doctype/loan/loan.txt
deleted file mode 100644
index 001e1d3..0000000
--- a/accounts/doctype/loan/loan.txt
+++ /dev/null
@@ -1,172 +0,0 @@
-# DocType, Loan
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2011-07-15 10:35:26',
-		'docstatus': 0,
-		'modified': '2011-07-18 12:12:19',
-		'modified_by': 'Administrator',
-		'owner': 'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'_last_update': '1310963215',
-		'colour': 'White:FFF',
-		'doctype': 'DocType',
-		'module': 'Accounts',
-		'name': '__common__',
-		'section_style': 'Simple',
-		'show_in_menu': 0,
-		'version': 15
-	},
-
-	# These values are common for all DocField
-	{
-		'doctype': 'DocField',
-		'name': '__common__',
-		'parent': 'Loan',
-		'parentfield': 'fields',
-		'parenttype': 'DocType',
-		'permlevel': 0
-	},
-
-	# These values are common for all DocPerm
-	{
-		'doctype': 'DocPerm',
-		'name': '__common__',
-		'parent': 'Loan',
-		'parentfield': 'permissions',
-		'parenttype': 'DocType',
-		'read': 1,
-		'role': 'Accounts User'
-	},
-
-	# DocType, Loan
-	{
-		'doctype': 'DocType',
-		'name': 'Loan'
-	},
-
-	# DocPerm
-	{
-		'cancel': 1,
-		'create': 1,
-		'doctype': 'DocPerm',
-		'idx': 1,
-		'permlevel': 0,
-		'submit': 1,
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 2,
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'naming_series',
-		'fieldtype': 'Select',
-		'idx': 1,
-		'label': 'Naming Series',
-		'options': '\nLOAN',
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'account',
-		'fieldtype': 'Link',
-		'idx': 2,
-		'label': 'Account',
-		'options': 'Account',
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'receivable_account',
-		'fieldtype': 'Link',
-		'idx': 3,
-		'label': 'Receivable Account',
-		'options': 'Account'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'invoice',
-		'fieldtype': 'Link',
-		'idx': 4,
-		'label': 'Invoice',
-		'options': 'Receivable Voucher',
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'loan_amount',
-		'fieldtype': 'Currency',
-		'idx': 5,
-		'label': 'Loan Amount',
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'start_date',
-		'fieldtype': 'Date',
-		'idx': 6,
-		'label': 'Start Date',
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'no_of_installments',
-		'fieldtype': 'Int',
-		'idx': 7,
-		'label': 'No of Installments',
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldtype': 'Button',
-		'idx': 8,
-		'label': 'Generate',
-		'trigger': 'Client'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'installments',
-		'fieldtype': 'Table',
-		'idx': 9,
-		'label': 'Installments',
-		'options': 'Loan Installment'
-	},
-
-	# DocField
-	{
-		'allow_on_submit': 1,
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldtype': 'Button',
-		'idx': 10,
-		'label': 'Installment Reciept'
-	}
-]
\ No newline at end of file
diff --git a/accounts/doctype/loan/test_loan.py b/accounts/doctype/loan/test_loan.py
deleted file mode 100644
index 4e72559..0000000
--- a/accounts/doctype/loan/test_loan.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import unittest
-import webnotes
-from webnotes.model.code import get_obj
-
-class TestScheduleGeneartion(unittest.TestCase):
-	def setUp(self):
-		webnotes.conn.begin()
-		# create a mock loan
-		self.loan = get_obj('Loan', 'LOAN00001')
-		
-	def test_generation(self):
-		"test the genaration of loan installments"
-		self.loan.generate()
-		self.assertEqual(self.loan.get_installment_total(), self.loan.doc.loan_amount)
-		
-	def tearDown(self):
-		webnotes.conn.rollback()
diff --git a/accounts/doctype/loan_installment/__init__.py b/accounts/doctype/loan_installment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/accounts/doctype/loan_installment/__init__.py
+++ /dev/null
diff --git a/accounts/doctype/loan_installment/loan_installment.txt b/accounts/doctype/loan_installment/loan_installment.txt
deleted file mode 100644
index f729e34..0000000
--- a/accounts/doctype/loan_installment/loan_installment.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-# DocType, Loan Installment
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2011-07-15 10:36:42',
-		'docstatus': 0,
-		'modified': '2011-07-15 15:48:34',
-		'modified_by': 'Administrator',
-		'owner': 'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocType',
-		'istable': 1,
-		'module': 'Accounts',
-		'name': '__common__',
-		'section_style': 'Simple',
-		'show_in_menu': 0,
-		'version': 4
-	},
-
-	# These values are common for all DocField
-	{
-		'doctype': 'DocField',
-		'name': '__common__',
-		'parent': 'Loan Installment',
-		'parentfield': 'fields',
-		'parenttype': 'DocType'
-	},
-
-	# DocType, Loan Installment
-	{
-		'doctype': 'DocType',
-		'name': 'Loan Installment'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'amount',
-		'fieldtype': 'Currency',
-		'idx': 1,
-		'label': 'Amount',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'due_date',
-		'fieldtype': 'Date',
-		'idx': 2,
-		'label': 'Due Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'cheque_number',
-		'fieldtype': 'Data',
-		'idx': 3,
-		'label': 'Cheque Number',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'cheque_date',
-		'fieldtype': 'Date',
-		'idx': 4,
-		'label': 'Cheque Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'deposit_date',
-		'fieldtype': 'Date',
-		'idx': 5,
-		'label': 'Deposit Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'realized_date',
-		'fieldtype': 'Date',
-		'idx': 6,
-		'label': 'Realized Date',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'jv_number',
-		'fieldtype': 'Link',
-		'hidden': 0,
-		'idx': 7,
-		'label': 'JV Number',
-		'options': 'Journal Voucher',
-		'permlevel': 1
-	}
-]
\ No newline at end of file
diff --git a/accounts/doctype/payable_voucher/payable_voucher.py b/accounts/doctype/payable_voucher/payable_voucher.py
index d7f628f..b403d20 100644
--- a/accounts/doctype/payable_voucher/payable_voucher.py
+++ b/accounts/doctype/payable_voucher/payable_voucher.py
@@ -84,7 +84,7 @@
 			self.validate_duplicate_docname('purchase_order')
 			self.doclist = get_obj('DocType Mapper', 'Purchase Order-Payable Voucher').dt_map('Purchase Order', 'Payable Voucher', self.doc.purchase_order_main, self.doc, self.doclist, "[['Purchase Order', 'Payable Voucher'],['PO Detail', 'PV Detail']]")
 		
-		ret = eval(self.get_credit_to())
+		ret = self.get_credit_to()
 		#self.doc.supplier_name = ret['supplier_name']
 		#self.doc.supplier_address = ret['supplier_address']
 		
diff --git a/accounts/doctype/receivable_voucher/receivable_voucher.js b/accounts/doctype/receivable_voucher/receivable_voucher.js
index a25d311..e773a95 100644
--- a/accounts/doctype/receivable_voucher/receivable_voucher.js
+++ b/accounts/doctype/receivable_voucher/receivable_voucher.js
@@ -18,10 +18,10 @@
 		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()});
-		
+
 		//for previously created sales invoice, set required field related to pos
 		if(doc.is_pos ==1) cur_frm.cscript.is_pos(doc, dt, dn);
-	
+
  	    hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
   }
 }
@@ -37,10 +37,10 @@
 			}
 		);
 	}
-	
+
 	if(!doc.customer && doc.__islocal) {
 		// new -- load default taxes
-		cur_frm.cscript.load_taxes(doc, cdt, cdn);		
+		cur_frm.cscript.load_taxes(doc, cdt, cdn);
 	}
 }
 
@@ -61,19 +61,19 @@
 
   // Show / Hide button
   cur_frm.clear_custom_buttons();
-    
-  if(doc.docstatus==1) { 
+
+  if(doc.docstatus==1) {
     cur_frm.add_custom_button('View Ledger', cur_frm.cscript['View Ledger Entry']);
     cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
     unhide_field('Repair Outstanding Amt');
-    
+
     if(doc.is_pos==1 && doc.update_stock!=1)
       cur_frm.add_custom_button('Make Delivery', cur_frm.cscript['Make Delivery Note']);
-  
+
     if(doc.outstanding_amount!=0)
       cur_frm.add_custom_button('Make Payment Entry', cur_frm.cscript['Make Bank Voucher']);
   }
-  else  
+  else
     hide_field('Repair Outstanding Amt');
   cur_frm.cscript.is_opening(doc, dt, dn);
   cur_frm.cscript.hide_fields(doc, cdt, cdn);
@@ -117,13 +117,13 @@
       var doc = locals[cur_frm.doctype][cur_frm.docname];
       get_server_fields('get_debit_to','','',doc, dt, dn, 0);
       cur_frm.refresh();
-  }   
+  }
 
-  if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);  
+  if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);
   if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
 }
 
-cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {    
+cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {
   if(doc.customer) get_server_fields('get_customer_address', JSON.stringify({customer: doc.customer, address: doc.customer_address, contact: doc.contact_person}),'', doc, dt, dn, 1);
 }
 
@@ -152,15 +152,15 @@
   var callback2 = function(r,rt) {
       var doc = locals[cur_frm.doctype][cur_frm.docname];
       cur_frm.refresh();
-  }   
-  
+  }
+
   var callback = function(r,rt) {
-      var doc = locals[cur_frm.doctype][cur_frm.docname];    
+      var doc = locals[cur_frm.doctype][cur_frm.docname];
       if(doc.customer) $c_obj(make_doclist(dt,dn), 'get_default_customer_address', '', callback2);
       if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
       cur_frm.refresh();
   }
-  
+
   if(doc.debit_to && doc.posting_date){
     get_server_fields('get_cust_and_due_date','','',doc,dt,dn,1,callback);
   }
@@ -187,13 +187,13 @@
 //Set debit and credit to zero on adding new row
 //----------------------------------------------
 cur_frm.fields_dict['entries'].grid.onrowadd = function(doc, cdt, cdn){
-  
+
   cl = getchildren('RV Detail', doc.name, cur_frm.cscript.fname, doc.doctype);
   acc = '';
   cc = '';
 
   for(var i = 0; i<cl.length; i++) {
-    
+
     if (cl[i].idx == 1){
       acc = cl[i].income_account;
       cc = cl[i].cost_center;
@@ -221,7 +221,7 @@
 
 // Get Items based on SO or DN Selected
 cur_frm.cscript['Get Items'] = function(doc, dt, dn) {
-  var callback = function(r,rt) { 
+  var callback = function(r,rt) {
 	  unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
 	  cur_frm.refresh();
   }
@@ -335,10 +335,10 @@
 // Delivery Note
 // --------------
 cur_frm.fields_dict.delivery_note_main.get_query = function(doc) {
-  if (doc.customer)	
-    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.`customer` =  "' + doc.customer + '" and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';    
+  if (doc.customer)
+    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.`customer` =  "' + doc.customer + '" and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';
   else
-    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';        
+    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';
 }
 
 
@@ -393,18 +393,18 @@
   jv.company = doc.company;
   jv.remark = repl('Payment received against invoice %(vn)s for %(rem)s', {vn:doc.name, rem:doc.remarks});
   jv.fiscal_year = doc.fiscal_year;
-  
+
   // debit to creditor
   var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
   d1.account = doc.debit_to;
   d1.credit = doc.outstanding_amount;
   d1.against_invoice = doc.name;
 
-  
+
   // credit to bank
   var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
   d1.debit = doc.outstanding_amount;
-  
+
   loaddoc('Journal Voucher', jv.name);
 }
 
diff --git a/accounts/doctype/receivable_voucher/receivable_voucher.py b/accounts/doctype/receivable_voucher/receivable_voucher.py
index 0aaebbb..267ea92 100644
--- a/accounts/doctype/receivable_voucher/receivable_voucher.py
+++ b/accounts/doctype/receivable_voucher/receivable_voucher.py
@@ -128,7 +128,7 @@
 			get_obj('DocType Mapper', 'Sales Order-Receivable Voucher').dt_map('Sales Order', 'Receivable Voucher', self.doc.sales_order_main, self.doc, self.doclist, "[['Sales Order', 'Receivable Voucher'],['Sales Order Detail', 'RV Detail'],['RV Tax Detail','RV Tax Detail'], ['Sales Team', 'Sales Team']]")
 			self.get_income_account('entries')
 			
-		ret = eval(self.get_debit_to())	
+		ret = self.get_debit_to()
 		if ret.has_key('debit_to'):
 			self.doc.debit_to = ret['debit_to']
 					
diff --git a/accounts/search_criteria/budget_variance_report/budget_variance_report.js b/accounts/search_criteria/budget_variance_report/budget_variance_report.js
index ed5adb1..08c9693 100644
--- a/accounts/search_criteria/budget_variance_report/budget_variance_report.js
+++ b/accounts/search_criteria/budget_variance_report/budget_variance_report.js
@@ -1,17 +1,15 @@
 report.customize_filters = function() {
-
-  //this.hide_all_filters();
-  this.mytabs.items['Select Columns'].hide();
-  this.mytabs.items['More Filters'].hide();
-
- 
   this.add_filter({fieldname:'period', label:'Period', fieldtype:'Select', options:'Monthly'+NEWLINE+'Quarterly'+NEWLINE+'Half Yearly'+NEWLINE+'Annual',report_default:'Quarterly',ignore : 1, parent:'Budget Detail'});
+  this.add_filter({fieldname:'company', label:'Company', fieldtype:'Link',  options:'Company', report_default:sys_defaults.company, ignore : 1, parent:'Budget Detail', in_first_page:1});
   this.filter_fields_dict['Budget Detail'+FILTER_SEP +'Fiscal Year'].df.in_first_page = 1;
   this.filter_fields_dict['Budget Detail'+FILTER_SEP +'Period'].df.in_first_page = 1;
 
   this.filter_fields_dict['Budget Detail'+FILTER_SEP +'Fiscal Year'].df['report_default'] = sys_defaults.fiscal_year;
 }
+
 report.aftertableprint = function(t) {
    $yt(t,'*',1,{whiteSpace:'pre'});
 }
+
+this.mytabs.items['More Filters'].hide();
 this.mytabs.items['Select Columns'].hide();
diff --git a/accounts/search_criteria/budget_variance_report/budget_variance_report.py b/accounts/search_criteria/budget_variance_report/budget_variance_report.py
index 182f9e5..9f7c690 100644
--- a/accounts/search_criteria/budget_variance_report/budget_variance_report.py
+++ b/accounts/search_criteria/budget_variance_report/budget_variance_report.py
@@ -131,11 +131,6 @@
     col_idx[str(c) + n ] = len(colnames) - 1
 
 
-
-# make default columns
-#coltypes[col_idx[based_on]] = 'Link'
-#coloptions[col_idx[based_on]]= based_on
-
 # get start date
 start_date = get_value('Fiscal Year', fiscal_year, 'year_start_date')
 if not start_date:
@@ -162,7 +157,7 @@
 
     ch = make_child_lst(based_on,r[0].strip())
    
-    actual = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1, `tabAccount` t2 where t2.is_pl_account = 'Yes' and t1.is_cancelled = 'No' and t1.cost_center in %s and t2.debit_or_credit = 'Debit' and t1.posting_date between '%s' and '%s' and t1.account = t2.name"%(ch, mon_list[count][data['start_date']], mon_list[count][data['end_date']]))
+    actual = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1, `tabAccount` t2 where ifnull(t2.is_pl_account, 'No') = 'Yes' and ifnull(t1.is_cancelled, 'No') = 'No' and t1.cost_center in %s and t2.debit_or_credit = 'Debit' and t1.posting_date between '%s' and '%s' and t1.account = t2.name"%(ch, mon_list[count][data['start_date']], mon_list[count][data['end_date']]))
    
     #----------------------------------------------------------
     actual = flt(actual[0][0])
diff --git a/accounts/search_criteria/budget_variance_report/budget_variance_report.sql b/accounts/search_criteria/budget_variance_report/budget_variance_report.sql
index d53f7e1..575fbfb 100644
--- a/accounts/search_criteria/budget_variance_report/budget_variance_report.sql
+++ b/accounts/search_criteria/budget_variance_report/budget_variance_report.sql
@@ -1 +1,10 @@
-SELECT CONCAT(REPEAT('     ', COUNT(parent.name) - 1), node.name) AS name FROM `tabCost Center` AS node,`tabCost Center` AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.docstatus !=2 GROUP BY node.name ORDER BY node.lft
\ No newline at end of file
+SELECT 
+	CONCAT(REPEAT('     ', COUNT(parent.name) - 1), node.name) AS name 
+FROM 
+	`tabCost Center` AS node,`tabCost Center` AS parent 
+WHERE 
+	node.lft BETWEEN parent.lft AND parent.rgt 
+	AND node.docstatus !=2
+	AND node.company_name like '%(company)s%%'
+GROUP BY node.name 
+ORDER BY node.lft
diff --git a/accounts/search_criteria/general_ledger/general_ledger.py b/accounts/search_criteria/general_ledger/general_ledger.py
index 005038a..6cba6e4 100644
--- a/accounts/search_criteria/general_ledger/general_ledger.py
+++ b/accounts/search_criteria/general_ledger/general_ledger.py
@@ -11,8 +11,8 @@
   from_date = filter_values['posting_date']
   to_date = filter_values['posting_date1']
 
-ysd, from_date_year = sql("select year_start_date, name from `tabFiscal Year` where %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",from_date)[0]
-
+from_date_year = sql("select name from `tabFiscal Year` where %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",from_date)[0][0]
+#to_date_year = sql("select name from `tabFiscal Year` where %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",to_date)[0][0]
 
 # define columns
 #---------------
@@ -49,13 +49,25 @@
 
 # opening
 account = filter_values.get('account')
-if account:
-  acc_det = sql("select debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where name = '%s'" % account)
-  closing_bal = get_obj('GL Control').get_as_on_balance(account, from_date_year, to_date, acc_det[0][0], acc_det[0][2], acc_det[0][3])[2]
-  if acc_det[0][0] == 'Credit':
-    closing_bal =  -1*closing_bal
+if not account:
+  msgprint('Select an account to proceed',raise_exception=0,small=1)
+
+
+acc_det = sql("select debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where name = '%s'" % account)
+
+opening_bal = get_obj('GL Control').get_as_on_balance(account, from_date_year, from_date, acc_det[0][0], acc_det[0][2], acc_det[0][3])[2]
+closing_bal = get_obj('GL Control').get_as_on_balance(account, from_date_year, to_date, acc_det[0][0], acc_det[0][2], acc_det[0][3])[2]
+if acc_det[0][0] == 'Credit':
+  closing_bal = -1*closing_bal
+  opening_bal = -1*opening_bal
 
 out = []
+
+t_row = ['' for i in range(len(colnames))]
+t_row[1] = 'Opening as on '+formatdate(from_date)
+t_row[col_idx['Debit']-1] = opening_bal
+out.append(t_row)
+
 count = 0
 for r in res:
   count +=1
@@ -71,24 +83,24 @@
   # Total debit/credit
   t_row = ['' for i in range(len(colnames))]
   t_row[1] = 'Total'
-  t_row[col_idx['Debit']-1] = total_debit 
-  t_row[col_idx['Credit']-1] = total_credit 
+  t_row[col_idx['Debit']-1] = total_debit
+  t_row[col_idx['Credit']-1] = total_credit
   out.append(t_row)
-  
+
 
   # diffrence (dr-cr)
   t_row = ['' for i in range(len(colnames))]
   t_row[1] = 'Total(Dr-Cr)'
-  t_row[col_idx['Debit']-1] = total_diff 
+  t_row[col_idx['Debit']-1] = total_diff
   out.append(t_row)
 
   # closing
   if account:
     t_row = ['' for i in range(len(colnames))]
-    t_row[1] = 'Closing Balance on ' + to_date
+    t_row[1] = 'Closing Balance on ' + formatdate(to_date)
     t_row[col_idx['Debit']-1] = flt(closing_bal)
     out.append(t_row)
-  
+
 # Print Format
 myheader = """<table width = '100%%'><tr><td>"""+l_head+"""</td>
 </tr>
@@ -99,5 +111,5 @@
   """ % {'acc':account,
          'fdt':from_date,
          'tdt':to_date}
- 
+
 page_template = myheader+"<div>%(table)s</div>"
diff --git a/accounts/search_criteria/lease_agreement_list/lease_agreement_list.txt b/accounts/search_criteria/lease_agreement_list/lease_agreement_list.txt
index 70a6206..20816fd 100644
--- a/accounts/search_criteria/lease_agreement_list/lease_agreement_list.txt
+++ b/accounts/search_criteria/lease_agreement_list/lease_agreement_list.txt
@@ -3,15 +3,10 @@
 
 	# These values are common in all dictionaries
 	{
-<<<<<<< HEAD
 		'creation': '2011-07-27 16:17:04',
 		'docstatus': 0,
 		'modified': '2011-07-27 16:17:04',
-=======
 		'creation': '2011-07-26 17:01:34',
-		'docstatus': 0,
-		'modified': '2011-07-28 12:55:50',
->>>>>>> d075a6c53dc2c832a363409cd4b32ff5a6482e5a
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/accounts/search_criteria/lease_monthly_future_installment_inflows/lease_monthly_future_installment_inflows.txt b/accounts/search_criteria/lease_monthly_future_installment_inflows/lease_monthly_future_installment_inflows.txt
index bbb62bb..05a0f70 100644
--- a/accounts/search_criteria/lease_monthly_future_installment_inflows/lease_monthly_future_installment_inflows.txt
+++ b/accounts/search_criteria/lease_monthly_future_installment_inflows/lease_monthly_future_installment_inflows.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-07-27 16:17:04',
+		'creation': '2011-08-29 13:45:35',
 		'docstatus': 0,
-		'modified': '2011-07-27 16:17:04',
+		'modified': '2011-08-29 13:45:35',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/accounts/search_criteria/lease_over_due_list/lease_over_due_list.txt b/accounts/search_criteria/lease_over_due_list/lease_over_due_list.txt
index 22bdc55..d145442 100644
--- a/accounts/search_criteria/lease_over_due_list/lease_over_due_list.txt
+++ b/accounts/search_criteria/lease_over_due_list/lease_over_due_list.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-07-26 18:11:47',
+		'creation': '2011-08-29 13:45:35',
 		'docstatus': 0,
-		'modified': '2011-07-26 18:27:01',
+		'modified': '2011-08-29 13:45:35',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/accounts/search_criteria/lease_overdue_age_wise/lease_overdue_age_wise.txt b/accounts/search_criteria/lease_overdue_age_wise/lease_overdue_age_wise.txt
index 3c63377..1c734a8 100644
--- a/accounts/search_criteria/lease_overdue_age_wise/lease_overdue_age_wise.txt
+++ b/accounts/search_criteria/lease_overdue_age_wise/lease_overdue_age_wise.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-07-27 16:17:04',
+		'creation': '2011-08-29 13:45:35',
 		'docstatus': 0,
-		'modified': '2011-07-27 16:17:04',
+		'modified': '2011-08-29 13:45:35',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/accounts/search_criteria/lease_receipt_summary_month_wise/lease_receipt_summary_month_wise.txt b/accounts/search_criteria/lease_receipt_summary_month_wise/lease_receipt_summary_month_wise.txt
index 5a671fe..6e1b266 100644
--- a/accounts/search_criteria/lease_receipt_summary_month_wise/lease_receipt_summary_month_wise.txt
+++ b/accounts/search_criteria/lease_receipt_summary_month_wise/lease_receipt_summary_month_wise.txt
@@ -3,15 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-<<<<<<< HEAD
-		'creation': '2011-07-27 16:17:04',
-		'docstatus': 0,
-		'modified': '2011-07-27 16:17:04',
-=======
 		'creation': '2011-07-27 18:48:29',
 		'docstatus': 0,
 		'modified': '2011-07-28 12:56:35',
->>>>>>> d075a6c53dc2c832a363409cd4b32ff5a6482e5a
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/accounts/search_criteria/lease_receipts_client_wise/lease_receipts_client_wise.txt b/accounts/search_criteria/lease_receipts_client_wise/lease_receipts_client_wise.txt
index 21463ab..b155b39 100644
--- a/accounts/search_criteria/lease_receipts_client_wise/lease_receipts_client_wise.txt
+++ b/accounts/search_criteria/lease_receipts_client_wise/lease_receipts_client_wise.txt
@@ -3,15 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-<<<<<<< HEAD
-		'creation': '2011-07-27 16:17:04',
+		'creation': '2011-08-29 13:45:36',
 		'docstatus': 0,
-		'modified': '2011-07-27 16:17:04',
-=======
-		'creation': '2011-07-28 12:13:41',
-		'docstatus': 0,
-		'modified': '2011-07-28 12:56:47',
->>>>>>> d075a6c53dc2c832a363409cd4b32ff5a6482e5a
+		'modified': '2011-08-29 13:45:36',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/accounts/search_criteria/lease_yearly_future_installment_inflows/lease_yearly_future_installment_inflows.txt b/accounts/search_criteria/lease_yearly_future_installment_inflows/lease_yearly_future_installment_inflows.txt
index c64be0a..0969796 100644
--- a/accounts/search_criteria/lease_yearly_future_installment_inflows/lease_yearly_future_installment_inflows.txt
+++ b/accounts/search_criteria/lease_yearly_future_installment_inflows/lease_yearly_future_installment_inflows.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-07-27 16:17:04',
+		'creation': '2011-08-29 13:45:36',
 		'docstatus': 0,
-		'modified': '2011-07-27 16:17:04',
+		'modified': '2011-08-29 13:45:36',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
diff --git a/buying/DocType Mapper/Indent-Purchase Order/Indent-Purchase Order.txt b/buying/DocType Mapper/Indent-Purchase Order/Indent-Purchase Order.txt
index d8d4f34..3041218 100644
--- a/buying/DocType Mapper/Indent-Purchase Order/Indent-Purchase Order.txt
+++ b/buying/DocType Mapper/Indent-Purchase Order/Indent-Purchase Order.txt
@@ -47,19 +47,9 @@
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 1,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
-		'idx': 2,
 		'match_id': 0,
 		'to_field': 'company'
 	},
@@ -68,7 +58,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 3,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -77,7 +66,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 4,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -86,7 +74,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 5,
 		'match_id': 1,
 		'to_field': 'prevdoc_detail_docname'
 	},
@@ -95,7 +82,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'uom',
-		'idx': 6,
 		'match_id': 1,
 		'to_field': 'stock_uom'
 	},
@@ -104,7 +90,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:flt(1)',
-		'idx': 7,
 		'match_id': 1,
 		'to_field': 'conversion_factor'
 	},
@@ -112,80 +97,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'uom',
-		'idx': 8,
-		'match_id': 1,
-		'to_field': 'uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'warehouse',
-		'idx': 9,
-		'match_id': 1,
-		'to_field': 'warehouse'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'schedule_date',
-		'idx': 10,
-		'match_id': 1,
-		'to_field': 'schedule_date'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 11,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 12,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 13,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:flt(obj.qty) - flt(obj.ordered_qty)',
-		'idx': 16,
 		'match_id': 1,
 		'to_field': 'stock_qty'
 	},
@@ -194,7 +106,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:flt(obj.qty) - flt(obj.ordered_qty)',
-		'idx': 17,
 		'match_id': 1,
 		'to_field': 'qty'
 	},
@@ -203,7 +114,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Indent',
-		'idx': 1,
 		'match_id': 0,
 		'reference_key': 'prevdoc_docname',
 		'to_table': 'Purchase Order',
@@ -215,7 +125,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'indent_details',
 		'from_table': 'Indent Detail',
-		'idx': 2,
 		'match_id': 1,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'to_field': 'po_details',
diff --git a/buying/DocType Mapper/Sales Order-Indent/Sales Order-Indent.txt b/buying/DocType Mapper/Sales Order-Indent/Sales Order-Indent.txt
index 349603c..d32aeb6 100755
--- a/buying/DocType Mapper/Sales Order-Indent/Sales Order-Indent.txt
+++ b/buying/DocType Mapper/Sales Order-Indent/Sales Order-Indent.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-04-06 15:33:09',
+		'creation': '2011-05-05 15:58:13',
 		'docstatus': 0,
-		'modified': '2011-05-04 14:49:55',
+		'modified': '2011-05-05 16:20:10',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -49,7 +49,6 @@
 		'checking_operator': '>=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'transaction_date',
-		'idx': 1,
 		'map': 'No',
 		'match_id': 0,
 		'to_field': 'transaction_date'
@@ -60,7 +59,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
-		'idx': 2,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'company'
@@ -69,48 +67,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 3,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tc_name',
-		'idx': 4,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'tc_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 5,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'terms'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'letter_head',
-		'idx': 6,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'letter_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 7,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'sales_order_no'
@@ -119,48 +76,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 8,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 9,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 10,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 11,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'stock_uom',
-		'idx': 12,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'uom'
@@ -169,39 +85,17 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'qty',
-		'idx': 13,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'qty'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'reserved_warehouse',
-		'idx': 14,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'warehouse'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 15,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_order_details',
 		'from_table': 'Sales Order Detail',
-		'idx': 1,
 		'match_id': 1,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'reference_key': 'prevdoc_detail_docname',
@@ -214,7 +108,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Sales Order',
-		'idx': 2,
 		'match_id': 0,
 		'reference_key': 'prevdoc_docname',
 		'to_table': 'Indent',
diff --git a/erpnext_version.py b/erpnext_version.py
new file mode 100644
index 0000000..48e45d5
--- /dev/null
+++ b/erpnext_version.py
@@ -0,0 +1,3 @@
+# version info
+
+version='1.0.0'
diff --git a/accounts/doctype/loan/__init__.py b/home/page/dashboard/__init__.py
similarity index 100%
rename from accounts/doctype/loan/__init__.py
rename to home/page/dashboard/__init__.py
diff --git a/home/page/dashboard/dashboard.css b/home/page/dashboard/dashboard.css
new file mode 100644
index 0000000..d8e8b54
--- /dev/null
+++ b/home/page/dashboard/dashboard.css
@@ -0,0 +1,12 @@
+div.dashboard_table td {
+	width: 50%;
+}
+
+div.dashboard-title {
+	font-weight: bold;
+	padding: '3px 0px';
+}
+
+div.dashboard-graph {
+	height: 180px;
+}
\ No newline at end of file
diff --git a/home/page/dashboard/dashboard.html b/home/page/dashboard/dashboard.html
new file mode 100644
index 0000000..5ffef2f
--- /dev/null
+++ b/home/page/dashboard/dashboard.html
@@ -0,0 +1,8 @@
+<div class="layout_wrapper dashboard">
+	<div class="header"></div>
+	<div class="body">
+		<!-- 4x2 table to show the dashboards-->
+		<div class="help_box">Loading...</div>
+		<div class="dashboard_table"></div>
+	</div>
+</div>
\ No newline at end of file
diff --git a/home/page/dashboard/dashboard.js b/home/page/dashboard/dashboard.js
new file mode 100644
index 0000000..15e7cf3
--- /dev/null
+++ b/home/page/dashboard/dashboard.js
@@ -0,0 +1,142 @@
+pscript.onload_dashboard = function() {
+	// load jqplot
+	$.scriptPath = 'js/'
+	$.require(['jquery/jquery.jqplot.min.js', 
+	'jquery/jqplot-plugins/jqplot.barRenderer.js', 
+	'jquery/jqplot-plugins/jqplot.canvasAxisTickRenderer.min.js',
+	'jquery/jqplot-plugins/jqplot.canvasTextRenderer.min.js',
+	'jquery/jqplot-plugins/jqplot.categoryAxisRenderer.min.js']);
+
+
+	pscript.dashboard_settings = {
+		company: sys_defaults.company,
+		start: dateutil.obj_to_str(dateutil.add_days(new Date(), -180)),
+		end: dateutil.obj_to_str(new Date()),
+		interval: 30
+	}
+	
+	var ph = new PageHeader($('.dashboard .header').get(0), 'Dashboard');
+	var db = new Dashboard();
+
+	ph.add_button('Settings', db.show_settings);
+	
+	db.refresh();
+	
+}
+
+Dashboard = function() {
+	var me = this;
+	$.extend(me, {
+		refresh: function() {
+			$('.dashboard .help_box').css('display', 'block');
+			$c_page('home', 'dashboard', 'load_dashboard', JSON.stringify(pscript.dashboard_settings), function(r,rt) {
+				$('.dashboard .help_box').css('display', 'none');
+				me.render(r.message);
+			})			
+		},
+		
+		render: function(data) {
+			$('.dashboard_table').html('');
+			var t = make_table($('.dashboard_table').get(0), 4, 2, '100%', ['50%', '50%'], {padding: '5px'});
+			var ridx=0; var cidx=0;
+			for(var i=0; i< data.length; i++) {
+				// switch columns and rows
+				if(cidx==2) { cidx=0; ridx++}
+				
+				// give an id!
+				var cell = $td(t,ridx,cidx);
+				var title = $a(cell, 'div', 'dashboard-title', '', data[i][0].title);
+				var parent = $a(cell, 'div', 'dashboard-graph');
+				if(data[i][0].comment);
+					var comment = $a(cell, 'div', 'comment', '', data[i][0].comment)
+				
+				parent.id = '_dashboard' + ridx + '-' + cidx;
+				
+				// render graph
+				me.render_graph(parent.id, data[i][1], data[i][0].fillColor);
+				cidx++;
+			}
+		},
+		
+		render_graph: function(parent, values, fillColor) {
+			var vl = [];
+			$.each(values, function(i,v) { 
+				vl.push([dateutil.str_to_user(v[0]), v[1]]);
+			});
+			$.jqplot(parent, [vl], {
+				seriesDefaults:{
+					renderer:$.jqplot.BarRenderer,
+					rendererOptions: {fillToZero: true},
+				},
+				axes: {
+					// Use a category axis on the x axis and use our custom ticks.
+					xaxis: {
+						min: 0,
+						renderer: $.jqplot.CategoryAxisRenderer,
+						tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+						tickOptions: {
+							angle: -30,
+							fontSize: '8pt'
+						}
+					},
+					// Pad the y axis just a little so bars can get close to, but
+					// not touch, the grid boundaries.  1.2 is the default padding.
+					yaxis: {
+						min: 0,
+						pad: 1.05,
+						tickOptions: {formatString: '%d'}
+					}
+				},
+				seriesColors: [fillColor]
+			});
+		},
+		
+		show_settings: function() {
+			var d = new wn.widgets.Dialog({
+				title: 'Set Company Settings',
+				width: 500,
+				fields: [
+					{
+						label:'Company', 
+						reqd: 1,
+						fieldname:'company', 
+						fieldtype:'Link',
+						options: 'Company'
+					},
+					{
+						label:'Start Date', 
+						reqd: 1,
+						fieldname:'start', 
+						fieldtype:'Date',
+					},
+					{
+						label:'End Date', 
+						reqd: 1,
+						fieldname:'end', 
+						fieldtype:'Date',
+					},
+					{
+						label:'Interval', 
+						reqd: 1,
+						fieldname:'interval', 
+						fieldtype:'Int'
+					},
+					{
+						label:'Regenerate', 
+						fieldname:'refresh', 
+						fieldtype:'Button'
+					}
+				]
+			});
+			d.onshow = function() {
+				d.set_values(pscript.dashboard_settings);
+			}
+			d.fields_dict.refresh.input.onclick = function() {
+				pscript.dashboard_settings = d.get_values();
+				me.refresh();
+				d.hide();
+			}
+			d.show();
+		}
+	})
+}
diff --git a/home/page/dashboard/dashboard.py b/home/page/dashboard/dashboard.py
new file mode 100644
index 0000000..9ead6d6
--- /dev/null
+++ b/home/page/dashboard/dashboard.py
@@ -0,0 +1,260 @@
+dashboards = [
+	{
+		'type': 'account',
+		'account': 'Income',
+		'title': 'Income',
+		'fillColor': '#90EE90'
+	},
+	
+	{
+		'type': 'account',
+		'account': 'Expenses',
+		'title': 'Expenses',
+		'fillColor': '#90EE90'
+	},
+
+	{
+		'type': 'receivables',
+		'title': 'Receivables',
+		'fillColor': '#FFE4B5'
+	},
+
+	{
+		'type': 'payables',
+		'title': 'Payables',
+		'fillColor': '#FFE4B5'
+	},
+
+	{
+		'type': 'collection',
+		'title': 'Collection',
+		'comment':'This info comes from the accounts your have marked as "Bank or Cash"',
+		'fillColor': '#DDA0DD'
+	},
+
+	{
+		'type': 'payments',
+		'title': 'Payments',
+		'comment':'This info comes from the accounts your have marked as "Bank or Cash"',
+		'fillColor': '#DDA0DD'
+	},
+
+	{
+		'type': 'creation',
+		'doctype': 'Quotation',
+		'title': 'New Quotations',
+		'fillColor': '#ADD8E6'
+	},
+	
+	{
+		'type': 'creation',
+		'doctype': 'Sales Order',
+		'title': 'New Orders',
+		'fillColor': '#ADD8E6'
+	}
+]
+
+class DashboardWidget:
+	def __init__(self, company, start, end, interval):
+		from webnotes.utils import getdate
+		from webnotes.model.code import get_obj
+		import webnotes
+		
+		self.company = company
+		self.abbr = webnotes.conn.get_value('Company', company, 'abbr')
+		self.start = getdate(start)
+		self.end = getdate(end)
+		
+		self.interval = interval
+
+		self.glc = get_obj('GL Control')
+		self.cash_accounts = [d[0] for d in webnotes.conn.sql("""
+			select name from tabAccount 
+			where account_type='Bank or Cash'
+			and company = %s and docstatus = 0 
+			""", company)]
+			
+		self.receivables_group = webnotes.conn.get_value('Company', company,'receivables_group')
+		self.payables_group = webnotes.conn.get_value('Company', company,'payables_group')
+		
+		# list of bank and cash accounts
+		self.bc_list = [s[0] for s in webnotes.conn.sql("select name from tabAccount where account_type='Bank or Cash'")]
+
+		
+	def timeline(self):
+		"""
+			get the timeline for the dashboard
+		"""
+		import webnotes
+		from webnotes.utils import add_days
+		tl = []
+	
+		if self.start > self.end:
+			webnotes.msgprint("Start must be before end", raise_exception=1)
+
+		curr = self.start
+		tl.append(curr)
+	
+		while curr < self.end:
+			curr = add_days(curr, self.interval, 'date')
+			tl.append(curr)
+
+		tl.append(self.end)
+
+		return tl
+		
+	def generate(self, opts):
+		"""
+			Generate the dasboard
+		"""
+		from webnotes.utils import flt
+		tl = self.timeline()
+		self.out = []
+		
+		for i in range(len(tl)-1):
+			self.out.append([tl[i+1].strftime('%Y-%m-%d'), flt(self.value(opts, tl[i], tl[i+1])) or 0])
+			
+		return self.out
+
+	def get_account_balance(self, acc, start):
+		"""
+			Get as on account balance
+		"""
+		import webnotes
+		# add abbreviation to company
+		
+		if not acc.endswith(self.abbr):
+			acc += ' - ' + self.abbr
+
+		# get other reqd parameters
+		try:
+			globals().update(webnotes.conn.sql('select debit_or_credit, lft, rgt from tabAccount where name=%s', acc, as_dict=1)[0])
+		except Exception,e:
+			webnotes.msgprint('Wrongly defined account: ' + acc)
+			print acc
+			raise e
+		
+		return self.glc.get_as_on_balance(acc, self.get_fiscal_year(start), start, debit_or_credit, lft, rgt)
+
+	def get_fiscal_year(self, dt):
+		"""
+			get fiscal year from date
+		"""
+		import webnotes
+		return webnotes.conn.sql("""
+			select name from `tabFiscal Year` 
+			where year_start_date <= %s and
+			DATE_ADD(year_start_date, INTERVAL 1 YEAR) >= %s
+			""", (dt, dt))[0][0]
+			
+	def get_creation_trend(self, doctype, start, end):
+		"""
+			Get creation # of creations in period
+		"""
+		import webnotes
+		return int(webnotes.conn.sql("""
+			select count(*) from `tab%s` where creation between %s and %s and docstatus=1
+		""" % (doctype, '%s','%s'), (start, end))[0][0])
+
+	def get_account_amt(self, acc, start, end, debit_or_credit):
+		"""
+			Get debit, credit over a period
+		"""
+		import webnotes
+		# add abbreviation to company
+		
+		if not acc.endswith(self.abbr):
+			acc += ' - ' + self.abbr
+			
+		ret = webnotes.conn.sql("""
+			select ifnull(sum(ifnull(t1.debit,0)),0), ifnull(sum(ifnull(t1.credit,0)),0)
+			from `tabGL Entry` t1, tabAccount t2
+			where t1.account = t2.name
+			and t2.is_pl_account = 'Yes'
+			and t2.debit_or_credit=%s
+			and ifnull(t1.is_cancelled, 'No')='No'
+			and t1.posting_date between %s and %s
+		""", (debit_or_credit, start, end))[0]
+		
+		return debit_or_credit=='Credit' and float(ret[1]-ret[0]) or float(ret[0]-ret[1])
+
+	def get_bank_amt(self, debit_or_credit, master_type, start, end):
+		"""
+			Get collection (reduction in receivables over a period)
+		"""
+		import webnotes
+
+		reg = '('+'|'.join(self.bc_list) + ')'
+
+		return webnotes.conn.sql("""
+		select sum(t1.%s)
+		from `tabGL Entry` t1, tabAccount t2
+		where t1.account = t2.name
+		and t2.master_type='%s'
+		and t1.%s > 0
+		and t1.against REGEXP '%s'
+		and ifnull(t1.is_cancelled, 'No')='No'
+		and t1.posting_date between '%s' and '%s'
+		""" % (debit_or_credit, master_type, debit_or_credit, reg, start, end))[0][0]
+
+
+	def value(self, opts, start, end):
+		"""
+			Value of the series on a particular date
+		"""
+		import webnotes
+		if opts['type']=='account':
+			debit_or_credit = 'Debit'
+			if opts['account']=='Income':
+				debit_or_credit = 'Credit'
+
+			return self.get_account_amt(opts['account'], start, end, debit_or_credit)
+		
+		elif opts['type']=='receivables':
+			return self.get_account_balance(self.receivables_group, end)[2]
+			
+		elif opts['type']=='payables':
+			return self.get_account_balance(self.payables_group, end)[2]
+
+		elif opts['type']=='collection':
+			return self.get_bank_amt('credit', 'Customer', start, end)
+
+		elif opts['type']=='payments':
+			return self.get_bank_amt('debit', 'Supplier', start, end)
+			
+		elif opts['type']=='creation':
+			return self.get_creation_trend(opts['doctype'], start, end)
+
+
+def load_dashboard(args):
+	"""
+		Get dashboard based on
+		1. Company (default company)
+		2. Start Date (last 3 months)
+		3. End Date (today)
+		4. Interval (7 days)
+	"""
+	dl = []
+	import json
+	args = json.loads(args)
+	dw = DashboardWidget(args['company'], args['start'], args['end'], int(args['interval']))
+
+	# render the dashboards
+	for d in dashboards:
+		dl.append([d, dw.generate(d)])
+
+	return dl
+
+if __name__=='__main__':
+	import sys
+	sys.path.append('/var/www/webnotes/wnframework/cgi-bin')
+	from webnotes.db import Database
+	import webnotes
+	webnotes.conn = Database(use_default=1)
+	webnotes.session = {'user':'Administrator'}
+	print load_dashboard("""{
+		"company": "My Test",
+		"start": "2011-05-01",
+		"end": "2011-08-01",
+		"interval": "7"
+	}""")
\ No newline at end of file
diff --git a/home/page/dashboard/dashboard.txt b/home/page/dashboard/dashboard.txt
new file mode 100644
index 0000000..46bc2bc
--- /dev/null
+++ b/home/page/dashboard/dashboard.txt
@@ -0,0 +1,49 @@
+# Page, dashboard
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-08-25 16:22:44',
+		'docstatus': 0,
+		'modified': '2011-08-25 16:22:54',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Page
+	{
+		'category': 'Standard',
+		'doctype': 'Page',
+		'module': 'Home',
+		'name': '__common__',
+		'page_name': 'Dashboard',
+		'standard': 'Yes'
+	},
+
+	# These values are common for all Page Role
+	{
+		'doctype': 'Page Role',
+		'name': '__common__',
+		'parent': 'dashboard',
+		'parentfield': 'roles',
+		'parenttype': 'Page'
+	},
+
+	# Page, dashboard
+	{
+		'doctype': 'Page',
+		'name': 'dashboard'
+	},
+
+	# Page Role
+	{
+		'doctype': 'Page Role',
+		'role': 'System Manager'
+	},
+
+	# Page Role
+	{
+		'doctype': 'Page Role',
+		'role': 'Accounts Manager'
+	}
+]
\ No newline at end of file
diff --git a/home/page/event_updates/event_updates.js b/home/page/event_updates/event_updates.js
index 1574f53..9aa3da2 100644
--- a/home/page/event_updates/event_updates.js
+++ b/home/page/event_updates/event_updates.js
@@ -25,12 +25,7 @@
 	
 	wrapper.banner_area = $a(wrapper.head, 'div');
 
-	wrapper.setup_wizard_area = $a(wrapper.body, 'div', 'setup-wizard')
-
-	wrapper.system_message_area = $a(wrapper.body, 'div', '', 
-		{marginBottom:'16px', padding:'8px', backgroundColor:'#FFD', border:'1px dashed #AA6', display:'none'})
-	
-	
+	wrapper.setup_wizard_area = $a(wrapper.body, 'div', 'setup-wizard');	
 }
 
 // ==================================
@@ -436,8 +431,8 @@
 	// head
 
 	$a(this.head,'h1','', {display:'inline'}, 'Home'); 
-	$a(this.head,'span','link_type', {marginLeft:'7px'}, '[?]', function() {
-		msgprint('<b>What appears here?</b> This is where you get updates of everything you are allowed to access and generates an update')
+	$a(this.head,'span','link_type', {marginLeft:'7px'}, 'help', function() {
+		msgprint('<b>What appears here?</b> This is where you get updates of everything you are permitted to follow')
 	})
 
 	// refresh
@@ -445,6 +440,11 @@
 		{cursor:'pointer', marginLeft:'7px', fontSize:'11px'}, 'refresh',
 		function() { me.run(); }
 	);
+	
+	if(has_common(user_roles, ['System Manager','Accounts Manager'])) {
+		$btn(this.head, 'Dashboard', function() {loadpage('dashboard'); }, {marginLeft:'7px'})
+		
+	}
 }
 
 FeedList.prototype.run = function() {
@@ -594,14 +594,15 @@
 	
 	this.render = function(r) {
 		this.wrapper.innerHTML = '';
-		this.span = $a(this.wrapper, 'span', 'home-status-link')
+		this.span = $a(this.wrapper, 'span', 'link_type', {fontWeight:'bold'});
 		this.span.onclick = function() { loadpage('My Company')	}
 		
 		if(r.unread_messages) {
-			this.span.innerHTML = '<span class="home-status-unread">' + r.unread_messages + '</span> unread message' + (cint(r.unread_messages) > 1 ? 's' : '');
+			this.span.innerHTML = '<span class="home-status-unread">' + r.unread_messages + '</span> unread';
 		} else {
-			this.span.innerHTML = 'No unread messages.';
+			this.span.innerHTML = 'Team / Messages';			
 		}
+		
 	}
 }
 
@@ -613,11 +614,7 @@
 	$c_page('home', 'event_updates', 'get_status_details', user,
 		function(r,rt) { 
 			home_status_bar.render(r.message);
-			
-			// system_messages
-			if(r.message.system_message)
-				pscript.show_system_message(wrapper, r.message.system_message);
-							
+										
 			// render online users
 			pscript.online_users_obj.render(r.message.online_users);
 			pscript.online_users = r.message.online_users;
@@ -630,24 +627,6 @@
 	);	
 }
 
-// show system message
-// -------------------
-pscript.show_system_message = function(wrapper, msg) {
-	$ds(wrapper.system_message_area);
-	var txt = $a(wrapper.system_message_area, 'div', '', {lineHeight:'1.6em'});
-	txt.innerHTML = msg;
-	
-	var span = $ln($a(wrapper.system_message_area, 'div', '', {textAlign:'right'}), 'Dismiss'.bold(), 
-		function(me) { 
-			me.set_working();
-			$c_obj('Home Control', 'dismiss_message', '', function(r,rt) { 
-				me.done_working(); 
-				$(wrapper.system_message_area).slideUp(); 
-			});
-		}, {fontSize:'11px'}
-	)
-}
-
 // complete my company registration
 // --------------------------------
 pscript.complete_registration = function()
diff --git a/home/page/event_updates/event_updates.py b/home/page/event_updates/event_updates.py
index 6e811e7..1134273 100644
--- a/home/page/event_updates/event_updates.py
+++ b/home/page/event_updates/event_updates.py
@@ -28,18 +28,11 @@
 		
 	online = get_online_users()
 			
-	# system messages
-	msg_id = webnotes.conn.get_global('system_message_id')
-	msg = ''
-				
-	if msg_id and msg_id != webnotes.conn.get_global('system_message_id', webnotes.session['user']):
-		msg = webnotes.conn.get_global('system_message')
-			
+	# system messages			
 	ret = {
 		'user_count': len(online) or 0, 
 		'unread_messages': get_unread_messages(),
 		'online_users': online or [],
-		'system_message':msg,
 		'is_trial': webnotes.conn.get_global('is_trial'),
 		'days_to_expiry': (webnotes.conn.get_global('days_to_expiry') or '0'),
 		'setup_status': get_setup_status()
@@ -56,7 +49,20 @@
 	percent = 20
 	ret = []
 	
-	if not webnotes.conn.get_value('Personalize', None, 'header_html'):
+	def is_header_set():
+		header = webnotes.conn.get_value('Control Panel', None, 'client_name') or ''
+
+		if header.startswith('<div style="padding:4px; font-size:20px;">'\
+			+webnotes.conn.get_value('Control Panel', None, 'company_name')):
+			return False
+			
+		elif 'Banner Comes Here' in header:
+			return False
+			
+		else:
+			return True
+	
+	if not is_header_set():
 		ret.append('<a href="#!Form/Personalize/Personalize">Upload your company banner</a>')
 	else:
 		percent += 20
diff --git a/home/page/my_company/my_company.js b/home/page/my_company/my_company.js
index 0850607..9da7e9b 100644
--- a/home/page/my_company/my_company.js
+++ b/home/page/my_company/my_company.js
@@ -134,24 +134,28 @@
 MemberList.prototype.make_list = function() {
 	var me = this;
 	this.lst_area = $a(this.list_wrapper, 'div');
-	this.lst = new Listing('Profiles',1);
-	this.lst.colwidths = ['100%'];
-	this.lst.opts.cell_style = {padding:'0px'}
-	this.lst.get_query = function() {
-		var c1 = '';
-		if(me.search_inp.value && me.search_inp.value != 'Search') {
-			var c1 = repl(' AND (first_name LIKE "%(txt)s" OR last_name LIKE "%(txt)s" OR name LIKE "%(txt)s")', {txt:'%' + me.search_inp.value + '%'});
+
+	this.lst = new wn.widgets.Listing({
+		parent: this.lst_area,
+		as_dict: 1,
+		get_query: function() {
+			var c1 = '';
+			if(me.search_inp.value && me.search_inp.value != 'Search') {
+				var c1 = repl(' AND (first_name LIKE "%(txt)s" OR last_name LIKE "%(txt)s" OR name LIKE "%(txt)s")', {txt:'%' + me.search_inp.value + '%'});
+			}
+
+			return repl("SELECT name, \
+				ifnull(concat_ws(' ', first_name, last_name),'') as full_name, \
+				gender, file_list, enabled \
+				FROM tabProfile \
+				WHERE docstatus != 2 \
+				AND name not in ('Guest','Administrator') %(cond)s \
+				ORDER BY name asc",{cond:c1});			
+		},
+		render_row: function(parent, data) {
+			me.member_items[data.name] = new MemberItem(parent, data, me);			
 		}
-		
-		this.query = repl("SELECT distinct ifnull(name,''), ifnull(concat_ws(' ', first_name, last_name),''), \
-			ifnull(messanger_status,''), ifnull(gender,''), ifnull(file_list,''), 0, enabled, last_login \
-			from tabProfile where docstatus != 2 AND name not in ('Guest','Administrator') %(cond)s \
-			ORDER BY name asc",{cond:c1});
-	}
-	this.lst.make(this.lst_area);
-	this.lst.show_cell= function(cell, ri, ci, d) {
-		me.member_items[d[ri][0]] = new MemberItem(cell, d[ri], me);
-	}
+	});	
 	this.lst.run();
 }
 
@@ -186,14 +190,14 @@
 	var me = this;
 	this.det = det;
 	this.wrapper = $a(parent, 'div');
-	this.enabled = det[6];
+	this.enabled = det.enabled;
 	
 	this.tab = make_table(this.wrapper, 1,2,'100%', ['20%', '70%'], {padding:'4px', overflow:'hidden'});
 	$y(this.tab, {tableLayout:'fixed', borderCollapse:'collapse'})
 	
 	this.is_online = function() {
 		for(var i=0;i<pscript.online_users.length;i++) {
-			if(det[0]==pscript.online_users[i][0]) return true;
+			if(det.name==pscript.online_users[i][0]) return true;
 		}
 	}
 	
@@ -210,30 +214,30 @@
 	this.set_image = function() {
 		// image
 		this.img = $a($td(this.tab,0,0),'img','',{width:'41px'});
-		set_user_img(this.img, det[0], null, 
-			(det[4] ? det[4].split(NEWLINE)[0].split(',')[1] : ('no_img_' + (det[3]=='Female' ? 'f' : 'm'))));		
+		set_user_img(this.img, det.name, null, 
+			(det.file_list ? det.file_list.split(NEWLINE)[0].split(',')[1] : ('no_img_' + (det.gender=='Female' ? 'f' : 'm'))));		
 	}
 	
 	// set other details like email id, name etc
 	this.set_details = function() {
 		// name
-		this.fullname = det[1] ? det[1] : det[0];
+		this.fullname = det.full_name || det.name;
 		var div = $a($td(this.tab, 0, 1), 'div', '', {fontWeight: 'bold',padding:'2px 0px'});
 		this.name_link = $a(div,'span','link_type');
 		this.name_link.innerHTML = crop(this.fullname, 15);
 		this.name_link.onclick = function() {
-			mlist.show_profile(me.det[0], me);
+			mlist.show_profile(me.det.name, me);
 		}
 
 		// "you" tag
-		if(user==det[0]) {
+		if(user==det.name) {
 			var span = $a(div,'span','',{padding:'2px' ,marginLeft:'3px'});
 			span.innerHTML = '(You)'
 		}
 
 		// email id
 		var div = $a($td(this.tab, 0, 1), 'div', '', {color: '#777', fontSize:'11px'});
-		div.innerHTML = det[0];
+		div.innerHTML = det.name;
 
 		// working img
 		var div = $a($td(this.tab, 0, 1), 'div');
@@ -256,7 +260,7 @@
 	this.set_details();
 	
 	// show initial
-	if(user==det[0]) me.name_link.onclick();
+	if(user==det.name) me.name_link.onclick();
 }
 
 
@@ -305,6 +309,7 @@
 		if(has_common(['Administrator','System Manager'],user_roles)) {
 			var roles_btn = $btn(this.toolbar_area, 'Set Roles', function() { me.show_roles() },{marginRight:'3px'});
 			var delete_btn = $btn(this.toolbar_area, 'Delete User', function() { me.delete_user(); },{marginRight:'3px'});
+			var ip_btn = $btn(this.toolbar_area, 'Securty Settings', function() { me.set_security(); },{marginRight:'3px'});
 		}
 	}
 	
@@ -315,6 +320,74 @@
 		this.role_object.dialog.show();
 	}
 	
+	// show securty settings
+	this.set_security = function() {
+		var d = new wn.widgets.Dialog({
+			title: 'Set User Security',
+			width: 500,
+			fields: [
+				{
+					label:'IP Address', 
+					description: 'Restrict user login by IP address, partial ips (111.111.111), \
+					multiple addresses (separated by commas) allowed', 
+					fieldname:'restrict_ip', 
+					fieldtype:'Data'
+				},
+				
+				{
+					label:'Login After',
+					description: 'User can only login after this hour (0-24)',
+					fieldtype: 'Int',
+					fieldname: 'login_after'
+				},
+
+				{
+					label:'Login Before',
+					description: 'User can only login before this hour (0-24)',
+					fieldtype: 'Int',
+					fieldname: 'login_before'
+				},
+				
+				{
+					label:'New Password',
+					description: 'Update the current user password',
+					fieldtype: 'Data',
+					fieldname: 'new_password'
+				},
+
+				{
+					label:'Update',
+					fieldtype:'Button',
+					fieldname:'update'
+				}
+			]
+		});
+		d.onshow = function() {
+			d.set_values({
+				restrict_ip: me.profile.restrict_ip || '',
+				login_before: me.profile.login_before || '',
+				login_after: me.profile.login_after || '',
+				new_password: ''
+			})
+		}
+		d.fields_dict.update.input.onclick = function() {
+			var btn = this;
+			this.set_working();
+			var args = d.get_values();
+			args.user = me.profile.name;
+			$c_page('home', 'my_company', 'update_security', JSON.stringify(args), function(r,rt) {
+				if(r.exc) {
+					msgprint(r.exc);
+					btn.done_working();
+					return;
+				}
+				$.extend(me.profile, d.get_values());
+				d.hide();
+			});
+		}
+		d.show();
+	}
+	
 	// delete user
 	// create a confirm dialog and call server method
 	this.delete_user = function() {
@@ -534,6 +607,7 @@
 		
 		this.lst = new wn.widgets.Listing({
 			parent: this.lst_area,
+			as_dict: 1,
 			no_result_message: (user==uid 
 				? 'No messages by anyone yet' 
 				: 'No messages yet. To start a conversation post a new message'),
@@ -577,18 +651,18 @@
 	this.wrapper = $a(cell, 'div', 'my-company-comment-wrapper');
 	this.comment = $a(this.wrapper, 'div', 'my-company-comment');
 
-	this.user = $a(this.comment, 'span', 'link_type', {fontWeight:'bold'}, pscript.get_fullname(det[1]));
+	this.user = $a(this.comment, 'span', 'link_type', {fontWeight:'bold'}, pscript.get_fullname(det.owner));
 	this.user.onclick = function() {
-		page_body.pages['My Company'].member_list.show_profile(me.det[1]);
+		page_body.pages['My Company'].member_list.show_profile(me.det.owner);
 	}
 
-	var st = (!det[4] ? {fontWeight: 'bold'} : null);
-	this.msg = $a(this.comment, 'span', 'social', st, ': ' + det[0]);
+	var st = (!det.docstatus ? {fontWeight: 'bold'} : null);
+	this.msg = $a(this.comment, 'span', 'social', st, ': ' + det.comment);
 
-	if(det[1]==user) {
+	if(det.full_name==user) {
 		$y(this.wrapper, {backgroundColor: '#D9D9F3'});
 	}
-	this.timestamp = $a(this.wrapper, 'div', 'my-company-timestamp', '', comment_when(det[3]));
+	this.timestamp = $a(this.wrapper, 'div', 'my-company-timestamp', '', comment_when(det.creation));
 }
 
 
diff --git a/home/page/my_company/my_company.py b/home/page/my_company/my_company.py
index 560ea6e..5d5ed80 100644
--- a/home/page/my_company/my_company.py
+++ b/home/page/my_company/my_company.py
@@ -129,3 +129,19 @@
 	WHERE comment_doctype = 'My Company'
 	AND comment_docname = %s
 	""", webnotes.user.name)
+
+def update_security(args=''):
+	import json
+	args = json.loads(args)
+	webnotes.conn.set_value('Profile', args['user'], 'restrict_ip', args.get('restrict_ip'))
+	webnotes.conn.set_value('Profile', args['user'], 'login_after', args.get('login_after'))
+	webnotes.conn.set_value('Profile', args['user'], 'login_before', args.get('login_before'))
+
+	if 'new_password' in args:
+		if cint(webnotes.conn.get_value('Control Panel',None,'sync_with_gateway')):
+			import server_tools.gateway_utils
+			webnotes.msgprint(server_tools.gateway_utils.change_password('', args['new_password'])['message'])
+		else:
+			webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s", (args['new_password'], args['user']))
+
+	webnotes.msgprint('Settings Updated')
\ No newline at end of file
diff --git a/home/page/profile_settings/profile_settings.py b/home/page/profile_settings/profile_settings.py
index 624feed..d1e091c 100644
--- a/home/page/profile_settings/profile_settings.py
+++ b/home/page/profile_settings/profile_settings.py
@@ -16,7 +16,7 @@
 			webnotes.msgprint('Old password is not correct', raise_exception=1)
 			
 		from webnotes.utils import nowdate
-		webnotes.conn.sql("update tabProfile set password=password(%s), password_last_updated=%s where name=%s",(arg['new_password'], nowdate(), webnotes.session['user']))
+		webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s",(arg['new_password'], nowdate(), webnotes.session['user']))
 		webnotes.msgprint('Password Updated');
 
 def get_user_details(arg=None):
@@ -56,4 +56,4 @@
 		fa.save()
 		
 		uh.set_callback('window.parent.upload_callback("%s", "%s")' \
-		 	% (webnotes.form_dict['uploader_id'], fa.get_fid(0)))
\ No newline at end of file
+		 	% (webnotes.form_dict['uploader_id'], fa.get_fid(0)))
diff --git a/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt b/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt
index 8145e4f..b3081bf 100644
--- a/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt
+++ b/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt
@@ -15,7 +15,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'kra_sheet',
 		'from_table': 'KRA Sheet',
-		'idx': 1,
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'KRA Template-Appraisal',
@@ -26,17 +25,6 @@
 		'validation_logic': 'name is not Null'
 	},
 
-	# These values are common for all Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'map': 'Yes',
-		'match_id': 0,
-		'name': '__common__',
-		'parent': 'KRA Template-Appraisal',
-		'parentfield': 'field_mapper_details',
-		'parenttype': 'DocType Mapper'
-	},
-
 	# These values are common for all DocType Mapper
 	{
 		'doctype': 'DocType Mapper',
@@ -52,22 +40,6 @@
 		'name': 'KRA Template-Appraisal'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'kra',
-		'idx': 1,
-		'to_field': 'kra'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'per_weightage',
-		'idx': 2,
-		'to_field': 'per_weightage'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail'
diff --git a/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt b/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt
index 2dbc46c..03318a1 100644
--- a/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt
+++ b/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-12-14 10:23:25',
 		'docstatus': 0,
 		'modified': '2011-02-12 18:31:40',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'harshada@webnotestech.com'
 	},
 
@@ -48,71 +48,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'employee',
-		'idx': 1,
-		'match_id': 0,
-		'to_field': 'employee'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'employee_name',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'employee_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'department',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'department'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'designation',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'designation'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'branch',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'branch'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grade',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'grade'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'e_type',
-		'idx': 7,
-		'match_id': 1,
-		'to_field': 'e_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'total_earning',
-		'idx': 7,
 		'match_id': 0,
 		'to_field': 'gross_pay'
 	},
@@ -121,7 +57,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'modified_value',
-		'idx': 8,
 		'match_id': 1,
 		'to_field': 'e_amount'
 	},
@@ -129,35 +64,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'total_deduction',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'total_deduction'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'd_type',
-		'idx': 9,
-		'match_id': 2,
-		'to_field': 'd_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'net_pay',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'net_pay'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'd_modified_amt',
-		'idx': 10,
 		'match_id': 2,
 		'to_field': 'd_amount'
 	},
@@ -166,7 +73,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'modified_value',
-		'idx': 12,
 		'match_id': 1,
 		'to_field': 'e_modified_amount'
 	},
@@ -175,7 +81,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'depend_on_lwp',
-		'idx': 13,
 		'match_id': 1,
 		'to_field': 'e_depends_on_lwp'
 	},
@@ -184,7 +89,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'd_modified_amt',
-		'idx': 16,
 		'match_id': 2,
 		'to_field': 'd_modified_amount'
 	},
@@ -193,7 +97,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'depend_on_lwp',
-		'idx': 17,
 		'match_id': 2,
 		'to_field': 'd_depends_on_lwp'
 	},
@@ -202,7 +105,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Salary Structure',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Salary Slip'
 	},
@@ -212,7 +114,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'earning_details',
 		'from_table': 'Earning Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'earning_details',
 		'to_table': 'SS Earning Detail'
@@ -223,7 +124,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'deduction_details',
 		'from_table': 'Deduction Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'deduction_details',
 		'to_table': 'SS Deduction Detail'
diff --git a/hr/Module Def/HR/HR.txt b/hr/Module Def/HR/HR.txt
index 5ad5e54..212d689 100644
--- a/hr/Module Def/HR/HR.txt
+++ b/hr/Module Def/HR/HR.txt
@@ -1,603 +1,318 @@
+# Module Def, HR
 [
+
+	# These values are common in all dictionaries
 	{
-		'_last_update': None,
-		'creation': '2011-06-30 15:51:33',
-		'disabled': 'No',
+		'creation': '2011-07-01 17:41:43',
 		'docstatus': 0,
-		'doctype': u'Module Def',
-		'doctype_list': None,
-		'file_list': None,
-		'idx': None,
-		'is_hidden': 'No',
-		'last_updated_date': None,
-		'modified': '2011-06-30 15:51:33',
+		'modified': '2011-08-25 13:54:43',
 		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Module Def Role
+	{
+		'doctype': 'Module Def Role',
+		'name': '__common__',
+		'parent': 'HR',
+		'parentfield': 'roles',
+		'parenttype': 'Module Def'
+	},
+
+	# These values are common for all Module Def Item
+	{
+		'doctype': 'Module Def Item',
+		'name': '__common__',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+
+	# These values are common for all Module Def
+	{
+		'disabled': 'No',
+		'doctype': u'Module Def',
+		'is_hidden': 'No',
 		'module_desc': 'Human Resource Management - Employee Database, Salaries etc.',
 		'module_icon': 'HR.gif',
 		'module_label': 'HR',
 		'module_name': 'HR',
-		'module_page': None,
 		'module_seq': 9,
-		'name': 'HR',
-		'owner': 'Administrator',
-		'parent': None,
-		'parentfield': None,
-		'parenttype': None,
-		'trash_reason': None,
-		'widget_code': None
+		'name': '__common__'
 	},
+
+	# Module Def, HR
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
+		'doctype': u'Module Def',
+		'name': 'HR'
+	},
+
+	# Module Def Item
+	{
 		'description': 'Your Employee Database',
 		'display_name': 'Employee',
 		'doc_name': 'Employee',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'employee_name\nemployment_type\nstatus\nbranch\ndesignation\ndepartment\ngrade\nreports_to',
-		'hide': None,
-		'icon': None,
-		'idx': 1,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01335',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 1
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Employees Daily Attendance Tracking Form',
 		'display_name': 'Attendance',
 		'doc_name': 'Attendance',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'employee\nemployee_name\nstatus\natt_date\nfiscal_year\ncompany',
-		'hide': None,
-		'icon': None,
-		'idx': 2,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01336',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 2
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Upload Attendance data',
 		'display_name': 'Attendance Control Panel',
 		'doc_name': 'Attendance Control Panel',
 		'doc_type': 'Single DocType',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 3,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01337',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 3
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Leave allocation for selected employees at a time',
 		'display_name': 'Leave Control Panel',
 		'doc_name': 'Leave Control Panel',
 		'doc_type': 'Single DocType',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 4,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01338',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 4
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Allocate leave for fiscal year',
 		'display_name': 'Leave Allocation',
 		'doc_name': 'Leave Allocation',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'employee\nleave_type\nfiscal_year\ntotal_leaves_allocated\nposting_date',
-		'hide': None,
-		'icon': None,
-		'idx': 5,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01339',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 5
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Apply Leave',
 		'display_name': 'Leave Application',
 		'doc_name': 'Leave Application',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'employee\nleave_type\nfiscal_year\nfrom_date\nto_date\ntotal_leave_days',
-		'hide': None,
-		'icon': None,
-		'idx': 6,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01340',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 6
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Submit Employees Expenses',
 		'display_name': 'Expense Voucher',
 		'doc_name': 'Expense Voucher',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'status\nemployee\nemployee_name\nposting_date\ntotal_claimed_amount\ntotal_sanctioned_amount\nexp_approver',
-		'hide': None,
-		'icon': None,
-		'idx': 7,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01341',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 7
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Assign Responsibilities to employee and evaluate',
 		'display_name': 'Appraisal',
 		'doc_name': 'Appraisal',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'status\nemployee\nemployee_name\nstart_date\nend_date\ntotal_score\nkra_approver',
-		'hide': None,
-		'icon': None,
-		'idx': 8,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01342',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 8
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Generate Salary Structure heads for an employee',
 		'display_name': 'Salary Structure',
 		'doc_name': 'Salary Structure',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'employee\nis_active\nfiscal_year\nfrom_date\nctc\ntotal_earning\ntotal_deduction\ntotal',
-		'hide': None,
-		'icon': None,
-		'idx': 9,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01343',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 9
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Generate Salary Slip for an employee',
 		'display_name': 'Salary Slip',
 		'doc_name': 'Salary Slip',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'month\nyear\nemployee\nemployee_name\npayment_days\narrear_amount\nencashment_amount\ngross_pay\ntotal_deduction\nnet_pay',
-		'hide': None,
-		'icon': None,
-		'idx': 10,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01344',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 10
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
-		'description': 'Generate Salary Slip for all employee at a time',
-		'display_name': 'Salary Slip Control Panel',
-		'doc_name': 'Salary Slip Control Panel',
+		'description': 'Generate Salary Slip for multiple employee at a time based on selected criteria',
+		'display_name': 'Salary Manager',
+		'doc_name': 'Salary Manager',
 		'doc_type': 'Single DocType',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 11,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01345',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 11
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
 		'description': 'Job Applications received for various positions',
 		'display_name': 'Job Application',
 		'doc_name': 'Job Application',
 		'doc_type': 'Forms',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
 		'fields': 'applicant_name\nemail\nposition',
-		'hide': None,
-		'icon': None,
-		'idx': 12,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01346',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 12
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
-		'description': None,
 		'display_name': 'Employee Information',
 		'doc_name': 'Employee',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 13,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01347',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 13
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
-		'description': None,
 		'display_name': "Employee's Birthday",
 		'doc_name': 'Employee',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 14,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01348',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 14
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
-		'description': None,
 		'display_name': 'New or left employees for a month',
 		'doc_name': 'Employee',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 15,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01349',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 15
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
-		'description': None,
 		'display_name': 'Monthly Attendance Details',
 		'doc_name': 'Attendance',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 16,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01350',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 16
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:33',
-		'description': None,
 		'display_name': 'Leave Application Details',
 		'doc_name': 'Leave Application',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 17,
-		'modified': '2011-06-30 15:51:33',
-		'modified_by': 'Administrator',
-		'name': 'MDI01351',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 17
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Leave Allocation Details',
 		'doc_name': 'Leave Allocation',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 18,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01352',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 18
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Employee Leave Balance Report',
 		'doc_name': 'Employee',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 19,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01353',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 19
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Salary Structure Details',
 		'doc_name': 'Salary Structure',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 20,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01354',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 20
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Salary Register',
 		'doc_name': 'Salary Slip',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 21,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01355',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 21
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Salary Slips',
 		'doc_name': 'Salary Slip',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 22,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01356',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 22
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Pending Appraisals',
 		'doc_name': 'Appraisal',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 23,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01357',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 23
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Employee Appraisals',
 		'doc_name': 'Appraisal',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 24,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01358',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 24
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Pending Expense Vouchers',
 		'doc_name': 'Expense Voucher',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 25,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01359',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 25
 	},
+
+	# Module Def Item
 	{
-		'click_function': None,
-		'creation': '2011-06-30 15:51:34',
-		'description': None,
 		'display_name': 'Expense Vouchers',
 		'doc_name': 'Expense Voucher',
 		'doc_type': 'Reports',
-		'docstatus': 0,
 		'doctype': 'Module Def Item',
-		'fields': None,
-		'hide': None,
-		'icon': None,
-		'idx': 26,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDI01360',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'items',
-		'parenttype': 'Module Def'
+		'idx': 26
 	},
+
+	# Module Def Role
 	{
-		'creation': '2011-06-30 15:51:34',
-		'docstatus': 0,
 		'doctype': 'Module Def Role',
 		'idx': 1,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDR00340',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'roles',
-		'parenttype': 'Module Def',
 		'role': 'HR Manager'
 	},
+
+	# Module Def Role
 	{
-		'creation': '2011-06-30 15:51:34',
-		'docstatus': 0,
 		'doctype': 'Module Def Role',
 		'idx': 2,
-		'modified': '2011-06-30 15:51:34',
-		'modified_by': 'Administrator',
-		'name': 'MDR00341',
-		'owner': 'Administrator',
-		'parent': 'HR',
-		'parentfield': 'roles',
-		'parenttype': 'Module Def',
 		'role': 'HR User'
 	}
 ]
\ No newline at end of file
diff --git a/hr/doctype/employee/employee.txt b/hr/doctype/employee/employee.txt
index 49a494b..98caa2c 100644
--- a/hr/doctype/employee/employee.txt
+++ b/hr/doctype/employee/employee.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-02-17 11:16:08',
+		'creation': '2010-08-08 17:08:59',
 		'docstatus': 0,
-		'modified': '2011-06-27 14:39:04',
+		'modified': '2011-08-11 17:27:12',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -26,7 +26,7 @@
 		'show_in_menu': 0,
 		'subject': '%(employee_name)s',
 		'tag_fields': 'status',
-		'version': 443
+		'version': 444
 	},
 
 	# These values are common for all DocField
@@ -40,12 +40,14 @@
 
 	# These values are common for all DocPerm
 	{
+		'amend': 0,
 		'doctype': 'DocPerm',
 		'name': '__common__',
 		'parent': 'Employee',
 		'parentfield': 'permissions',
 		'parenttype': 'DocType',
-		'read': 1
+		'read': 1,
+		'submit': 0
 	},
 
 	# DocType, Employee
@@ -56,21 +58,24 @@
 
 	# DocPerm
 	{
-		'cancel': 1,
-		'create': 1,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 1,
 		'permlevel': 0,
-		'role': 'System Manager',
-		'write': 1
+		'role': 'Employee',
+		'write': 0
 	},
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 2,
 		'permlevel': 1,
-		'role': 'All'
+		'role': 'All',
+		'write': 0
 	},
 
 	# DocPerm
@@ -95,22 +100,6 @@
 		'write': 1
 	},
 
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 5,
-		'permlevel': 1,
-		'role': 'HR User'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 6,
-		'permlevel': 1,
-		'role': 'HR Manager'
-	},
-
 	# DocField
 	{
 		'doctype': 'DocField',
@@ -141,7 +130,7 @@
 		'no_copy': 1,
 		'oldfieldname': 'naming_series',
 		'oldfieldtype': 'Select',
-		'options': 'WN-EMP\nEMP/',
+		'options': 'EMP/',
 		'permlevel': 0,
 		'reqd': 0
 	},
@@ -173,8 +162,7 @@
 		'oldfieldname': 'employee_name',
 		'oldfieldtype': 'Data',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 1
+		'reqd': 1
 	},
 
 	# DocField
@@ -276,7 +264,7 @@
 		'options': '\nActive\nLeft',
 		'permlevel': 0,
 		'reqd': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -409,8 +397,7 @@
 		'oldfieldtype': 'Link',
 		'options': 'Department',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 1
+		'reqd': 1
 	},
 
 	# DocField
@@ -477,18 +464,8 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'is_sales_person',
-		'fieldtype': 'Check',
-		'idx': 27,
-		'label': 'Is Sales Person',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 28,
+		'idx': 27,
 		'label': 'Salary Information',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -501,11 +478,11 @@
 		'doctype': 'DocField',
 		'fieldname': 'salary_mode',
 		'fieldtype': 'Select',
-		'idx': 29,
+		'idx': 28,
 		'label': 'Salary Mode',
 		'oldfieldname': 'salary_mode',
 		'oldfieldtype': 'Select',
-		'options': '\nBank\nCash \nCheque',
+		'options': '\nBank\nCash\nCheque',
 		'permlevel': 0,
 		'trigger': 'Client'
 	},
@@ -518,7 +495,7 @@
 		'fieldname': 'bank_name',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 30,
+		'idx': 29,
 		'in_filter': 1,
 		'label': 'Bank Name',
 		'oldfieldname': 'bank_name',
@@ -535,7 +512,7 @@
 		'fieldname': 'bank_ac_no',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 31,
+		'idx': 30,
 		'label': 'Bank A/C No.',
 		'oldfieldname': 'bank_ac_no',
 		'oldfieldtype': 'Data',
@@ -547,7 +524,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'esic_card_no',
 		'fieldtype': 'Data',
-		'idx': 32,
+		'idx': 31,
 		'label': 'ESIC CARD No',
 		'oldfieldname': 'esic_card_no',
 		'oldfieldtype': 'Data',
@@ -559,7 +536,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'pf_number',
 		'fieldtype': 'Data',
-		'idx': 33,
+		'idx': 32,
 		'label': 'PF Number',
 		'oldfieldname': 'pf_number',
 		'oldfieldtype': 'Data',
@@ -571,7 +548,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'gratuity_lic_id',
 		'fieldtype': 'Data',
-		'idx': 34,
+		'idx': 33,
 		'label': 'Gratuity LIC ID',
 		'oldfieldname': 'gratuity_lic_id',
 		'oldfieldtype': 'Data',
@@ -582,7 +559,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 35,
+		'idx': 34,
 		'label': 'Contact Details',
 		'permlevel': 0
 	},
@@ -591,7 +568,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 36,
+		'idx': 35,
 		'permlevel': 0,
 		'width': '50%'
 	},
@@ -601,7 +578,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'cell_number',
 		'fieldtype': 'Data',
-		'idx': 37,
+		'idx': 36,
 		'label': 'Cell Number',
 		'permlevel': 0
 	},
@@ -611,7 +588,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'personal_email',
 		'fieldtype': 'Data',
-		'idx': 38,
+		'idx': 37,
 		'label': 'Personal Email',
 		'permlevel': 0
 	},
@@ -621,7 +598,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'notice_number_of_days',
 		'fieldtype': 'Int',
-		'idx': 39,
+		'idx': 38,
 		'label': 'Notice - Number of Days',
 		'oldfieldname': 'notice_number_of_days',
 		'oldfieldtype': 'Int',
@@ -632,7 +609,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 40,
+		'idx': 39,
 		'label': 'Emergency Contact Details',
 		'options': '<b>Emergency Contact Details</b>',
 		'permlevel': 0
@@ -643,7 +620,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'person_to_be_contacted',
 		'fieldtype': 'Data',
-		'idx': 41,
+		'idx': 40,
 		'label': 'Person To Be Contacted',
 		'permlevel': 0
 	},
@@ -653,7 +630,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'relation',
 		'fieldtype': 'Data',
-		'idx': 42,
+		'idx': 41,
 		'label': 'Relation',
 		'permlevel': 0
 	},
@@ -663,7 +640,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'emergency_phone_number',
 		'fieldtype': 'Data',
-		'idx': 43,
+		'idx': 42,
 		'label': 'Emergency Phone Number',
 		'permlevel': 0
 	},
@@ -672,7 +649,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 44,
+		'idx': 43,
 		'permlevel': 0,
 		'width': '50%'
 	},
@@ -682,7 +659,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'permanent_accommodation_type',
 		'fieldtype': 'Select',
-		'idx': 45,
+		'idx': 44,
 		'label': 'Permanent Accommodation Type',
 		'options': '\nRented\nOwned',
 		'permlevel': 0
@@ -693,7 +670,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'permanent_address',
 		'fieldtype': 'Small Text',
-		'idx': 46,
+		'idx': 45,
 		'label': 'Permanent Address',
 		'permlevel': 0
 	},
@@ -703,7 +680,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'current_accommodation_type',
 		'fieldtype': 'Select',
-		'idx': 47,
+		'idx': 46,
 		'label': 'Current Accommodation Type',
 		'options': '\nRented\nOwned',
 		'permlevel': 0
@@ -714,7 +691,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'current_address',
 		'fieldtype': 'Small Text',
-		'idx': 48,
+		'idx': 47,
 		'label': 'Current Address',
 		'permlevel': 0
 	},
@@ -723,7 +700,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 49,
+		'idx': 48,
 		'label': 'Personal Details',
 		'permlevel': 0
 	},
@@ -732,7 +709,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 50,
+		'idx': 49,
 		'permlevel': 0,
 		'width': '50%'
 	},
@@ -742,7 +719,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'pan_number',
 		'fieldtype': 'Data',
-		'idx': 51,
+		'idx': 50,
 		'label': 'PAN Number',
 		'permlevel': 0
 	},
@@ -752,7 +729,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'passport_number',
 		'fieldtype': 'Data',
-		'idx': 52,
+		'idx': 51,
 		'label': 'Passport Number',
 		'permlevel': 0
 	},
@@ -763,7 +740,7 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 1,
-		'idx': 53,
+		'idx': 52,
 		'label': 'Employee Profile',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -775,7 +752,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'date_of_issue',
 		'fieldtype': 'Date',
-		'idx': 54,
+		'idx': 53,
 		'label': 'Date of Issue',
 		'permlevel': 0
 	},
@@ -785,7 +762,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'valid_upto',
 		'fieldtype': 'Date',
-		'idx': 55,
+		'idx': 54,
 		'label': 'Valid Upto',
 		'permlevel': 0
 	},
@@ -796,7 +773,7 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 1,
-		'idx': 56,
+		'idx': 55,
 		'label': 'Salary Structure',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -808,7 +785,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'place_of_issue',
 		'fieldtype': 'Data',
-		'idx': 57,
+		'idx': 56,
 		'label': 'Place of Issue',
 		'permlevel': 0
 	},
@@ -818,7 +795,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'marital_status',
 		'fieldtype': 'Select',
-		'idx': 58,
+		'idx': 57,
 		'label': 'Marital Status',
 		'options': '\nSingle\nMarried\nDivorced\nWidowed',
 		'permlevel': 0
@@ -829,7 +806,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'blood_group',
 		'fieldtype': 'Select',
-		'idx': 59,
+		'idx': 58,
 		'label': 'Blood Group',
 		'options': '\nA+\nA-\nB+\nB-\nAB+\nAB-\nO+\nO-',
 		'permlevel': 0
@@ -839,7 +816,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 60,
+		'idx': 59,
 		'permlevel': 0,
 		'width': '50%'
 	},
@@ -851,7 +828,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'family_background',
 		'fieldtype': 'Small Text',
-		'idx': 61,
+		'idx': 60,
 		'label': 'Family Background',
 		'permlevel': 0
 	},
@@ -863,7 +840,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'health_details',
 		'fieldtype': 'Small Text',
-		'idx': 62,
+		'idx': 61,
 		'label': 'Health Details',
 		'permlevel': 0
 	},
@@ -872,7 +849,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 63,
+		'idx': 62,
 		'label': 'Educational Qualification',
 		'permlevel': 0
 	},
@@ -882,7 +859,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'educational_qualification_details',
 		'fieldtype': 'Table',
-		'idx': 64,
+		'idx': 63,
 		'label': 'Educational Qualification Details',
 		'options': 'Educational Qualifications Detail',
 		'permlevel': 0
@@ -892,7 +869,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 65,
+		'idx': 64,
 		'label': 'Career History',
 		'permlevel': 0
 	},
@@ -901,7 +878,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 66,
+		'idx': 65,
 		'label': 'Previous Work Experience',
 		'options': 'Simple',
 		'permlevel': 0
@@ -912,7 +889,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'previous_experience_details',
 		'fieldtype': 'Table',
-		'idx': 67,
+		'idx': 66,
 		'label': 'Previous Experience Details',
 		'options': 'Previous Experience Detail',
 		'permlevel': 0
@@ -922,7 +899,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 68,
+		'idx': 67,
 		'label': 'History In Company',
 		'options': 'Simple',
 		'permlevel': 0
@@ -933,7 +910,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'experience_in_company_details',
 		'fieldtype': 'Table',
-		'idx': 69,
+		'idx': 68,
 		'label': 'Experience In Company Details',
 		'options': 'Experience In Company Detail',
 		'permlevel': 0
@@ -943,7 +920,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 70,
+		'idx': 69,
 		'label': 'Exit',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -953,7 +930,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 71,
+		'idx': 70,
 		'permlevel': 0,
 		'width': '50%'
 	},
@@ -963,7 +940,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'resignation_letter_date',
 		'fieldtype': 'Date',
-		'idx': 72,
+		'idx': 71,
 		'label': 'Resignation Letter Date',
 		'oldfieldname': 'resignation_letter_date',
 		'oldfieldtype': 'Date',
@@ -975,7 +952,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'relieving_date',
 		'fieldtype': 'Date',
-		'idx': 73,
+		'idx': 72,
 		'in_filter': 1,
 		'label': 'Relieving Date',
 		'oldfieldname': 'relieving_date',
@@ -988,7 +965,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'reason_for_leaving',
 		'fieldtype': 'Data',
-		'idx': 74,
+		'idx': 73,
 		'label': 'Reason for Leaving',
 		'oldfieldname': 'reason_for_leaving',
 		'oldfieldtype': 'Data',
@@ -1000,7 +977,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'leave_encashed',
 		'fieldtype': 'Select',
-		'idx': 75,
+		'idx': 74,
 		'label': 'Leave Encashed?',
 		'oldfieldname': 'leave_encashed',
 		'oldfieldtype': 'Select',
@@ -1013,7 +990,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'encashment_date',
 		'fieldtype': 'Date',
-		'idx': 76,
+		'idx': 75,
 		'label': 'Encashment Date',
 		'oldfieldname': 'encashment_date',
 		'oldfieldtype': 'Date',
@@ -1024,7 +1001,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 77,
+		'idx': 76,
 		'label': 'Exit Interview Details',
 		'oldfieldname': 'col_brk6',
 		'oldfieldtype': 'Column Break',
@@ -1037,7 +1014,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'held_on',
 		'fieldtype': 'Date',
-		'idx': 78,
+		'idx': 77,
 		'label': 'Held On',
 		'oldfieldname': 'held_on',
 		'oldfieldtype': 'Date',
@@ -1049,7 +1026,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'reason_for_resignation',
 		'fieldtype': 'Select',
-		'idx': 79,
+		'idx': 78,
 		'label': 'Reason for Resignation',
 		'oldfieldname': 'reason_for_resignation',
 		'oldfieldtype': 'Select',
@@ -1062,7 +1039,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'new_workplace',
 		'fieldtype': 'Data',
-		'idx': 80,
+		'idx': 79,
 		'label': 'New Workplace',
 		'oldfieldname': 'new_workplace',
 		'oldfieldtype': 'Data',
@@ -1074,7 +1051,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'feedback',
 		'fieldtype': 'Small Text',
-		'idx': 81,
+		'idx': 80,
 		'label': 'Feedback',
 		'oldfieldname': 'feedback',
 		'oldfieldtype': 'Text',
@@ -1087,7 +1064,7 @@
 		'fieldname': 'file_list',
 		'fieldtype': 'Text',
 		'hidden': 1,
-		'idx': 82,
+		'idx': 81,
 		'label': 'File List',
 		'permlevel': 0,
 		'print_hide': 1
@@ -1098,7 +1075,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'trash_reason',
 		'fieldtype': 'Small Text',
-		'idx': 83,
+		'idx': 82,
 		'label': 'Trash Reason',
 		'oldfieldname': 'trash_reason',
 		'oldfieldtype': 'Small Text',
diff --git a/hr/doctype/leave_allocation/leave_allocation.py b/hr/doctype/leave_allocation/leave_allocation.py
index 46f7809..12fe37a 100755
--- a/hr/doctype/leave_allocation/leave_allocation.py
+++ b/hr/doctype/leave_allocation/leave_allocation.py
@@ -75,7 +75,7 @@
   # get total allocated leaves
   # ---------------------------
   def get_total_allocated_leaves(self):
-    leave_det = eval(self.get_carry_forwarded_leaves())
+    leave_det = self.get_carry_forwarded_leaves()
     set(self.doc,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
     set(self.doc,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
 
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
index 01bf7fe..1756f2a 100755
--- a/hr/doctype/leave_application/leave_application.py
+++ b/hr/doctype/leave_application/leave_application.py
@@ -82,7 +82,7 @@
     if not self.is_lwp():
       bal = self.get_leave_balance()
       tot_leaves = self.get_total_leave_days()
-      bal, tot_leaves = eval(bal), eval(tot_leaves)
+      bal, tot_leaves = bal, tot_leaves
       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']):
diff --git a/hr/doctype/salary_manager/__init__.py b/hr/doctype/salary_manager/__init__.py
new file mode 100644
index 0000000..cb6c600
--- /dev/null
+++ b/hr/doctype/salary_manager/__init__.py
@@ -0,0 +1,4 @@
+from webnotes import ValidationError
+
+class SalarySlipExistsError(ValidationError): pass
+
diff --git a/hr/doctype/salary_manager/salary_manager.js b/hr/doctype/salary_manager/salary_manager.js
new file mode 100644
index 0000000..cf470be
--- /dev/null
+++ b/hr/doctype/salary_manager/salary_manager.js
@@ -0,0 +1,67 @@
+var display_activity_log = function(msg) {
+	if(!pscript.ss_html)
+		pscript.ss_html = $a(cur_frm.fields_dict['Activity Log'].wrapper,'div','',{border:'1px solid #CCC', backgroundColor:'#CCC'});
+	pscript.ss_html.innerHTML = '<div style="color:#EEE; background-color:#555;"><b><i>Activity Log:</i><br></b></div>';
+	pscript.ss_html.innerHTML += '<div style="color:#666; padding: 5px">'+ msg + '</div>';
+}
+
+//Create salary slip
+//-----------------------
+cur_frm.cscript['Create Salary Slip'] = function(doc, cdt, cdn) {
+	var callback = function(r, rt){
+		if (r.message)
+			display_activity_log(r.message);
+	}
+	$c('runserverobj', args={'method':'create_sal_slip','docs':compress_doclist(make_doclist (cdt, cdn))},callback);
+}
+
+
+
+//Submit salary slip
+//-----------------------
+cur_frm.cscript['Submit Salary Slip'] = function(doc, cdt, cdn) {
+	var check = confirm("Do you really want to Submit all Salary Slip for month : " + doc.month+" and fiscal year : "+doc.fiscal_year);
+	if(check){
+		var callback = function(r, rt){
+			if (r.message)
+				display_activity_log(r.message);
+		}
+		$c('runserverobj', args={'method':'submit_salary_slip','docs':compress_doclist(make_doclist (cdt, cdn))},callback);
+	}
+}
+
+// Make Bank Voucher
+//-----------------------
+cur_frm.cscript['Make Bank Voucher'] = function(doc,cdt,cdn){
+  if(doc.month && doc.fiscal_year){
+  	cur_frm.cscript.make_jv(doc, cdt, cdn);
+  }
+}
+
+
+// Make JV
+//-----------------------
+cur_frm.cscript.make_jv = function(doc, dt, dn) {
+	var call_back = function(r,rt){
+		var jv = LocalDB.create('Journal Voucher');
+		jv = locals['Journal Voucher'][jv];
+		jv.voucher_type = 'Bank Voucher';
+		jv.user_remark = 'Payment of salary for the month: ' + doc.month + 'and fiscal year: ' + doc.fiscal_year;
+		jv.fiscal_year = doc.fiscal_year;
+		jv.company = doc.company;
+		jv.posting_date = dateutil.obj_to_str(new Date());
+
+		// credit to bank
+		var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+		d1.account = r.message['default_bank_account'];
+		d1.credit = r.message['amount']
+
+		// debit to salary account
+		var d2 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+		d2.account = r.message['default_salary_account'];
+		d2.debit = r.message['amount']
+
+		loaddoc('Journal Voucher', jv.name);
+	}
+	$c_obj(make_doclist(dt,dn),'get_acc_details','',call_back);
+}
diff --git a/hr/doctype/salary_manager/salary_manager.py b/hr/doctype/salary_manager/salary_manager.py
new file mode 100644
index 0000000..5071056
--- /dev/null
+++ b/hr/doctype/salary_manager/salary_manager.py
@@ -0,0 +1,172 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, 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, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist 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, is_testing, msgprint, errprint
+
+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
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+	def __init__(self, doc, doclist):
+		self.doc = doc
+		self.doclist = doclist
+		
+		
+	def get_emp_list(self):
+		"""
+			Returns list of active employees based on selected criteria 
+			and for which salary structure exists		
+		"""
+		
+		cond = self.get_filter_condition()
+		
+		emp_list = sql("""
+			select t1.name
+			from `tabEmployee` t1, `tabSalary Structure` t2 
+			where t1.docstatus!=2 and t2.docstatus != 2 
+			and ifnull(t1.status, 'Left') = 'Active' and ifnull(t2.is_active, 'No') = 'Yes' 
+			and t1.name = t2.employee
+		%s """% cond)
+
+		return emp_list
+		
+		
+	def get_filter_condition(self):
+		self.check_mandatory()
+		
+		cond = ''
+		for f in ['company', 'branch', 'department', 'designation', 'grade', 'employment_type']:
+			if self.doc.fields.get(f):
+				cond += " and t1." + f + " = '" + self.doc.fields.get(f) + "'"
+				
+		return cond
+		
+		
+	def check_mandatory(self):
+		for f in ['company', 'month', 'fiscal_year']:
+			if not self.doc.fields[f]:
+				msgprint("Please select %s to proceed" % f, raise_exception=1)
+		
+		
+	def create_sal_slip(self):
+		"""
+			Creates salary slip for selected employees if already not created
+		
+		"""
+		
+		emp_list = self.get_emp_list()
+		log = ""
+		if emp_list:
+			log = "<table><tr><td colspan = 2>Following Salary Slip has been created: </td></tr><tr><td><u>SAL SLIP ID</u></td><td><u>EMPLOYEE NAME</u></td></tr>"
+		else:
+			log = "<table><tr><td colspan = 2>No employee found for the above selected criteria</td></tr>"
+			
+		for emp in emp_list:
+			if not sql("""select name from `tabSalary Slip` 
+					where docstatus!= 2 and employee = %s and month = %s and fiscal_year = %s and company = %s
+					""", (emp[0], self.doc.month, self.doc.fiscal_year, self.doc.company)):
+				ss = Document('Salary Slip')
+				ss.fiscal_year = self.doc.fiscal_year
+				ss.employee = emp[0]
+				ss.month = self.doc.month
+				ss.email_check = self.doc.send_email
+				ss.company = self.doc.company
+				ss.save(1)
+			
+				ss_obj = get_obj('Salary Slip', ss.name, with_children=1)
+				ss_obj.get_emp_and_leave_details()
+				ss_obj.calculate_net_pay()
+				ss_obj.validate()
+				ss_obj.doc.save()
+			
+				for d in getlist(ss_obj.doclist, 'earning_details'):
+					d.save()
+				for d in getlist(ss_obj.doclist, 'deduction_details'):
+					d.save()
+					
+				log += '<tr><td>' + ss.name + '</td><td>' + ss_obj.doc.employee_name + '</td></tr>'
+		log += '</table>'
+		return log	
+				
+	def get_sal_slip_list(self):
+		"""
+			Returns list of salary slips based on selected criteria
+			which are not submitted
+		"""
+		cond = self.get_filter_condition()
+		ss_list = sql("""
+			select t1.name from `tabSalary Slip` t1 
+			where t1.docstatus = 0 and month = '%s' and fiscal_year = '%s' %s
+		""" % (self.doc.month, self.doc.fiscal_year, cond))
+		return ss_list
+			
+				
+	def submit_salary_slip(self):
+		"""
+			Submit all salary slips based on selected criteria
+		"""
+		ss_list = self.get_sal_slip_list()
+		log = ""
+		if ss_list:
+			log = 	"""<table>
+						<tr>
+							<td colspan = 2>Following Salary Slip has been submitted: </td>
+						</tr>
+						<tr>
+							<td><u>SAL SLIP ID</u></td>
+							<td><u>EMPLOYEE NAME</u></td>
+						</tr>
+					"""
+		else:
+			log = "<table><tr><td colspan = 2>No salary slip found to submit for the above selected criteria</td></tr>"
+			
+		for ss in ss_list:
+			ss_obj = get_obj("Salary Slip",ss[0],with_children=1)
+			set(ss_obj.doc, 'docstatus', 1)
+			ss_obj.on_submit()
+			
+			log += '<tr><td>' + ss[0] + '</td><td>' + ss_obj.doc.employee_name + '</td></tr>'
+		log += '</table>'	
+		return log	
+			
+			
+	def get_total_salary(self):
+		"""
+			Get total salary amount from submitted salary slip based on selected criteria
+		"""
+		cond = self.get_filter_condition()
+		tot = sql("""
+			select sum(rounded_total) from `tabSalary Slip` t1 
+			where t1.docstatus = 1 and month = '%s' and fiscal_year = '%s' %s
+		""" % (self.doc.month, self.doc.fiscal_year, cond))
+		
+		return flt(tot[0][0])
+		
+		
+	def get_acc_details(self):
+		"""
+			get default bank account,default salary acount from company
+		"""
+		amt = self.get_total_salary()
+		com = sql("select default_bank_account from `tabCompany` where name = '%s'" % self.doc.company)
+		
+		if not com[0][0] or not com[0][1]:
+			msgprint("You can set Default Bank Account in Company master.")
+
+		ret = {
+			'def_bank_acc' : com and com[0][0] or '',
+			'def_sal_acc' : com and com[0][1] or '',
+			'amount' : amt
+		}
+		return ret
diff --git a/hr/doctype/salary_manager/salary_manager.txt b/hr/doctype/salary_manager/salary_manager.txt
new file mode 100644
index 0000000..66a7282
--- /dev/null
+++ b/hr/doctype/salary_manager/salary_manager.txt
@@ -0,0 +1,287 @@
+# DocType, Salary Manager
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-08-11 16:40:04',
+		'docstatus': 0,
+		'modified': '2011-08-25 12:02:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1314179318',
+		'allow_copy': 1,
+		'allow_email': 1,
+		'allow_print': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Other',
+		'issingle': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'show_in_menu': 1,
+		'version': 29
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Salary Manager',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Salary Manager',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Salary Manager
+	{
+		'doctype': 'DocType',
+		'name': 'Salary Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 1,
+		'label': 'Document Description',
+		'options': '<div class="field_description">You can generate multiple salary slips based on the selected criteria, submit and mail those to the employee directly from here</div>'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 2
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 3,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Company',
+		'options': 'link:Company',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Link',
+		'idx': 5,
+		'label': 'Branch',
+		'options': 'Branch'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Link',
+		'idx': 6,
+		'label': 'Department',
+		'options': 'Department'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Link',
+		'idx': 7,
+		'label': 'Designation',
+		'options': 'Designation'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 8,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Select',
+		'idx': 9,
+		'label': 'Grade',
+		'options': 'link:Grade'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employment_type',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'label': 'Employment Type',
+		'options': 'link:Employment Type'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 11,
+		'label': 'Fiscal Year',
+		'options': 'link:Fiscal Year',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'month',
+		'fieldtype': 'Select',
+		'idx': 12,
+		'label': 'Month',
+		'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Check if you want to send salary slip in mail to each employee while submitting salary slip',
+		'doctype': 'DocField',
+		'fieldname': 'send_email',
+		'fieldtype': 'Check',
+		'idx': 13,
+		'label': 'Send Email'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 14
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 15,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Creates salary slip for above mentioned criteria.',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 16,
+		'label': 'Create Salary Slip',
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 17,
+		'width': '25%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Submit all salary slips for the above selected criteria',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 18,
+		'label': 'Submit Salary Slip',
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 19,
+		'width': '25%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Create Bank Voucher for the total salary paid for the above selected criteria',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 20,
+		'label': 'Make Bank Voucher',
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 21
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 22,
+		'label': 'Activity Log'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/salary_manager/test_salary_manager.py b/hr/doctype/salary_manager/test_salary_manager.py
new file mode 100644
index 0000000..c7d0867
--- /dev/null
+++ b/hr/doctype/salary_manager/test_salary_manager.py
@@ -0,0 +1,199 @@
+import unittest
+import webnotes
+
+from webnotes.model.doc import Document
+from webnotes.model.code import get_obj
+sql = webnotes.conn.sql
+
+class TestSalaryManager(unittest.TestCase):
+	def setUp(self):
+		webnotes.conn.begin()
+		for rec in [des1, dep1, branch1, grade1, comp1, emp1, emp2]:
+			rec.save(1)
+					
+		ss1[0].employee = emp1.name
+		for s in ss1: s.save(1)
+		for s in ss1[1:]:
+			sql("update `tabEarning Detail` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
+			sql("update `tabDeduction Detail` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
+			
+		
+		ss2[0].employee = emp2.name
+		for s in ss2: s.save(1)		
+		for s in ss2[1:]:
+			sql("update `tabEarning Detail` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
+			sql("update `tabDeduction Detail` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
+			
+		sman.save()
+		self.sm = get_obj('Salary Manager')	
+		leave.save(1)
+		self.sm.create_sal_slip()
+		
+	def test_creation(self):
+		ssid = sql("""
+			select name, department 
+			from `tabSalary Slip` 
+			where month = '08' and fiscal_year='2011-2012'""")
+
+		self.assertTrue(len(ssid)==1)
+		self.assertTrue(ssid[0][1] == 'dep1')
+		
+		
+	def test_lwp_calc(self):
+		ss = sql("""
+			select payment_days
+			from `tabSalary Slip` 
+			where month = '08' and fiscal_year='2011-2012' and employee = '%s'
+		""" % emp1.name)
+		
+		self.assertTrue(ss[0][0]==27)
+		
+	def test_net_pay(self):
+		ss = webnotes.conn.sql("""
+			select rounded_total 
+			from `tabSalary Slip` 
+			where month = '08'
+			and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name)
+		self.assertTrue(ss[0][0]==67)
+
+	def test_submit(self):
+		self.sm.submit_salary_slip()
+		ss = webnotes.conn.sql("""
+			select docstatus 
+			from `tabSalary Slip` 
+			where month = '08'
+			and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name)
+		self.assertTrue(ss[0][0]==1)
+		
+	def tearDown(self):
+		webnotes.conn.rollback()
+		
+#--------------------------------------------
+# test data
+#--------------------------------------------
+des1 = Document(fielddata={
+	'name':'des1',
+	'doctype':'Designation',
+	'designation_name':'des1'
+})
+
+dep1 = Document(fielddata={
+	'name':'dep1',
+	'doctype':'Department',
+	'department_name' : 'dep1'
+})
+
+branch1 = Document(fielddata={
+	'name':'branch1',
+	'doctype':'Branch',
+	'branch' : 'branch1'
+})
+
+comp1 = Document(fielddata={
+	'name':'comp1',
+	'doctype':'Company',
+	'abbr':'c1',
+	'company_name' : 'comp1'
+})
+
+grade1 = Document(fielddata={
+	'name':'grade1',
+	'doctype':'Grade',
+	'grade_name' : 'grade1'	
+})
+	
+emp1 = Document(fielddata={
+	'doctype':'Employee',
+	'employee_number':'emp1',
+	'department':'dep1',
+	'designation':'des1',
+	'branch' : 'branch1',
+	'company':'comp1',
+	'grade':'grade1',
+	'naming_series':'EMP/',
+	'status':'Active',
+	'docstatus':0,
+	'employee_name':'emp1'
+})
+
+emp2 = Document(fielddata={
+	'doctype':'Employee',
+	'employee_number':'emp2',
+	'department':'dep1',
+	'designation':'des2',
+	'branch' : 'branch1',
+	'company':'comp1',
+	'naming_series':'EMP/',
+	'grade':'grade1',
+	'status':'Active',
+
+})
+
+ss1 = [
+	Document(fielddata={
+		'doctype':'Salary Structure',
+		'docstatus':0,
+		'employee':'emp1',
+		'is_active':'Yes',
+		'department': 'dep1',
+		'designation' : 'des1',
+		'employee_name': 'emp1'
+	}),
+	Document(fielddata={
+		'parenttype':'Salary Structure',
+		'parentfield':'earning_details',
+		'doctype':'Earning Detail',
+		'e_type' : 'Basic',
+		'depend_on_lwp':1,
+		'modified_value':100
+	}),
+	Document(fielddata={
+		'parenttype':'Salary Structure',
+		'parentfield':'earning_details',
+		'doctype':'Deduction Detail',
+		'd_type':'TDS',
+		'd_modified_amt':20
+	})
+]
+
+ss2 = [
+	Document(fielddata={
+		'doctype':'Salary Structure',
+		'is_active':'Yes',
+		'docstatus':0,
+	}),
+	Document(fielddata={
+		'parenttype':'Salary Structure',
+		'parentfield':'deduction_details',
+		'doctype':'Earning Detail',
+		'e_type' : 'Basic',
+		'modified_value':100
+	}),
+	Document(fielddata={
+		'parenttype':'Salary Structure',
+		'parentfield':'deduction_details',
+		'doctype':'Deduction Detail',
+		'd_type':'TDS',
+		'd_modified_amt':20
+	})
+]
+
+sman = Document(fielddata={
+		'name':'Salary Manager',
+		'doctype':'Salary Manager',
+		'company': 'comp1',
+		'department':'dep1',
+		'designation':'des1',
+		'month': '08',
+		'fiscal_year':'2011-2012'
+	})
+	
+leave = Document(fielddata = {
+		'doctype':'Leave Application',
+		'employee':'emp1',
+		'from_date':'2011-08-12',
+		'to_date':'2011-08-15',
+		'total_leave_days':'4',
+		'leave_type':'Leave Without Pay',
+		'docstatus':1
+	})
diff --git a/hr/doctype/salary_slip/salary_slip.js b/hr/doctype/salary_slip/salary_slip.js
index 8f953e6..c6ae27b 100644
--- a/hr/doctype/salary_slip/salary_slip.js
+++ b/hr/doctype/salary_slip/salary_slip.js
@@ -3,25 +3,25 @@
 // On load
 // -------------------------------------------------------------------
 cur_frm.cscript.onload = function(doc,dt,dn){
-  if((cint(doc.__islocal) == 1) && !doc.amended_from){
-    var today=new Date();
-    month = (today.getMonth()+01).toString();
-    if(month.length>1) doc.month = month;
-    else doc.month = '0'+month;
+	if((cint(doc.__islocal) == 1) && !doc.amended_from){
+		var today=new Date();
+		month = (today.getMonth()+01).toString();
+		if(month.length>1) doc.month = month;
+		else doc.month = '0'+month;
 		doc.fiscal_year = sys_defaults['fiscal_year'];
-    refresh_many(['month', 'fiscal_year']);
-    cur_frm.cscript.fiscal_year(doc, dt, dn);
-  }
+		refresh_many(['month', 'fiscal_year']);
+		cur_frm.cscript.fiscal_year(doc, dt, dn);
+	}
 }
 
 // Get leave details
 //---------------------------------------------------------------------
 cur_frm.cscript.fiscal_year = function(doc,dt,dn){
-    $c_obj(make_doclist(doc.doctype,doc.name), 'get_emp_and_leave_details','',function(r, rt) {
-      var doc = locals[dt][dn];
-      cur_frm.refresh();
-      calculate_all(doc, dt, dn);
-    });
+		$c_obj(make_doclist(doc.doctype,doc.name), 'get_emp_and_leave_details','',function(r, rt) {
+			var doc = locals[dt][dn];
+			cur_frm.refresh();
+			calculate_all(doc, dt, dn);
+		});
 }
 
 cur_frm.cscript.month = cur_frm.cscript.employee = cur_frm.cscript.fiscal_year;
@@ -29,24 +29,24 @@
 // Calculate total if lwp exists
 // ------------------------------------------------------------------------
 cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
-  doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay);
-  refresh_field('payment_days');
-  calculate_all(doc, dt, dn);
+	doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay);
+	refresh_field('payment_days');
+	calculate_all(doc, dt, dn);
 }
 
 // Calculate all
 // ------------------------------------------------------------------------
 var calculate_all = function(doc, dt, dn) {
-  calculate_earning_total(doc, dt, dn);
-  calculate_ded_total(doc, dt, dn);
-  calculate_net_pay(doc, dt, dn);
+	calculate_earning_total(doc, dt, dn);
+	calculate_ded_total(doc, dt, dn);
+	calculate_net_pay(doc, dt, dn);
 }
 
 // Trigger on earning modified amount and depends on lwp
 // ------------------------------------------------------------------------
 cur_frm.cscript.e_modified_amount = function(doc,dt,dn){
-  calculate_earning_total(doc, dt, dn);
-  calculate_net_pay(doc, dt, dn);
+	calculate_earning_total(doc, dt, dn);
+	calculate_net_pay(doc, dt, dn);
 }
 
 cur_frm.cscript.e_depends_on_lwp = cur_frm.cscript.e_modified_amount;
@@ -54,8 +54,8 @@
 // Trigger on earning modified amount and depends on lwp
 // ------------------------------------------------------------------------
 cur_frm.cscript.d_modified_amount = function(doc,dt,dn){
-  calculate_ded_total(doc, dt, dn);
-  calculate_net_pay(doc, dt, dn);
+	calculate_ded_total(doc, dt, dn);
+	calculate_net_pay(doc, dt, dn);
 }
 
 cur_frm.cscript.d_depends_on_lwp = cur_frm.cscript.d_modified_amount;
@@ -63,50 +63,50 @@
 // Calculate earning total
 // ------------------------------------------------------------------------
 var calculate_earning_total = function(doc, dt, dn) {
-  var tbl = getchildren('SS Earning Detail', doc.name, 'earning_details', doc.doctype);
+	var tbl = getchildren('SS Earning Detail', doc.name, 'earning_details', doc.doctype);
 
-  var total_earn = 0;
-  for(var i = 0; i < tbl.length; i++){
-    if(cint(tbl[i].e_depends_on_lwp) == 1) {
-      tbl[i].e_modified_amount = flt(tbl[i].e_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month));      
-      refresh_field('e_modified_amount', tbl[i].name, 'earning_details');
-    }
-    total_earn += flt(tbl[i].e_modified_amount);
-  }
-  doc.gross_pay = total_earn + flt(doc.arrear_amount) + flt(doc.leave_encashment_amount);
-  refresh_many(['e_modified_amount', 'gross_pay']);
+	var total_earn = 0;
+	for(var i = 0; i < tbl.length; i++){
+		if(cint(tbl[i].e_depends_on_lwp) == 1) {
+			tbl[i].e_modified_amount = Math.round(tbl[i].e_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month)*100)/100;			
+			refresh_field('e_modified_amount', tbl[i].name, 'earning_details');
+		}
+		total_earn += flt(tbl[i].e_modified_amount);
+	}
+	doc.gross_pay = total_earn + flt(doc.arrear_amount) + flt(doc.leave_encashment_amount);
+	refresh_many(['e_modified_amount', 'gross_pay']);
 }
 
 // Calculate deduction total
 // ------------------------------------------------------------------------
 var calculate_ded_total = function(doc, dt, dn) {
-  var tbl = getchildren('SS Deduction Detail', doc.name, 'deduction_details', doc.doctype);
+	var tbl = getchildren('SS Deduction Detail', doc.name, 'deduction_details', doc.doctype);
 
-  var total_ded = 0;
-  for(var i = 0; i < tbl.length; i++){
-    if(cint(tbl[i].d_depends_on_lwp) == 1) {
-      tbl[i].d_modified_amount = flt(tbl[i].d_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month));
+	var total_ded = 0;
+	for(var i = 0; i < tbl.length; i++){
+		if(cint(tbl[i].d_depends_on_lwp) == 1) {
+			tbl[i].d_modified_amount = Math.round(tbl[i].d_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month)*100)/100;
 			refresh_field('d_modified_amount', tbl[i].name, 'deduction_details');
-    }
-    total_ded += flt(tbl[i].d_modified_amount);
-  }
-  doc.total_deduction = total_ded;
-  refresh_field('total_deduction');  
+		}
+		total_ded += flt(tbl[i].d_modified_amount);
+	}
+	doc.total_deduction = total_ded;
+	refresh_field('total_deduction');	
 }
 
 // Calculate net payable amount
 // ------------------------------------------------------------------------
 var calculate_net_pay = function(doc, dt, dn) {
-  doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
+	doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
 	doc.rounded_total = Math.round(doc.net_pay);
-  refresh_many(['net_pay', 'rounded_total']);
+	refresh_many(['net_pay', 'rounded_total']);
 }
 
 // trigger on arrear
 // ------------------------------------------------------------------------
 cur_frm.cscript.arrear_amount = function(doc,dt,dn){
-  calculate_earning_total(doc, dt, dn);
-  calculate_net_pay(doc, dt, dn);
+	calculate_earning_total(doc, dt, dn);
+	calculate_net_pay(doc, dt, dn);
 }
 
 // trigger on encashed amount
@@ -116,5 +116,5 @@
 // validate
 // ------------------------------------------------------------------------
 cur_frm.cscript.validate = function(doc, dt, dn) {
-  calculate_all(doc, dt, dn);
+	calculate_all(doc, dt, dn);
 }
diff --git a/hr/doctype/salary_slip/salary_slip.py b/hr/doctype/salary_slip/salary_slip.py
index af55956..3a42dca 100644
--- a/hr/doctype/salary_slip/salary_slip.py
+++ b/hr/doctype/salary_slip/salary_slip.py
@@ -68,7 +68,7 @@
 	# Get leave details
 	#=======================================================
 	def get_leave_details(self):
-		m = self.get_month_details()		
+		m = self.get_month_details()
 		lwp = self.calculate_lwp(m)
 		self.doc.total_days_in_month = m[3]
 		self.doc.leave_without_pay = lwp
@@ -129,12 +129,45 @@
 		self.check_existing()
 		dcc = TransactionBase().get_company_currency(self.doc.company)
 		self.doc.total_in_words	= get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
+
+
+	def calculate_earning_total(self):
+		"""
+			Calculates total earnings considering lwp
+		"""
+		self.doc.gross_pay = flt(self.doc.arrear_amount) + flt(self.doc.leave_encashment_amount)
+		for d in getlist(self.doclist, 'earning_details'):
+			if cint(d.e_depends_on_lwp) == 1:
+				d.e_modified_amount = round(flt(d.e_amount)*flt(self.doc.payment_days)/cint(self.doc.total_days_in_month), 2)
+			self.doc.gross_pay += d.e_modified_amount
+	
+	def calculate_ded_total(self):
+		"""
+			Calculates total deduction considering lwp
+		"""
+		self.doc.total_deduction = 0
+		for d in getlist(self.doclist, 'deduction_details'):
+			if cint(d.d_depends_on_lwp) == 1:
+				d.d_modified_amount = round(flt(d.d_amount)*flt(self.doc.payment_days)/cint(self.doc.total_days_in_month), 2)
+			self.doc.total_deduction += d.d_modified_amount
+				
+	def calculate_net_pay(self):
+		"""
+			Calculate net payment
+		"""
+		self.calculate_earning_total()
+		self.calculate_ded_total()
+		self.doc.net_pay = flt(self.doc.gross_pay) - flt(self.doc.total_deduction)
+		self.doc.rounded_total = round(self.doc.net_pay)
 		
 	# ON SUBMIT
 	#=======================================================
 	def on_submit(self):
 		if(self.doc.email_check == 1):			
 			self.send_mail_funct()
+			
+	
+
 
 	# Send mail
 	#=======================================================
@@ -142,32 +175,31 @@
 		emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
 		if emailid_ret:
 			receiver = cstr(emailid_ret[0][0]) 
-			subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
-			earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
-			ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
+			subj = 'Salary Slip - ' + cstr(self.doc.month) +'/'+cstr(self.doc.fiscal_year)
+			earn_ret=sql("select e_type,e_modified_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
+			ded_ret=sql("select d_type,d_modified_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
 		 
 			earn_table = ''
 			ded_table = ''
-			if earn_ret:
-			
-				earn_table += "<table cellspacing= '5' cellpadding='5' >"
+			if earn_ret:			
+				earn_table += "<table cellspacing=5px cellpadding=5px width='100%%'>"
 				
 				for e in earn_ret:
 					if not e[1]:
-						earn_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(e[0]))
+						earn_table +='<tr><td>%s</td><td align="right">0.00</td></tr>'%(cstr(e[0]))
 					else:
-						earn_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
+						earn_table +='<tr><td>%s</td><td align="right">%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
 				earn_table += '</table>'
 			
 			if ded_ret:
 			
-				ded_table += "<table cellspacing= '5' cellpadding='5' >"
+				ded_table += "<table cellspacing=5px cellpadding=5px width='100%%'>"
 				
 				for d in ded_ret:
 					if not d[1]:
-						ded_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(d[0]))
+						ded_table +='<tr><td">%s</td><td align="right">0.00</td></tr>'%(cstr(d[0]))
 					else:
-						ded_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
+						ded_table +='<tr><td>%s</td><td align="right">%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
 				ded_table += '</table>'
 			
 			letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'")
@@ -175,62 +207,61 @@
 			if not letter_head:
 				letter_head = ''
 			
-			msg = ''' %s <br>
-			<table cellspacing= "5" cellpadding="5" >
-			<tr>
-				<td colspan = 4><h4>Salary Slip</h4></td>
-			</tr>
-			<tr>
-				<td colspan = 2><b>Employee Code : %s</b></td>
-				<td colspan = 2><b>Employee Name : %s</b></td>
-			</tr>
-			<tr>
-				<td>Month : %s</td>
-				<td>Year : %s</td>
-				<td colspan = 2>Fiscal Year : %s</td>
-			</tr>
-			<tr>
-				<td>Department : %s</td>
-				<td>Branch : %s</td>
-				<td colspan = 2>Designation : %s</td>
+			msg = '''<div> %s <br>
+			<table cellspacing= "5" cellpadding="5"  width = "100%%">
+				<tr>
+					<td width = "100%%" colspan = "2"><h4>Salary Slip</h4></td>
+				</tr>
+				<tr>
+					<td width = "50%%"><b>Employee Code : %s</b></td>
+					<td width = "50%%"><b>Employee Name : %s</b></td>
+				</tr>
+				<tr>
+					<td width = "50%%">Month : %s</td>
+					<td width = "50%%">Fiscal Year : %s</td>
+				</tr>
+				<tr>
+					<td width = "50%%">Department : %s</td>
+					<td width = "50%%">Branch : %s</td>
+				</tr>
+				<tr>
+					<td width = "50%%">Designation : %s</td>
+					<td width = "50%%">Grade : %s</td>
+				</tr>
+				<tr>				
+					<td width = "50%%">Bank Account No. : %s</td>
+					<td  width = "50%%">Bank Name : %s</td>
 				
-			</tr>
-			<tr>
-				<td>Grade : %s</td>
-				<td>Bank Account No. : %s</td>
-				<td colspan = 2>Bank Name : %s</td>
+				</tr>
+				<tr>
+					<td  width = "50%%">Arrear Amount : <b>%s</b></td>
+					<td  width = "50%%">Payment days : %s</td>
 				
-			</tr>
-			<tr>
-				<td>PF No. : %s</td>
-				<td>ESIC No. : %s</td>
-				<td colspan = 2>Arrear Amount : <b>%s</b></td>
-			</tr>
-			<tr>
-				<td>Total days in month : %s</td>
-				<td>Leave Without Pay : %s</td>
-				<td colspan = 2>Payment days : %s</td>
-				
-			</tr>
-			<br><br>
-			<tr>
-				<td colspan = 2><b>Earning</b></td>
-				<td colspan = 2><b>Deduction</b></td>
-			</tr>
-			<tr>
-				<td colspan = 2>%s</td>
-				<td colspan = 2>%s</td>
-			</tr>
-			<br>
-			<tr>
-				<td colspan = 2><b>Gross Pay :</b> %s</td>
-				<td colspan = 2><b>Total Deduction :</b> %s</td>
-			</tr>
-			<tr>
-				<td><b>Net Pay : %s</b></td>
-				<td colspan = 3><b>Net Pay (in words) : %s</b></td>
-			</tr>
-			</table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
-			sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
+				</tr>
+			</table>
+			<table border="1px solid #CCC" width="100%%" cellpadding="0px" cellspacing="0px">
+				<tr>
+					<td colspan = 2 width = "50%%" bgcolor="#CCC" align="center"><b>Earnings</b></td>
+					<td colspan = 2 width = "50%%" bgcolor="#CCC" align="center"><b>Deductions</b></td>
+				</tr>
+				<tr>
+					<td colspan = 2 width = "50%%" valign= "top">%s</td>
+					<td colspan = 2 width = "50%%" valign= "top">%s</td>
+				</tr>
+			</table>
+			<table cellspacing= "5" cellpadding="5" width = '100%%'>
+				<tr>
+					<td width = '25%%'><b>Gross Pay :</b> </td><td width = '25%%' align='right'>%s</td>
+					<td width = '25%%'><b>Total Deduction :</b></td><td width = '25%%' align='right'> %s</td>
+				</tr>
+				<tr>
+					<tdwidth='25%%'><b>Net Pay : </b></td><td width = '25%%' align='right'><b>%s</b></td>
+					<td colspan = '2' width = '50%%'></td>
+				</tr>
+				<tr>
+					<td width='25%%'><b>Net Pay(in words) : </td><td colspan = '3' width = '50%%'>%s</b></td>
+				</tr>
+			</table></div>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee), cstr(self.doc.employee_name), cstr(self.doc.month), cstr(self.doc.fiscal_year), cstr(self.doc.department), cstr(self.doc.branch), cstr(self.doc.designation), cstr(self.doc.grade), cstr(self.doc.bank_account_no), cstr(self.doc.bank_name), cstr(self.doc.arrear_amount), cstr(self.doc.payment_days), earn_table, ded_table, cstr(flt(self.doc.gross_pay)), cstr(flt(self.doc.total_deduction)), cstr(flt(self.doc.net_pay)), cstr(self.doc.total_in_words))
+			sendmail([receiver], sender='automail@erpnext.com', subject=subj, parts=[['text/plain', msg]])
 		else:
 			msgprint("Company Email ID not found.")
diff --git a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.js b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.js
deleted file mode 100644
index 5fd80cb..0000000
--- a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.js
+++ /dev/null
@@ -1,71 +0,0 @@
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
-  alert("Salary Slip Control Panel is currently under re-development. It will take around a week time.");
-  hide_field(['Process Payroll', 'Submit Salary Slip', 'Make Bank Voucher']);
-}
-
-cur_frm.cscript['Process Payroll'] = function(doc,cdt,cdn){
-  $c('runserverobj', args={'method':'process_payroll','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},function(r,rt){
-    
-      if(!pscript.ss_html)
-        pscript.ss_html = $a(cur_frm.fields_dict['Salary Slip HTML'].wrapper,'span','',{border:'1px solid #CCC', backgroundColor:'#DDD'});
-      pscript.ss_html.innerHTML = '';
-      pscript.ss_html.innerHTML = r.message;
-      
-    
-    });
-
-}
-
-cur_frm.cscript['Submit Salary Slip'] = function(doc,cdt,cdn){
-  if(doc.month && doc.fiscal_year && doc.year){
-    var check = confirm("DO you really want to Submit all Salary Slip for month : " + doc.month+" and year : "+doc.year);
-    if(check){
-      $c('runserverobj', args={'method':'submit_sal_slip','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},function(r,rt){
-      
-        if(!pscript.ss_html)
-          pscript.ss_html = $a(cur_frm.fields_dict['Salary Slip HTML'].wrapper,'span','',{border:'1px solid #CCC', backgroundColor:'#DDD'});
-        pscript.ss_html.innerHTML = '';
-        pscript.ss_html.innerHTML = r.message;
-        
-      
-      });
-    }
-  }
-  else
-    alert("Please select month, fiscal year and year");
-}
-
-// Make JV
-// --------
-cur_frm.cscript.make_jv = function(doc, dt, dn) {
-  var call_back = function(r,rt){
-    var jv = LocalDB.create('Journal Voucher');
-    jv = locals['Journal Voucher'][jv];
-    jv.voucher_type = 'Bank Voucher';
-    jv.remark = 'Salary - Bank Voucher';
-    jv.fiscal_year = doc.fiscal_year;
-    jv.company = doc.company;
-    
-    // credit to bank
-    var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
-    d1.account = r.message['default_bank_account'];
-
-    // debit to salary account
-    var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
-    d1.account = r.message['default_salary_account'];
-    if(!r.message['default_salary_account'] && !r.message['default_bank_account']) alert("To debit salary amount in salary head and credit amount from bank, you need to specify default salary account and default bank account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Salary Account, Default Bank Account from Accounting tab.");
-    else if(!r.message['default_salary_account']) alert("To debit salary amount you need to specify default salary account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Salary Account from Accounting tab.");
-    else if(!r.message['default_bank_account']) alert("To credit salary amount you need to specify default bank account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Bank Account from Accounting tab.");
-    loaddoc('Journal Voucher', jv.name);
-  }
-  $c_obj(make_doclist(dt,dn),'get_acct_dtl','',call_back);
-
-}
-
-
-
-// Make Journal Voucher
-// --------------------
-cur_frm.cscript['Make Bank Voucher'] = function(doc, dt, dn) {
-  cur_frm.cscript.make_jv(doc,dt,dn);
-}
diff --git a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.py b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.py
deleted file mode 100644
index 3a4fadf..0000000
--- a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Please edit this list and import only required elements
-import webnotes
-
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, 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, removechild, getchildren, make_autoname, SuperDocType
-from webnotes.model.doclist 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, is_testing, msgprint, errprint
-
-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
-	
-# -----------------------------------------------------------------------------------------
-
-
-class DocType:
-  def __init__(self, doc, doclist):
-    self.doc = doc
-    self.doclist = doclist   
-  
-  # Get Employees
-  # ********************************************************************** 
-  def get_employee(self):    
-    e1 = self.emp_fr_memp()  #get employee list from employee where employee is active
-    e2 = self.emp_fr_salstr(e1)  #get employee list from salary structure whose salary structure is created and is active 
-    e3 = self.emp_fr_salslip(e2)  #get employee list from salary slip whose salary slip not yet created for this month and year
-    return e3
-
-  # ********************************************************************** 
-  def emp_fr_memp(self):
-    lst1 = [[self.doc.employee_type,"employment_type"],[self.doc.branch,"branch"],[self.doc.designation,"designation"],[self.doc.department, "department"],[self.doc.grade,"grade"]]
-    
-    condition = ""
-    #flag = 0
-    for l in lst1:
-      
-      if(l[0]):
-        #if flag == 0:
-        #  condition += l[1] + "= '" + l[0] +"'"
-        #else:
-        condition += " and " + l[1]+ "= '" +l[0] +"'"
-        #flag = 1
-
-    emp_query = "select name from `tabEmployee` where status = 'Active'"
-    #if flag == 1:
-    emp_query += condition
-            
-    e = sql(emp_query)
-    return e
-
-  # ********************************************************************** 
-  def emp_fr_salstr(self,e1):
-    lst = []
-    for r in e1:
-      lst.append(r[0])
-    
-    
-    e_lst = "%s"%lst
-    e_lst=e_lst.replace("[","(")
-    e_lst=e_lst.replace("]",")")
-    cond = ''
-
-    if e1:
-      cond = " and employee in %s"%e_lst
-    
-    el=sql("select employee from `tabSalary Structure` where is_active = 'Yes'"+cond)
-
-    return el
-
-  # ********************************************************************** 
-  def emp_fr_salslip(self,e2):
-    e3 = []
-    for i in e2:
-      ret = sql("select name from `tabSalary Slip` where month = '%s' and year = '%s' and employee = '%s' and docstatus !=2 "%(self.doc.month,self.doc.year,i[0]))
-
-      if not ret:
-        e3.append(i[0])
-    return e3
-    
-  # ********************************************************************** 
-  def process_payroll(self):
-    sal_slip_str = ''
-    if self.doc.month and self.doc.fiscal_year and self.doc.year:
-      e = self.get_employee()
-      if e:
-        self.doc.emp_lst=e
-        sal_slip_str += 'Sucessfully created following salary slips:'
-      for i in e:
-      	ss = Document('Salary Slip')
-        ss.fiscal_year = self.doc.fiscal_year
-        ss.employee = i
-        ss.month = self.doc.month
-        ss.year= self.doc.year
-        ss.arrear_amount = self.doc.arrear_amount    
-        ss.email_check = self.doc.email_check
-        ss.save(1)
-        salary_obj=get_obj("Salary Slip",ss.name,with_children=1)   
-        salary_obj.process_payroll_all()
-        sal_slip_str += "<br/>"+ss.name 
-        
-    else:
-    
-      msgprint("For Process Payroll Fiscal Year, Month, Year fields are mandatory.")
-    if not sal_slip_str: 
-     
-      sal_slip_str = "No record found."
-    return cstr(sal_slip_str)
-
-  # ********************************************************************** 
-  def submit_sal_slip(self):
-  
-    sal_slip_str = ''
-    r = sql("select name from `tabSalary Slip` where month='%s' and year = '%s' and fiscal_year = '%s' and docstatus = 0"%(self.doc.month,self.doc.year,self.doc.fiscal_year))
-
-  
-    ret = sql("update `tabSalary Slip` set docstatus = 1 where month='%s' and year = '%s' and fiscal_year = '%s' and docstatus = 0"%(self.doc.month,self.doc.year,self.doc.fiscal_year))
-    if r:
-      sal_slip_str += 'Sucessfully updated following salary slips:'
-    for i in r:
-      
-      salary_obj=get_obj("Salary Slip",i[0],with_children=1)   
-      salary_obj.on_submit()
-      sal_slip_str += "<br/>"+cstr(i[0]) 
-    if not sal_slip_str: 
-     
-      sal_slip_str = "No record found."
-    return cstr(sal_slip_str)
-  
-  # ********************************************************************** 
-  #get default bank account,default salary acount from company.
-  def get_acct_dtl(self):
-    res = sql("select default_bank_account,default_salary_acount from `tabCompany` where name = '%s'"%get_defaults()['company'], as_dict=1)
-    return res[0]
diff --git a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.txt b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.txt
deleted file mode 100644
index b83e0c7..0000000
--- a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.txt
+++ /dev/null
@@ -1,286 +0,0 @@
-# DocType, Salary Slip Control Panel
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2010-08-08 17:09:20',
-		'docstatus': 0,
-		'modified': '2010-12-29 18:02:38',
-		'modified_by': 'umair@iwebnotes.com',
-		'owner': 'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'_last_update': '1294312182',
-		'allow_copy': 1,
-		'allow_email': 1,
-		'allow_print': 1,
-		'colour': 'White:FFF',
-		'doctype': 'DocType',
-		'hide_heading': 0,
-		'hide_toolbar': 0,
-		'in_create': 0,
-		'issingle': 1,
-		'module': 'HR',
-		'name': '__common__',
-		'read_only': 1,
-		'section_style': 'Simple',
-		'server_code_error': ' ',
-		'show_in_menu': 0,
-		'use_template': 0,
-		'version': 113
-	},
-
-	# These values are common for all DocField
-	{
-		'doctype': 'DocField',
-		'name': '__common__',
-		'parent': 'Salary Slip Control Panel',
-		'parentfield': 'fields',
-		'parenttype': 'DocType',
-		'permlevel': 0
-	},
-
-	# These values are common for all DocPerm
-	{
-		'create': 1,
-		'doctype': 'DocPerm',
-		'name': '__common__',
-		'parent': 'Salary Slip Control Panel',
-		'parentfield': 'permissions',
-		'parenttype': 'DocType',
-		'permlevel': 0,
-		'read': 1,
-		'write': 1
-	},
-
-	# DocType, Salary Slip Control Panel
-	{
-		'doctype': 'DocType',
-		'name': 'Salary Slip Control Panel'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 1,
-		'role': 'System Manager'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 2,
-		'role': 'HR User'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 3,
-		'role': 'HR Manager'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 1,
-		'label': 'Salary Slip Control Panel'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'employee_type',
-		'fieldtype': 'Select',
-		'idx': 2,
-		'label': 'Employment Type',
-		'oldfieldname': 'employee_type',
-		'oldfieldtype': 'Select',
-		'options': 'link:Employment Type'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'grade',
-		'fieldtype': 'Select',
-		'idx': 3,
-		'label': 'Grade',
-		'oldfieldname': 'grade',
-		'oldfieldtype': 'Select',
-		'options': 'link:Grade'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'branch',
-		'fieldtype': 'Select',
-		'idx': 4,
-		'label': 'Branch',
-		'oldfieldname': 'branch',
-		'oldfieldtype': 'Select',
-		'options': 'link:Branch'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'department',
-		'fieldtype': 'Select',
-		'idx': 5,
-		'label': 'Department',
-		'oldfieldname': 'department',
-		'oldfieldtype': 'Select',
-		'options': 'link:Department'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'designation',
-		'fieldtype': 'Select',
-		'idx': 6,
-		'label': 'Designation',
-		'oldfieldname': 'designation',
-		'oldfieldtype': 'Select',
-		'options': 'link:Designation'
-	},
-
-	# DocField
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldtype': 'Column Break',
-		'idx': 7,
-		'oldfieldtype': 'Column Break'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'fiscal_year',
-		'fieldtype': 'Select',
-		'idx': 8,
-		'in_filter': 1,
-		'label': 'Fiscal Year',
-		'oldfieldname': 'fiscal_year',
-		'oldfieldtype': 'Select',
-		'options': 'link:Fiscal Year'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'month',
-		'fieldtype': 'Select',
-		'idx': 9,
-		'label': 'Month',
-		'oldfieldname': 'month',
-		'oldfieldtype': 'Select',
-		'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'year',
-		'fieldtype': 'Select',
-		'idx': 10,
-		'label': 'Year',
-		'oldfieldname': 'year',
-		'oldfieldtype': 'Select',
-		'options': '\n2009\n2010\n2011\n2012'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'week_off',
-		'fieldtype': 'Currency',
-		'idx': 11,
-		'label': 'Week Off',
-		'oldfieldname': 'week_off',
-		'oldfieldtype': 'Currency'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'arrear_amount',
-		'fieldtype': 'Currency',
-		'idx': 12,
-		'label': 'Arrear Amount',
-		'oldfieldname': 'arrear_amount',
-		'oldfieldtype': 'Currency'
-	},
-
-	# DocField
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldname': 'email_check',
-		'fieldtype': 'Check',
-		'idx': 13,
-		'label': 'Email',
-		'oldfieldname': 'email_check',
-		'oldfieldtype': 'Check'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 14,
-		'oldfieldtype': 'Section Break'
-	},
-
-	# DocField
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldtype': 'Button',
-		'idx': 15,
-		'label': 'Process Payroll',
-		'oldfieldtype': 'Button',
-		'trigger': 'Client'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldtype': 'HTML',
-		'idx': 16,
-		'label': 'Salary Slip HTML'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldtype': 'Column Break',
-		'idx': 17
-	},
-
-	# DocField
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldtype': 'Button',
-		'idx': 18,
-		'label': 'Submit Salary Slip',
-		'oldfieldtype': 'Button',
-		'trigger': 'Client'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldtype': 'Button',
-		'idx': 19,
-		'label': 'Make Bank Voucher',
-		'trigger': 'Client'
-	}
-]
\ No newline at end of file
diff --git a/hr/doctype/salary_structure/salary_structure.txt b/hr/doctype/salary_structure/salary_structure.txt
index 3dcb8f9..d9a9acd 100644
--- a/hr/doctype/salary_structure/salary_structure.txt
+++ b/hr/doctype/salary_structure/salary_structure.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2010-12-14 16:50:05',
 		'docstatus': 0,
-		'modified': '2011-06-27 14:39:11',
+		'modified': '2011-08-11 16:56:38',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1308808105',
+		'_last_update': '1311621379',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
 		'module': 'HR',
@@ -21,7 +21,7 @@
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': 'For %(employee_name)s',
-		'version': 586
+		'version': 587
 	},
 
 	# These values are common for all DocField
@@ -39,7 +39,8 @@
 		'name': '__common__',
 		'parent': 'Salary Structure',
 		'parentfield': 'permissions',
-		'parenttype': 'DocType'
+		'parenttype': 'DocType',
+		'read': 1
 	},
 
 	# DocType, Salary Structure
@@ -54,9 +55,9 @@
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
-		'match': 'owner',
+		'idx': 1,
 		'permlevel': 0,
-		'read': 1,
+		'role': 'Employee',
 		'submit': 0,
 		'write': 0
 	},
@@ -67,96 +68,39 @@
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
-		'match': 'owner',
-		'permlevel': 0,
-		'read': 1,
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': 'DocPerm',
-		'match': 'owner',
-		'permlevel': 0,
-		'read': 1,
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': 'DocPerm',
-		'match': 'owner',
-		'permlevel': 0,
-		'read': 1,
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'permlevel': 0,
-		'role': 'Sales User'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
 		'idx': 2,
 		'permlevel': 1,
-		'read': 1,
 		'role': 'All',
+		'submit': 0,
 		'write': 0
 	},
 
 	# DocPerm
 	{
-		'create': 1,
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 3,
 		'permlevel': 0,
-		'read': 1,
 		'role': 'HR User',
-		'write': 1
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
 	{
+		'amend': 1,
+		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
 		'idx': 4,
 		'permlevel': 0,
-		'read': 1,
 		'role': 'HR Manager',
+		'submit': 1,
 		'write': 1
 	},
 
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 5,
-		'permlevel': 1,
-		'read': 1,
-		'role': 'HR Manager'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 6,
-		'permlevel': 1,
-		'read': 1,
-		'role': 'HR User'
-	},
-
 	# DocField
 	{
 		'doctype': 'DocField',
diff --git a/knowledge_base/doctype/question/question.py b/knowledge_base/doctype/question/question.py
new file mode 100644
index 0000000..5ddee6a
--- /dev/null
+++ b/knowledge_base/doctype/question/question.py
@@ -0,0 +1,8 @@
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+		
+	def on_trash(self):
+		import webnotes
+		webnotes.conn.sql("delete from tabAnswer where question=%s", self.doc.name)
+		
\ No newline at end of file
diff --git a/knowledge_base/page/kb_common/kb_common.js b/knowledge_base/page/kb_common/kb_common.js
index 1826f05..3e17b6f 100644
--- a/knowledge_base/page/kb_common/kb_common.js
+++ b/knowledge_base/page/kb_common/kb_common.js
@@ -19,12 +19,25 @@
 		this.line1.innerHTML = repl('By %(name)s | %(when)s', {
 			name: wn.utils.full_name(this.det.first_name, this.det.last_name),
 			when: wn.datetime.comment_when(this.det.modified)
-		})
+		});
+		
+		// allow system manager to delete questions / answers
+		if(has_common(user_roles, ['Administrator', 'System Manager'])) {
+			this.line1.innerHTML += ' | '
+			$ln(this.line1, 'delete', me.del);
+		}
 	}
 
 	this.make_vote = function() {
 		new KBPoints(this.line2, this.det.points, this.det._users_voted, this.doctype, this.det.name, this.det.owner);
-		
+	}
+	
+	this.del = function() {
+		this.innerHTML = 'deleting...'; this.disabled = 1;
+		$c_page('knowledge_base', 'questions', 'delete', {dt:me.doctype, dn:me.det.name}, function(r,rt) {
+			// reload the list
+			kb.list.run()
+		});
 	}
 	
 	this.make_tags = function() {
diff --git a/knowledge_base/page/question_view/question_view.js b/knowledge_base/page/question_view/question_view.js
index ed11efc..422fb30 100644
--- a/knowledge_base/page/question_view/question_view.js
+++ b/knowledge_base/page/question_view/question_view.js
@@ -128,7 +128,7 @@
 			as_dict: 1,
 			no_results_message: 'No answers yet, be the first one to answer!',
 			render_row: function(body, data) {
-				new KBAnswer(body, data)
+				new KBAnswer(body, data, me)
 			},
 			get_query: function() {
 				return repl("SELECT t1.name, t1.owner, t1.answer, t1.points, t1._users_voted, t2.first_name, "
@@ -150,7 +150,7 @@
 // answer
 // by xxx | on xxx
 // points yyy
-KBAnswer = function(body, data) {
+KBAnswer = function(body, data, ans_list) {
 	body.className = 'qv-answer';
 	new EditableText({
 		parent: body,
@@ -169,7 +169,7 @@
 		det: data,
 		with_tags: 0,
 		doctype: 'Answer'
-	}, null)
+	}, ans_list)
 	
 }
 
diff --git a/knowledge_base/page/questions/questions.py b/knowledge_base/page/questions/questions.py
index cbb6a25..5f8b209 100644
--- a/knowledge_base/page/questions/questions.py
+++ b/knowledge_base/page/questions/questions.py
@@ -35,3 +35,11 @@
 		(p, cstr(res[1]) + ',' + webnotes.user.name, args['dn']))
 	
 	return p
+
+def delete(arg):
+	"""
+		delete a question or answer (called from kb toolbar)
+	"""
+	args = load_json(arg)
+	from webnotes.model import delete_doc
+	delete_doc(args['dt'], args['dn'])
\ No newline at end of file
diff --git a/master.sql.gz b/master.sql.gz
index 273277e..3d3e220 100644
--- a/master.sql.gz
+++ b/master.sql.gz
Binary files differ
diff --git a/patches/old_patches/patch_1.py b/patches/old_patches/patch_1.py
new file mode 100644
index 0000000..9173ca5
--- /dev/null
+++ b/patches/old_patches/patch_1.py
@@ -0,0 +1,1180 @@
+"""
+	Old patches for reference
+"""
+
+if patch_no==33:
+	pass
+elif patch_no==34:
+	webnotes.conn.sql("update `tabDocField` set options = 'Letter Head', print_hide = 1 where fieldname = 'letter_head' and fieldtype = 'Link'")
+elif patch_no==35:
+	webnotes.conn.sql("update tabDocType set module = 'Event Updates' where name = 'Feed Control'")
+elif patch_no==36:
+	# remove delivery note foreign key in Serial Number
+	from webnotes.model.db_schema import DbTable
+	t = DbTable('Serial No')
+	fk_list  = t.get_foreign_keys()
+	for f in fk_list:
+		if f[0]=='delivery_note_no':
+			webnotes.conn.commit()
+			webnotes.conn.sql("alter table `tabSerial No` drop foreign key `%s`" % f[1])
+			webnotes.conn.begin()
+			webnotes.conn.sql("update tabDocField set fieldtype='Data' where fieldname='delivery_note_no' and parent='Serial No' limit 1")
+elif patch_no==37:
+	import os
+	mod_path = webnotes.defs.modules_path
+	path_list = []
+	for m in os.listdir(mod_path):
+		for t in ['doctype', 'page', 'search_criteria']:
+			dt_path = os.path.join(mod_path, m, t)
+			if os.path.exists(dt_path):
+				for dt in os.listdir(dt_path):
+					if '.' not in dt and os.path.exists(os.path.join(dt_path, dt, dt+ '.txt')):
+						path_list.append(os.path.join(dt_path, dt, dt+ '.txt'))
+
+	for d in path_list:
+		doclist = eval(open(d,'r').read())
+		webnotes.conn.sql("update `tab%s` set module = '%s' where name = '%s'" % (doclist[0]['doctype'], doclist[0]['module'], doclist[0]['name']))
+
+elif patch_no==38:
+	import webnotes
+	webnotes.conn.set_global("system_message", "System Updates: Hello! You would have noticed some changes on the Home Page. As a part of our commitment to make the system more friendly and social, we have re-designed the feed so that now you will only see feed that is relevant to you (either you have created something or you have been mentioned in the document).<br><br>On the individual listings, you can add tags and also color them!<br><br>You will also get time-to-time updates from our side here. Do keep sending your feedback at support@erpnext.com.")
+	webnotes.conn.set_global("system_message_id", "1")
+
+elif patch_no == 39:
+	pass
+
+elif patch_no == 40:
+	import_from_files(record_list=[['material_management','doctype','item']])
+
+elif patch_no == 42:
+	acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')")
+	for d in acc:
+		sql("update tabAccount set is_pl_account = 'Yes' where lft >= '%s' and rgt <= '%s'" % (d[1], d[2]))
+elif patch_no == 43:
+	import webnotes.model
+	webnotes.model.delete_doc('Page', 'Module Manager')
+
+# cleanup of Service, Customer Support, Utilities Modules
+# -------------------------------------------------------
+elif patch_no == 44:
+	from webnotes.model import delete_doc
+
+	for dt in sql("select name from tabDocType where module in ('Customer Support')"):
+		delete_doc('DocType', dt[0])
+
+	for dt in sql("select name from `tabSearch Criteria` where module in ('Customer Support')"):
+		delete_doc('Search Criteria', dt[0])
+
+	for dt in sql("select name from tabPage where module in ('Customer Support')"):
+		delete_doc('Page', dt[0])
+
+	# move a couple
+	webnotes.conn.sql("update `tab%s` set module=%s where name=%s" % ('DocType', '%s', '%s'), ('Application Internal', 'Patch Util'))
+	webnotes.conn.sql("update `tab%s` set module=%s where name=%s" % ('DocType', '%s', '%s'), ('Application Internal', 'DocType Property Setter'))
+
+	# remove utilities
+	webnotes.conn.sql('delete from `tabModule Def` where name in ("Customer Support", "Utilities")')
+
+elif patch_no == 45:
+	webnotes.conn.sql('delete from tabDocField where options="Ticket Response Detail"')
+
+elif patch_no == 46:
+	import webnotes
+	webnotes.conn.set_global("system_message", "<b>SYSTEM DOWNTIME:</b> Hello! As part of our commitment to keep improving the service, we are planning a scheduled maintenance on our servers for 4 hrs on 16-Jan-2011(Sunday), from 10AM to 2PM. Do keep sending your feedback at support@erpnext.com.")
+	webnotes.conn.set_global("system_message_id", "2")
+
+elif patch_no == 47:
+	import webnotes
+	webnotes.conn.set_global("system_message", "")
+	webnotes.conn.set_global("system_message_id", "3")
+
+elif patch_no == 48:
+	webnotes.conn.sql("update tabDocField set options = 'Print Heading' where fieldname = 'select_print_heading'")
+
+elif patch_no == 49:
+	webnotes.conn.sql("update tabDocType set autoname = '' where name = 'Search Criteria'")
+elif patch_no == 50:
+	sql("update tabDocField set in_filter = 1 where fieldname in ('cost_center', 'income_account', 'Item Group') and parent = 'RV Detail'")
+elif patch_no == 51:
+	sql("update tabDocField set options = 'link:Print Heading' where fieldtype = 'Select' and fieldname = 'select_print_heading' and parent = 'POS Setting'")
+elif patch_no == 52:
+	sql("update tabDocField set print_hide = 1 where fieldname = 'letter_head'")
+elif patch_no == 53:
+	sql("update tabDocType set search_fields = 'lead_name,lead_owner,status,contact_by,contact_date' where name = 'Lead'")
+elif patch_no == 54:
+	sql("delete from tabDocField where parent = 'Supplier' and label = 'Supplier Contacts' and fieldtype = 'Section Break'")
+elif patch_no == 55:
+	sql("commit")
+	try:
+		sql("alter table tabFeed add column `_user_tags` varchar(180)")
+	except Exception, e:
+		if e.args[0]!=1060:
+			raise e
+elif patch_no == 56:
+	sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'")
+elif patch_no == 57:
+	import_from_files(record_list=[['selling','doctype','sales_order_detail']])
+
+elif patch_no == 58:
+	# module def patches
+	sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')")
+	sql("delete from `tabModule Def Item` where doc_type in ('Separator', 'Setup Forms', 'More Reports')")
+	sql("delete from `tabModule Def Item` where doc_name = 'Project Activity'")
+	sql("update `tabModule Def` set module_label = 'People', disabled='No', is_hidden='No' where name = 'My Company'")
+
+	# insert new module items
+	from webnotes.model.doc import make_autoname
+	if not sql("select name from `tabModule Def Item` where parent='Projects' and doc_name='Ticket'"):
+		sql("""insert into `tabModule Def Item`
+			(name, parent, parenttype, parentfield, docstatus, doc_type, doc_name, display_name, idx) values
+			(%s, 'Projects', 'Module Def', 'items', 0, 'Forms', 'Ticket', 'Task', 1)""", make_autoname('MDI.#####'))
+
+	if not sql("select name from `tabModule Def Item` where parent='Projects' and doc_name='Timesheet'"):
+		sql("""insert into `tabModule Def Item`
+			(name, parent, parenttype, parentfield, docstatus, doc_type, doc_name, display_name, idx) values
+			(%s, 'Projects', 'Module Def', 'items', 0, 'Forms', 'Timesheet', 'Timesheet', 2)""", make_autoname('MDI.#####'))
+
+	if not sql("select name from `tabModule Def Item` where parent='Projects' and doc_name='Projects'"):
+		sql("""insert into `tabModule Def Item`
+			(name, parent, parenttype, parentfield, docstatus, doc_type, doc_name, display_name, idx) values
+			(%s, 'Projects', 'Module Def', 'items', 0, 'Pages', 'Projects', 'Gantt Chart', 1)""", make_autoname('MDI.#####'))
+
+elif patch_no == 59:
+	webnotes.conn.set_value('Control Panel',None,'mail_footer','')
+	webnotes.conn.set_global('global_mail_footer','<div style="margin-top:8px; padding: 8px; font-size: 11px; text-align:right; border-top: 1px solid #AAA">Sent via <a href="https://www.erpnext.com">ERPNext</a></div>')
+elif patch_no == 60:
+	sql("delete from `tabModule Def Item` where display_name = 'Point of Sales'")
+elif patch_no == 61:
+	sql("delete from `tabTDS Category Account` where company not in (select name from tabCompany)")
+elif patch_no == 62:
+	# Import Supplier Quotation
+	import_from_files(record_list=[['srm','doctype','supplier_quotation']])
+
+	# Adding Status Filter
+	sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')")
+	# Import Other Charges
+
+	import_from_files(record_list=[['setup','doctype','other_charges']])
+elif patch_no == 63:
+	sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'")
+	import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']])
+
+elif patch_no == 64:
+	sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')")
+	sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')")
+	sql("update tabDocField set `report_hide` = 0 where fieldname in ('email_id','phone_1','fax_1') and parent = 'Customer'")
+elif patch_no == 65:
+	# Monthly Trend Analyzer <-> Trend Analyzer
+	sql("update `tabSearch Criteria` set criteria_name = 'Trend Analyzer' where criteria_name = 'Monthly Trend Analyzer' and name = 'SRCH/00159'")
+	sql("update `tabModule Def Item` set display_name = 'Trend Analyzer' where parent = 'Analysis' and display_name = 'Monthly Trend Analyzer'")
+elif patch_no == 66:
+	import webnotes
+	webnotes.conn.set_global("system_message", """<h3>UI Updates</h3>Based on user feedback, we have made a couple of changes in the UI:<ul><li>Sidebar menus are now collapsable</li><li>Forms are now scrollable (we removed the confusing tabs)</li><li>Feed is a lot more descriptive</li></ul>Do send us your feedback!""")
+	webnotes.conn.set_global("system_message_id", "4")
+
+	sql("update `tabModule Def Item` set doc_type = 'Setup Forms' where doc_name in ('TDS Payment', 'TDS Return Acknowledgement', 'Form 16A', 'Period Closing Voucher', 'IT Checklist')")
+	from webnotes.session_cache import clear_cache
+	clear_cache(webnotes.session['user'])
+elif patch_no == 67:
+	sql("update `tabDocField` set in_filter = 1 where fieldname = 'brand' and parent = 'RV Detail'")
+	sql("delete from `tabModule Def Item` where (display_name = 'Sales Invoice' and parent = 'CRM') or (display_name = 'Purchase Invoice' and parent = 'SRM')")
+elif patch_no == 68:
+	from webnotes.modules.import_module import import_from_files
+	import_from_files(record_list=[['hr','doctype','employee'],['roles','Role','Employee']])
+elif patch_no == 69:
+	# delete flds from employee master
+	p = get_obj('Patch Util')
+	emp_del_flds = ['month_of_birth']
+	for f in emp_del_flds:
+		p.delete_field('Employee', f)
+
+	sql("Update tabDocField set `default` = 'Active' where fieldname = 'status' and parent = 'Employee'")
+
+	# map parent flds
+	fld_map = ['cell_number', 'personal_email', 'person_to_be_contacted', 'relation', 'emergency_phone_number', 'pan_number', 'passport_number', 'date_of_issue', 'valid_upto', 'place_of_issue', 'marital_status', 'blood_group', 'permanent_accommodation_type']
+
+	emp_prof = sql("select t1.name, t1.employee, t1.permanent_address_line_1, t1.permanent_address_line_2, t1.city1, t1.state1, t1.country1, t1.pin_code1, t1.phn_no1, t1.present_address_line_1, t1.present_address_line_2, t1.city2, t1.state2, t1.country2, t1.pin_code2, t1.phn_no2, t1.fathers_name, t1.fathers_occupation, t1.mothers_name, t1.mothers_occupation, t1.spouses_name, t1.spouses_occupation, t1.height_cms, t1.weight_kgs, t1.allergies, t1.other_medical_concerns, t1.physical_handicap from `tabEmployee Profile` t1, `tabEmployee` t2 where t1.employee = t2.name")
+	for e in emp_prof:
+		prof_obj = get_obj('Employee Profile', e[0])
+		emp_obj = get_obj('Employee', e[1])
+		for d in fld_map:
+			emp_obj.doc.fields[d] = prof_obj.doc.fields[d]
+		emp_obj.doc.current_accommodation_type = prof_obj.doc.present_accommodation_type
+
+		# address
+		per_addr = cstr(e[2]) + '\n' + cstr(e[3]) + '\n' + cstr(e[4]) + '\n' + cstr(e[5]) + ', ' + cstr(e[6]) + '\n' + 'PIN - ' + cstr(e[7]) + '\n' + 'Ph. No' + cstr(e[8])
+		cur_addr = cstr(e[9]) + '\n' + cstr(e[10]) + '\n' + cstr(e[11]) + '\n' + cstr(e[12]) + ', ' + cstr(e[13]) + '\n' + 'PIN - ' + cstr(e[14]) + '\n' + 'Ph. No' + cstr(e[15])
+		emp_obj.doc.permanent_address = per_addr
+		emp_obj.doc.current_address = cur_addr
+		#family
+		fam = "Father's Name: " + cstr(e[16]) + '\n' + "Father's Occupation: " + cstr(e[17]) + '\n' + "Mother's Name: " + cstr(e[18]) + '\n' + "Mother's Occupation: " + cstr(e[19]) + '\n' + "Spouse's Name: " + cstr(e[20]) + '\n' + "Spouse's Occupation: " + cstr(e[21])
+		emp_obj.doc.family_background = fam
+		# health
+		health = 'Height(cms): ' + cstr(e[22]) + '\n' + 'Weight(kgs): ' + cstr(e[23]) + '\n' + 'Allergies: ' +cstr( e[24]) + '\n' + 'Other Medical Concern: ' + cstr(e[25]) + '\n' + 'Physically Handicapped(if any): ' + cstr(e[26])
+		emp_obj.doc.health_details = health
+		emp_obj.doc.save()
+
+
+	# map tables
+	tbl_list = ['Experience In Company Detail', 'Previous Experience Detail', 'Educational Qualifications Detail']
+	for t in tbl_list:
+		sql("update `tab%s` t1, `tabEmployee Profile` t2 set t1.parent = t2.employee, t1.parenttype = 'Employee' where t1.parent = t2.name" % t)
+
+
+	# overwrite idx?????????
+
+
+	# delete emp profile
+	webnotes.model.delete_doc('DocType', 'Employee Profile')
+	for e in emp_prof:
+		webnotes.model.delete_doc('Employee Profile', e[0])
+
+elif patch_no == 70:
+	# update search criteria module -> System
+	sql("update tabDocType set module='System' where name='Search Criteria'")
+
+	# Cleanups to Contact
+	sql("update tabDocField set fieldtype='Data' where options='Designation' and parent='Contact'")
+	sql("update tabDocField set fieldtype='Data' where options='Department' and parent='Contact'")
+	sql("update tabDocField set depends_on='eval:(cint(doc.is_customer) || cint(doc.is_supplier) || cint(doc.is_sales_partner))' where fieldname='is_primary_contact' and parent='Contact'")
+
+	# import Contact, Employee
+	from webnotes.modules.import_module import import_from_files
+	import_from_files(record_list=[['utilities','doctype','contact']])
+
+
+	# remove last_contact_date from Lead
+	sql("delete from tabDocField where fieldname='last_contact_date' and parent='Lead'")
+
+elif patch_no == 71:
+	# Make Stock Qty and Conversion Factor field editable. Also no need to mention Conversion factor in table can do it directly
+	sql("update `tabDocField` set `permlevel` = 0, `width` = '100px', `trigger` = 'Client' where parent IN ('PO Detail','Purchase Receipt Detail') and fieldname in ('stock_qty','conversion_factor')")
+	sql("update `tabDocField` set `width` = '100px' where parent IN ('PO Detail','Purchase Receipt Detail') and fieldname = 'stock_uom'")
+
+elif patch_no == 72:
+	# Core Patch
+	# ----------
+
+	from webnotes.modules.import_module import import_from_files
+
+	# import module def
+	import_from_files(record_list = [['core', 'Module Def', 'Core']])
+elif patch_no == 73:
+	# set module in DocTypes
+	sql("update tabDocType set module='Core' where name in ('DocType', 'DocField', 'DocPerm', 'Role', 'UserRole', 'Profile', 'Print Format', 'DocFormat', 'Control Panel', 'Event', 'Event Role', 'Event User', 'DefaultValue', 'Default Home Page', 'File', 'File Group', 'File Data', 'Letter Head', 'Module Def', 'Module Def Item', 'Module Def Role', 'Page', 'Page Role', 'Search Criteria', 'DocType Label', 'DocType Mapper', 'Field Mapper Detail', 'Table Mapper Detail')")
+
+	# set module in Page
+	sql("update tabPage set module='Core' where name='Login Page'")
+
+	# move file browser to Tools
+	sql("update tabPage set module='Tools' where name='File Browser'")
+	sql("update tabDocType set module='Tools' where name='File Browser Control'")
+	sql("update tabDocType set module='Application Internal' where name='Profile Control'")
+elif patch_no == 74:
+	p = get_obj('Patch Util')
+	# permission
+	p.delete_permission('Employee', 'Administrator', 0)
+	p.delete_permission('Employee', 'Administrator', 1)
+	p.add_permission('Employee', 'Employee', 0, read = 1, match = 'owner')
+	p.add_permission('Employee', 'Employee', 1, read = 1, match = 'owner')
+	sql("delete from `tabDocField` where parent = 'Employee' and label = 'Payroll Rule'")
+elif patch_no == 75:
+	#sal structure patch
+	# import
+	from webnotes.modules.import_module import import_from_files
+	import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr','doctype','earning_detail'],['hr','doctype','deduction_detail']])
+elif patch_no == 76:
+	# property
+	p = get_obj('Patch Util')
+	p.set_field_property('Salary Structure', 'is_active', 'default', 'Yes')
+	p.set_field_property('Salary Structure', 'ctc', 'reqd', '1')
+	p.set_field_property('Earning Detail', 'modified_value', 'width', '')
+	p.set_field_property('Earning Detail', 'modified_value', 'trigger', 'Client')
+	p.set_field_property('Deduction Detail', 'd_modified_amt', 'width', '')
+	p.set_field_property('Earning Detail', 'd_modified_amt', 'trigger', 'Client')
+	sql("Update tabDocField set `description` = 'You can create more earning and deduction type from Setup --> HR' where label = 'Earning & Deduction' and parent = 'Salary Structure' and fieldtype = 'Section Break'")
+
+	# delete
+	sql("update `tabSalary Structure` set net_pay = total")
+	sql("delete from tabDocField where label in ('LWP Help', 'Calculate Total', 'Total') and parent = 'Salary Structure'")
+	sql("delete from tabDocPerm where parent in ('Earning Detail', 'Deduction Detail')")
+
+
+	# permission
+	p.delete_permission('Salary Structure', 'Administrator', 0)
+	p.delete_permission('Salary Structure', 'Administrator', 1)
+	p.add_permission('Salary Structure', 'Employee', 0, read = 1, match = 'owner')
+	p.add_permission('Salary Structure', 'Employee', 1, read = 1, match = 'owner')
+elif patch_no == 77:
+	# sal slip patch
+	# import
+	from webnotes.modules.import_module import import_from_files
+	import_from_files(record_list=[['hr','doctype','salary_slip'], ['hr','doctype','ss_earning_detail'],['hr','doctype','ss_deduction_detail'], ['mapper', 'DocType Mapper', 'Salary Structure-Salary Slip']])
+elif patch_no == 78:
+	p = get_obj('Patch Util')
+	# delete
+	sql("update `tabSalary Slip` set leave_encashment_amount = encashment_amount")
+	p.delete_field('Salary Slip', 'encashment_amount')
+	p.delete_field('Salary Slip', 'year')
+	p.delete_field('Salary Slip', 'flag')
+	sql("delete from tabDocField where label = 'Process Payroll' and parent = 'Salary Slip'")
+
+	# field property
+	p.set_field_property('Salary Slip', 'bank_name', 'permlevel', '1')
+	p.set_field_property('Salary Slip', 'leave_without_pay', 'permlevel', '0')
+	p.set_field_property('Salary Slip', 'leave_without_pay', 'trigger', 'Client')
+	p.set_field_property('SS Earning Detail', 'e_type', 'permlevel', '0')
+	p.set_field_property('SS Earning Detail', 'e_type', 'fieldtype', 'Link')
+	p.set_field_property('SS Earning Detail', 'e_type', 'options', 'Earning Type')
+	p.set_field_property('SS Deduction Detail', 'd_type', 'permlevel', '0')
+	p.set_field_property('SS Deduction Detail', 'd_type', 'fieldtype', 'Link')
+	p.set_field_property('SS Deduction Detail', 'd_type', 'options', 'Deduction Type')
+	sql("update `tabSS Earning Detail` set e_modified_amount = e_amount")
+	sql("update `tabSS Deduction Detail` set d_modified_amount = d_amount")
+
+	# permission
+	p.delete_permission('Salary Slip', 'Administrator', 0)
+	p.delete_permission('Salary Slip', 'Administrator', 1)
+	p.add_permission('Salary Slip', 'Employee', 0, read = 1, match = 'owner')
+	p.add_permission('Salary Slip', 'Employee', 1, read = 1, match = 'owner')
+elif patch_no == 79:
+	# Import Modules
+	import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','HR']])
+elif patch_no == 80:
+	# Holiday List
+	sql("update `tabHoliday List Detail` set description = holiday_name")
+	sql("delete from tabDocField where parent = 'Holiday List Detail' and fieldname = 'holiday_name'")
+	sql("update tabDocField set fieldtype = 'Select', options = 'link:Fiscal Year' where parent = 'Holiday List' and fieldname = 'fiscal_year'")
+	sql("delete from tabDocPerm where role in ('Administrator','HR User') and parent = 'Holiday List'")
+
+	# Leave Control Panel
+	# --------------------
+	sql("delete from `tabDocField` where parent = 'Leave Control Panel' and label in ('Leave Control Panel','Allocation Details') and fieldtype = 'Section Break'")
+	sql("delete from tabDocField where parent = 'Leave Control Panel' and fieldname in ('col_brk3','allocation_type','col_brk2','from_date','to_date','leave_transaction_type','posting_date')")
+	sql("update tabDocField set fieldtype = 'Select', options = 'link:Fiscal Year' where parent = 'Leave Control Panel' and fieldname = 'fiscal_year'")
+	sql("update tabDocField set fieldtype = 'Select', options = 'link:Leave Type' where parent = 'Leave Control Panel' and fieldname = 'leave_type'")
+	sql("update tabDocField set reqd = 1 where parent = 'Leave Control Panel' and fieldname = 'no_of_days'")
+
+	# Leave Application
+	# ------------------
+	for d in sql("select * from `tabLeave Transaction` where leave_transaction_type = 'Deduction' and ifnull(deduction_type, '') = 'Leave'", as_dict = 1):
+		lp = Document('Leave Application')
+		lp.employee = d['employee']
+		lp.leave_type = d['leave_type']
+		lp.posting_date = d['date']
+		lp.fiscal_year = d['fiscal_year']
+		lp.leave_balance = d['pre_balance']
+		lp.half_day = d['half_day']
+		lp.from_date = d['from_date']
+		lp.to_date = d['to_date']
+		lp.total_leave_days = d['total_leave']
+		lp.description = d['reason']
+		lp.docstatus = cint(d['docstatus'])
+		lp.save(1)
+
+	# Leave Allocation
+	# -----------------
+	for d in sql("select * from `tabLeave Transaction` where leave_transaction_type = 'Allocation'", as_dict = 1):
+		la = Document('Leave Allocation')
+		la.employee = d['employee']
+		la.leave_type = d['leave_type']
+		la.posting_date = d['date']
+		la.fiscal_year = d['fiscal_year']
+		la.new_leaves_allocated = d['total_leave']
+		la.total_leaves_allocated = d['total_leave']
+		la.description = d['reason']
+		la.docstatus = cint(d['docstatus'])
+		la.save(1)
+
+	# Payroll Module Def
+	# -------------------
+	sql("delete from `tabModule Def Item` where doc_name = 'Leave Transaction' and display_name = 'Leave Transaction' and parent = 'Payroll' and doc_type = 'Forms'")
+
+elif patch_no == 81:
+	# Import Modules
+	import_from_files(record_list=[['hr','Module Def','HR']])
+elif patch_no == 82:
+	sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'")
+	sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'")
+elif patch_no == 83:
+	# delete leave transaction
+	webnotes.conn.sql("set foreign_key_checks=0")
+	sql("delete from `tabLeave Transaction`")
+	import webnotes.model
+	webnotes.model.delete_doc('DocType','Badge Settings Detail')
+	webnotes.model.delete_doc('DocType','Leave Transaction')
+	webnotes.conn.sql("set foreign_key_checks=1")
+elif patch_no == 84:
+	p = get_obj('Patch Util')
+	p.set_field_property('SS Earning Detail', 'e_amount', 'permlevel', '1')
+	p.set_field_property('SS Deduction Detail', 'd_amount', 'permlevel', '1')
+elif patch_no == 85:
+	# permission
+	p = get_obj('Patch Util')
+	p.add_permission('Leave Application', 'Employee', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1, match = 'owner')
+	p.add_permission('Leave Application', 'Employee', 1, read = 1, match = 'owner')
+	p.add_permission('Leave Allocation', 'HR User', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1, match = 'owner')
+	p.add_permission('Leave Allocation', 'HR User', 1, read = 1)
+	sql("update tabDocPerm set `match` = '' where parent = 'Leave Application' and role = 'HR User'")
+elif patch_no == 86:
+	# Import Modules
+	import_from_files(record_list=[['hr','doctype','leave_type']])
+elif patch_no == 87:
+	sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'")
+elif patch_no == 88:
+	# Import Modules
+	import_from_files(record_list=[['hr','doctype','leave_allocation']])
+
+elif patch_no == 89:
+	sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'")
+	sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'")
+elif patch_no == 90:
+	sql("update `tabLeave Allocation` set docstatus = 1")
+elif patch_no == 91:
+	import webnotes
+	webnotes.conn.set_global("system_message", """<h3>System Updates</h3>Based on user feedback, we have cleaned up HR module (Partly):<ul><li>Employee and Employee Profile are merged into a single document</li><li>Salary Structure and Salary Slip are now more user friendly</li><li>Leave Transaction document is now divided into 2 documents Leave Application and Leave Allocation</li></ul>We will work on Reports, Attendance and other documents of Payroll module next week<br><br> Do send us your feedback!""")
+	webnotes.conn.set_global("system_message_id", "5")
+elif patch_no == 92:
+	sql("update tabDocField set label = 'Get Charges' where parent IN ('Sales Order','Delivery Note','Receivable Voucher') and label = 'Get Other Charges' and fieldtype = 'Button'")
+	# Automated Other Charges Calculation basis
+	sql("update tabDocField set options = '', `trigger` = 'Client' where parent IN ('Quotation','Sales Order','Delivery Note','Receivable Voucher') and label = 'Get Charges' and fieldtype = 'Button'")
+elif patch_no == 93:
+	sql("update `tabTable Mapper Detail` set validation_logic = 'qty > ifnull(billed_qty,0) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail'")
+	sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'")
+elif patch_no == 94:
+	import_from_files(record_list=[['selling','doctype','sms_center']])
+elif patch_no == 95:
+	import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']])
+elif patch_no == 96:
+	sql("delete from `tabModule Def Item` where doc_type = 'Reports' and display_name = 'Cenvat Credit - Input or Capital Goods' and parent = 'Accounts'")
+elif patch_no == 97:
+	sql("update tabFeed set doc_label = 'Feed', doc_name = name where ifnull(doc_name,'') = '' and ifnull(doc_label,'') = ''")
+elif patch_no == 98:
+	import_from_files(record_list=[['accounts','doctype','payable_voucher']])
+elif patch_no == 99:
+	import_from_files(record_list=[['accounts','doctype','account']])
+elif patch_no == 100:
+	p = get_obj('Patch Util')
+	p.set_field_property('Account', 'level', 'hidden', '1')
+	p.set_field_property('Account', 'level', 'print_hide', '1')
+	p.set_field_property('Account', 'account_type', 'search_index', '0')
+	p.set_field_property('TDS Detail', 'tds_category', 'width', '150px')
+	p.set_field_property('TDS Detail', 'special_tds_rate_applicable', 'width', '150px')
+	p.set_field_property('TDS Detail', 'special_tds_rate', 'width', '150px')
+	p.set_field_property('TDS Detail', 'special_tds_limit', 'width', '150px')
+elif patch_no == 101:
+	# Leave Application Details and Leave Allocation Details
+	sql("update tabDocField set search_index = 1, in_filter = 1 where fieldname in ('employee','leave_type','fiscal_year') and parent in ('Leave Application','Leave Allocation')")
+	get_obj('DocType','Leave Application').doc.save()
+	get_obj('DocType','Leave Allocation').doc.save()
+elif patch_no == 102:
+	# make item description field editable in production order
+	sql("update tabDocField set permlevel = 0 where fieldname = 'description' and parent = 'Production Order'")
+elif patch_no == 103:
+	sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'")
+elif patch_no == 104:
+	import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','HR'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']])
+
+elif patch_no == 105:
+	# Employee Leave Balance
+	sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')")
+	# Update Search Fields
+	sql("update tabDocType set search_fields = 'employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'")
+	sql("update tabDocType set search_fields = 'employee,employee_name,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'")
+elif patch_no == 106:
+	for d in sql("select name,employee,employee_name from `tabLeave Allocation`"):
+		if not cstr(d[2]):
+			sql("update `tabLeave Allocation` set employee_name = '%s' where name = '%s'" % (webnotes.conn.get_value('Employee',cstr(d[1]),'employee_name'), cstr(d[0])))
+	for d in sql("select name,employee,employee_name from `tabLeave Application`"):
+		if not cstr(d[2]):
+			sql("update `tabLeave Application` set employee_name = '%s' where name = '%s'" % (webnotes.conn.get_value('Employee',cstr(d[1]),'employee_name'), cstr(d[0])))
+elif patch_no == 107:
+	sql("delete from `tabDocField` where fieldname = 'fiscal_year' and parent = 'Employee'")
+elif patch_no == 108:
+	import_from_files(record_list=[['hr','search_criteria','srch_std_00013']])
+elif patch_no == 109:
+	import_from_files(record_list=[['hr','search_criteria','srch_std_00015']])
+elif patch_no == 110:
+	import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr', 'doctype', 'salary_slip']])
+elif patch_no == 111:
+	sql("update tabDocType set search_fields = 'transfer_date, from_warehouse, to_warehouse, purpose, remarks' where name = 'Stock Entry'")
+elif patch_no == 112:
+	sql("delete from tabDocField where label = 'Get Other Charges' and fieldtype = 'Button' and parent = 'Receivable Voucher'")
+elif patch_no == 113:
+	sql("update tabDocField set reqd = 1 where parent = 'Customer' and fieldname = 'phone_1'")
+elif patch_no == 114:
+	for d in sql("select name, master_name, credit_days, credit_limit from tabAccount where master_type = 'Customer'"):
+		if cstr(d[1]):
+			days, limit = cint(d[2]), flt(d[3])
+			cust_det = sql("select credit_days, credit_limit from tabCustomer where name = '%s'" % (cstr(d[1])))
+			if not days: days = cust_det and cint(cust_det[0][0]) or 0
+			if not limit: limit = cust_det and flt(cust_det[0][1]) or 0
+			sql("COMMIT")
+			sql("START TRANSACTION")
+			sql("update tabAccount set credit_days = '%s', credit_limit = '%s' where name = '%s'" % (days, limit, cstr(d[0])))
+			sql("COMMIT")
+
+elif patch_no == 115:
+	# patch for timesheet cleanup
+	from webnotes.model import delete_doc
+	delete_doc('DocType', 'Timesheet Detail')
+
+	from webnotes.modules.import_module import import_from_files
+	import_from_files(record_list = [['Projects', 'DocType', 'Timesheet'], ['Projects', 'DocType', 'Timesheet Detail'], ['Projects', 'DocType', 'Activity Type']])
+
+elif patch_no == 116:
+	# again!
+	from webnotes.model import delete_doc
+	delete_doc('DocType', 'Timesheet Detail')
+
+	from webnotes.modules.import_module import import_from_files
+	import_from_files(record_list = [['Projects', 'DocType', 'Timesheet Detail']])
+elif patch_no == 117:
+	op = '\n' + 'Walk In'
+	sql("update `tabDocField` set `options` = concat(options, %s) where parent = 'Enquiry' and fieldname = 'source' and options not like '%%Walk%%'", op)
+elif patch_no == 118:
+	from webnotes.utils import get_defaults
+	ss = sql("select name, net_pay from `tabSalary Slip`")
+	for d in ss:
+		if d[1]:
+			w = get_obj('Sales Common').get_total_in_words(get_defaults()['currency'], d[1])
+			sql("update `tabSalary Slip` set net_pay_in_words = '%s' where name = '%s'" % (w, d[0]))
+elif patch_no == 119:
+	sql("update tabDocType set in_create = 1 where name = 'Profile'")
+elif patch_no == 120:
+	sql("update tabDocField set permlevel = 0 where parent = 'Sales and Purchase Return Wizard' and fieldname = 'return_date'")
+elif patch_no == 121:
+	import_from_files(record_list = [['CRM', 'DocType', 'Return Detail'], ['Material Management', 'DocType', 'Sales and Purchase Return Wizard']])
+elif patch_no == 122:
+	sql("delete from tabDocField where (fieldname = 'serial_no' or label = 'Warrany Status') and parent = 'Sales Order'")
+elif patch_no == 123:
+	import_from_files(record_list = [['CRM', 'Module Def', 'CRM'], ['CRM', 'Search Criteria', 'STDSRCH/00004']])
+elif patch_no == 124:
+	import webnotes
+	webnotes.conn.set_global("system_message", """<h3>Updates(New)</h3>We have added a new report in the Selling Module.<br><br><b>Sales Personwise Transaction Summary: </b>In this report you can see sales person's contribution in a particular order, delivery or invoice. You can select voucher type in "Based On" filter.<br><br> Do send us your feedback!""")
+	webnotes.conn.set_global("system_message_id", "5")
+elif patch_no == 125:
+	import_from_files(record_list = [['Material Management', 'DocType', 'Delivery Note']])
+elif patch_no == 126:
+	sql("delete from tabDocField where parent = 'Delivery Note' and label in ('Make Sales Invoice', 'Make Installation Note', 'Intro Note')")
+elif patch_no == 127:
+	sql("delete from tabDocPerm where role = 'All' and parent = 'Expense Voucher' and (permlevel = 0 or permlevel = 2)")
+	p = get_obj('Patch Util')
+	p.add_permission('Expense Voucher', 'Employee', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1, match = 'owner')
+	p.add_permission('Expense Voucher', 'HR Manager', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1)
+	p.add_permission('Expense Voucher', 'HR User', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1)
+elif patch_no == 128:
+	from webnotes.modules import import_module
+	import_module.import_from_files(record_list=[['selling','doctype','sales_order'], ['selling','doctype','sales_order_detail'],  ['stock','doctype','delivery_note'], ['stock','doctype','delivery_note_detail']])
+elif patch_no == 129:
+	sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail' and to_table = 'RV Detail'")
+	sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Delivery Note-Receivable Voucher' and from_table = 'Delivery Note Detail' and to_table = 'RV Detail'")
+elif patch_no == 130:
+	# update from rv
+	from webnotes.model.code import get_obj
+	from webnotes.utils import cstr
+	for d in sql("select name, docstatus from `tabReceivable Voucher` where ifnull(docstatus,0) != 0"):
+		sql("COMMIT")
+		sql("START TRANSACTION")
+		try:
+			obj = get_obj('Receivable Voucher', cstr(d[0]), with_children = 1)
+			is_submit = 1
+			if cint(d[1]) == 2: is_submit = 0
+			get_obj('Sales Common').update_prevdoc_detail(is_submit, obj)
+		except:
+			pass
+		sql("COMMIT")
+
+	# update from dn
+	from webnotes.model.code import get_obj
+	for d in sql("select name, docstatus from `tabDelivery Note` where ifnull(docstatus,0) != 0"):
+		sql("COMMIT")
+		sql("START TRANSACTION")
+		try:
+			obj = get_obj('Delivery Note', cstr(d[0]), with_children = 1)
+			is_submit = 1
+			if cint(d[1]) == 2: is_submit = 0
+			get_obj('Sales Common').update_prevdoc_detail(is_submit, obj)
+		except:
+			pass
+		sql("COMMIT")
+elif patch_no == 131:
+	sql("update `tabDocType` set allow_trash = 1 where name = 'Purchase Other Charges'")
+	sql("update tabDocPerm set `cancel` = 1 where parent = 'Purchase Other Charges' and permlevel = 0 and `read` = 1 and `write` = 1")
+elif patch_no == 132:
+	sql("update tabDocField set no_copy = 0 where parent = 'Receivable Voucher' and fieldname = 'customer'")
+elif patch_no == 133:
+	from webnotes.modules import import_module
+	import_module.import_from_files(record_list=[['accounts','doctype','receivable_voucher']])
+elif patch_no == 134:
+	sql("update tabDocField set no_copy = 1 where parent = 'Receivable Voucher' and fieldname = 'posting_time'")
+elif patch_no == 135:
+	sql("update tabDocField set `default` = 'Today' where parent = 'Receivable Voucher' and fieldname = 'due_date'")
+elif patch_no == 136:
+	from webnotes.modules import import_module
+	import_module.import_from_files(record_list=[['accounts','doctype','rv_detail']])
+elif patch_no == 137:
+	from webnotes.modules import import_module
+	import_module.import_from_files(record_list=[['setup','doctype','price_list']])
+elif patch_no == 138:
+	sql("update `tabDocType` set allow_attach = 1 where name = 'Price List'")
+elif patch_no == 139:
+	from webnotes.modules import import_module
+	import_module.import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']])
+elif patch_no == 140:
+	from webnotes.modules import import_module
+	import_module.import_from_files(record_list=[['accounts','doctype','rv_detail']])
+elif patch_no == 141:
+	sql("delete from tabDocField where (fieldname = 'letter_head' or label = 'Letter Head') and parent = 'Company'")
+elif patch_no == 142:
+	# fixes to letter head and personalize
+	from webnotes.model import delete_doc
+
+	delete_doc('DocType', 'Batch Settings')
+	delete_doc('DocType', 'Batch Settings Detail')
+	delete_doc('DocType', 'Social Badge')
+	delete_doc('Page', 'Personalize Page')
+	delete_doc('DocType', 'Personalize Page Control')
+
+	import_from_files(record_list=[['core','doctype','letter_head'], ['setup','doctype','personalize']])
+elif patch_no == 144:
+	webnotes.conn.sql("update tabDocField set fieldtype='Code' where parent='Letter Head' and fieldname='content'")
+elif patch_no == 145:
+	sql("update `tabDocField` set permlevel=1 where fieldname = 'group_or_ledger' and parent = 'Account'")
+elif patch_no == 146:
+	import_from_files(record_list=[['accounts','doctype','account']])
+elif patch_no == 147:
+	import_from_files(record_list=[['mapper', 'DocType Mapper', 'Purchase Order-Payable Voucher'], ['mapper', 'DocType Mapper', 'Purchase Receipt-Payable Voucher'], ['mapper', 'DocType Mapper', 'Purchase Order-Purchase Receipt']])
+elif patch_no == 148:
+	sql("delete from `tabDocField` where (fieldname = 'account_balances' or label = 'Balances') and parent = 'Account'")
+	sql("update tabDocType set istable = 0, section_style = 'Simple', search_fields = 'account, period, fiscal_year, balance' where name = 'Account Balance'")
+	sql("update tabDocField set permlevel = 0 where parent = 'Account Balance'")
+	p = get_obj('Patch Util')
+	p.add_permission('Account Balance', 'Accounts User', 0, read = 1)
+	p.add_permission('Account Balance', 'Accounts Manager', 0, read = 1)
+	import_from_files(record_list=[['accounts','doctype','account_balance']])
+elif patch_no == 149:
+	sql("update `tabAccount Balance` set account = parent")
+elif patch_no == 150:
+	sql("update tabDocField set in_filter = 1, search_index = 1 where parent = 'Account Balance' and fieldname in ('account', 'period', 'fiscal_year', 'start_date', 'end_date')")
+	ac_bal = Document("DocType", "Account Balance")
+	ac_bal.save()
+elif patch_no == 151:
+	sql("delete from tabDocField where label = 'Add / Manage Contacts' and fieldtype = 'Button' and parent = 'Customer'")
+	sql("delete from `tabField Mapper Detail` where parent = 'Sales Order-Delivery Note' and from_field = 'note' and to_field = 'note'")
+elif patch_no == 152:
+	import_from_files(record_list=[['selling','doctype','sales_order'], ['stock','doctype','delivery_note'], ['selling','doctype','customer'], ['selling','doctype','shipping_address'], ['mapper', 'DocType Mapper', 'Sales Order-Delivery Note']])
+elif patch_no == 153:
+	sql("delete from `tabDocField` where fieldname = 'sales_person' and parent = 'Customer'")
+elif patch_no == 154:
+	import_from_files(record_list=[['stock','doctype','serial_no'], ['support','doctype','customer_issue']])
+elif patch_no == 155:
+	for d in sql("select name, item_code from `tabSerial No`"):
+		sql("COMMIT")
+		sql("START TRANSACTION")
+		sql("update `tabSerial No` set item_name = '%s' where name = '%s'" % (webnotes.conn.get_value('Item',cstr(d[1]),'item_name'), cstr(d[0])))
+		sql("COMMIT")
+elif patch_no == 156:
+	sql("update tabDocField set fieldtype = 'Code' where fieldname = 'html' and parent = 'Print Format'")
+elif patch_no == 157:
+	import_from_files(record_list=[['accounts', 'doctype', 'journal_voucher'], ['accounts', 'Print Format', 'Payment Receipt Voucher'], ['accounts', 'Print Format', 'Cheque Printing Format']])
+elif patch_no == 158:
+	from webnotes.model.doc import addchild
+	sql("delete from tabDocField where parent = 'Customer Issue' and fieldname = 'customer_group'")
+elif patch_no == 159:
+	sql("update tabAccount set account_type = 'Chargeable' where account_name in ('Advertising and Publicity', 'Freight & Forwarding Charges', 'Miscellaneous Expenses', 'Sales Promotion Expenses')")
+elif patch_no == 160:
+	sql("update `tabDocType` set search_fields = 'posting_date, due_date, debit_to, fiscal_year, grand_total, outstanding_amount' where name = 'Receivable Voucher'")
+	sql("update `tabDocType` set search_fields = 'posting_date, credit_to, fiscal_year, bill_no, grand_total, outstanding_amount' where name = 'Payable Voucher'")
+elif patch_no == 161:
+	sql("update tabDocType set autoname = 'field:batch_id' where name = 'Batch'")
+	sql("update tabDocField set no_copy = 1 where parent = 'Batch' and fieldname = 'batch_id'")
+elif patch_no == 162:
+	import_from_files(record_list=[['selling', 'search_criteria', 'sales_order_pending_items1']])
+elif patch_no == 163:
+	sql("delete from `tabModule Def Item` where display_name = 'Sales Orderwise Pending Packing Item Summary' and parent = 'CRM'")
+	import_from_files(record_list=[['selling', 'search_criteria', 'sales_orderwise_pending_qty_to_deliver'], ['selling', 'search_criteria', 'sales_orderwise_pending_amount_to_bill'], ['selling', 'search_criteria', 'delivered_items_to_be_install']])
+elif patch_no == 164:
+	import_from_files(record_list=[['buying', 'search_criteria', 'pending_po_items_to_receive'], ['buying', 'search_criteria', 'pending_po_items_to_bill']])
+elif patch_no == 165:
+	pass
+elif patch_no == 166:
+	import_from_files(record_list=[['buying', 'doctype', 'purchase_order']])
+elif patch_no == 167:
+	if webnotes.conn.get_value('Control Panel', None, 'account_id') not in ['ax0000956', 'ax0001338']:
+		sql("delete from tabDocField where parent = 'Purchase Order' and fieldname in ('test_certificate_required', 'estimated_cost', 'transport', 'vendor_reference', 'transportation_required', 'mode_of_dispatch', 'octroi')")
+elif patch_no == 168:
+	sql("update tabDocField set fieldtype = 'Data', options = 'Suggest' where fieldname = 'bank_name' and parent = 'Employee'")
+elif patch_no == 169:
+	import_from_files(record_list=[['accounts', 'doctype', 'pv_detail'], ['accounts', 'doctype', 'rv_detail']])
+elif patch_no == 170:
+	import_from_files(record_list=[['mapper', 'DocType Mapper', 'Delivery Note-Receivable Voucher']])
+elif patch_no == 171:
+	import_from_files(record_list=[['buying', 'doctype', 'supplier']])
+elif patch_no == 172:
+	import webnotes
+	webnotes.conn.set_global("system_message", """<b>Welcome to the new financial year 2011-2012 !!! </b><br><br> So obvious question in your mind is how to start Entries in the New Fiscal Year in ERPNext? What are the changes you have to make in the system? <br>We have made some guidelines regarding the basic steps you should follow. Please click on link <a href='http://erpnext.blogspot.com/2011/03/how-to-start-entries-in-new-fiscal-year.html'>How to start Entries in the New Fiscal Year in ERPNext?</a>""")
+	webnotes.conn.set_global("system_message_id", "6")
+elif patch_no == 173:
+	sql("delete from tabDocField where label = 'Get Other Charges' and parent = 'Delivery Note'")
+	sql("update tabDocField set reqd = 0 where fieldname = 'posting_time' and parent = 'Serial No'")
+elif patch_no == 174:
+	c = sql("select count(name) from `tabField Mapper Detail` where parent = 'Delivery Note-Receivable Voucher' and from_field = 'description' and to_field = 'description' and match_id = 2")
+	if c and cint(c[0][0]) > 1:
+		sql("update `tabField Mapper Detail` set match_id = 1 where parent = 'Delivery Note-Receivable Voucher' and from_field = 'description' and to_field = 'description' limit 1")
+elif patch_no == 175:
+	import webnotes
+	webnotes.conn.set_global("system_message", """If your financial year starts on 1st April then you have make some changes in the system to start entry in the new year.<br>We have made some guidelines regarding the basic steps you should follow. Please click on link <a href='http://erpnext.blogspot.com/2011/03/how-to-start-entries-in-new-fiscal-year.html'>How to start Entries in the New Fiscal Year in ERPNext?</a>""")
+	webnotes.conn.set_global("system_message_id", "6")
+elif patch_no == 176:
+	sql("update tabDocPerm set role='Guest', `write`=0, `create`=0 where role='Administrator' and parent='Notification Control' limit 1")
+elif patch_no == 177:
+	sql("delete from `tabDocField` where label = 'Next Steps' and parent = 'Purchase Order'")
+	sql("update tabDocField set options = 'Material Issue\nMaterial Receipt\nMaterial Transfer\nSales Return\nPurchase Return\nSubcontracting\nProduction Order' where parent = 'Stock Entry' and fieldname = 'purpose'")
+elif patch_no == 178:
+	import_from_files(record_list = [['hr', 'doctype', 'salary_slip']])
+elif patch_no == 179:
+	from webnotes.utils import get_defaults
+	sl = sql("select name, net_pay from `tabSalary Slip`")
+	for d in sl:
+		in_words = get_obj('Sales Common').get_total_in_words(get_defaults()['currency'], round(flt(d[1])))
+		sql("update `tabSalary Slip` set rounded_total = '%s', total_in_words = '%s' where name = '%s'" % (round(flt(d[1])), in_words, d[0]))
+elif patch_no == 180:
+	sql("delete from tabDocField where parent = 'Salary Slip' and fieldname = 'net_pay_in_words'")
+elif patch_no == 181:
+	import_from_files(record_list = [['accounts', 'doctype', 'journal_voucher']])
+elif patch_no == 182:
+	sql("update tabDocField set options = CONCAT(options, '\nWrite Off Voucher') where fieldname = 'voucher_type' and parent = 'Journal Voucher'")
+elif patch_no == 183:
+	sql("delete from tabDocField where label = 'SMS' and fieldtype = 'Section Break' and parent in  ('Enquiry', 'Lead', 'Sales Order', 'Delivery Note')")
+elif patch_no == 184:
+	from webnotes.model import delete_doc
+	delete_doc('DocType', 'Feed')
+	delete_doc('DocType', 'Feed List')
+	delete_doc('DocType', 'Feed Control')
+
+	# add trigger
+	from webnotes.model.triggers import add_trigger
+	add_trigger('*','*','*','event_updates.update_feed')
+
+	webnotes.conn.commit()
+
+	try:
+		sql("drop table tabFeed")
+		sql("drop table `tabFeed List`")
+	except: pass
+
+	# import
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('event_updates','doctype','feed')
+elif patch_no==185:
+	sql("delete from tabDocTrigger where method = 'webnotes.widgets.follow.on_docsave'")
+elif patch_no==186:
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('event_updates','doctype','feed')
+elif patch_no == 187:
+	sql("update tabDocType set autoname = '' where name = 'QA Inspection Report'")
+elif patch_no == 188:
+	import_from_files(record_list = [['buying', 'doctype', 'qa_inspection_report']])
+elif patch_no == 189:
+	sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('entries', 'other_charges') and parent = 'Receivable Voucher'")
+elif patch_no == 190:
+	sql("update tabDocField set permlevel=0 where fieldname = 'fiscal_year' and parent = 'Stock Entry'")
+elif patch_no == 191:
+	import_from_files(record_list = [['support', 'doctype', 'customer_issue']])
+elif patch_no == 192:
+	sql("delete from `tabModule Def Item` where parent = 'Material Management' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'")
+	import_from_files(record_list = [['buying', 'Module Def', 'SRM']])
+elif patch_no == 193:
+	sql("update tabDocField set fieldtype='Button', `trigger`='Client' where parent='Letter Head' and fieldname='set_from_image'")
+elif patch_no == 194:
+	sql("delete from `tabModule Def Item` where parent = 'SRM' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'")
+	import_from_files(record_list = [['stock', 'Module Def', 'Material Management']])
+elif patch_no == 195:
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('setup','doctype','manage_account')
+elif patch_no == 196:
+	sql("update `tabModule Def` set module_page = null where name = 'Material Management'")
+elif patch_no == 197:
+	sql("update `tabDocField` set permlevel = 0, in_filter = 1 where fieldname = 'warranty_amc_status' and parent = 'Customer Issue'")
+	import_from_files(record_list = [['support', 'doctype', 'customer_issue']])
+elif patch_no == 198:
+	sql("delete from `tabDocField` where (label in ('SMS', 'Send SMS') or fieldname in ('message', 'customer_mobile_no')) and parent in ('Quoattion', 'Sales Order', 'Delivery Note', 'Receivable Voucher')")
+	sql("delete from `tabDocField` where label in ('SMS', 'Send SMS') and parent = 'Purchase Order'")
+	sql("delete from `tabDocField` where (label in ('Send SMS', 'SMS Html') or fieldname in ('sms_message', 'lead_sms_detail', 'enquiry_sms_detail')) and parent in ('Lead', 'Enquiry')")
+	from webnotes.model import delete_doc
+	delete_doc('DocType', 'Lead SMS Detail')
+	delete_doc('DocType', 'Enquiry SMS Detail')
+elif patch_no == 199:
+	sql("update tabDocField set reqd = 0 where parent = 'Attendance' and fieldname = 'shifts'")
+elif patch_no == 200:
+	reload_doc('event_updates','page','profile_settings')
+elif patch_no == 201:
+	reload_doc('setup','doctype','price_list')
+elif patch_no == 202:
+	name1 = sql("select name from tabDocField where parent='Price List' and label='Clear Prices' limit 1,1")
+	name2 = sql("select name from tabDocField where parent='Price List' and label='Update Prices' limit 1,1")
+	if name1:
+		sql("delete from tabDocField where name=%s limit 1", name1[0][0])
+	if name2:
+		sql("delete from tabDocField where name=%s limit 1", name2[0][0])
+elif patch_no == 203:
+	sql("delete from tabDocField where parent = 'Company' and fieldname = 'default_salary_account' limit 1")
+elif patch_no == 204:
+	sql("delete from tabDocField where parent = 'Company' and fieldname = 'default_salary_acount' limit 1")
+elif patch_no == 205:
+	sql("update `tabDocField` set `default` = '' where fieldname = 'naming_series' and parent = 'Installation Note'")
+elif patch_no == 206:
+	reload_doc('selling','doctype','installation_note')
+elif patch_no == 207:
+	import_from_files(record_list = [['setup', 'doctype', 'company']])
+elif patch_no == 208:
+	sql("delete from `tabDocField` where (label in ('SMS', 'Send SMS') or fieldname in ('message', 'customer_mobile_no')) and parent ='Quotation'")
+	default_currency = get_obj('Manage Account').doc.default_currency
+	sql("update tabCompany set default_currency = '%s'" % default_currency)
+elif patch_no == 209:
+	import_from_files(record_list = [['setup', 'doctype', 'company']])
+elif patch_no == 210:
+	sql("delete FROM `tabDocField` WHERE parent = 'Lead' AND label in ('CC:','Attachment Html','Create New File','Attachment')")
+elif patch_no == 212:
+	# reload company because of disturbed UI
+	import_from_files(record_list = [['setup', 'doctype', 'company']])
+elif patch_no == 213:
+	reload_doc('selling','doctype','lead')
+	reload_doc('setup','doctype','company')
+elif patch_no == 214:
+	reload_doc('selling','doctype','sales_order')
+elif patch_no == 215:
+	# patch for item and image in description
+	sql("update tabDocField set width = '300px' where fieldname='description'")
+	reload_doc('stock', 'doctype', 'item')
+	sql("delete from __DocTypeCache")
+elif patch_no == 216:
+	import_from_files(record_list = [['stock', 'doctype', 'serial_no'], ['stock', 'doctype', 'stock_ledger_entry']])
+elif patch_no == 217:
+	sql("update tabDocField set options = '\nIn Store\nDelivered\nNot in Use' where fieldname = 'status' and parent = 'Serial No'")
+	sql("update tabDocField set no_copy = 1 where fieldname = 'serial_no' and parent = 'Delivery Note Detail'")
+	sql("update tabDocField set no_copy = 1 where fieldname = 'serial_no' and parent = 'Stock Entry Detail'")
+elif patch_no == 218:
+	for d in sql("select name from `tabSerial No`"):
+		sql("Commit")
+		sql("Start Transaction")
+		s = Document('Serial No', d[0])
+		if s.pr_no:
+			s.purchase_document_type = 'Purchase Receipt'
+			s.purchase_document_no = s.pr_no
+		if s.delivery_note_no:
+			s.delivery_document_type = 'Delivery Note'
+			s.delivery_document_no = s.delivery_note_no
+		if s.notes:
+			s.delivery_note_no = s.notes
+		s.company = webnotes.utils.get_defaults()['company']
+		s.fiscal_year = webnotes.utils.get_defaults()['fiscal_year']
+		s.save()
+elif patch_no == 219:
+	sql("delete from tabDocField where fieldname in ('pr_no', 'make', 'label', 'delivery_note_no', 'notes') and parent = 'Serial No'")
+elif patch_no == 220:
+	sql("update tabDocField set label = 'Incoming Rate' where fieldname = 'purchase_rate' and parent = 'Serial No'")
+	sql("update tabDocField set label = 'Incoming Time' where fieldname = 'purchase_time' and parent = 'Serial No'")
+elif patch_no == 221:
+	sql("update tabDocField set reqd = 1 where fieldname in ('purchase_rate', 'warehouse') and parent = 'Serial No'")
+elif patch_no == 222:
+	sql("update tabDocField set options = '\nDelivery Note\nReceivable Voucher\nStock Entry' where fieldname = 'delivery_document_type' and parent = 'Serial No'")
+elif patch_no == 223:
+	sql("update tabDocField set hidden = 0 where fieldname in ('pay_to_recd_from', 'total_amount', 'total_amount_in_words') and parent = 'Journal Voucher'")
+	sql("update tabDocField set permlevel = 0 where fieldname = 'pay_to_recd_from' and parent = 'Journal Voucher'")
+elif patch_no == 224:
+	import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail'], ['accounts', 'Print Format', 'Payment Receipt Voucher']])
+elif patch_no == 225:
+	import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']])
+elif patch_no == 226:
+	import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']])
+elif patch_no == 227:
+	reload_doc('stock', 'doctype', 'item')
+	if webnotes.conn.get_value('Control Panel', None, 'account_id') != 'axjanak2011':
+		sql("delete from tabDocField where parent = 'Item' and fieldname='alternate_description' limit 1")
+elif patch_no == 228:
+	# knowledge base patch
+	reload_doc('knowledge_base', 'doctype', 'question')
+	reload_doc('knowledge_base', 'doctype', 'answer')
+	reload_doc('knowledge_base', 'page', 'questions')
+	reload_doc('knowledge_base', 'Module Def', 'Knowledge Base')
+	sql("update `tabModule Def` set disabled='No' where name='Knowledge Base'")
+elif patch_no == 229:
+	reload_doc('knowledge_base', 'page', 'question_view')
+elif patch_no == 230:
+	reload_doc('buying', 'doctype', 'indent')
+	reload_doc('buying', 'doctype', 'indent_detail')
+	reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent')
+elif patch_no == 231:
+	reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent')
+elif patch_no == 232:
+	sql("update `tabDocField` set options = 'Sales Order' where fieldname = 'sales_order_no' and parent = 'Indent'")
+elif patch_no == 233:
+	reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Receivable Voucher')
+	reload_doc('Mapper', 'DocType Mapper', 'Delivery Note-Receivable Voucher')
+elif patch_no == 234:
+	sql("update `tabTable Mapper Detail` set validation_logic = 'docstatus=1' where parent = 'Sales Order-Indent' and from_table = 'Sales Order Detail'")
+elif patch_no == 235:
+	for sc in sql("""select name from `tabSearch Criteria` where ifnull(name,'')
+		like 'srch%' or ifnull(name,'') like '%stdsrch'"""):
+		try:
+			get_obj('Search Criteria', sc[0]).rename()
+		except AttributeError, e:
+			pass
+	reload_doc('core', 'doctype', 'system_console')
+elif patch_no == 236:
+	# warehouse not mandatory for delivered serial nos
+	sql("update tabDocField set reqd=0 where parent='Serial No' and fieldname='warehouse'")
+elif patch_no == 237:
+	sql("update tabDocField set depends_on = 'eval:doc.is_pos==1' where fieldname = 'cash_bank_account' and parent = 'Receivable Voucher'")
+elif patch_no == 238:
+	reload_doc('accounts', 'doctype', 'receivable_voucher')
+	reload_doc('accounts', 'GL Mapper', 'POS with write off')
+elif patch_no == 239:
+	reload_doc('core', 'doctype', 'docfield')
+	reload_doc('core', 'doctype', 'doctype')
+	from patches.old_patches.feed_patch import set_subjects_and_tagfields
+
+	set_subjects_and_tagfields()
+elif patch_no == 240:
+	# again for sales order (status)
+	from patches.old_patches.feed_patch import set_subjects_and_tagfields
+	set_subjects_and_tagfields()
+elif patch_no == 241:
+	sql("update `tabDocField` set fieldtype = 'Text', options = '', in_filter = '' where fieldname = 'serial_no' and parent = 'Stock Ledger Entry'")
+elif patch_no == 242:
+	if webnotes.conn.get_value('Control Panel', None, 'account_id') not in ['axjanak2011']:
+		sql("commit")
+		try:
+			sql("alter table `tabStock Ledger Entry` drop index serial_no")
+		except:
+			pass
+
+		sql("alter table `tabStock Ledger Entry` change serial_no serial_no text")
+elif patch_no == 243:
+	# moving custom script and custom fields to framework
+	webnotes.conn.set_value('DocType', 'Custom Script', 'module', 'Core')
+	webnotes.conn.set_value('DocType', 'Custom Field', 'module', 'Core')
+	reload_doc('setup', 'doctype', 'company')
+elif patch_no == 244:
+	reload_doc('stock', 'search_criteria', 'shortage_to_indent')
+elif patch_no == 245:
+	from patches.old_patches.doctype_permission_patch import set_doctype_permissions
+	set_doctype_permissions()
+
+	from patches.old_patches.feed_patch import set_subjects_and_tagfields
+	set_subjects_and_tagfields()
+elif patch_no == 246:
+	webnotes.conn.set_value('DocType','Stock Entry','tag_fields','purpose')
+	webnotes.conn.set_value('DocType','Stock Entry','subject','%(remarks)s')
+elif patch_no == 247:
+	webnotes.conn.set_value('DocType','Stock Entry','subject','%(remarks)s')
+elif patch_no == 248:
+	reload_doc('setup', 'doctype', 'manage_account')
+elif patch_no == 249:
+	sql("update `tabDocPerm` t1, `tabDocType` t2 set t1.role = 'System Manager' where t1.role = 'Administrator' and t1.parent = t2.name and t2.module != 'Core'")
+elif patch_no == 250:
+	from patches.old_patches.feed_patch  import support_patch
+	support_patch()
+elif patch_no == 251:
+	from webnotes.model import db_schema
+	db_schema.remove_all_foreign_keys()
+	from patches.old_patches.customer_address import run_patch
+	run_patch()
+elif patch_no == 252:
+	reload_doc('support','doctype','support_ticket')
+	reload_doc('support','doctype','support_ticket_response')
+elif patch_no == 253:
+	reload_doc('accounts','doctype','ledger_balance_export')
+	reload_doc('accounts','doctype','ledger_detail')
+	reload_doc('accounts', 'Module Def', 'Accounts')
+
+	from webnotes.model.db_schema import updatedb
+	updatedb('Ledger Balance Export')
+	updatedb('Ledger Detail')
+elif patch_no == 254:
+	reload_doc('setup', 'doctype', 'sms_settings')
+	reload_doc('setup', 'doctype', 'static_parameter_detail')
+
+	from webnotes.model.db_schema import updatedb
+	updatedb('SMS Settings')
+	updatedb('Static Parameter Detail')
+elif patch_no == 255:
+	from patches.old_patches.customer_address import run_old_data_sync_patch
+	run_old_data_sync_patch()
+elif patch_no == 256:
+	sql("update `tabLetter Head` set content = replace(content, 'http://46.4.50.84/v170-test/', '')")
+	sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'")
+	sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')")
+elif patch_no == 257:
+	from patches.old_patches.customer_address import run_old_data_sync_patch
+	run_old_data_sync_patch()
+elif patch_no == 258:
+	sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'")
+elif patch_no == 259:
+	sql("update `tabQuotation Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
+	sql("update `tabSales Order Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
+	sql("update `tabRV Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
+	sql("update `tabDelivery Note Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
+elif patch_no == 260:
+	sql("update `tabLetter Head` set content = replace(content, 'http://46.4.50.84/v170/', '')")
+	sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'")
+	sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170/', '')")
+	sql("update `tabQuotation Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
+	sql("update `tabSales Order Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
+	sql("update `tabRV Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
+	sql("update `tabDelivery Note Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
+elif patch_no == 261:
+	sql("update `tabPrint Format` set html = replace(html, 'customer_address', 'address_display')")
+elif patch_no == 262:
+	from patches.old_patches.customer_address import sync_lead_phone
+	sync_lead_phone()
+elif patch_no == 263:
+	ol = ['','Open','To Reply','Waiting for Customer','Hold','Closed']
+	sql("update tabDocField set options=%s where parent=%s and fieldname=%s", ('\n'.join(ol), 'Support Ticket', 'status'))
+elif patch_no == 264:
+	sql("delete from tabDocField where parent = 'Customer Issue' and (fieldname = 'issue_in' or fieldname = 'issue_category')")
+	sql("update tabDocField set options=NULL where parent='Support Ticket' and label = 'Send'")
+elif patch_no == 266:
+	reload_doc('setup','doctype','support_email_settings')
+elif patch_no == 267:
+	sql("update `tabPrint Format` set html = replace(html, 'supplier_address', 'address_display')")
+elif patch_no == 268:
+	sql("update `tabDocPerm` set permlevel = 0 where permlevel is null")
+elif patch_no == 269:
+	p = get_obj('Patch Util')
+	p.add_permission('GL Entry', 'Accounts User', 0, read = 1)
+elif patch_no == 270:
+	pages = ['Accounts Setup', 'Accounts', 'Accounting Reports','GeneralLedger','How do I - Accounts','Making Opening Entries',\
+	'Analysis','How do I - CRM','How do I - Inventory','Inventory Setup', 'Stock','HR','HR & Payroll Setup',\
+	'Payroll Setup','Production Setup','Production','Buying','SRM Setup','Contact Page','Forum','Messages','Test Toolbar',\
+	'Trend Analyzer']
+	from webnotes.model import delete_doc
+	sql("delete from `tabPage Visit`")
+	for p in pages:
+		try: delete_doc('Page', p)
+		except: pass
+elif patch_no == 271:
+	# tags patch
+	reload_doc('selling','doctype','sales_order')
+	reload_doc('stock','doctype','delivery_note')
+	sql("delete from tabDocField where fieldname='per_amt_billed' and parent in ('Sales Order', 'Delivery Note')")
+
+	sql("""update `tabSales Order` set delivery_status = if(ifnull(per_delivered,0) < 0.001, 'Not Delivered',
+			if(per_delivered >= 99.99, 'Fully Delivered', 'Partly Delivered'))""")
+	sql("""update `tabSales Order` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
+			if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
+	sql("""update `tabDelivery Note` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
+			if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
+elif patch_no == 272:
+	from webnotes.model import delete_doc
+	try:
+		delete_doc('Search Criteria', '_SRCH00003')
+	except:
+		pass
+	reload_doc('accounts', 'search_criteria', 'purchase_register')
+elif patch_no == 276:
+	from webnotes.model import delete_doc
+	sn = sql("select name from `tabSearch Criteria` where criteria_name = 'Sales Personwise Transaction Summary'")
+	for d in sn:
+		delete_doc('Search Criteria', d[0])
+	reload_doc('selling', 'search_criteria', 'sales_personwise_transaction_summary')
+elif patch_no == 277:
+	webnotes.model.delete_doc('DocType','HomePage Settings')
+	webnotes.model.delete_doc('DocType','Badge Settings')
+	sql("update tabDocType set module='Home' where module in ('Event Updates', 'My Company')")
+	sql("update tabPage set module='Home' where module in ('Event Updates', 'My Company')")
+	sql("update `tabSearch Criteria` set module='Home' where module in ('Event Updates', 'My Company')")
+
+
+	delete_pages = ('Chat User Gallery', 'Badge Info', 'Home', 'Website Setup', 'Test Page', 'Setup Masters', 'Service', 'Selling', 'Sales Reports', 'Organize','My Cart', 'My Activity', 'Manage Users', 'Maintenance', 'Getting Started', 'Gantt Test', 'Custom Reports - Stock', 'Custom Reports - Selling', 'Custom Reports - Production', 'Custom Reports - Payroll', 'Custom Reports - Maintenance', 'Custom Reports - Buying', 'Custom Reports - Accounts', 'CRM Setup', 'CRM Reports')
+	for p in delete_pages:
+	  webnotes.model.delete_doc('Page',p)
+elif patch_no == 278:
+	sql("update tabDocTrigger set method = 'home.update_feed' where method = 'event_updates.update_feed'")
+elif patch_no == 279:
+	dt = ['GL Entry', 'Stock Ledger Entry']
+	for t in dt:
+		rec = sql("select voucher_type, voucher_no, ifnull(is_cancelled, 'No') from `tab%s` where modified >= '2011-06-15 01:00:00' group by voucher_no" % t)
+		for d in rec:
+			sql("update `tab%s` set docstatus = %s where name = '%s'" % (d[0], d[2]=='No' and 1 or 2, d[1]))
+
+	other_dt = ['Enquiry', 'Quotation', 'Sales Order', 'Indent', 'Purchase Order', 'Production Order', 'Customer Issue', 'Installation Note']
+	for dt in other_dt:
+		rec = sql("select name, status from `tab%s` where modified >= '2011-06-15 01:00:00'" % dt)
+		for r in rec:
+			sql("update `tab%s` set docstatus = %s where name = '%s'" % (dt, (r[1] in ['Submitted', 'Closed'] and 1 or r[1]=='Cancelled' and 2 or 0), r[0]))
+elif patch_no == 280:
+	reload_doc('accounts', 'doctype', 'form_16a')
+elif patch_no == 281:
+	dt_list = ['Delivery Note', 'Purchase Receipt']
+	for dt in dt_list:
+		sql("update `tab%s` set status = 'Submitted' where docstatus = 1 and modified >='2011-06-15 01:00:00'" % dt)
+		sql("update `tab%s` set status = 'Cancelled' where docstatus = 2 and modified >='2011-06-15 01:00:00'" % dt)
+elif patch_no == 282:
+	dt_list = ['Enquiry', 'Quotation', 'Sales Order', 'Indent', 'Purchase Order', 'Production Order', 'Customer Issue', 'Installation Note', 'Receivable Voucher', 'Payable Voucher', 'Delivery Note', 'Purchase Receipt', 'Journal Voucher', 'Stock Entry']
+	for d in dt_list:
+		tbl = sql("select options from `tabDocField` where fieldtype = 'Table' and parent = '%s'" % d)
+		for t in tbl:
+			sql("update `tab%s` t1, `tab%s` t2 set t1.docstatus = t2.docstatus where t1.parent = t2.name" % (t[0], d))
+elif patch_no == 283:
+	rec = sql("select voucher_type, voucher_no, ifnull(is_cancelled, 'No') from `tabGL Entry` where modified >= '2011-06-15 01:00:00' order by name ASC")
+	for d in rec:
+		sql("update `tab%s` set docstatus = %s where name = '%s'" % (d[0], d[2]=='No' and 1 or 2, d[1]))
+elif patch_no == 284:
+	reload_doc('support', 'doctype', 'support_ticket')
+	sql("update `tabDocField` set in_filter = 1 where fieldname in ('raised_by', 'subject') and parent = 'Support Ticket'")
+elif patch_no == 286:
+	reload_doc('accounts', 'search_criteria', 'itemwise_sales_register')
+	reload_doc('accounts', 'search_criteria', 'itemwise_purchase_register')
+elif patch_no == 287:
+	sql("update `tabDocField` set no_copy = 1 where fieldname in ('per_received', 'per_billed', 'per_delivered') and parent in ('Purchase Order', 'Purchase Receipt', 'Sales Order', 'Delivery Note')")
+elif patch_no == 288:
+	reload_doc('accounts', 'doctype', 'payable_voucher')
+elif patch_no == 289:
+	sql("update `tabDocType` set subject = 'From %(supplier_name)s worth %(grand_total)s due on %(due_date)s | %(outstanding_amount)s outstanding' where name = 'Payable Voucher'")
+	sql("update `tabDocType` set search_fields = 'status,transaction_date,customer,lead,order_type' where name = 'Quotation'")
+elif patch_no == 290:
+	count = sql("""SELECT * FROM  `tabModule Def`
+		   WHERE `module_name` LIKE 'Home'""")
+	if not count:
+		md = Document('Module Def')
+		md.module_name = 'Home'
+		md.module_label = 'Home'
+		md.save(1)
+elif patch_no == 291:
+	reload_doc('utilities','doctype','rename_tool')
+elif patch_no == 292:
+	reload_doc('accounts', 'search_criteria', 'trial_balance')
+elif patch_no == 293:
+	sql("delete from tabDocField where parent='Account' and fieldname='address'")
+	reload_doc('accounts', 'doctype', 'account')
+elif patch_no == 294:
+	# new account profile fix
+	ul = sql("select name from tabProfile where ifnull(name,'') not in ('Administrator', 'Guest', '')")
+	# if one user and one user has no roles
+	if len(ul)==1 and not sql("select parent from tabUserRole where role='System Manager' and parent=%s", ul[0][0]):
+		get_obj('Setup Control').add_roles(Document('Profile', ul[0][0]))
+elif patch_no == 295:
+	sql("update `tabDocField` set options = 'Delivered\nNot Delivered\nPartly Delivered\nClosed\nNot Applicable' where parent = 'Sales Order' and fieldname = 'delivery_status'")
+	sql("update `tabDocField` set options = 'Billed\nNot Billed\nPartly Billed\nClosed' where parent = 'Sales Order' and fieldname = 'billing_status'")
+elif patch_no == 296:
+	sql("delete from tabDocField where parent='Support Ticket' and fieldname='contact_no'")
+	reload_doc('support', 'doctype', 'support_ticket')
+elif patch_no == 297:
+	reload_doc('hr', 'doctype', 'employee')
+	reload_doc('hr', 'doctype', 'attendance')
+	reload_doc('hr', 'doctype', 'expense_voucher')
+	reload_doc('hr', 'doctype', 'appraisal')
+	reload_doc('hr', 'doctype', 'salary_structure')
+	reload_doc('hr', 'doctype', 'salary_slip')
+elif patch_no == 298:
+	sql("update `tabDocField` set options = 'link:Company' where parent = 'Attendance' and fieldname = 'company'")
+	sql("update `tabDocField` set options = 'link:Company' where parent = 'Expense Voucher' and fieldname = 'company'")
+	sql("update `tabDocField` set options = 'link:Company' where parent = 'Appraisal' and fieldname = 'company'")
+elif patch_no == 299:
+	sql("update `tabDocPerm` set `match` = NULL where parent = 'Employee' and role = 'Employee'")
+elif patch_no == 300:
+	sql("""DELETE FROM `tabSearch Criteria` WHERE name IN
+		   ('sales_register1', 'sales_register2', 'purchase_register1')""")
\ No newline at end of file
diff --git a/patches/patch.py b/patches/patch.py
index 1568469..cf9774b 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -1,7 +1,7 @@
 # REMEMBER to update this
 # ========================
 
-last_patch = 339
+last_patch = 355
 
 #-------------------------------------------
 
@@ -13,1184 +13,9 @@
 	sql = webnotes.conn.sql
 	from webnotes.utils import cint, cstr, flt
 	from webnotes.model.doc import Document
+	from webnotes.model import delete_doc
 
-	if patch_no==33:
-		pass
-	elif patch_no==34:
-		webnotes.conn.sql("update `tabDocField` set options = 'Letter Head', print_hide = 1 where fieldname = 'letter_head' and fieldtype = 'Link'")
-	elif patch_no==35:
-		webnotes.conn.sql("update tabDocType set module = 'Event Updates' where name = 'Feed Control'")
-	elif patch_no==36:
-		# remove delivery note foreign key in Serial Number
-		from webnotes.model.db_schema import DbTable
-		t = DbTable('Serial No')
-		fk_list  = t.get_foreign_keys()
-		for f in fk_list:
-			if f[0]=='delivery_note_no':
-				webnotes.conn.commit()
-				webnotes.conn.sql("alter table `tabSerial No` drop foreign key `%s`" % f[1])
-				webnotes.conn.begin()
-				webnotes.conn.sql("update tabDocField set fieldtype='Data' where fieldname='delivery_note_no' and parent='Serial No' limit 1")
-	elif patch_no==37:
-		import os
-		mod_path = webnotes.defs.modules_path
-		path_list = []
-		for m in os.listdir(mod_path):
-			for t in ['doctype', 'page', 'search_criteria']:
-				dt_path = os.path.join(mod_path, m, t)
-				if os.path.exists(dt_path):
-					for dt in os.listdir(dt_path):
-						if '.' not in dt and os.path.exists(os.path.join(dt_path, dt, dt+ '.txt')):
-							path_list.append(os.path.join(dt_path, dt, dt+ '.txt'))
-
-		for d in path_list:
-			doclist = eval(open(d,'r').read())
-			webnotes.conn.sql("update `tab%s` set module = '%s' where name = '%s'" % (doclist[0]['doctype'], doclist[0]['module'], doclist[0]['name']))
-
-	elif patch_no==38:
-		import webnotes
-		webnotes.conn.set_global("system_message", "System Updates: Hello! You would have noticed some changes on the Home Page. As a part of our commitment to make the system more friendly and social, we have re-designed the feed so that now you will only see feed that is relevant to you (either you have created something or you have been mentioned in the document).<br><br>On the individual listings, you can add tags and also color them!<br><br>You will also get time-to-time updates from our side here. Do keep sending your feedback at support@erpnext.com.")
-		webnotes.conn.set_global("system_message_id", "1")
-
-	elif patch_no == 39:
-		pass
-
-	elif patch_no == 40:
-		import_from_files(record_list=[['material_management','doctype','item']])
-
-	elif patch_no == 42:
-		acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')")
-		for d in acc:
-			sql("update tabAccount set is_pl_account = 'Yes' where lft >= '%s' and rgt <= '%s'" % (d[1], d[2]))
-	elif patch_no == 43:
-		import webnotes.model
-		webnotes.model.delete_doc('Page', 'Module Manager')
-
-	# cleanup of Service, Customer Support, Utilities Modules
-	# -------------------------------------------------------
-	elif patch_no == 44:
-		from webnotes.model import delete_doc
-
-		for dt in sql("select name from tabDocType where module in ('Customer Support')"):
-			delete_doc('DocType', dt[0])
-
-		for dt in sql("select name from `tabSearch Criteria` where module in ('Customer Support')"):
-			delete_doc('Search Criteria', dt[0])
-
-		for dt in sql("select name from tabPage where module in ('Customer Support')"):
-			delete_doc('Page', dt[0])
-
-		# move a couple
-		webnotes.conn.sql("update `tab%s` set module=%s where name=%s" % ('DocType', '%s', '%s'), ('Application Internal', 'Patch Util'))
-		webnotes.conn.sql("update `tab%s` set module=%s where name=%s" % ('DocType', '%s', '%s'), ('Application Internal', 'DocType Property Setter'))
-
-		# remove utilities
-		webnotes.conn.sql('delete from `tabModule Def` where name in ("Customer Support", "Utilities")')
-
-	elif patch_no == 45:
-		webnotes.conn.sql('delete from tabDocField where options="Ticket Response Detail"')
-
-	elif patch_no == 46:
-		import webnotes
-		webnotes.conn.set_global("system_message", "<b>SYSTEM DOWNTIME:</b> Hello! As part of our commitment to keep improving the service, we are planning a scheduled maintenance on our servers for 4 hrs on 16-Jan-2011(Sunday), from 10AM to 2PM. Do keep sending your feedback at support@erpnext.com.")
-		webnotes.conn.set_global("system_message_id", "2")
-
-	elif patch_no == 47:
-		import webnotes
-		webnotes.conn.set_global("system_message", "")
-		webnotes.conn.set_global("system_message_id", "3")
-
-	elif patch_no == 48:
-		webnotes.conn.sql("update tabDocField set options = 'Print Heading' where fieldname = 'select_print_heading'")
-
-	elif patch_no == 49:
-		webnotes.conn.sql("update tabDocType set autoname = '' where name = 'Search Criteria'")
-	elif patch_no == 50:
-		sql("update tabDocField set in_filter = 1 where fieldname in ('cost_center', 'income_account', 'Item Group') and parent = 'RV Detail'")
-	elif patch_no == 51:
-		sql("update tabDocField set options = 'link:Print Heading' where fieldtype = 'Select' and fieldname = 'select_print_heading' and parent = 'POS Setting'")
-	elif patch_no == 52:
-		sql("update tabDocField set print_hide = 1 where fieldname = 'letter_head'")
-	elif patch_no == 53:
-		sql("update tabDocType set search_fields = 'lead_name,lead_owner,status,contact_by,contact_date' where name = 'Lead'")
-	elif patch_no == 54:
-		sql("delete from tabDocField where parent = 'Supplier' and label = 'Supplier Contacts' and fieldtype = 'Section Break'")
-	elif patch_no == 55:
-		sql("commit")
-		try:
-			sql("alter table tabFeed add column `_user_tags` varchar(180)")
-		except Exception, e:
-			if e.args[0]!=1060:
-				raise e
-	elif patch_no == 56:
-		sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'")
-	elif patch_no == 57:
-		import_from_files(record_list=[['selling','doctype','sales_order_detail']])
-
-	elif patch_no == 58:
-		# module def patches
-		sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')")
-		sql("delete from `tabModule Def Item` where doc_type in ('Separator', 'Setup Forms', 'More Reports')")
-		sql("delete from `tabModule Def Item` where doc_name = 'Project Activity'")
-		sql("update `tabModule Def` set module_label = 'People', disabled='No', is_hidden='No' where name = 'My Company'")
-
-		# insert new module items
-		from webnotes.model.doc import make_autoname
-		if not sql("select name from `tabModule Def Item` where parent='Projects' and doc_name='Ticket'"):
-			sql("""insert into `tabModule Def Item`
-				(name, parent, parenttype, parentfield, docstatus, doc_type, doc_name, display_name, idx) values
-				(%s, 'Projects', 'Module Def', 'items', 0, 'Forms', 'Ticket', 'Task', 1)""", make_autoname('MDI.#####'))
-
-		if not sql("select name from `tabModule Def Item` where parent='Projects' and doc_name='Timesheet'"):
-			sql("""insert into `tabModule Def Item`
-				(name, parent, parenttype, parentfield, docstatus, doc_type, doc_name, display_name, idx) values
-				(%s, 'Projects', 'Module Def', 'items', 0, 'Forms', 'Timesheet', 'Timesheet', 2)""", make_autoname('MDI.#####'))
-
-		if not sql("select name from `tabModule Def Item` where parent='Projects' and doc_name='Projects'"):
-			sql("""insert into `tabModule Def Item`
-				(name, parent, parenttype, parentfield, docstatus, doc_type, doc_name, display_name, idx) values
-				(%s, 'Projects', 'Module Def', 'items', 0, 'Pages', 'Projects', 'Gantt Chart', 1)""", make_autoname('MDI.#####'))
-
-	elif patch_no == 59:
-		webnotes.conn.set_value('Control Panel',None,'mail_footer','')
-		webnotes.conn.set_global('global_mail_footer','<div style="margin-top:8px; padding: 8px; font-size: 11px; text-align:right; border-top: 1px solid #AAA">Sent via <a href="https://www.erpnext.com">ERPNext</a></div>')
-	elif patch_no == 60:
-		sql("delete from `tabModule Def Item` where display_name = 'Point of Sales'")
-	elif patch_no == 61:
-		sql("delete from `tabTDS Category Account` where company not in (select name from tabCompany)")
-	elif patch_no == 62:
-		# Import Supplier Quotation
-		import_from_files(record_list=[['srm','doctype','supplier_quotation']])
-
-		# Adding Status Filter
-		sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')")
-		# Import Other Charges
-
-		import_from_files(record_list=[['setup','doctype','other_charges']])
-	elif patch_no == 63:
-		sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'")
-		import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']])
-
-	elif patch_no == 64:
-		sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')")
-		sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')")
-		sql("update tabDocField set `report_hide` = 0 where fieldname in ('email_id','phone_1','fax_1') and parent = 'Customer'")
-	elif patch_no == 65:
-		# Monthly Trend Analyzer <-> Trend Analyzer
-		sql("update `tabSearch Criteria` set criteria_name = 'Trend Analyzer' where criteria_name = 'Monthly Trend Analyzer' and name = 'SRCH/00159'")
-		sql("update `tabModule Def Item` set display_name = 'Trend Analyzer' where parent = 'Analysis' and display_name = 'Monthly Trend Analyzer'")
-	elif patch_no == 66:
-		import webnotes
-		webnotes.conn.set_global("system_message", """<h3>UI Updates</h3>Based on user feedback, we have made a couple of changes in the UI:<ul><li>Sidebar menus are now collapsable</li><li>Forms are now scrollable (we removed the confusing tabs)</li><li>Feed is a lot more descriptive</li></ul>Do send us your feedback!""")
-		webnotes.conn.set_global("system_message_id", "4")
-
-		sql("update `tabModule Def Item` set doc_type = 'Setup Forms' where doc_name in ('TDS Payment', 'TDS Return Acknowledgement', 'Form 16A', 'Period Closing Voucher', 'IT Checklist')")
-		from webnotes.session_cache import clear_cache
-		clear_cache(webnotes.session['user'])
-	elif patch_no == 67:
-		sql("update `tabDocField` set in_filter = 1 where fieldname = 'brand' and parent = 'RV Detail'")
-		sql("delete from `tabModule Def Item` where (display_name = 'Sales Invoice' and parent = 'CRM') or (display_name = 'Purchase Invoice' and parent = 'SRM')")
-	elif patch_no == 68:
-		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['hr','doctype','employee'],['roles','Role','Employee']])
-	elif patch_no == 69:
-		# delete flds from employee master
-		p = get_obj('Patch Util')
-		emp_del_flds = ['month_of_birth']
-		for f in emp_del_flds:
-			p.delete_field('Employee', f)
-
-		sql("Update tabDocField set `default` = 'Active' where fieldname = 'status' and parent = 'Employee'")
-
-		# map parent flds
-		fld_map = ['cell_number', 'personal_email', 'person_to_be_contacted', 'relation', 'emergency_phone_number', 'pan_number', 'passport_number', 'date_of_issue', 'valid_upto', 'place_of_issue', 'marital_status', 'blood_group', 'permanent_accommodation_type']
-
-		emp_prof = sql("select t1.name, t1.employee, t1.permanent_address_line_1, t1.permanent_address_line_2, t1.city1, t1.state1, t1.country1, t1.pin_code1, t1.phn_no1, t1.present_address_line_1, t1.present_address_line_2, t1.city2, t1.state2, t1.country2, t1.pin_code2, t1.phn_no2, t1.fathers_name, t1.fathers_occupation, t1.mothers_name, t1.mothers_occupation, t1.spouses_name, t1.spouses_occupation, t1.height_cms, t1.weight_kgs, t1.allergies, t1.other_medical_concerns, t1.physical_handicap from `tabEmployee Profile` t1, `tabEmployee` t2 where t1.employee = t2.name")
-		for e in emp_prof:
-			prof_obj = get_obj('Employee Profile', e[0])
-			emp_obj = get_obj('Employee', e[1])
-			for d in fld_map:
-				emp_obj.doc.fields[d] = prof_obj.doc.fields[d]
-			emp_obj.doc.current_accommodation_type = prof_obj.doc.present_accommodation_type
-
-			# address
-			per_addr = cstr(e[2]) + '\n' + cstr(e[3]) + '\n' + cstr(e[4]) + '\n' + cstr(e[5]) + ', ' + cstr(e[6]) + '\n' + 'PIN - ' + cstr(e[7]) + '\n' + 'Ph. No' + cstr(e[8])
-			cur_addr = cstr(e[9]) + '\n' + cstr(e[10]) + '\n' + cstr(e[11]) + '\n' + cstr(e[12]) + ', ' + cstr(e[13]) + '\n' + 'PIN - ' + cstr(e[14]) + '\n' + 'Ph. No' + cstr(e[15])
-			emp_obj.doc.permanent_address = per_addr
-			emp_obj.doc.current_address = cur_addr
-			#family
-			fam = "Father's Name: " + cstr(e[16]) + '\n' + "Father's Occupation: " + cstr(e[17]) + '\n' + "Mother's Name: " + cstr(e[18]) + '\n' + "Mother's Occupation: " + cstr(e[19]) + '\n' + "Spouse's Name: " + cstr(e[20]) + '\n' + "Spouse's Occupation: " + cstr(e[21])
-			emp_obj.doc.family_background = fam
-			# health
-			health = 'Height(cms): ' + cstr(e[22]) + '\n' + 'Weight(kgs): ' + cstr(e[23]) + '\n' + 'Allergies: ' +cstr( e[24]) + '\n' + 'Other Medical Concern: ' + cstr(e[25]) + '\n' + 'Physically Handicapped(if any): ' + cstr(e[26])
-			emp_obj.doc.health_details = health
-			emp_obj.doc.save()
-
-
-		# map tables
-		tbl_list = ['Experience In Company Detail', 'Previous Experience Detail', 'Educational Qualifications Detail']
-		for t in tbl_list:
-			sql("update `tab%s` t1, `tabEmployee Profile` t2 set t1.parent = t2.employee, t1.parenttype = 'Employee' where t1.parent = t2.name" % t)
-
-
-		# overwrite idx?????????
-
-
-		# delete emp profile
-		webnotes.model.delete_doc('DocType', 'Employee Profile')
-		for e in emp_prof:
-			webnotes.model.delete_doc('Employee Profile', e[0])
-
-	elif patch_no == 70:
-		# update search criteria module -> System
-		sql("update tabDocType set module='System' where name='Search Criteria'")
-
-		# Cleanups to Contact
-		sql("update tabDocField set fieldtype='Data' where options='Designation' and parent='Contact'")
-		sql("update tabDocField set fieldtype='Data' where options='Department' and parent='Contact'")
-		sql("update tabDocField set depends_on='eval:(cint(doc.is_customer) || cint(doc.is_supplier) || cint(doc.is_sales_partner))' where fieldname='is_primary_contact' and parent='Contact'")
-
-		# import Contact, Employee
-		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['utilities','doctype','contact']])
-
-
-		# remove last_contact_date from Lead
-		sql("delete from tabDocField where fieldname='last_contact_date' and parent='Lead'")
-
-	elif patch_no == 71:
-		# Make Stock Qty and Conversion Factor field editable. Also no need to mention Conversion factor in table can do it directly
-		sql("update `tabDocField` set `permlevel` = 0, `width` = '100px', `trigger` = 'Client' where parent IN ('PO Detail','Purchase Receipt Detail') and fieldname in ('stock_qty','conversion_factor')")
-		sql("update `tabDocField` set `width` = '100px' where parent IN ('PO Detail','Purchase Receipt Detail') and fieldname = 'stock_uom'")
-
-	elif patch_no == 72:
-		# Core Patch
-		# ----------
-
-		from webnotes.modules.import_module import import_from_files
-
-		# import module def
-		import_from_files(record_list = [['core', 'Module Def', 'Core']])
-	elif patch_no == 73:
-		# set module in DocTypes
-		sql("update tabDocType set module='Core' where name in ('DocType', 'DocField', 'DocPerm', 'Role', 'UserRole', 'Profile', 'Print Format', 'DocFormat', 'Control Panel', 'Event', 'Event Role', 'Event User', 'DefaultValue', 'Default Home Page', 'File', 'File Group', 'File Data', 'Letter Head', 'Module Def', 'Module Def Item', 'Module Def Role', 'Page', 'Page Role', 'Search Criteria', 'DocType Label', 'DocType Mapper', 'Field Mapper Detail', 'Table Mapper Detail')")
-
-		# set module in Page
-		sql("update tabPage set module='Core' where name='Login Page'")
-
-		# move file browser to Tools
-		sql("update tabPage set module='Tools' where name='File Browser'")
-		sql("update tabDocType set module='Tools' where name='File Browser Control'")
-		sql("update tabDocType set module='Application Internal' where name='Profile Control'")
-	elif patch_no == 74:
-		p = get_obj('Patch Util')
-		# permission
-		p.delete_permission('Employee', 'Administrator', 0)
-		p.delete_permission('Employee', 'Administrator', 1)
-		p.add_permission('Employee', 'Employee', 0, read = 1, match = 'owner')
-		p.add_permission('Employee', 'Employee', 1, read = 1, match = 'owner')
-		sql("delete from `tabDocField` where parent = 'Employee' and label = 'Payroll Rule'")
-	elif patch_no == 75:
-		#sal structure patch
-		# import
-		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr','doctype','earning_detail'],['hr','doctype','deduction_detail']])
-	elif patch_no == 76:
-		# property
-		p = get_obj('Patch Util')
-		p.set_field_property('Salary Structure', 'is_active', 'default', 'Yes')
-		p.set_field_property('Salary Structure', 'ctc', 'reqd', '1')
-		p.set_field_property('Earning Detail', 'modified_value', 'width', '')
-		p.set_field_property('Earning Detail', 'modified_value', 'trigger', 'Client')
-		p.set_field_property('Deduction Detail', 'd_modified_amt', 'width', '')
-		p.set_field_property('Earning Detail', 'd_modified_amt', 'trigger', 'Client')
-		sql("Update tabDocField set `description` = 'You can create more earning and deduction type from Setup --> HR' where label = 'Earning & Deduction' and parent = 'Salary Structure' and fieldtype = 'Section Break'")
-
-		# delete
-		sql("update `tabSalary Structure` set net_pay = total")
-		sql("delete from tabDocField where label in ('LWP Help', 'Calculate Total', 'Total') and parent = 'Salary Structure'")
-		sql("delete from tabDocPerm where parent in ('Earning Detail', 'Deduction Detail')")
-
-
-		# permission
-		p.delete_permission('Salary Structure', 'Administrator', 0)
-		p.delete_permission('Salary Structure', 'Administrator', 1)
-		p.add_permission('Salary Structure', 'Employee', 0, read = 1, match = 'owner')
-		p.add_permission('Salary Structure', 'Employee', 1, read = 1, match = 'owner')
-	elif patch_no == 77:
-		# sal slip patch
-		# import
-		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['hr','doctype','salary_slip'], ['hr','doctype','ss_earning_detail'],['hr','doctype','ss_deduction_detail'], ['mapper', 'DocType Mapper', 'Salary Structure-Salary Slip']])
-	elif patch_no == 78:
-		p = get_obj('Patch Util')
-		# delete
-		sql("update `tabSalary Slip` set leave_encashment_amount = encashment_amount")
-		p.delete_field('Salary Slip', 'encashment_amount')
-		p.delete_field('Salary Slip', 'year')
-		p.delete_field('Salary Slip', 'flag')
-		sql("delete from tabDocField where label = 'Process Payroll' and parent = 'Salary Slip'")
-
-		# field property
-		p.set_field_property('Salary Slip', 'bank_name', 'permlevel', '1')
-		p.set_field_property('Salary Slip', 'leave_without_pay', 'permlevel', '0')
-		p.set_field_property('Salary Slip', 'leave_without_pay', 'trigger', 'Client')
-		p.set_field_property('SS Earning Detail', 'e_type', 'permlevel', '0')
-		p.set_field_property('SS Earning Detail', 'e_type', 'fieldtype', 'Link')
-		p.set_field_property('SS Earning Detail', 'e_type', 'options', 'Earning Type')
-		p.set_field_property('SS Deduction Detail', 'd_type', 'permlevel', '0')
-		p.set_field_property('SS Deduction Detail', 'd_type', 'fieldtype', 'Link')
-		p.set_field_property('SS Deduction Detail', 'd_type', 'options', 'Deduction Type')
-		sql("update `tabSS Earning Detail` set e_modified_amount = e_amount")
-		sql("update `tabSS Deduction Detail` set d_modified_amount = d_amount")
-
-		# permission
-		p.delete_permission('Salary Slip', 'Administrator', 0)
-		p.delete_permission('Salary Slip', 'Administrator', 1)
-		p.add_permission('Salary Slip', 'Employee', 0, read = 1, match = 'owner')
-		p.add_permission('Salary Slip', 'Employee', 1, read = 1, match = 'owner')
-	elif patch_no == 79:
-		# Import Modules
-		import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','HR']])
-	elif patch_no == 80:
-		# Holiday List
-		sql("update `tabHoliday List Detail` set description = holiday_name")
-		sql("delete from tabDocField where parent = 'Holiday List Detail' and fieldname = 'holiday_name'")
-		sql("update tabDocField set fieldtype = 'Select', options = 'link:Fiscal Year' where parent = 'Holiday List' and fieldname = 'fiscal_year'")
-		sql("delete from tabDocPerm where role in ('Administrator','HR User') and parent = 'Holiday List'")
-
-		# Leave Control Panel
-		# --------------------
-		sql("delete from `tabDocField` where parent = 'Leave Control Panel' and label in ('Leave Control Panel','Allocation Details') and fieldtype = 'Section Break'")
-		sql("delete from tabDocField where parent = 'Leave Control Panel' and fieldname in ('col_brk3','allocation_type','col_brk2','from_date','to_date','leave_transaction_type','posting_date')")
-		sql("update tabDocField set fieldtype = 'Select', options = 'link:Fiscal Year' where parent = 'Leave Control Panel' and fieldname = 'fiscal_year'")
-		sql("update tabDocField set fieldtype = 'Select', options = 'link:Leave Type' where parent = 'Leave Control Panel' and fieldname = 'leave_type'")
-		sql("update tabDocField set reqd = 1 where parent = 'Leave Control Panel' and fieldname = 'no_of_days'")
-
-		# Leave Application
-		# ------------------
-		for d in sql("select * from `tabLeave Transaction` where leave_transaction_type = 'Deduction' and ifnull(deduction_type, '') = 'Leave'", as_dict = 1):
-			lp = Document('Leave Application')
-			lp.employee = d['employee']
-			lp.leave_type = d['leave_type']
-			lp.posting_date = d['date']
-			lp.fiscal_year = d['fiscal_year']
-			lp.leave_balance = d['pre_balance']
-			lp.half_day = d['half_day']
-			lp.from_date = d['from_date']
-			lp.to_date = d['to_date']
-			lp.total_leave_days = d['total_leave']
-			lp.description = d['reason']
-			lp.docstatus = cint(d['docstatus'])
-			lp.save(1)
-
-		# Leave Allocation
-		# -----------------
-		for d in sql("select * from `tabLeave Transaction` where leave_transaction_type = 'Allocation'", as_dict = 1):
-			la = Document('Leave Allocation')
-			la.employee = d['employee']
-			la.leave_type = d['leave_type']
-			la.posting_date = d['date']
-			la.fiscal_year = d['fiscal_year']
-			la.new_leaves_allocated = d['total_leave']
-			la.total_leaves_allocated = d['total_leave']
-			la.description = d['reason']
-			la.docstatus = cint(d['docstatus'])
-			la.save(1)
-
-		# Payroll Module Def
-		# -------------------
-		sql("delete from `tabModule Def Item` where doc_name = 'Leave Transaction' and display_name = 'Leave Transaction' and parent = 'Payroll' and doc_type = 'Forms'")
-
-	elif patch_no == 81:
-		# Import Modules
-		import_from_files(record_list=[['hr','Module Def','HR']])
-	elif patch_no == 82:
-		sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'")
-		sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'")
-	elif patch_no == 83:
-		# delete leave transaction
-		webnotes.conn.sql("set foreign_key_checks=0")
-		sql("delete from `tabLeave Transaction`")
-		import webnotes.model
-		webnotes.model.delete_doc('DocType','Badge Settings Detail')
-		webnotes.model.delete_doc('DocType','Leave Transaction')
-		webnotes.conn.sql("set foreign_key_checks=1")
-	elif patch_no == 84:
-		p = get_obj('Patch Util')
-		p.set_field_property('SS Earning Detail', 'e_amount', 'permlevel', '1')
-		p.set_field_property('SS Deduction Detail', 'd_amount', 'permlevel', '1')
-	elif patch_no == 85:
-		# permission
-		p = get_obj('Patch Util')
-		p.add_permission('Leave Application', 'Employee', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1, match = 'owner')
-		p.add_permission('Leave Application', 'Employee', 1, read = 1, match = 'owner')
-		p.add_permission('Leave Allocation', 'HR User', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1, match = 'owner')
-		p.add_permission('Leave Allocation', 'HR User', 1, read = 1)
-		sql("update tabDocPerm set `match` = '' where parent = 'Leave Application' and role = 'HR User'")
-	elif patch_no == 86:
-		# Import Modules
-		import_from_files(record_list=[['hr','doctype','leave_type']])
-	elif patch_no == 87:
-		sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'")
-	elif patch_no == 88:
-		# Import Modules
-		import_from_files(record_list=[['hr','doctype','leave_allocation']])
-
-	elif patch_no == 89:
-		sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'")
-		sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'")
-	elif patch_no == 90:
-		sql("update `tabLeave Allocation` set docstatus = 1")
-	elif patch_no == 91:
-		import webnotes
-		webnotes.conn.set_global("system_message", """<h3>System Updates</h3>Based on user feedback, we have cleaned up HR module (Partly):<ul><li>Employee and Employee Profile are merged into a single document</li><li>Salary Structure and Salary Slip are now more user friendly</li><li>Leave Transaction document is now divided into 2 documents Leave Application and Leave Allocation</li></ul>We will work on Reports, Attendance and other documents of Payroll module next week<br><br> Do send us your feedback!""")
-		webnotes.conn.set_global("system_message_id", "5")
-	elif patch_no == 92:
-		sql("update tabDocField set label = 'Get Charges' where parent IN ('Sales Order','Delivery Note','Receivable Voucher') and label = 'Get Other Charges' and fieldtype = 'Button'")
-		# Automated Other Charges Calculation basis
-		sql("update tabDocField set options = '', `trigger` = 'Client' where parent IN ('Quotation','Sales Order','Delivery Note','Receivable Voucher') and label = 'Get Charges' and fieldtype = 'Button'")
-	elif patch_no == 93:
-		sql("update `tabTable Mapper Detail` set validation_logic = 'qty > ifnull(billed_qty,0) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail'")
-		sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'")
-	elif patch_no == 94:
-		import_from_files(record_list=[['selling','doctype','sms_center']])
-	elif patch_no == 95:
-		import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']])
-	elif patch_no == 96:
-		sql("delete from `tabModule Def Item` where doc_type = 'Reports' and display_name = 'Cenvat Credit - Input or Capital Goods' and parent = 'Accounts'")
-	elif patch_no == 97:
-		sql("update tabFeed set doc_label = 'Feed', doc_name = name where ifnull(doc_name,'') = '' and ifnull(doc_label,'') = ''")
-	elif patch_no == 98:
-		import_from_files(record_list=[['accounts','doctype','payable_voucher']])
-	elif patch_no == 99:
-		import_from_files(record_list=[['accounts','doctype','account']])
-	elif patch_no == 100:
-		p = get_obj('Patch Util')
-		p.set_field_property('Account', 'level', 'hidden', '1')
-		p.set_field_property('Account', 'level', 'print_hide', '1')
-		p.set_field_property('Account', 'account_type', 'search_index', '0')
-		p.set_field_property('TDS Detail', 'tds_category', 'width', '150px')
-		p.set_field_property('TDS Detail', 'special_tds_rate_applicable', 'width', '150px')
-		p.set_field_property('TDS Detail', 'special_tds_rate', 'width', '150px')
-		p.set_field_property('TDS Detail', 'special_tds_limit', 'width', '150px')
-	elif patch_no == 101:
-		# Leave Application Details and Leave Allocation Details
-		sql("update tabDocField set search_index = 1, in_filter = 1 where fieldname in ('employee','leave_type','fiscal_year') and parent in ('Leave Application','Leave Allocation')")
-		get_obj('DocType','Leave Application').doc.save()
-		get_obj('DocType','Leave Allocation').doc.save()
-	elif patch_no == 102:
-		# make item description field editable in production order
-		sql("update tabDocField set permlevel = 0 where fieldname = 'description' and parent = 'Production Order'")
-	elif patch_no == 103:
-		sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'")
-	elif patch_no == 104:
-		import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','HR'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']])
-
-	elif patch_no == 105:
-		# Employee Leave Balance
-		sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')")
-		# Update Search Fields
-		sql("update tabDocType set search_fields = 'employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'")
-		sql("update tabDocType set search_fields = 'employee,employee_name,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'")
-	elif patch_no == 106:
-		for d in sql("select name,employee,employee_name from `tabLeave Allocation`"):
-			if not cstr(d[2]):
-				sql("update `tabLeave Allocation` set employee_name = '%s' where name = '%s'" % (webnotes.conn.get_value('Employee',cstr(d[1]),'employee_name'), cstr(d[0])))
-		for d in sql("select name,employee,employee_name from `tabLeave Application`"):
-			if not cstr(d[2]):
-				sql("update `tabLeave Application` set employee_name = '%s' where name = '%s'" % (webnotes.conn.get_value('Employee',cstr(d[1]),'employee_name'), cstr(d[0])))
-	elif patch_no == 107:
-		sql("delete from `tabDocField` where fieldname = 'fiscal_year' and parent = 'Employee'")
-	elif patch_no == 108:
-		import_from_files(record_list=[['hr','search_criteria','srch_std_00013']])
-	elif patch_no == 109:
-		import_from_files(record_list=[['hr','search_criteria','srch_std_00015']])
-	elif patch_no == 110:
-		import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr', 'doctype', 'salary_slip']])
-	elif patch_no == 111:
-		sql("update tabDocType set search_fields = 'transfer_date, from_warehouse, to_warehouse, purpose, remarks' where name = 'Stock Entry'")
-	elif patch_no == 112:
-		sql("delete from tabDocField where label = 'Get Other Charges' and fieldtype = 'Button' and parent = 'Receivable Voucher'")
-	elif patch_no == 113:
-		sql("update tabDocField set reqd = 1 where parent = 'Customer' and fieldname = 'phone_1'")
-	elif patch_no == 114:
-		for d in sql("select name, master_name, credit_days, credit_limit from tabAccount where master_type = 'Customer'"):
-			if cstr(d[1]):
-				days, limit = cint(d[2]), flt(d[3])
-				cust_det = sql("select credit_days, credit_limit from tabCustomer where name = '%s'" % (cstr(d[1])))
-				if not days: days = cust_det and cint(cust_det[0][0]) or 0
-				if not limit: limit = cust_det and flt(cust_det[0][1]) or 0
-				sql("COMMIT")
-				sql("START TRANSACTION")
-				sql("update tabAccount set credit_days = '%s', credit_limit = '%s' where name = '%s'" % (days, limit, cstr(d[0])))
-				sql("COMMIT")
-
-	elif patch_no == 115:
-		# patch for timesheet cleanup
-		from webnotes.model import delete_doc
-		delete_doc('DocType', 'Timesheet Detail')
-
-		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list = [['Projects', 'DocType', 'Timesheet'], ['Projects', 'DocType', 'Timesheet Detail'], ['Projects', 'DocType', 'Activity Type']])
-
-	elif patch_no == 116:
-		# again!
-		from webnotes.model import delete_doc
-		delete_doc('DocType', 'Timesheet Detail')
-
-		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list = [['Projects', 'DocType', 'Timesheet Detail']])
-	elif patch_no == 117:
-		op = '\n' + 'Walk In'
-		sql("update `tabDocField` set `options` = concat(options, %s) where parent = 'Enquiry' and fieldname = 'source' and options not like '%%Walk%%'", op)
-	elif patch_no == 118:
-		from webnotes.utils import get_defaults
-		ss = sql("select name, net_pay from `tabSalary Slip`")
-		for d in ss:
-			if d[1]:
-				w = get_obj('Sales Common').get_total_in_words(get_defaults()['currency'], d[1])
-				sql("update `tabSalary Slip` set net_pay_in_words = '%s' where name = '%s'" % (w, d[0]))
-	elif patch_no == 119:
-		sql("update tabDocType set in_create = 1 where name = 'Profile'")
-	elif patch_no == 120:
-		sql("update tabDocField set permlevel = 0 where parent = 'Sales and Purchase Return Wizard' and fieldname = 'return_date'")
-	elif patch_no == 121:
-		import_from_files(record_list = [['CRM', 'DocType', 'Return Detail'], ['Material Management', 'DocType', 'Sales and Purchase Return Wizard']])
-	elif patch_no == 122:
-		sql("delete from tabDocField where (fieldname = 'serial_no' or label = 'Warrany Status') and parent = 'Sales Order'")
-	elif patch_no == 123:
-		import_from_files(record_list = [['CRM', 'Module Def', 'CRM'], ['CRM', 'Search Criteria', 'STDSRCH/00004']])
-	elif patch_no == 124:
-		import webnotes
-		webnotes.conn.set_global("system_message", """<h3>Updates(New)</h3>We have added a new report in the Selling Module.<br><br><b>Sales Personwise Transaction Summary: </b>In this report you can see sales person's contribution in a particular order, delivery or invoice. You can select voucher type in "Based On" filter.<br><br> Do send us your feedback!""")
-		webnotes.conn.set_global("system_message_id", "5")
-	elif patch_no == 125:
-		import_from_files(record_list = [['Material Management', 'DocType', 'Delivery Note']])
-	elif patch_no == 126:
-		sql("delete from tabDocField where parent = 'Delivery Note' and label in ('Make Sales Invoice', 'Make Installation Note', 'Intro Note')")
-	elif patch_no == 127:
-		sql("delete from tabDocPerm where role = 'All' and parent = 'Expense Voucher' and (permlevel = 0 or permlevel = 2)")
-		p = get_obj('Patch Util')
-		p.add_permission('Expense Voucher', 'Employee', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1, match = 'owner')
-		p.add_permission('Expense Voucher', 'HR Manager', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1)
-		p.add_permission('Expense Voucher', 'HR User', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1)
-	elif patch_no == 128:
-		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['selling','doctype','sales_order'], ['selling','doctype','sales_order_detail'],  ['stock','doctype','delivery_note'], ['stock','doctype','delivery_note_detail']])
-	elif patch_no == 129:
-		sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail' and to_table = 'RV Detail'")
-		sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Delivery Note-Receivable Voucher' and from_table = 'Delivery Note Detail' and to_table = 'RV Detail'")
-	elif patch_no == 130:
-		# update from rv
-		from webnotes.model.code import get_obj
-		from webnotes.utils import cstr
-		for d in sql("select name, docstatus from `tabReceivable Voucher` where ifnull(docstatus,0) != 0"):
-			sql("COMMIT")
-			sql("START TRANSACTION")
-			try:
-				obj = get_obj('Receivable Voucher', cstr(d[0]), with_children = 1)
-				is_submit = 1
-				if cint(d[1]) == 2: is_submit = 0
-				get_obj('Sales Common').update_prevdoc_detail(is_submit, obj)
-			except:
-				pass
-			sql("COMMIT")
-
-		# update from dn
-		from webnotes.model.code import get_obj
-		for d in sql("select name, docstatus from `tabDelivery Note` where ifnull(docstatus,0) != 0"):
-			sql("COMMIT")
-			sql("START TRANSACTION")
-			try:
-				obj = get_obj('Delivery Note', cstr(d[0]), with_children = 1)
-				is_submit = 1
-				if cint(d[1]) == 2: is_submit = 0
-				get_obj('Sales Common').update_prevdoc_detail(is_submit, obj)
-			except:
-				pass
-			sql("COMMIT")
-	elif patch_no == 131:
-		sql("update `tabDocType` set allow_trash = 1 where name = 'Purchase Other Charges'")
-		sql("update tabDocPerm set `cancel` = 1 where parent = 'Purchase Other Charges' and permlevel = 0 and `read` = 1 and `write` = 1")
-	elif patch_no == 132:
-		sql("update tabDocField set no_copy = 0 where parent = 'Receivable Voucher' and fieldname = 'customer'")
-	elif patch_no == 133:
-		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['accounts','doctype','receivable_voucher']])
-	elif patch_no == 134:
-		sql("update tabDocField set no_copy = 1 where parent = 'Receivable Voucher' and fieldname = 'posting_time'")
-	elif patch_no == 135:
-		sql("update tabDocField set `default` = 'Today' where parent = 'Receivable Voucher' and fieldname = 'due_date'")
-	elif patch_no == 136:
-		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['accounts','doctype','rv_detail']])
-	elif patch_no == 137:
-		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['setup','doctype','price_list']])
-	elif patch_no == 138:
-		sql("update `tabDocType` set allow_attach = 1 where name = 'Price List'")
-	elif patch_no == 139:
-		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']])
-	elif patch_no == 140:
-		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['accounts','doctype','rv_detail']])
-	elif patch_no == 141:
-		sql("delete from tabDocField where (fieldname = 'letter_head' or label = 'Letter Head') and parent = 'Company'")
-	elif patch_no == 142:
-		# fixes to letter head and personalize
-		from webnotes.model import delete_doc
-
-		delete_doc('DocType', 'Batch Settings')
-		delete_doc('DocType', 'Batch Settings Detail')
-		delete_doc('DocType', 'Social Badge')
-		delete_doc('Page', 'Personalize Page')
-		delete_doc('DocType', 'Personalize Page Control')
-
-		import_from_files(record_list=[['core','doctype','letter_head'], ['setup','doctype','personalize']])
-	elif patch_no == 144:
-		webnotes.conn.sql("update tabDocField set fieldtype='Code' where parent='Letter Head' and fieldname='content'")
-	elif patch_no == 145:
-		sql("update `tabDocField` set permlevel=1 where fieldname = 'group_or_ledger' and parent = 'Account'")
-	elif patch_no == 146:
-		import_from_files(record_list=[['accounts','doctype','account']])
-	elif patch_no == 147:
-		import_from_files(record_list=[['mapper', 'DocType Mapper', 'Purchase Order-Payable Voucher'], ['mapper', 'DocType Mapper', 'Purchase Receipt-Payable Voucher'], ['mapper', 'DocType Mapper', 'Purchase Order-Purchase Receipt']])
-	elif patch_no == 148:
-		sql("delete from `tabDocField` where (fieldname = 'account_balances' or label = 'Balances') and parent = 'Account'")
-		sql("update tabDocType set istable = 0, section_style = 'Simple', search_fields = 'account, period, fiscal_year, balance' where name = 'Account Balance'")
-		sql("update tabDocField set permlevel = 0 where parent = 'Account Balance'")
-		p = get_obj('Patch Util')
-		p.add_permission('Account Balance', 'Accounts User', 0, read = 1)
-		p.add_permission('Account Balance', 'Accounts Manager', 0, read = 1)
-		import_from_files(record_list=[['accounts','doctype','account_balance']])
-	elif patch_no == 149:
-		sql("update `tabAccount Balance` set account = parent")
-	elif patch_no == 150:
-		sql("update tabDocField set in_filter = 1, search_index = 1 where parent = 'Account Balance' and fieldname in ('account', 'period', 'fiscal_year', 'start_date', 'end_date')")
-		ac_bal = Document("DocType", "Account Balance")
-		ac_bal.save()
-	elif patch_no == 151:
-		sql("delete from tabDocField where label = 'Add / Manage Contacts' and fieldtype = 'Button' and parent = 'Customer'")
-		sql("delete from `tabField Mapper Detail` where parent = 'Sales Order-Delivery Note' and from_field = 'note' and to_field = 'note'")
-	elif patch_no == 152:
-		import_from_files(record_list=[['selling','doctype','sales_order'], ['stock','doctype','delivery_note'], ['selling','doctype','customer'], ['selling','doctype','shipping_address'], ['mapper', 'DocType Mapper', 'Sales Order-Delivery Note']])
-	elif patch_no == 153:
-		sql("delete from `tabDocField` where fieldname = 'sales_person' and parent = 'Customer'")
-	elif patch_no == 154:
-		import_from_files(record_list=[['stock','doctype','serial_no'], ['support','doctype','customer_issue']])
-	elif patch_no == 155:
-		for d in sql("select name, item_code from `tabSerial No`"):
-			sql("COMMIT")
-			sql("START TRANSACTION")
-			sql("update `tabSerial No` set item_name = '%s' where name = '%s'" % (webnotes.conn.get_value('Item',cstr(d[1]),'item_name'), cstr(d[0])))
-			sql("COMMIT")
-	elif patch_no == 156:
-		sql("update tabDocField set fieldtype = 'Code' where fieldname = 'html' and parent = 'Print Format'")
-	elif patch_no == 157:
-		import_from_files(record_list=[['accounts', 'doctype', 'journal_voucher'], ['accounts', 'Print Format', 'Payment Receipt Voucher'], ['accounts', 'Print Format', 'Cheque Printing Format']])
-	elif patch_no == 158:
-		from webnotes.model.doc import addchild
-		sql("delete from tabDocField where parent = 'Customer Issue' and fieldname = 'customer_group'")
-	elif patch_no == 159:
-		sql("update tabAccount set account_type = 'Chargeable' where account_name in ('Advertising and Publicity', 'Freight & Forwarding Charges', 'Miscellaneous Expenses', 'Sales Promotion Expenses')")
-	elif patch_no == 160:
-		sql("update `tabDocType` set search_fields = 'posting_date, due_date, debit_to, fiscal_year, grand_total, outstanding_amount' where name = 'Receivable Voucher'")
-		sql("update `tabDocType` set search_fields = 'posting_date, credit_to, fiscal_year, bill_no, grand_total, outstanding_amount' where name = 'Payable Voucher'")
-	elif patch_no == 161:
-		sql("update tabDocType set autoname = 'field:batch_id' where name = 'Batch'")
-		sql("update tabDocField set no_copy = 1 where parent = 'Batch' and fieldname = 'batch_id'")
-	elif patch_no == 162:
-		import_from_files(record_list=[['selling', 'search_criteria', 'sales_order_pending_items1']])
-	elif patch_no == 163:
-		sql("delete from `tabModule Def Item` where display_name = 'Sales Orderwise Pending Packing Item Summary' and parent = 'CRM'")
-		import_from_files(record_list=[['selling', 'search_criteria', 'sales_orderwise_pending_qty_to_deliver'], ['selling', 'search_criteria', 'sales_orderwise_pending_amount_to_bill'], ['selling', 'search_criteria', 'delivered_items_to_be_install']])
-	elif patch_no == 164:
-		import_from_files(record_list=[['buying', 'search_criteria', 'pending_po_items_to_receive'], ['buying', 'search_criteria', 'pending_po_items_to_bill']])
-	elif patch_no == 165:
-		pass
-	elif patch_no == 166:
-		import_from_files(record_list=[['buying', 'doctype', 'purchase_order']])
-	elif patch_no == 167:
-		if webnotes.conn.get_value('Control Panel', None, 'account_id') not in ['ax0000956', 'ax0001338']:
-			sql("delete from tabDocField where parent = 'Purchase Order' and fieldname in ('test_certificate_required', 'estimated_cost', 'transport', 'vendor_reference', 'transportation_required', 'mode_of_dispatch', 'octroi')")
-	elif patch_no == 168:
-		sql("update tabDocField set fieldtype = 'Data', options = 'Suggest' where fieldname = 'bank_name' and parent = 'Employee'")
-	elif patch_no == 169:
-		import_from_files(record_list=[['accounts', 'doctype', 'pv_detail'], ['accounts', 'doctype', 'rv_detail']])
-	elif patch_no == 170:
-		import_from_files(record_list=[['mapper', 'DocType Mapper', 'Delivery Note-Receivable Voucher']])
-	elif patch_no == 171:
-		import_from_files(record_list=[['buying', 'doctype', 'supplier']])
-	elif patch_no == 172:
-		import webnotes
-		webnotes.conn.set_global("system_message", """<b>Welcome to the new financial year 2011-2012 !!! </b><br><br> So obvious question in your mind is how to start Entries in the New Fiscal Year in ERPNext? What are the changes you have to make in the system? <br>We have made some guidelines regarding the basic steps you should follow. Please click on link <a href='http://erpnext.blogspot.com/2011/03/how-to-start-entries-in-new-fiscal-year.html'>How to start Entries in the New Fiscal Year in ERPNext?</a>""")
-		webnotes.conn.set_global("system_message_id", "6")
-	elif patch_no == 173:
-		sql("delete from tabDocField where label = 'Get Other Charges' and parent = 'Delivery Note'")
-		sql("update tabDocField set reqd = 0 where fieldname = 'posting_time' and parent = 'Serial No'")
-	elif patch_no == 174:
-		c = sql("select count(name) from `tabField Mapper Detail` where parent = 'Delivery Note-Receivable Voucher' and from_field = 'description' and to_field = 'description' and match_id = 2")
-		if c and cint(c[0][0]) > 1:
-			sql("update `tabField Mapper Detail` set match_id = 1 where parent = 'Delivery Note-Receivable Voucher' and from_field = 'description' and to_field = 'description' limit 1")
-	elif patch_no == 175:
-		import webnotes
-		webnotes.conn.set_global("system_message", """If your financial year starts on 1st April then you have make some changes in the system to start entry in the new year.<br>We have made some guidelines regarding the basic steps you should follow. Please click on link <a href='http://erpnext.blogspot.com/2011/03/how-to-start-entries-in-new-fiscal-year.html'>How to start Entries in the New Fiscal Year in ERPNext?</a>""")
-		webnotes.conn.set_global("system_message_id", "6")
-	elif patch_no == 176:
-		sql("update tabDocPerm set role='Guest', `write`=0, `create`=0 where role='Administrator' and parent='Notification Control' limit 1")
-	elif patch_no == 177:
-		sql("delete from `tabDocField` where label = 'Next Steps' and parent = 'Purchase Order'")
-		sql("update tabDocField set options = 'Material Issue\nMaterial Receipt\nMaterial Transfer\nSales Return\nPurchase Return\nSubcontracting\nProduction Order' where parent = 'Stock Entry' and fieldname = 'purpose'")
-	elif patch_no == 178:
-		import_from_files(record_list = [['hr', 'doctype', 'salary_slip']])
-	elif patch_no == 179:
-		from webnotes.utils import get_defaults
-		sl = sql("select name, net_pay from `tabSalary Slip`")
-		for d in sl:
-			in_words = get_obj('Sales Common').get_total_in_words(get_defaults()['currency'], round(flt(d[1])))
-			sql("update `tabSalary Slip` set rounded_total = '%s', total_in_words = '%s' where name = '%s'" % (round(flt(d[1])), in_words, d[0]))
-	elif patch_no == 180:
-		sql("delete from tabDocField where parent = 'Salary Slip' and fieldname = 'net_pay_in_words'")
-	elif patch_no == 181:
-		import_from_files(record_list = [['accounts', 'doctype', 'journal_voucher']])
-	elif patch_no == 182:
-		sql("update tabDocField set options = CONCAT(options, '\nWrite Off Voucher') where fieldname = 'voucher_type' and parent = 'Journal Voucher'")
-	elif patch_no == 183:
-		sql("delete from tabDocField where label = 'SMS' and fieldtype = 'Section Break' and parent in  ('Enquiry', 'Lead', 'Sales Order', 'Delivery Note')")
-	elif patch_no == 184:
-		from webnotes.model import delete_doc
-		delete_doc('DocType', 'Feed')
-		delete_doc('DocType', 'Feed List')
-		delete_doc('DocType', 'Feed Control')
-
-		# add trigger
-		from webnotes.model.triggers import add_trigger
-		add_trigger('*','*','*','event_updates.update_feed')
-
-		webnotes.conn.commit()
-
-		try:
-			sql("drop table tabFeed")
-			sql("drop table `tabFeed List`")
-		except: pass
-
-		# import
-		from webnotes.modules.module_manager import reload_doc
-		reload_doc('event_updates','doctype','feed')
-	elif patch_no==185:
-		sql("delete from tabDocTrigger where method = 'webnotes.widgets.follow.on_docsave'")
-	elif patch_no==186:
-		from webnotes.modules.module_manager import reload_doc
-		reload_doc('event_updates','doctype','feed')
-	elif patch_no == 187:
-		sql("update tabDocType set autoname = '' where name = 'QA Inspection Report'")
-	elif patch_no == 188:
-		import_from_files(record_list = [['buying', 'doctype', 'qa_inspection_report']])
-	elif patch_no == 189:
-		sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('entries', 'other_charges') and parent = 'Receivable Voucher'")
-	elif patch_no == 190:
-		sql("update tabDocField set permlevel=0 where fieldname = 'fiscal_year' and parent = 'Stock Entry'")
-	elif patch_no == 191:
-		import_from_files(record_list = [['support', 'doctype', 'customer_issue']])
-	elif patch_no == 192:
-		sql("delete from `tabModule Def Item` where parent = 'Material Management' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'")
-		import_from_files(record_list = [['buying', 'Module Def', 'SRM']])
-	elif patch_no == 193:
-		sql("update tabDocField set fieldtype='Button', `trigger`='Client' where parent='Letter Head' and fieldname='set_from_image'")
-	elif patch_no == 194:
-		sql("delete from `tabModule Def Item` where parent = 'SRM' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'")
-		import_from_files(record_list = [['stock', 'Module Def', 'Material Management']])
-	elif patch_no == 195:
-		from webnotes.modules.module_manager import reload_doc
-		reload_doc('setup','doctype','manage_account')
-	elif patch_no == 196:
-		sql("update `tabModule Def` set module_page = null where name = 'Material Management'")
-	elif patch_no == 197:
-		sql("update `tabDocField` set permlevel = 0, in_filter = 1 where fieldname = 'warranty_amc_status' and parent = 'Customer Issue'")
-		import_from_files(record_list = [['support', 'doctype', 'customer_issue']])
-	elif patch_no == 198:
-		sql("delete from `tabDocField` where (label in ('SMS', 'Send SMS') or fieldname in ('message', 'customer_mobile_no')) and parent in ('Quoattion', 'Sales Order', 'Delivery Note', 'Receivable Voucher')")
-		sql("delete from `tabDocField` where label in ('SMS', 'Send SMS') and parent = 'Purchase Order'")
-		sql("delete from `tabDocField` where (label in ('Send SMS', 'SMS Html') or fieldname in ('sms_message', 'lead_sms_detail', 'enquiry_sms_detail')) and parent in ('Lead', 'Enquiry')")
-		from webnotes.model import delete_doc
-		delete_doc('DocType', 'Lead SMS Detail')
-		delete_doc('DocType', 'Enquiry SMS Detail')
-	elif patch_no == 199:
-		sql("update tabDocField set reqd = 0 where parent = 'Attendance' and fieldname = 'shifts'")
-	elif patch_no == 200:
-		reload_doc('event_updates','page','profile_settings')
-	elif patch_no == 201:
-		reload_doc('setup','doctype','price_list')
-	elif patch_no == 202:
-		name1 = sql("select name from tabDocField where parent='Price List' and label='Clear Prices' limit 1,1")
-		name2 = sql("select name from tabDocField where parent='Price List' and label='Update Prices' limit 1,1")
-		if name1:
-			sql("delete from tabDocField where name=%s limit 1", name1[0][0])
-		if name2:
-			sql("delete from tabDocField where name=%s limit 1", name2[0][0])
-	elif patch_no == 203:
-		sql("delete from tabDocField where parent = 'Company' and fieldname = 'default_salary_account' limit 1")
-	elif patch_no == 204:
-		sql("delete from tabDocField where parent = 'Company' and fieldname = 'default_salary_acount' limit 1")
-	elif patch_no == 205:
-		sql("update `tabDocField` set `default` = '' where fieldname = 'naming_series' and parent = 'Installation Note'")
-	elif patch_no == 206:
-		reload_doc('selling','doctype','installation_note')
-	elif patch_no == 207:
-		import_from_files(record_list = [['setup', 'doctype', 'company']])
-	elif patch_no == 208:
-		sql("delete from `tabDocField` where (label in ('SMS', 'Send SMS') or fieldname in ('message', 'customer_mobile_no')) and parent ='Quotation'")
-		default_currency = get_obj('Manage Account').doc.default_currency
-		sql("update tabCompany set default_currency = '%s'" % default_currency)
-	elif patch_no == 209:
-		import_from_files(record_list = [['setup', 'doctype', 'company']])
-	elif patch_no == 210:
-		sql("delete FROM `tabDocField` WHERE parent = 'Lead' AND label in ('CC:','Attachment Html','Create New File','Attachment')")
-	elif patch_no == 212:
-		# reload company because of disturbed UI
-		import_from_files(record_list = [['setup', 'doctype', 'company']])
-	elif patch_no == 213:
-		reload_doc('selling','doctype','lead')
-		reload_doc('setup','doctype','company')
-	elif patch_no == 214:
-		reload_doc('selling','doctype','sales_order')
-	elif patch_no == 215:
-		# patch for item and image in description
-		sql("update tabDocField set width = '300px' where fieldname='description'")
-		reload_doc('stock', 'doctype', 'item')
-		sql("delete from __DocTypeCache")
-	elif patch_no == 216:
-		import_from_files(record_list = [['stock', 'doctype', 'serial_no'], ['stock', 'doctype', 'stock_ledger_entry']])
-	elif patch_no == 217:
-		sql("update tabDocField set options = '\nIn Store\nDelivered\nNot in Use' where fieldname = 'status' and parent = 'Serial No'")
-		sql("update tabDocField set no_copy = 1 where fieldname = 'serial_no' and parent = 'Delivery Note Detail'")
-		sql("update tabDocField set no_copy = 1 where fieldname = 'serial_no' and parent = 'Stock Entry Detail'")
-	elif patch_no == 218:
-		for d in sql("select name from `tabSerial No`"):
-			sql("Commit")
-			sql("Start Transaction")
-			s = Document('Serial No', d[0])
-			if s.pr_no:
-				s.purchase_document_type = 'Purchase Receipt'
-				s.purchase_document_no = s.pr_no
-			if s.delivery_note_no:
-				s.delivery_document_type = 'Delivery Note'
-				s.delivery_document_no = s.delivery_note_no
-			if s.notes:
-				s.delivery_note_no = s.notes
-			s.company = webnotes.utils.get_defaults()['company']
-			s.fiscal_year = webnotes.utils.get_defaults()['fiscal_year']
-			s.save()
-	elif patch_no == 219:
-		sql("delete from tabDocField where fieldname in ('pr_no', 'make', 'label', 'delivery_note_no', 'notes') and parent = 'Serial No'")
-	elif patch_no == 220:
-		sql("update tabDocField set label = 'Incoming Rate' where fieldname = 'purchase_rate' and parent = 'Serial No'")
-		sql("update tabDocField set label = 'Incoming Time' where fieldname = 'purchase_time' and parent = 'Serial No'")
-	elif patch_no == 221:
-		sql("update tabDocField set reqd = 1 where fieldname in ('purchase_rate', 'warehouse') and parent = 'Serial No'")
-	elif patch_no == 222:
-		sql("update tabDocField set options = '\nDelivery Note\nReceivable Voucher\nStock Entry' where fieldname = 'delivery_document_type' and parent = 'Serial No'")
-	elif patch_no == 223:
-		sql("update tabDocField set hidden = 0 where fieldname in ('pay_to_recd_from', 'total_amount', 'total_amount_in_words') and parent = 'Journal Voucher'")
-		sql("update tabDocField set permlevel = 0 where fieldname = 'pay_to_recd_from' and parent = 'Journal Voucher'")
-	elif patch_no == 224:
-		import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail'], ['accounts', 'Print Format', 'Payment Receipt Voucher']])
-	elif patch_no == 225:
-		import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']])
-	elif patch_no == 226:
-		import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']])
-	elif patch_no == 227:
-		reload_doc('stock', 'doctype', 'item')
-		if webnotes.conn.get_value('Control Panel', None, 'account_id') != 'axjanak2011':
-			sql("delete from tabDocField where parent = 'Item' and fieldname='alternate_description' limit 1")
-	elif patch_no == 228:
-		# knowledge base patch
-		reload_doc('knowledge_base', 'doctype', 'question')
-		reload_doc('knowledge_base', 'doctype', 'answer')
-		reload_doc('knowledge_base', 'page', 'questions')
-		reload_doc('knowledge_base', 'Module Def', 'Knowledge Base')
-		sql("update `tabModule Def` set disabled='No' where name='Knowledge Base'")
-	elif patch_no == 229:
-		reload_doc('knowledge_base', 'page', 'question_view')
-	elif patch_no == 230:
-		reload_doc('buying', 'doctype', 'indent')
-		reload_doc('buying', 'doctype', 'indent_detail')
-		reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent')
-	elif patch_no == 231:
-		reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent')
-	elif patch_no == 232:
-		sql("update `tabDocField` set options = 'Sales Order' where fieldname = 'sales_order_no' and parent = 'Indent'")
-	elif patch_no == 233:
-		reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Receivable Voucher')
-		reload_doc('Mapper', 'DocType Mapper', 'Delivery Note-Receivable Voucher')
-	elif patch_no == 234:
-		sql("update `tabTable Mapper Detail` set validation_logic = 'docstatus=1' where parent = 'Sales Order-Indent' and from_table = 'Sales Order Detail'")
-	elif patch_no == 235:
-		for sc in sql("""select name from `tabSearch Criteria` where ifnull(name,'')
-			like 'srch%' or ifnull(name,'') like '%stdsrch'"""):
-			try:
-				get_obj('Search Criteria', sc[0]).rename()
-			except AttributeError, e:
-				pass
-		reload_doc('core', 'doctype', 'system_console')
-	elif patch_no == 236:
-		# warehouse not mandatory for delivered serial nos
-		sql("update tabDocField set reqd=0 where parent='Serial No' and fieldname='warehouse'")
-	elif patch_no == 237:
-		sql("update tabDocField set depends_on = 'eval:doc.is_pos==1' where fieldname = 'cash_bank_account' and parent = 'Receivable Voucher'")
-	elif patch_no == 238:
-		reload_doc('accounts', 'doctype', 'receivable_voucher')
-		reload_doc('accounts', 'GL Mapper', 'POS with write off')
-	elif patch_no == 239:
-		reload_doc('core', 'doctype', 'docfield')
-		reload_doc('core', 'doctype', 'doctype')
-		from patches.old_patches.feed_patch import set_subjects_and_tagfields
-
-		set_subjects_and_tagfields()
-	elif patch_no == 240:
-		# again for sales order (status)
-		from patches.old_patches.feed_patch import set_subjects_and_tagfields
-		set_subjects_and_tagfields()
-	elif patch_no == 241:
-		sql("update `tabDocField` set fieldtype = 'Text', options = '', in_filter = '' where fieldname = 'serial_no' and parent = 'Stock Ledger Entry'")
-	elif patch_no == 242:
-		if webnotes.conn.get_value('Control Panel', None, 'account_id') not in ['axjanak2011']:
-			sql("commit")
-			try:
-				sql("alter table `tabStock Ledger Entry` drop index serial_no")
-			except:
-				pass
-
-			sql("alter table `tabStock Ledger Entry` change serial_no serial_no text")
-	elif patch_no == 243:
-		# moving custom script and custom fields to framework
-		webnotes.conn.set_value('DocType', 'Custom Script', 'module', 'Core')
-		webnotes.conn.set_value('DocType', 'Custom Field', 'module', 'Core')
-		reload_doc('setup', 'doctype', 'company')
-	elif patch_no == 244:
-		reload_doc('stock', 'search_criteria', 'shortage_to_indent')
-	elif patch_no == 245:
-		from patches.old_patches.doctype_permission_patch import set_doctype_permissions
-		set_doctype_permissions()
-
-		from patches.old_patches.feed_patch import set_subjects_and_tagfields
-		set_subjects_and_tagfields()
-	elif patch_no == 246:
-		webnotes.conn.set_value('DocType','Stock Entry','tag_fields','purpose')
-		webnotes.conn.set_value('DocType','Stock Entry','subject','%(remarks)s')
-	elif patch_no == 247:
-		webnotes.conn.set_value('DocType','Stock Entry','subject','%(remarks)s')
-	elif patch_no == 248:
-		reload_doc('setup', 'doctype', 'manage_account')
-	elif patch_no == 249:
-		sql("update `tabDocPerm` t1, `tabDocType` t2 set t1.role = 'System Manager' where t1.role = 'Administrator' and t1.parent = t2.name and t2.module != 'Core'")
-	elif patch_no == 250:
-		from patches.old_patches.feed_patch  import support_patch
-		support_patch()
-	elif patch_no == 251:
-		from webnotes.model import db_schema
-		db_schema.remove_all_foreign_keys()
-		from patches.old_patches.customer_address import run_patch
-		run_patch()
-	elif patch_no == 252:
-		reload_doc('support','doctype','support_ticket')
-		reload_doc('support','doctype','support_ticket_response')
-	elif patch_no == 253:
-		reload_doc('accounts','doctype','ledger_balance_export')
-		reload_doc('accounts','doctype','ledger_detail')
-		reload_doc('accounts', 'Module Def', 'Accounts')
-
-		from webnotes.model.db_schema import updatedb
-		updatedb('Ledger Balance Export')
-		updatedb('Ledger Detail')
-	elif patch_no == 254:
-		reload_doc('setup', 'doctype', 'sms_settings')
-		reload_doc('setup', 'doctype', 'static_parameter_detail')
-
-		from webnotes.model.db_schema import updatedb
-		updatedb('SMS Settings')
-		updatedb('Static Parameter Detail')
-	elif patch_no == 255:
-		from patches.old_patches.customer_address import run_old_data_sync_patch
-		run_old_data_sync_patch()
-	elif patch_no == 256:
-		sql("update `tabLetter Head` set content = replace(content, 'http://46.4.50.84/v170-test/', '')")
-		sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'")
-		sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')")
-	elif patch_no == 257:
-		from patches.old_patches.customer_address import run_old_data_sync_patch
-		run_old_data_sync_patch()
-	elif patch_no == 258:
-		sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'")
-	elif patch_no == 259:
-		sql("update `tabQuotation Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
-		sql("update `tabSales Order Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
-		sql("update `tabRV Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
-		sql("update `tabDelivery Note Detail` set description = replace(description, 'http://46.4.50.84/v170-test/', '')")
-	elif patch_no == 260:
-		sql("update `tabLetter Head` set content = replace(content, 'http://46.4.50.84/v170/', '')")
-		sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'")
-		sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170/', '')")
-		sql("update `tabQuotation Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
-		sql("update `tabSales Order Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
-		sql("update `tabRV Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
-		sql("update `tabDelivery Note Detail` set description = replace(description, 'http://46.4.50.84/v170/', '')")
-	elif patch_no == 261:
-		sql("update `tabPrint Format` set html = replace(html, 'customer_address', 'address_display')")
-	elif patch_no == 262:
-		from patches.old_patches.customer_address import sync_lead_phone
-		sync_lead_phone()
-	elif patch_no == 263:
-		ol = ['','Open','To Reply','Waiting for Customer','Hold','Closed']
-		sql("update tabDocField set options=%s where parent=%s and fieldname=%s", ('\n'.join(ol), 'Support Ticket', 'status'))
-	elif patch_no == 264:
-		sql("delete from tabDocField where parent = 'Customer Issue' and (fieldname = 'issue_in' or fieldname = 'issue_category')")
-		sql("update tabDocField set options=NULL where parent='Support Ticket' and label = 'Send'")
-	elif patch_no == 266:
-		reload_doc('setup','doctype','support_email_settings')
-	elif patch_no == 267:
-		sql("update `tabPrint Format` set html = replace(html, 'supplier_address', 'address_display')")
-	elif patch_no == 268:
-		sql("update `tabDocPerm` set permlevel = 0 where permlevel is null")
-	elif patch_no == 269:
-		p = get_obj('Patch Util')
-		p.add_permission('GL Entry', 'Accounts User', 0, read = 1)
-	elif patch_no == 270:
-		pages = ['Accounts Setup', 'Accounts', 'Accounting Reports','GeneralLedger','How do I - Accounts','Making Opening Entries',\
-		'Analysis','How do I - CRM','How do I - Inventory','Inventory Setup', 'Stock','HR','HR & Payroll Setup',\
-		'Payroll Setup','Production Setup','Production','Buying','SRM Setup','Contact Page','Forum','Messages','Test Toolbar',\
-		'Trend Analyzer']
-		from webnotes.model import delete_doc
-		sql("delete from `tabPage Visit`")
-		for p in pages:
-			try: delete_doc('Page', p)
-			except: pass
-	elif patch_no == 271:
-		# tags patch
-		reload_doc('selling','doctype','sales_order')
-		reload_doc('stock','doctype','delivery_note')
-		sql("delete from tabDocField where fieldname='per_amt_billed' and parent in ('Sales Order', 'Delivery Note')")
-
-		sql("""update `tabSales Order` set delivery_status = if(ifnull(per_delivered,0) < 0.001, 'Not Delivered',
-				if(per_delivered >= 99.99, 'Fully Delivered', 'Partly Delivered'))""")
-		sql("""update `tabSales Order` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
-				if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
-		sql("""update `tabDelivery Note` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
-				if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
-	elif patch_no == 272:
-		from webnotes.model import delete_doc
-		try:
-			delete_doc('Search Criteria', '_SRCH00003')
-		except:
-			pass
-		reload_doc('accounts', 'search_criteria', 'purchase_register')
-	elif patch_no == 276:
-		from webnotes.model import delete_doc
-		sn = sql("select name from `tabSearch Criteria` where criteria_name = 'Sales Personwise Transaction Summary'")
-		for d in sn:
-			delete_doc('Search Criteria', d[0])
-		reload_doc('selling', 'search_criteria', 'sales_personwise_transaction_summary')
-	elif patch_no == 277:
-		webnotes.model.delete_doc('DocType','HomePage Settings')
-		webnotes.model.delete_doc('DocType','Badge Settings')
-		sql("update tabDocType set module='Home' where module in ('Event Updates', 'My Company')")
-		sql("update tabPage set module='Home' where module in ('Event Updates', 'My Company')")
-		sql("update `tabSearch Criteria` set module='Home' where module in ('Event Updates', 'My Company')")
-
-
-		delete_pages = ('Chat User Gallery', 'Badge Info', 'Home', 'Website Setup', 'Test Page', 'Setup Masters', 'Service', 'Selling', 'Sales Reports', 'Organize','My Cart', 'My Activity', 'Manage Users', 'Maintenance', 'Getting Started', 'Gantt Test', 'Custom Reports - Stock', 'Custom Reports - Selling', 'Custom Reports - Production', 'Custom Reports - Payroll', 'Custom Reports - Maintenance', 'Custom Reports - Buying', 'Custom Reports - Accounts', 'CRM Setup', 'CRM Reports')
-		for p in delete_pages:
-		  webnotes.model.delete_doc('Page',p)
-	elif patch_no == 278:
-		sql("update tabDocTrigger set method = 'home.update_feed' where method = 'event_updates.update_feed'")
-	elif patch_no == 279:
-		dt = ['GL Entry', 'Stock Ledger Entry']
-		for t in dt:
-			rec = sql("select voucher_type, voucher_no, ifnull(is_cancelled, 'No') from `tab%s` where modified >= '2011-06-15 01:00:00' group by voucher_no" % t)
-			for d in rec:
-				sql("update `tab%s` set docstatus = %s where name = '%s'" % (d[0], d[2]=='No' and 1 or 2, d[1]))
-
-		other_dt = ['Enquiry', 'Quotation', 'Sales Order', 'Indent', 'Purchase Order', 'Production Order', 'Customer Issue', 'Installation Note']
-		for dt in other_dt:
-			rec = sql("select name, status from `tab%s` where modified >= '2011-06-15 01:00:00'" % dt)
-			for r in rec:
-				sql("update `tab%s` set docstatus = %s where name = '%s'" % (dt, (r[1] in ['Submitted', 'Closed'] and 1 or r[1]=='Cancelled' and 2 or 0), r[0]))
-	elif patch_no == 280:
-		reload_doc('accounts', 'doctype', 'form_16a')
-	elif patch_no == 281:
-		dt_list = ['Delivery Note', 'Purchase Receipt']
-		for dt in dt_list:
-			sql("update `tab%s` set status = 'Submitted' where docstatus = 1 and modified >='2011-06-15 01:00:00'" % dt)
-			sql("update `tab%s` set status = 'Cancelled' where docstatus = 2 and modified >='2011-06-15 01:00:00'" % dt)
-	elif patch_no == 282:
-		dt_list = ['Enquiry', 'Quotation', 'Sales Order', 'Indent', 'Purchase Order', 'Production Order', 'Customer Issue', 'Installation Note', 'Receivable Voucher', 'Payable Voucher', 'Delivery Note', 'Purchase Receipt', 'Journal Voucher', 'Stock Entry']
-		for d in dt_list:
-			tbl = sql("select options from `tabDocField` where fieldtype = 'Table' and parent = '%s'" % d)
-			for t in tbl:
-				sql("update `tab%s` t1, `tab%s` t2 set t1.docstatus = t2.docstatus where t1.parent = t2.name" % (t[0], d))
-	elif patch_no == 283:
-		rec = sql("select voucher_type, voucher_no, ifnull(is_cancelled, 'No') from `tabGL Entry` where modified >= '2011-06-15 01:00:00' order by name ASC")
-		for d in rec:
-			sql("update `tab%s` set docstatus = %s where name = '%s'" % (d[0], d[2]=='No' and 1 or 2, d[1]))
-	elif patch_no == 284:
-		reload_doc('support', 'doctype', 'support_ticket')
-		sql("update `tabDocField` set in_filter = 1 where fieldname in ('raised_by', 'subject') and parent = 'Support Ticket'")
-	elif patch_no == 286:
-		reload_doc('accounts', 'search_criteria', 'itemwise_sales_register')
-		reload_doc('accounts', 'search_criteria', 'itemwise_purchase_register')
-	elif patch_no == 287:
-		sql("update `tabDocField` set no_copy = 1 where fieldname in ('per_received', 'per_billed', 'per_delivered') and parent in ('Purchase Order', 'Purchase Receipt', 'Sales Order', 'Delivery Note')")
-	elif patch_no == 288:
-		reload_doc('accounts', 'doctype', 'payable_voucher')
-	elif patch_no == 289:
-		sql("update `tabDocType` set subject = 'From %(supplier_name)s worth %(grand_total)s due on %(due_date)s | %(outstanding_amount)s outstanding' where name = 'Payable Voucher'")
-		sql("update `tabDocType` set search_fields = 'status,transaction_date,customer,lead,order_type' where name = 'Quotation'")
-	elif patch_no == 290:
-		count = sql("""SELECT * FROM  `tabModule Def`
-			   WHERE `module_name` LIKE 'Home'""")
-		if not count:
-			md = Document('Module Def')
-			md.module_name = 'Home'
-			md.module_label = 'Home'
-			md.save(1)
-	elif patch_no == 291:
-		reload_doc('utilities','doctype','rename_tool')
-	elif patch_no == 292:
-		reload_doc('accounts', 'search_criteria', 'trial_balance')
-	elif patch_no == 293:
-		sql("delete from tabDocField where parent='Account' and fieldname='address'")
-		reload_doc('accounts', 'doctype', 'account')
-	elif patch_no == 294:
-		# new account profile fix
-		ul = sql("select name from tabProfile where ifnull(name,'') not in ('Administrator', 'Guest', '')")
-		# if one user and one user has no roles
-		if len(ul)==1 and not sql("select parent from tabUserRole where role='System Manager' and parent=%s", ul[0][0]):
-			get_obj('Setup Control').add_roles(Document('Profile', ul[0][0]))
-	elif patch_no == 295:
-		sql("update `tabDocField` set options = 'Delivered\nNot Delivered\nPartly Delivered\nClosed\nNot Applicable' where parent = 'Sales Order' and fieldname = 'delivery_status'")
-		sql("update `tabDocField` set options = 'Billed\nNot Billed\nPartly Billed\nClosed' where parent = 'Sales Order' and fieldname = 'billing_status'")
-	elif patch_no == 296:
-		sql("delete from tabDocField where parent='Support Ticket' and fieldname='contact_no'")
-		reload_doc('support', 'doctype', 'support_ticket')
-	elif patch_no == 297:
-		reload_doc('hr', 'doctype', 'employee')
-		reload_doc('hr', 'doctype', 'attendance')
-		reload_doc('hr', 'doctype', 'expense_voucher')
-		reload_doc('hr', 'doctype', 'appraisal')
-		reload_doc('hr', 'doctype', 'salary_structure')
-		reload_doc('hr', 'doctype', 'salary_slip')
-	elif patch_no == 298:
-		sql("update `tabDocField` set options = 'link:Company' where parent = 'Attendance' and fieldname = 'company'")
-		sql("update `tabDocField` set options = 'link:Company' where parent = 'Expense Voucher' and fieldname = 'company'")
-		sql("update `tabDocField` set options = 'link:Company' where parent = 'Appraisal' and fieldname = 'company'")
-	elif patch_no == 299:
-		sql("update `tabDocPerm` set `match` = NULL where parent = 'Employee' and role = 'Employee'")
-	elif patch_no == 300:
-		sql("""DELETE FROM `tabSearch Criteria` WHERE name IN
-			   ('sales_register1', 'sales_register2', 'purchase_register1')""")
-	elif patch_no == 301:
+	if patch_no == 301:
 		from patches.delivery_billing_status_patch import run_patch
 		run_patch()
 	elif patch_no == 302:
@@ -1312,7 +137,6 @@
 				webnotes.conn.get_value('Support Email Settings',None,field_map[key]))
 
 		# delete support email settings
-		from webnotes.model import delete_doc
 		delete_doc('DocType', 'Support Email Settings')
 
 		reload_doc('support','doctype','support_ticket')
@@ -1407,3 +231,76 @@
 		sql("update tabPage set name='question-view' where name='Question View'")
 	elif patch_no == 339:
 		reload_doc('production','doctype','bill_of_materials')
+	elif patch_no == 340:
+		sql("update `tabDocField` set permlevel = 0 where (fieldname in ('process', 'production_order', 'fg_completed_qty') or label = 'Get Items') and parent = 'Stock Entry'")
+	elif patch_no == 341:
+		reload_doc('stock','doctype','delivery_note')
+		reload_doc('stock','doctype','item')
+		reload_doc('selling','doctype','quotation')
+		reload_doc('stock','Print Format','Delivery Note Packing List Wise')
+
+		if not sql("select format from `tabDocFormat` where name = 'Delivery Note Packing List Wise' and parent = 'Delivery Note'"):
+			from webnotes.model.doc import addchild
+			dt_obj = get_obj('DocType', 'Delivery Note', with_children = 1)
+			ch = addchild(dt_obj.doc, 'formats', 'DocFormat', 1)
+			ch.format = 'Delivery Note Packing List Wise'
+			ch.save(1)
+	elif patch_no == 342:
+		sql("update `tabDocField` set permlevel = 0 where parent = 'Stock Entry Detail' and fieldname in ('s_warehouse', 't_warehouse', 'fg_item')")
+	elif patch_no == 343:
+		reload_doc('stock','doctype','item_customer_detail')
+	elif patch_no == 344:
+		sql("delete from `tabDocFormat` where ifnull(format, '') = '' and parent = 'Delivery Note'")
+	elif patch_no == 345:
+		# rerun 343 (merge confict)
+		reload_doc('stock','doctype','item_customer_detail')
+		sql("delete from `tabModule Def Item` where display_name = 'Salary Slip Control Panel' and parent = 'HR'")
+		reload_doc('hr','Module Def','HR')
+	elif patch_no == 346:
+		pass
+	elif patch_no == 347:
+		sql("delete from `tabField Mapper Detail` where from_field = to_field and map = 'Yes' and ifnull(checking_operator, '') = ''")
+	elif patch_no == 348:
+		sql("update `tabStock Ledger Entry` set is_cancelled = 'No' where voucher_type = 'Serial No'")
+	elif patch_no == 349:
+		delete_doc('Custom Script', 'Update Series-Server')
+		delete_doc('Custom Script', 'Profile-Client')
+		delete_doc('Custom Script', 'Event-Client')
+		delete_doc('Custom Script', 'File-Server')
+
+		# reload profile with new fields for security
+		delete_doc('DocType', 'Profile')
+		reload_doc('core', 'doctype', 'profile')
+	elif patch_no == 350:
+		reload_doc('stock', 'doctype', 'delivery_note_detail')
+		reload_doc('stock', 'doctype', 'item_customer_detail')
+	elif patch_no == 351:
+		reload_doc('home', 'page', 'dashboard')
+	elif patch_no == 352:
+		reload_doc('stock','doctype','delivery_note')
+		reload_doc('stock','doctype','item')
+		reload_doc('selling','doctype','quotation')
+		reload_doc('stock','Print Format','Delivery Note Packing List Wise')
+
+		if not sql("select format from `tabDocFormat` where name = 'Delivery Note Packing List Wise' and parent = 'Delivery Note'"):
+			from webnotes.model.doc import addchild
+			dt_obj = get_obj('DocType', 'Delivery Note', with_children = 1)
+			ch = addchild(dt_obj.doc, 'formats', 'DocFormat', 1)
+			ch.format = 'Delivery Note Packing List Wise'
+			ch.save(1)
+	elif patch_no == 353:
+		reload_doc('hr', 'doctype', 'salary_manager')
+	elif patch_no == 354:
+		reload_doc('setup', 'doctype','feature_setup')
+		reload_doc('stock','doctype','item')
+		sql("update tabDocField set label='Produced Qty',description='Updated after finished goods are transferred to FG Warehouse through Stock Entry' where parent='Production Order' and fieldname='produced_qty'")
+		rs = sql("select fieldname from tabDocField where parent='Features Setup' and fieldname is not null")
+		from webnotes.model.doc import Document
+		m = Document('Features Setup')
+		for d in rs:
+			m.fields[d[0]] = 1
+		m.save()
+	elif patch_no == 355:
+		reload_doc('hr', 'doctype', 'salary_slip')
+		delete_doc('DocType', 'Salary Control Panel')
+
diff --git a/production/DocType Mapper/Production Forecast-Production Plan/Production Forecast-Production Plan.txt b/production/DocType Mapper/Production Forecast-Production Plan/Production Forecast-Production Plan.txt
index 62306cc..dfbef85 100644
--- a/production/DocType Mapper/Production Forecast-Production Plan/Production Forecast-Production Plan.txt
+++ b/production/DocType Mapper/Production Forecast-Production Plan/Production Forecast-Production Plan.txt
@@ -48,32 +48,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 3,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:flt(obj.qty)-flt(obj.planned_qty)',
-		'idx': 4,
 		'to_field': 'prevdoc_reqd_qty'
 	},
 
@@ -81,7 +56,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 5,
 		'to_field': 'against_document'
 	},
 
@@ -89,7 +63,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 6,
 		'to_field': 'document_no'
 	},
 
@@ -97,7 +70,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'start_date',
-		'idx': 7,
 		'to_field': 'document_date'
 	},
 
@@ -105,7 +77,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'end_date',
-		'idx': 8,
 		'to_field': 'confirmation_date'
 	},
 
@@ -113,7 +84,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Production Forecast',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Production Plan',
 		'validation_logic': 'docstatus =1'
@@ -124,7 +94,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'pf_details',
 		'from_table': 'PF Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'pp_details',
 		'to_table': 'PP Detail',
diff --git a/production/DocType Mapper/Production Forecast-Production Planning Tool/Production Forecast-Production Planning Tool.txt b/production/DocType Mapper/Production Forecast-Production Planning Tool/Production Forecast-Production Planning Tool.txt
index 5cab415..6125d98 100644
--- a/production/DocType Mapper/Production Forecast-Production Planning Tool/Production Forecast-Production Planning Tool.txt
+++ b/production/DocType Mapper/Production Forecast-Production Planning Tool/Production Forecast-Production Planning Tool.txt
@@ -48,32 +48,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 3,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:flt(obj.qty)-flt(obj.planned_qty)',
-		'idx': 4,
 		'to_field': 'prevdoc_reqd_qty'
 	},
 
@@ -81,7 +56,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 5,
 		'to_field': 'source_doctype'
 	},
 
@@ -89,7 +63,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 6,
 		'to_field': 'source_docname'
 	},
 
@@ -97,7 +70,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'end_date',
-		'idx': 7,
 		'to_field': 'confirmation_date'
 	},
 
@@ -105,7 +77,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Production Forecast',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Production Planning Tool',
 		'validation_logic': 'docstatus =1'
@@ -116,7 +87,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'pf_details',
 		'from_table': 'PF Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'pp_details',
 		'to_table': 'PP Detail',
diff --git a/production/DocType Mapper/Sales Order-Production Plan/Sales Order-Production Plan.txt b/production/DocType Mapper/Sales Order-Production Plan/Sales Order-Production Plan.txt
index 5132c78..41c5173 100644
--- a/production/DocType Mapper/Sales Order-Production Plan/Sales Order-Production Plan.txt
+++ b/production/DocType Mapper/Sales Order-Production Plan/Sales Order-Production Plan.txt
@@ -50,7 +50,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 1,
 		'to_field': 'against_document'
 	},
 
@@ -58,31 +57,13 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 2,
 		'to_field': 'document_no'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 3,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 4,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'uom',
-		'idx': 5,
 		'to_field': 'stock_uom'
 	},
 
@@ -90,7 +71,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:flt(obj.qty)-flt(obj.planned_qty)',
-		'idx': 6,
 		'to_field': 'prevdoc_total_qty'
 	},
 
@@ -98,23 +78,13 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'transaction_date',
-		'idx': 7,
 		'to_field': 'document_date'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'delivery_date',
-		'idx': 8,
-		'to_field': 'delivery_date'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Sales Order',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Production Plan',
 		'validation_logic': 'docstatus =1'
@@ -125,7 +95,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'packing_details',
 		'from_table': 'Delivery Note Packing Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'pp_details',
 		'to_table': 'PP Detail',
diff --git a/production/doctype/production_order/production_order.py b/production/doctype/production_order/production_order.py
index 570c802..0cc64e5 100644
--- a/production/doctype/production_order/production_order.py
+++ b/production/doctype/production_order/production_order.py
@@ -13,7 +13,7 @@
 get_value = webnotes.conn.get_value
 in_transaction = webnotes.conn.in_transaction
 convert_to_lists = webnotes.conn.convert_to_lists
-	
+
 # -----------------------------------------------------------------------------------------
 
 
@@ -21,7 +21,7 @@
   def __init__(self, doc, doclist=[]):
     self.doc = doc
     self.doclist = doclist
-  
+
   # Autoname
   def autoname(self):
     p = self.doc.fiscal_year
@@ -35,7 +35,7 @@
             'default_bom' : item and item[0]['default_bom'] or ''
     }
     return ret
-    
+
   def validate(self):
     if not self.doc.production_item :
       msgprint("Please enter Production Item")
@@ -62,7 +62,7 @@
       if flt(bom_detail[0]['docstatus']) != 1:
         msgprint("BOM := '%s' is not Submitted BOM." % self.doc.bom_no)
         raise Exception
-  
+
   def update_status(self, status):
     # Set Status
     if status == 'Stopped':
@@ -78,7 +78,7 @@
     # Update Planned Qty of Production Item
     qty = (flt(self.doc.qty) - flt(self.doc.produced_qty)) * ((status == 'Stopped') and -1 or 1)
     get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0, flt(qty), self.doc.production_item, now())
-    
+
     # Acknowledge user
     msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s and status has been updated as %s." % (cstr(status), cstr(self.doc.status)))
 
@@ -99,6 +99,6 @@
 
     # Set Status AS "Submitted"
     set(self.doc,'status', 'Cancelled')
-    
+
     # decrease Planned Qty of Prooduction Item by Qty
     get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0,-flt(self.doc.qty), self.doc.production_item, now())
diff --git a/production/doctype/production_order/production_order.txt b/production/doctype/production_order/production_order.txt
index c927edf..9226fd0 100644
--- a/production/doctype/production_order/production_order.txt
+++ b/production/doctype/production_order/production_order.txt
@@ -5,13 +5,14 @@
 	{
 		'creation': '2010-08-08 17:09:14',
 		'docstatus': 0,
-		'modified': '2010-12-23 11:08:12',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-08-31 10:03:21',
+		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
+		'_last_update': '1313485457',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
 		'in_create': 0,
@@ -20,7 +21,7 @@
 		'section_style': 'Tabbed',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 179
+		'version': 180
 	},
 
 	# These values are common for all DocField
@@ -54,7 +55,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'submit': 1,
@@ -64,7 +64,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 1,
 		'role': 'All'
 	},
@@ -75,7 +74,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 0,
 		'role': 'Production Manager',
 		'submit': 1,
@@ -88,7 +86,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 0,
 		'role': 'Production User',
 		'submit': 1,
@@ -99,7 +96,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 1,
 		'label': 'Production Order',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -112,7 +108,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'transaction_date',
 		'fieldtype': 'Date',
-		'idx': 2,
 		'label': 'Transaction Date',
 		'oldfieldname': 'transaction_date',
 		'oldfieldtype': 'Date',
@@ -127,7 +122,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'posting_date',
 		'fieldtype': 'Date',
-		'idx': 3,
 		'label': 'Posting Date',
 		'oldfieldname': 'posting_date',
 		'oldfieldtype': 'Date',
@@ -142,7 +136,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'production_item',
 		'fieldtype': 'Link',
-		'idx': 4,
 		'in_filter': 1,
 		'label': 'Production Item',
 		'oldfieldname': 'production_item',
@@ -158,7 +151,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 5,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -173,14 +165,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'bom_no',
 		'fieldtype': 'Link',
-		'idx': 7,
 		'label': 'BOM No',
 		'oldfieldname': 'bom_no',
 		'oldfieldtype': 'Link',
 		'options': 'Bill Of Materials',
 		'permlevel': 1,
 		'reqd': 1,
-		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -189,7 +179,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'origin',
 		'fieldtype': 'Select',
-		'idx': 8,
 		'in_filter': 1,
 		'label': 'Origin',
 		'no_copy': 1,
@@ -207,7 +196,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'qty',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Qty',
 		'oldfieldname': 'qty',
 		'oldfieldtype': 'Currency',
@@ -221,7 +209,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'project_name',
 		'fieldtype': 'Link',
-		'idx': 9,
 		'in_filter': 1,
 		'label': 'Project Name',
 		'oldfieldname': 'project_name',
@@ -236,7 +223,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amended_from',
 		'fieldtype': 'Data',
-		'idx': 10,
 		'label': 'Amended From',
 		'oldfieldname': 'amended_from',
 		'oldfieldtype': 'Data',
@@ -248,7 +234,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amendment_date',
 		'fieldtype': 'Date',
-		'idx': 11,
 		'label': 'Amendment Date',
 		'oldfieldname': 'amendment_date',
 		'oldfieldtype': 'Date',
@@ -259,7 +244,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 12,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -269,7 +253,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'stock_uom',
 		'fieldtype': 'Data',
-		'idx': 12,
 		'label': 'Stock UOM',
 		'oldfieldname': 'stock_uom',
 		'oldfieldtype': 'Data',
@@ -281,7 +264,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'status',
 		'fieldtype': 'Select',
-		'idx': 13,
 		'in_filter': 1,
 		'label': 'Status',
 		'no_copy': 1,
@@ -300,15 +282,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'fg_warehouse',
 		'fieldtype': 'Link',
-		'idx': 14,
 		'in_filter': 1,
 		'label': 'FG Warehouse',
 		'oldfieldname': 'fg_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -318,15 +298,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'wip_warehouse',
 		'fieldtype': 'Link',
-		'idx': 15,
 		'in_filter': 1,
 		'label': 'WIP Warehouse',
 		'oldfieldname': 'wip_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -336,7 +314,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'consider_sa_items',
 		'fieldtype': 'Select',
-		'idx': 16,
 		'in_filter': 1,
 		'label': 'Consider SA Items',
 		'oldfieldname': 'consider_sa_items',
@@ -349,11 +326,11 @@
 	# DocField
 	{
 		'colour': 'White:FFF',
+		'description': 'Updated after finished goods are transferred to FG Warehouse through Stock Entry',
 		'doctype': 'DocField',
 		'fieldname': 'produced_qty',
 		'fieldtype': 'Currency',
-		'idx': 18,
-		'label': 'Produced Qty (Updated after finished goods are transferred to FG Warehouse through Stock Entry)',
+		'label': 'Produced Qty',
 		'oldfieldname': 'produced_qty',
 		'oldfieldtype': 'Currency',
 		'permlevel': 1
@@ -364,14 +341,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Link',
-		'idx': 19,
 		'label': 'Company',
 		'oldfieldname': 'company',
 		'oldfieldtype': 'Link',
 		'options': 'Company',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -379,7 +354,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 20,
 		'in_filter': 1,
 		'label': 'Fiscal Year',
 		'oldfieldname': 'fiscal_year',
@@ -393,7 +367,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 21,
 		'label': 'Next Steps',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -405,7 +378,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 22,
 		'label': 'Material Transfer',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -416,7 +388,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 23,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -427,7 +398,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 24,
 		'label': 'Backflush',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -438,7 +408,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 25,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -449,7 +418,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 26,
 		'label': 'Stop Production Order',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -462,7 +430,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 27,
 		'label': 'Unstop Production Order',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
diff --git a/selling/DocType Mapper/Delivery Note-Installation Note/Delivery Note-Installation Note.txt b/selling/DocType Mapper/Delivery Note-Installation Note/Delivery Note-Installation Note.txt
index a4afac7..67abbdc 100644
--- a/selling/DocType Mapper/Delivery Note-Installation Note/Delivery Note-Installation Note.txt
+++ b/selling/DocType Mapper/Delivery Note-Installation Note/Delivery Note-Installation Note.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:34',
 		'docstatus': 0,
 		'modified': '2011-05-17 11:42:57',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -50,26 +50,15 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
-		'idx': 1,
 		'match_id': 0,
 		'to_field': 'company'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer',
-		'idx': 3,
 		'match_id': 0,
 		'to_field': 'customer'
 	},
@@ -77,89 +66,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 13,
 		'match_id': 0,
 		'to_field': 'delivery_note_no'
 	},
@@ -168,7 +75,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 14,
 		'match_id': 1,
 		'to_field': 'prevdoc_detail_docname'
 	},
@@ -177,7 +83,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 15,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -186,7 +91,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 16,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -194,26 +98,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 17,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 18,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: flt(obj.qty) - flt(obj.installed_qty)',
-		'idx': 19,
 		'match_id': 1,
 		'to_field': 'qty'
 	},
@@ -221,17 +106,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'serial_no',
-		'idx': 20,
-		'match_id': 1,
-		'to_field': 'serial_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'posting_date',
-		'idx': 21,
 		'match_id': 2,
 		'to_field': 'prevdoc_date'
 	},
@@ -241,7 +116,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'delivery_note_details',
 		'from_table': 'Delivery Note Detail',
-		'idx': 1,
 		'match_id': 1,
 		'to_field': 'installed_item_details',
 		'to_table': 'Installed Item Details',
@@ -252,7 +126,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Delivery Note',
-		'idx': 2,
 		'match_id': 0,
 		'to_table': 'Installation Note',
 		'validation_logic': 'docstatus = 1'
@@ -262,7 +135,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Delivery Note',
-		'idx': 3,
 		'match_id': 2,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'reference_key': 'prevdoc_docname',
diff --git a/selling/DocType Mapper/Enquiry-Quotation/Enquiry-Quotation.txt b/selling/DocType Mapper/Enquiry-Quotation/Enquiry-Quotation.txt
index 78f5a56..4db092d 100644
--- a/selling/DocType Mapper/Enquiry-Quotation/Enquiry-Quotation.txt
+++ b/selling/DocType Mapper/Enquiry-Quotation/Enquiry-Quotation.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:34',
 		'docstatus': 0,
 		'modified': '2011-05-10 16:04:40',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -49,35 +49,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 1,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 2,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'qty',
-		'idx': 3,
-		'match_id': 1,
-		'to_field': 'qty'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'uom',
-		'idx': 4,
 		'match_id': 1,
 		'to_field': 'stock_uom'
 	},
@@ -85,26 +57,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'campaign',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'campaign'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 7,
 		'match_id': 0,
 		'to_field': 'enq_no'
 	},
@@ -112,116 +65,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 13,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 14,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 15,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 16,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 17,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 18,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 19,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 20,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -230,7 +74,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 21,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -238,26 +81,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'lead',
-		'idx': 22,
-		'match_id': 0,
-		'to_field': 'lead'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'lead_name',
-		'idx': 23,
-		'match_id': 0,
-		'to_field': 'lead_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'enquiry_from',
-		'idx': 24,
 		'match_id': 0,
 		'to_field': 'quotation_to'
 	},
@@ -266,7 +90,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'enquiry_type',
-		'idx': 25,
 		'match_id': 0,
 		'to_field': 'order_type'
 	},
@@ -275,7 +98,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Enquiry',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Quotation'
 	},
@@ -285,7 +107,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'enq_details',
 		'from_table': 'Enquiry Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'quotation_details',
 		'to_table': 'Quotation Detail'
diff --git a/selling/DocType Mapper/Lead-Customer/Lead-Customer.txt b/selling/DocType Mapper/Lead-Customer/Lead-Customer.txt
index d91672a..2b7a15a 100644
--- a/selling/DocType Mapper/Lead-Customer/Lead-Customer.txt
+++ b/selling/DocType Mapper/Lead-Customer/Lead-Customer.txt
@@ -14,7 +14,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Lead',
-		'idx': 1,
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Lead-Customer',
@@ -54,7 +53,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 1,
 		'to_field': 'lead_name'
 	},
 
@@ -62,79 +60,13 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company_name',
-		'idx': 2,
 		'to_field': 'customer_name'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_line1',
-		'idx': 3,
-		'to_field': 'address_line1'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_line2',
-		'idx': 4,
-		'to_field': 'address_line2'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'city',
-		'idx': 5,
-		'to_field': 'city'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'country',
-		'idx': 6,
-		'to_field': 'country'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'state',
-		'idx': 7,
-		'to_field': 'state'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'pincode',
-		'idx': 8,
-		'to_field': 'pincode'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 9,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 10,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'contact_no',
-		'idx': 11,
 		'to_field': 'phone_1'
 	},
 
@@ -142,18 +74,9 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'fax',
-		'idx': 12,
 		'to_field': 'fax_1'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'website',
-		'idx': 13,
-		'to_field': 'website'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail'
diff --git a/selling/DocType Mapper/Lead-Enquiry/Lead-Enquiry.txt b/selling/DocType Mapper/Lead-Enquiry/Lead-Enquiry.txt
index 716674d..4b32723 100644
--- a/selling/DocType Mapper/Lead-Enquiry/Lead-Enquiry.txt
+++ b/selling/DocType Mapper/Lead-Enquiry/Lead-Enquiry.txt
@@ -14,7 +14,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Lead',
-		'idx': 1,
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Lead-Enquiry',
@@ -53,107 +52,24 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 1,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'campaign_name',
-		'idx': 2,
 		'to_field': 'campaign'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_by',
-		'idx': 3,
-		'to_field': 'contact_by'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'last_contact_date',
-		'idx': 4,
-		'to_field': 'last_contact_date'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_date_ref',
-		'idx': 5,
-		'to_field': 'contact_date_ref'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_date',
-		'idx': 6,
-		'to_field': 'contact_date'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'doctype',
-		'idx': 7,
 		'to_field': 'enquiry_from'
 	},
 
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'lead_name',
-		'idx': 8,
-		'to_field': 'lead_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 9,
 		'to_field': 'lead'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address',
-		'idx': 10,
-		'to_field': 'address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_no',
-		'idx': 11,
-		'to_field': 'contact_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'email_id',
-		'idx': 12,
-		'to_field': 'email_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 13,
-		'to_field': 'territory'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail'
diff --git a/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt b/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt
index 1f54abd..04f70ad 100644
--- a/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt
+++ b/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt
@@ -14,7 +14,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Project',
-		'idx': 1,
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Project-Sales Order',
@@ -26,13 +25,16 @@
 
 	# These values are common for all Field Mapper Detail
 	{
+		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
+		'from_field': 'customer',
 		'map': 'Yes',
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Project-Sales Order',
 		'parentfield': 'field_mapper_details',
-		'parenttype': 'DocType Mapper'
+		'parenttype': 'DocType Mapper',
+		'to_field': 'customer'
 	},
 
 	# These values are common for all DocType Mapper
@@ -52,67 +54,7 @@
 
 	# Field Mapper Detail
 	{
-		'checking_operator': '=',
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 1,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 2,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 3,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 4,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_no',
-		'idx': 5,
-		'to_field': 'contact_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'email_id',
-		'idx': 6,
-		'to_field': 'email_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 7,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 8,
-		'to_field': 'territory'
+		'doctype': 'Field Mapper Detail'
 	},
 
 	# Table Mapper Detail
diff --git a/selling/DocType Mapper/Quotation-Sales Order/Quotation-Sales Order.txt b/selling/DocType Mapper/Quotation-Sales Order/Quotation-Sales Order.txt
index d05553d..4d493a6 100644
--- a/selling/DocType Mapper/Quotation-Sales Order/Quotation-Sales Order.txt
+++ b/selling/DocType Mapper/Quotation-Sales Order/Quotation-Sales Order.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
-		'modified': '2011-05-17 12:55:58',
+		'modified': '2011-08-25 18:25:02',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -49,7 +49,6 @@
 		'checking_operator': '>=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'transaction_date',
-		'idx': 1,
 		'map': 'No',
 		'match_id': 0,
 		'to_field': 'transaction_date'
@@ -58,28 +57,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'order_type',
-		'idx': 2,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'order_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'name',
-		'idx': 3,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'quotation_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'transaction_date',
-		'idx': 4,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'quotation_date'
@@ -87,10 +65,18 @@
 
 	# Field Mapper Detail
 	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'name',
+		'map': 'Yes',
+		'match_id': 0,
+		'to_field': 'quotation_no'
+	},
+
+	# Field Mapper Detail
+	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
-		'idx': 5,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'company'
@@ -101,7 +87,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'fiscal_year',
-		'idx': 6,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'fiscal_year'
@@ -110,138 +95,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'price_list_name',
-		'idx': 7,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'price_list_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 8,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'currency',
-		'idx': 9,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'currency'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 10,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 11,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 12,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 14,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 15,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 16,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 17,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 18,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 19,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge',
-		'idx': 20,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'charge'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 21,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
@@ -250,411 +104,10 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'adj_rate',
-		'idx': 22,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'adj_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'basic_rate',
-		'idx': 23,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'basic_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'amount',
-		'idx': 24,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 25,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'ref_rate',
-		'idx': 26,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'base_ref_rate',
-		'idx': 27,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'base_ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 28,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'qty',
-		'idx': 29,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'qty'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 30,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 31,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 32,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 33,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 34,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_amount',
-		'idx': 35,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'export_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 36,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'net_total',
-		'idx': 37,
-		'map': 'Yes',
+		'from_field': 'naming_series',
+		'map': 'No',
 		'match_id': 0,
-		'to_field': 'net_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'other_charges_total',
-		'idx': 38,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'other_charges_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total',
-		'idx': 39,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'grand_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rounded_total',
-		'idx': 40,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'rounded_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'in_words',
-		'idx': 41,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'in_words'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total_export',
-		'idx': 42,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'grand_total_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rounded_total_export',
-		'idx': 43,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'rounded_total_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'in_words_export',
-		'idx': 44,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'in_words_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 45,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 46,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 47,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 48,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 49,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 50,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tax_amount',
-		'idx': 51,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'tax_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total',
-		'idx': 52,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'idx',
-		'idx': 53,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'idx'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_person',
-		'idx': 54,
-		'map': 'Yes',
-		'match_id': 3,
-		'to_field': 'sales_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_percentage',
-		'idx': 55,
-		'map': 'Yes',
-		'match_id': 3,
-		'to_field': 'allocated_percentage'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_amount',
-		'idx': 56,
-		'map': 'Yes',
-		'match_id': 3,
-		'to_field': 'allocated_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 57,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tc_name',
-		'idx': 57,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'tc_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 57,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 58,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'campaign',
-		'idx': 59,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'campaign'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 60,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'terms'
+		'to_field': 'naming_series'
 	},
 
 	# Table Mapper Detail
@@ -662,7 +115,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_team',
 		'from_table': 'Sales Team',
-		'idx': 1,
 		'match_id': 3,
 		'to_field': 'sales_team',
 		'to_table': 'Sales Team',
@@ -674,7 +126,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'other_charges',
 		'from_table': 'RV Tax Detail',
-		'idx': 2,
 		'match_id': 2,
 		'to_field': 'other_charges',
 		'to_table': 'RV Tax Detail',
@@ -686,7 +137,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'quotation_details',
 		'from_table': 'Quotation Detail',
-		'idx': 3,
 		'match_id': 1,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'to_field': 'sales_order_details',
@@ -698,7 +148,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Quotation',
-		'idx': 4,
 		'match_id': 0,
 		'reference_key': 'prevdoc_docname',
 		'to_table': 'Sales Order',
diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js
index f21df25..b3dcde6 100644
--- a/selling/doctype/quotation/quotation.js
+++ b/selling/doctype/quotation/quotation.js
@@ -11,7 +11,7 @@
 
 // ONLOAD
 // ===================================================================================
-cur_frm.cscript.onload = function(doc, cdt, cdn) {  
+cur_frm.cscript.onload = function(doc, cdt, cdn) {
   if(!doc.quotation_to) hide_field(['customer','customer_address','contact_person','customer_name','lead', 'lead_name', 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']);
   if(!doc.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name});
   if(!doc.status) set_multiple(cdt,cdn,{status:'Draft'});
@@ -21,7 +21,7 @@
   //if(!doc.price_list_name && sys_defaults.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name});
   if(!doc.company && sys_defaults.company) set_multiple(cdt,cdn,{company:sys_defaults.company});
   if(!doc.fiscal_year && sys_defaults.fiscal_year) set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year});
-  
+
   if(doc.quotation_to) {
     if(doc.quotation_to == 'Customer') {
       hide_field(['lead', 'lead_name']);
@@ -34,7 +34,7 @@
 
 cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
   // load default charges
-  if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) 
+  if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length)
     cur_frm.cscript.load_taxes(doc, cdt, cdn);
 }
 
@@ -46,9 +46,9 @@
     hide_field(['lead_name','customer','customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
     doc.lead = doc.lead_name = doc.customer = doc.customer_address = doc.contact_person = doc.address_display = doc.contact_display = doc.contact_mobile = doc.contact_email = doc.territory = doc.customer_group = "";
   }
-  else if(doc.quotation_to == 'Customer'){    
+  else if(doc.quotation_to == 'Customer'){
     unhide_field(['customer']);
-    hide_field(['lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory']);    
+    hide_field(['lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory']);
     doc.lead = doc.lead_name = doc.customer = doc.customer_address = doc.contact_person = doc.address_display = doc.contact_display = doc.contact_mobile = doc.contact_email = doc.territory = doc.customer_group = "";
   }
   //refresh_many(['lead','customer']);
@@ -56,7 +56,7 @@
 
 
 
-//================ hide - unhide fields on basis of quotation to either lead or customer =============================== 
+//================ hide - unhide fields on basis of quotation to either lead or customer ===============================
 cur_frm.cscript.quotation_to = function(doc,cdt,cdn){
   cur_frm.cscript.lead_cust_show(doc,cdt,cdn);
   //doc.customer_address = doc.territory = doc.contact_no = doc.email_id = "";
@@ -77,7 +77,7 @@
     cur_frm.add_custom_button('Set as Lost', cur_frm.cscript['Declare Order Lost']);
     cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
   }
-  
+
   if (!doc.docstatus) hide_field(['Update Follow up']);
   else unhide_field(['Update Follow up']);
   //cur_frm.cscript.lead_cust_show(doc,cdt,cdn);
@@ -111,7 +111,7 @@
   var callback = function(r,rt) {
       var doc = locals[cur_frm.doctype][cur_frm.docname];
       cur_frm.refresh();
-  }   
+  }
 
   if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);
   if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
@@ -123,12 +123,12 @@
 
 cur_frm.fields_dict.customer_address.on_new = function(dn) {
   locals['Address'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
-  locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;  
+  locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
 }
 
 cur_frm.fields_dict.contact_person.on_new = function(dn) {
   locals['Contact'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
-  locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;  
+  locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
 }
 
 cur_frm.fields_dict['customer_address'].get_query = function(doc, cdt, cdn) {
@@ -146,7 +146,7 @@
 
 cur_frm.cscript.lead = function(doc, cdt, cdn) {
   if(doc.lead) get_server_fields('get_lead_details', doc.lead,'', doc, cdt, cdn, 1);
-  if(doc.lead) unhide_field(['lead_name','address_display','contact_mobile','contact_email','territory']);  
+  if(doc.lead) unhide_field(['lead_name','address_display','contact_mobile','contact_email','territory']);
 }
 
 
@@ -166,7 +166,7 @@
 cur_frm.cscript['Make Sales Order'] = function() {
   var doc = cur_frm.doc;
 
-  if (doc.docstatus == 1) { 
+  if (doc.docstatus == 1) {
     var n = createLocal("Sales Order");
     $c('dt_map', args={
       'docs':compress_doclist([locals["Sales Order"][n]]),
@@ -186,17 +186,17 @@
   var callback = function(r,rt){
     if(r.message){
       doc.quotation_to = r.message;
-      
+
 		  if(doc.quotation_to == 'Lead') {
-  			  unhide_field(['lead','lead_name','address_display','contact_mobile','contact_email','territory']);			  
+  			  unhide_field(['lead','lead_name','address_display','contact_mobile','contact_email','territory']);
 		  }
 		  else if(doc.quotation_to == 'Customer') {
 			  unhide_field(['customer','customer_address','contact_person','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
 		  }
 		  refresh_many(['quotation_details','quotation_to','customer','customer_address','contact_person','lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group','order_type']);
     }
-  }   
-  
+  }
+
   $c_obj(make_doclist(doc.doctype, doc.name),'pull_enq_details','',callback);
 
 }
@@ -217,7 +217,7 @@
 //-------------------------
 cur_frm.cscript['Declare Order Lost'] = function(){
   var qtn_lost_dialog;
-  
+
   set_qtn_lost_dialog = function(doc,cdt,cdn){
     qtn_lost_dialog = new Dialog(400,400,'Add Quotation Lost Reason');
     qtn_lost_dialog.make_body([
@@ -226,26 +226,26 @@
       ['HTML', 'Response', '<div class = "comment" id="update_quotation_dialog_response"></div>'],
       ['HTML', 'Add Reason', '<div></div>']
     ]);
-    
+
     var add_reason_btn1 = $a($i(qtn_lost_dialog.widgets['Add Reason']), 'button', 'button');
     add_reason_btn1.innerHTML = 'Add';
     add_reason_btn1.onclick = function(){ qtn_lost_dialog.add(); }
-    
+
     var add_reason_btn2 = $a($i(qtn_lost_dialog.widgets['Add Reason']), 'button', 'button');
     add_reason_btn2.innerHTML = 'Cancel';
     $y(add_reason_btn2,{marginLeft:'4px'});
     add_reason_btn2.onclick = function(){ qtn_lost_dialog.hide();}
-    
+
     qtn_lost_dialog.onshow = function() {
       qtn_lost_dialog.widgets['Quotation Lost Reason'].value = '';
       $i('update_quotation_dialog_response').innerHTML = '';
     }
-    
+
     qtn_lost_dialog.add = function() {
       // sending...
       $i('update_quotation_dialog_response').innerHTML = 'Processing...';
       var arg =  strip(qtn_lost_dialog.widgets['Quotation Lost Reason'].value);
-      var call_back = function(r,rt) { 
+      var call_back = function(r,rt) {
         if(r.message == 'true'){
           $i('update_quotation_dialog_response').innerHTML = 'Done';
           qtn_lost_dialog.hide();
@@ -254,11 +254,11 @@
       if(arg) $c_obj(make_doclist(cur_frm.doc.doctype, cur_frm.doc.name),'declare_order_lost',arg,call_back);
       else msgprint("Please add Quotation lost reason");
     }
-  }  
-  
+  }
+
   if(!qtn_lost_dialog){
     set_qtn_lost_dialog(doc,cdt,cdn);
-  }  
+  }
   qtn_lost_dialog.show();
 }
 
@@ -284,23 +284,23 @@
 
 //===================== Quotation to validation - either customer or lead mandatory ====================
 cur_frm.cscript.quot_to_validate = function(doc,cdt,cdn){
-  
+
   if(doc.quotation_to == 'Lead'){
-  
+
     if(!doc.lead){
-      alert("Lead is mandatory.");  
-      validated = false; 
+      alert("Lead is mandatory.");
+      validated = false;
     }
   }
   else if(doc.quotation_to == 'Customer'){
-   
+
     if(!doc.customer){
       alert("Customer is mandatory.");
       validated = false;
     }
-    
+
   }
- 
+
 }
 
 //===================validation function =================================
@@ -308,3 +308,35 @@
 cur_frm.cscript.validate = function(doc,cdt,cdn){
   cur_frm.cscript.quot_to_validate(doc,cdt,cdn);
 }
+
+//================ Last Quoted Price and Last Sold Price suggestion ======================
+cur_frm.fields_dict['quotation_details'].grid.get_field('item_code').get_query= function(doc, cdt, cdn) {
+  var d = locals[cdt][cdn];
+  if(doc.customer)
+    return repl("SELECT i.name,i.item_code,concat('Last quoted at - ',cast(quote_rate as char)) as quote_rate,concat('Last sold at - ',cast(sales_rate as char)) as sales_rate FROM\
+		(\
+			select item_code,name from tabItem where tabItem.%(key)s like '%s'\
+		)i\
+		left join\
+		(\
+			select q.item_code,q.quote_rate from\
+			(\
+				select q.transaction_date,qd.item_code,basic_rate as quote_rate from `tabQuotation Detail` qd, `tabQuotation` q where q.name=qd.parent and q.docstatus=1 and customer='%(cust)s'\
+			)q,\
+			(\
+				select qd.item_code,max(transaction_date) as transaction_date from `tabQuotation Detail` qd, `tabQuotation` q where q.name=qd.parent and q.docstatus=1 and customer='%(cust)s' group by qd.item_code\
+			)m where q.item_code=m.item_code and q.transaction_date=m.transaction_date\
+		)q on i.item_code=q.item_code\
+		left join\
+		(\
+			select r.item_code,r.sales_rate from\
+			(\
+				select r.voucher_date,rd.item_code,basic_rate as sales_rate from `tabRV Detail` rd, `tabReceivable Voucher` r where r.name=rd.parent and r.docstatus=1 and customer='%(cust)s'\
+			)r,\
+			(\
+				select rd.item_code,max(voucher_date) as voucher_date from `tabRV Detail` rd, `tabReceivable Voucher` r where r.name=rd.parent and r.docstatus=1 and customer='%(cust)s' group by rd.item_code\
+			)m where r.item_code=m.item_code and r.voucher_date=m.voucher_date\
+		)s on i.item_code=s.item_code ORDER BY item_code LIMIT 50",{cust:doc.customer});
+  else
+    return "SELECT name, item_code FROM tabItem WHERE `tabItem`.%(key)s LIKE '%s' ORDER BY tabItem.item_code DESC LIMIT 50";
+}
\ No newline at end of file
diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py
index acdca50..78454ee 100644
--- a/selling/doctype/sales_common/sales_common.py
+++ b/selling/doctype/sales_common/sales_common.py
@@ -576,7 +576,7 @@
 		"""
 			Checks if there is overflow condering a relaxation tolerance
 		"""
-		
+	
 		# check if overflow is within tolerance
 		tolerance = self.get_tolerance_for(item['item_code'])
 		overflow_percent = ((item[args['compare_field']] - item[args['compare_ref_field']]) / item[args['compare_ref_field']] * 100)
@@ -606,12 +606,14 @@
 					select item_code, `%(compare_ref_field)s`, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s` 
 					where `%(compare_ref_field)s` < `%(compare_field)s` and name="%(name)s" and docstatus=1
 					""" % args, as_dict=1)
-				
 				if item:
 					item = item[0]
 					item['idx'] = d.idx
 					item['compare_ref_field'] = args['compare_ref_field']
-					if no_tolerance:
+
+					if not item[args['compare_ref_field']]:
+						msgprint("As %(compare_ref_field)s for item: %(item_code)s in %(parenttype)s: %(parent)s is zero, system will not check over-delivery or over-billed" % item)
+					elif no_tolerance:
 						item['reduce_by'] = item[args['compare_field']] - item[args['compare_ref_field']]
 						msgprint("""
 							Row #%(idx)s: Max %(compare_ref_field)s allowed for <b>Item %(item_code)s</b> against 
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index 587933c..e684bed 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -28,7 +28,7 @@
     if(doc.quotation) cur_frm.cscript['Pull Quotation Details'](doc,cdt,cdn);
   } else {
 	cur_frm.cscript.load_taxes(doc, cdt, cdn);
-  } 
+  }
 }
 
 // Refresh
@@ -70,7 +70,6 @@
   } else {
   	hide_field(['Repair Sales Order', 'Send SMS', 'message', 'customer_mobile_no'])
   }
-
 }
 
 //customer
diff --git a/accounts/doctype/loan/__init__.py b/setup/doctype/features_setup/__init__.py
similarity index 100%
copy from accounts/doctype/loan/__init__.py
copy to setup/doctype/features_setup/__init__.py
diff --git a/setup/doctype/features_setup/features_setup.py b/setup/doctype/features_setup/features_setup.py
new file mode 100644
index 0000000..3a549d9
--- /dev/null
+++ b/setup/doctype/features_setup/features_setup.py
@@ -0,0 +1,13 @@
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+
+	def validate(self):
+		"""
+			update settings in defaults
+		"""
+		from webnotes.model import default_fields 
+		from webnotes.utils import set_default
+		for key in self.doc.fields:
+			if key not in default_fields:
+				set_default(key, self.doc.fields[key])
diff --git a/setup/doctype/features_setup/features_setup.txt b/setup/doctype/features_setup/features_setup.txt
new file mode 100644
index 0000000..224d175
--- /dev/null
+++ b/setup/doctype/features_setup/features_setup.txt
@@ -0,0 +1,288 @@
+# DocType, Features Setup
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-08-25 16:53:56',
+		'docstatus': 0,
+		'modified': '2011-08-31 15:05:53',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1314783102',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'issingle': 1,
+		'module': 'Setup',
+		'name': '__common__',
+		'name_case': 'Title Case',
+		'section_style': 'Simple',
+		'show_in_menu': 1,
+		'version': 16
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Features Setup',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Features Setup',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Features Setup
+	{
+		'doctype': 'DocType',
+		'name': 'Features Setup'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'Administrator'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Materials'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track item in sales and purchase documents based on their serial nos. This is can also used to track warranty details of the product.',
+		'doctype': 'DocField',
+		'fieldname': 'item_searial_nos',
+		'fieldtype': 'Check',
+		'label': 'Item Serial Nos'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track items in sales and purchase documents with batch nos<br><b>Preferred Industry: Chemicals etc</b>',
+		'doctype': 'DocField',
+		'fieldname': 'item_batch_nos',
+		'fieldtype': 'Check',
+		'label': 'Item Batch Nos'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track brand name in the following documents<br>\nDelivery Note, Enuiry, Indent, Item, Purchase Order, Purchase Voucher, Purchaser Receipt, Quotation, Receivable Voucher, Sales BOM, Sales Order, Serial No',
+		'doctype': 'DocField',
+		'fieldname': 'brands',
+		'fieldtype': 'Check',
+		'label': 'Brands'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': '1. To maintain the customer wise item code and to make them searchable based on their code use this option',
+		'doctype': 'DocField',
+		'fieldname': 'item_advanced',
+		'fieldtype': 'Check',
+		'label': 'Item Advanced'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If Sale BOM is defined, the actual BOM of the Pack is displayed as table.\nAvailable in Delivery Note and Sales Order',
+		'doctype': 'DocField',
+		'fieldname': 'packing_details',
+		'fieldtype': 'Check',
+		'label': 'Packing Detials'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To get Item Group in details table',
+		'doctype': 'DocField',
+		'fieldname': 'item_group_in_details',
+		'fieldtype': 'Check',
+		'label': 'Item Groups in Details'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Sales and Purchase'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'All export related fields like currency, conversion rate, export total, export grand total etc are available in <br>\nDelivery Note, POS, Quotation, Sales Invoice, Sales Order etc.',
+		'doctype': 'DocField',
+		'fieldname': 'exports',
+		'fieldtype': 'Check',
+		'label': 'Exports'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'All import related fields like currency, conversion rate, import total, import grand total etc are available in <br>\nPurchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc.',
+		'doctype': 'DocField',
+		'fieldname': 'imports',
+		'fieldtype': 'Check',
+		'label': 'Imports'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Field available in Delivery Note, Quotation, Receivable Voucher, Sales Order',
+		'doctype': 'DocField',
+		'fieldname': 'discounts',
+		'fieldtype': 'Check',
+		'label': 'Discounts'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track any installation or commissioning related work after sales',
+		'doctype': 'DocField',
+		'fieldname': 'after_sales_installations',
+		'fieldtype': 'Check',
+		'label': 'After Sale Installations'
+	},
+
+	# DocField
+	{
+		'description': 'Available in \nBill Of Materials, Delivery Note, Payable Voucher, Production Order, Purchase Order, Purchase Receipt, Receivable Voucher, Sales Order, Stock Entry, Timesheet',
+		'doctype': 'DocField',
+		'fieldname': 'projects',
+		'fieldtype': 'Check',
+		'label': 'Projects'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you have Sales Team and Sale Partners (Channel Partners)  they can be tagged and maintain their contribution in the sales activity',
+		'doctype': 'DocField',
+		'fieldname': 'sales_extras',
+		'fieldtype': 'Check',
+		'label': 'Sales Extras'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Production'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you involve in manufacturing activity<br>\nEnables item <b>Is Manufactured</b>',
+		'doctype': 'DocField',
+		'fieldname': 'manufacturing',
+		'fieldtype': 'Check',
+		'label': 'Manufacturing'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you follow Quality Inspection<br>\nEnables item QA Required and QA No in Purchase Receipt',
+		'doctype': 'DocField',
+		'fieldname': 'quality',
+		'fieldtype': 'Check',
+		'label': 'Quality'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To enable <b>Point of Sale</b> features',
+		'doctype': 'DocField',
+		'fieldname': 'pos',
+		'fieldtype': 'Check',
+		'label': 'Point of Sale'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Miscelleneous'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you have long print formats, this feature can be used to split the page to be printed on multiple pages with all headers and footers on each page',
+		'doctype': 'DocField',
+		'fieldname': 'page_break',
+		'fieldtype': 'Check',
+		'label': 'Page Break'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Enables <b>More Info.</b> in all documents',
+		'doctype': 'DocField',
+		'fieldname': 'more_info',
+		'fieldtype': 'Check',
+		'label': 'More Info'
+	}
+]
\ No newline at end of file
diff --git a/setup/doctype/update_series/update_series.py b/setup/doctype/update_series/update_series.py
new file mode 100644
index 0000000..dcca22a
--- /dev/null
+++ b/setup/doctype/update_series/update_series.py
@@ -0,0 +1,41 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, 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, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist 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, is_testing, msgprint, errprint
+
+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
+
+# -----------------------------------------------------------------------------------------
+
+class DocType:
+  def __init__(self, doc, doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+
+  def update_series(self):
+    series = sql("select name,current from `tabSeries` where name = %s", self.doc.prefix,as_dict = 1)
+    if series:
+      msgprint("This is going to update Series with Prefix : " + series[0]['name'] + " from Current : " + cstr(series[0]['current']) + " to Current : "+ cstr(self.doc.current))
+      sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.current,series[0]['name']))
+      msgprint("Series Updated Successfully")
+    else:
+      msgprint("Please Check Prefix as there is no such Prefix : "+ self.doc.prefix +" Or Try Insert Button")
+
+  def insert_series(self):
+    #sql("start transaction")
+    series = sql("select name,current from `tabSeries` where name = %s", self.doc.prefix, as_dict = 1)
+    if series:
+      msgprint("Series with Prefix : " + series[0]['name'] + "already in the system . Try Update Button")
+    else:
+      msgprint("This is going to Insert Series with Prefix : " + cstr(self.doc.prefix) + " Current: " + cstr(self.doc.current))
+      sql("insert into `tabSeries` (name,current) values ('%s','%s')" % (self.doc.prefix, self.doc.current))
+      msgprint("Series Inserted Successfully")
diff --git a/startup/startup.js b/startup/startup.js
index 1280e0f..942f4ef 100644
--- a/startup/startup.js
+++ b/startup/startup.js
@@ -12,8 +12,8 @@
 
 function startup_setup() {
 	pscript.is_erpnext_saas = cint(locals['Control Panel']['Control Panel'].sync_with_gateway)
-	
-	
+
+
 	if(get_url_arg('embed')) {
 		// hide header, footer
 		$dh(page_body.banner_area);
@@ -34,7 +34,7 @@
 	$td(page_body.wntoolbar.body_tab,0,0).innerHTML = '<i><b>erp</b>next</i>';
 	$y($td(page_body.wntoolbar.body_tab,0,0), {width:'140px', color:'#FFF', paddingLeft:'8px', paddingRight:'8px', fontSize:'14px'})
 	$dh(page_body.banner_area);
-	
+
 	// sidebar
 	// -------
 	pscript.startup_make_sidebar();
@@ -48,10 +48,9 @@
 		if(r.message){
 			login_file = 'http://' + r.message;
 		}
-		else {
-			
-			login_file = 'http://www.erpnext.com';
-			}
+		else if(pscript.is_erpnext_saas) {
+			login_file = 'https://www.erpnext.com';
+		}
 		// setup toolbar
 		pscript.startup_setup_toolbar();
 	}
@@ -66,10 +65,10 @@
 	var callback = function(r,rt) {
 		// menu
 		var ml = r.message;
-		
+
 		// clear
 		page_body.left_sidebar.innerHTML = '';
-		
+
 		for(var m=0; m<ml.length; m++){
 			if(ml[m]) {
 				new SidebarItem(ml[m]);
@@ -80,13 +79,13 @@
 			$(div).html('[edit]').click(pscript.startup_set_module_order)
 		}
 		nav_obj.observers.push({notify:function(t,dt,dn) { pscript.select_sidebar_menu(t, dt, dn); }});
-		
+
 		// select current
 		var no = nav_obj.ol[nav_obj.ol.length-1];
 		if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
 			pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
 	}
-	$c_obj('Home Control', 'get_modules', '', callback);	
+	$c_obj('Home Control', 'get_modules', '', callback);
 }
 
 // ====================================================================
@@ -98,13 +97,13 @@
 
 pscript.select_sidebar_menu = function(t, dt, dn) {
 	// get menu item
-	if(menu_item_map[t][dt]) {			
+	if(menu_item_map[t][dt]) {
 		// select
 		menu_item_map[t][dt].select();
 	} else {
 		// none found :-( Unselect
 		if(cur_menu_pointer)
-			cur_menu_pointer.deselect();		
+			cur_menu_pointer.deselect();
 	}
 }
 
@@ -116,19 +115,19 @@
 
 MenuPointer = function(parent, label) {
 
-	this.wrapper = $a(parent, 'div', '', {padding:'0px', cursor:'pointer', margin:'2px 0px'}); 
+	this.wrapper = $a(parent, 'div', '', {padding:'0px', cursor:'pointer', margin:'2px 0px'});
 	$br(this.wrapper, '3px');
-		
-	this.tab = make_table($a(this.wrapper, 'div'), 1, 2, '100%', ['', '11px'], {height:'22px', 
+
+	this.tab = make_table($a(this.wrapper, 'div'), 1, 2, '100%', ['', '11px'], {height:'22px',
 		verticalAlign:'middle', padding:'0px'}, {borderCollapse:'collapse', tableLayout:'fixed'});
 
 	$y($td(this.tab, 0, 0), {padding:'0px 4px', color:'#444', whiteSpace:'nowrap'});
-	
+
 	// triangle border (?)
 	this.tab.triangle_div = $a($td(this.tab, 0, 1), 'div','', {
-		borderColor: body_background + ' ' + body_background + ' ' + body_background + ' ' + 'transparent', 
+		borderColor: body_background + ' ' + body_background + ' ' + body_background + ' ' + 'transparent',
 		borderWidth:'11px', borderStyle:'solid', height:'0px', width:'0px', marginRight:'-11px'});
-	
+
 	this.label_area = $a($td(this.tab, 0, 0), 'span', '', '', label);
 
 	$(this.wrapper)
@@ -136,7 +135,7 @@
 			function() { if(!this.selected)$bg(this, '#eee'); } ,
 			function() { if(!this.selected)$bg(this, body_background); }
 		)
-		
+
 	$y($td(this.tab, 0, 0), {borderBottom:'1px solid #ddd'});
 
 }
@@ -151,14 +150,14 @@
 
 	if(cur_menu_pointer && cur_menu_pointer != this)
 		cur_menu_pointer.deselect();
-	
+
 	cur_menu_pointer = this;
 }
 
 // ====================================================================
 
 MenuPointer.prototype.deselect = function() {
-	$y($td(this.tab, 0, 0), {color:'#444', borderBottom:'1px solid #ddd'}); 
+	$y($td(this.tab, 0, 0), {color:'#444', borderBottom:'1px solid #ddd'});
 	$gr(this.wrapper, body_background, body_background);
 	this.selected = 0;
 }
@@ -177,19 +176,19 @@
 
 	this.body = $a(this.wrapper, 'div');
 	this.tab = make_table(this.body, 1, 2, '100%', ['24px', null], {verticalAlign:'middle'}, {tableLayout:'fixed'});
-	
+
 	// icon
 	var ic = $a($td(this.tab, 0, 0), 'div', 'module-icons module-icons-' + det.module_label.toLowerCase(), {marginLeft:'3px', marginBottom:'-2px'});
 
 	// pointer table
-	this.pointer = new MenuPointer($td(this.tab, 0, 1), det.module_label); 
+	this.pointer = new MenuPointer($td(this.tab, 0, 1), det.module_label);
 	$y($td(this.pointer.tab, 0, 0), {fontWeight:'bold'});
-	
+
 	// for page type
 	if(det.module_page) {
 		menu_item_map.Page[det.module_page] = this.pointer;
 	}
-	
+
 	// items area
 	this.items_area = $a(this.wrapper, 'div');
 
@@ -204,14 +203,14 @@
 	if(this.det.module_page) {
 		// page type
 		this.pointer.select();
-		
+
 		$item_set_working(me.pointer.label_area);
 		loadpage(this.det.module_page, function() { $item_done_working(me.pointer.label_area); });
-		
+
 	} else {
 		// show sub items
 		this.toggle();
-	}	
+	}
 }
 
 // ====================================================================
@@ -226,7 +225,7 @@
 
 SidebarItem.prototype.toggle = function() {
 	if(this.loading) return;
-	
+
 	if(this.is_open) {
 		this.collapse();
 	} else {
@@ -235,7 +234,7 @@
 		this.is_open = 1;
 		$fg(this.pointer.label_area, '#000')
 		//this.pointer.select(1);
-		
+
 		// close existing open
 		if(cur_sidebar_item && cur_sidebar_item != this) {
 			cur_sidebar_item.collapse();
@@ -249,7 +248,7 @@
 SidebarItem.prototype.show_items = function() {
 	this.loading = 1;
 	var me = this;
-	
+
 	$item_set_working(this.pointer.label_area);
 	var callback = function(r,rt){
 		me.loaded = 1;
@@ -257,10 +256,10 @@
 		var smi = null;
 		var has_reports = 0;
 		var has_tools = 0;
-		
+
 		// widget code
 		$item_done_working(me.pointer.label_area);
-		
+
 		if(r.message.il) {
 			me.il = r.message.il;
 
@@ -269,13 +268,13 @@
 				if(me.il[i].doc_type == 'Forms') {
 					if(in_list(profile.can_read, me.il[i].doc_name)) {
 						var smi = new SidebarModuleItem(me, me.il[i]);
-	
+
 						menu_item_map['Form'][me.il[i].doc_name] = smi.pointer;
 						menu_item_map['List'][me.il[i].doc_name] = smi.pointer;
 					}
 				}
 				if(me.il[i].doc_type=='Reports') has_reports = 1;
-				if(in_list(['Single DocType', 'Pages', 'Setup Forms'], me.il[i].doc_type)) has_tools = 1;				
+				if(in_list(['Single DocType', 'Pages', 'Setup Forms'], me.il[i].doc_type)) has_tools = 1;
 			}
 			// reports
 			if(has_reports) {
@@ -292,7 +291,7 @@
 				// add to menu-item mapper
 				menu_item_map['Page'][me.det.module_label + ' Tools'] = smi.pointer;
 			}
-			
+
 			// custom reports
 			if(r.message.custom_reports.length) {
 				me.il = add_lists(r.message.il, r.message.custom_reports);
@@ -302,7 +301,7 @@
 				menu_item_map['Page'][me.det.module_label + ' Custom Reports'] = smi.pointer;
 
 			}
-	
+
 		}
 		$(me.items_area).slideDown();
 
@@ -310,9 +309,9 @@
 		var no = nav_obj.ol[nav_obj.ol.length-1];
 		if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
 			pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
-		
+
 	}
-	
+
 	$c_obj('Home Control', 'get_module_details', me.det.name, callback);
 }
 
@@ -324,7 +323,7 @@
 	var me = this;
 	var label = this.det.module_label + ' ' + sec_type;
 	var type_map = {'Reports':'Reports', 'Custom Reports':'Custom Reports', 'Pages':'Tools', 'Single DocType':'Tools', 'Setup Forms':'Tools'}
-	
+
 	if(page_body.pages[label]) {
 		loadpage(label, null, 1);
 	} else {
@@ -332,10 +331,10 @@
 		var page = page_body.add_page(label);
 		this.wrapper = $a(page,'div','layout_wrapper');
 
-		
+
 		// head
 		this.head = new PageHeader(this.wrapper, label);
-		
+
 		// body
 		this.body1 = $a(this.wrapper, 'div', '', {marginTop:'16px'});
 
@@ -343,18 +342,18 @@
 		var add_link = function(det) {
 			var div = $a(me.body1, 'div', '', {marginBottom:'6px'});
 			var span = $a(div, 'span', 'link_type');
-			
+
 			// tag the span
 			span.innerHTML = det.display_name; span.det = det;
 			if(sec_type=='Reports' || sec_type=='Custom Reports') {
 				// Reports
 				// -------
 				span.onclick = function() { loadreport(this.det.doc_name, this.det.display_name); }
-				
+
 			} else {
 				// Tools
 				// -----
-				
+
 				if(det.doc_type=='Pages') {
 					// Page
 					if(det.click_function) {
@@ -365,18 +364,18 @@
 					}
 				} else if(det.doc_type=='Setup Forms') {
 					// Doc Browser
-					span.onclick = function() { loaddocbrowser(this.det.doc_name); }				
+					span.onclick = function() { loaddocbrowser(this.det.doc_name); }
 				} else {
 					// Single
-					span.onclick = function() { loaddoc(this.det.doc_name, this.det.doc_name); }				
+					span.onclick = function() { loaddoc(this.det.doc_name, this.det.doc_name); }
 				}
 			}
 		}
-		
+
 		// item list
 		for(var i=0; i<me.il.length;i++){
 			if(type_map[me.il[i].doc_type] == sec_type) {
-				add_link(me.il[i]);	
+				add_link(me.il[i]);
 			}
 		}
 		loadpage(label, null, 1);
@@ -391,11 +390,11 @@
 SidebarModuleItem = function(si, det) {
 	this.det = det;
 	var me= this;
-	
-	this.pointer = new MenuPointer(si.items_area, get_doctype_label(det.doc_name)); 
+
+	this.pointer = new MenuPointer(si.items_area, get_doctype_label(det.doc_name));
 	$y(si.items_area, {marginLeft:'32px'})
 	$y($td(this.pointer.tab, 0, 0), {fontSize:'11px'});
-			
+
 	this.pointer.wrapper.onclick = function() {
 		if(me.det.doc_type=='Forms')
 			loaddocbrowser(det.doc_name);
@@ -417,10 +416,10 @@
 		}
 		$c_obj('Home Control', 'set_module_order', JSON.stringify(mdict), function(r,rt) { pscript.startup_make_sidebar(); } )
 	}
-	
+
 	var callback = function(r, rt) {
 		var ml = [];
-		for(var i=0; i<r.message.length; i++) { 
+		for(var i=0; i<r.message.length; i++) {
 			var det = r.message[i];
 			ml.push([det[1], det[2], (det[3]!='No' ? 0 : 1), det[0]]);
 		}
@@ -428,7 +427,7 @@
 			'<br><b>Note:</b> <i>These changes will apply to all users!</i>', ml, update_order, 1);
 	}
 	$c_obj('Home Control', 'get_module_order', '', callback)
-	
+
 }
 
 // ====================================================================
@@ -438,7 +437,7 @@
 	// Profile
   // ---------
   $td(menu_tab,0,0).innerHTML = '<a style="font-weight: bold; color: #FFF" href="javascript:'+"loadpage('profile-settings')"+'">'+user_fullname+'</a>';
-	
+
 	if(pscript.is_erpnext_saas){
 		// Help
   	// --------------
@@ -475,7 +474,7 @@
   var call_back = function(){
     if(nm == 'Sales Browser'){
       var sb_obj = new SalesBrowser();
-      sb_obj.set_val(chart_type);   
+      sb_obj.set_val(chart_type);
     }
     else if(nm == 'Accounts Browser')
       pscript.make_chart(chart_type);
@@ -502,7 +501,7 @@
 		var btn = this.page_head.add_button('Help', function() { loadpage(this.help_page) }, 1, 'ui-icon-help')
 		btn.help_page = help_page;
 	}
-	
+
 	if(callback) this.callback = function(){ callback(); }
 }
 
@@ -518,12 +517,12 @@
 // set user fullname
 // ====================================================================
 pscript.set_user_fullname = function(ele,username,get_latest){
-	
+
 	var set_it = function(){
 		if(ele)
 			ele.innerHTML = user_full_nm[username];
 	}
-	
+
 	if(get_latest){
 		$c_obj('Home Control','get_user_fullname',username, function(r,rt){ user_full_nm[username] = r.message; set_it(); });
 	}
@@ -531,7 +530,7 @@
 		if(user_full_nm[username]){
 			set_it();
 		}
-		
+
 		else
 			$c_obj('Home Control','get_user_fullname',username, function(r,rt){ user_full_nm[username] = r.message; set_it(); });
 	}
@@ -539,3 +538,183 @@
 
 // ====================================================================
 startup_setup();
+
+/* features setup "Dictionary", "Script"
+Dictionary Format
+	'projects': {
+		'Sales Order': {
+			'fields':['project_name'],
+			'sales_order_details':['projected_qty']
+		},
+		'Purchase Order': {
+			'fields':['project_name']
+		}
+	}
+// ====================================================================*/
+pscript.feature_dict = {
+	'projects': {
+		'Bill Of Materials': {'fields':['project_name']},
+		'Delivery Note': {'fields':['project_name']},
+		'Payable Voucher': {'fields':['project_name']},
+		'Production Order': {'fields':['project_name']},
+		'Purchase Order': {'fields':['project_name']},
+		'Purchase Receipt': {'fields':['project_name']},
+		'Receivable Voucher': {'fields':['project_name']},
+		'Sales Order': {'fields':['project_name']},
+		'Stock Entry': {'fields':['project_name']},
+		'Timesheet': {'timesheet_details':['project_name']}
+	},
+	'packing_details': {
+		'Delivery Note': {'fields':['packing_details','print_packing_slip'],'delivery_note_details':['no_of_packs','pack_gross_wt','pack_nett_wt','pack_no','pack_unit']},
+		'Sales Order': {'fields':['packing_details']}
+	},
+	'discounts': {
+		'Delivery Note': {'delivery_note_details':['adj_rate']},
+		'Quotation': {'quotation_details':['adj_rate']},
+		'Receivable Voucher': {'entries':['adj_rate']},
+		'Sales Order': {'sales_order_details':['adj_rate','ref_rate']}
+	},
+	'brands': {
+		'Delivery Note': {'delivery_note_details':['brand']},
+		'Indent': {'indent_details':['brand']},
+		'Item': {'fields':['brand']},
+		'Purchase Order': {'po_details':['brand']},
+		'Payable Voucher': {'entries':['brand']},
+		'Quotation': {'quotation_details':['brand']},
+		'Receivable Voucher': {'entries':['brand']},
+		'Sales BOM': {'fields':['new_item_brand']},
+		'Sales Order': {'sales_order_details':['brand']},
+		'Serial No': {'fields':['brand']}
+	},
+	'after_sales_installations': {
+		'Delivery Note': {'fields':['installation_status','per_installed'],'delivery_note_details':['installed_qty']}
+	},
+	'item_batch_nos': {
+		'Delivery Note': {'delivery_note_details':['batch_no']},
+		'Item': {'fields':['has_batch_no']},
+		'Purchase Receipt': {'purchase_receipt_details':['batch_no']},
+		'QA Inspection Report': {'fields':['batch_no']},
+		'Sales and Pruchase Return Wizard': {'return_details':['batch_no']},
+		'Receivable Voucher': {'entries':['batch_no']},
+		'Stock Entry': {'mtn_details':['batch_no']},
+		'Stock Ledger Entry': {'fields':['batch_no']}
+	},
+	'item_serial_nos': {
+		'Customer Issue': {'fields':['serial_no']},
+		'Delivery Note': {'delivery_note_details':['serial_no'],'packing_details':['serial_no']},
+		'Installation Note': {'installed_item_details':['serial_no']},
+		'Item': {'fields':['has_serial_no']},
+		'Maintenance Schedule': {'item_maintenance_details':['serial_no'],'maintenance_schedule_details':['serial_no']},
+		'Maintenance Visit': {'maintenance_visit_details':['serial_no']},
+		'Purchase Receipt': {'purchase_receipt_details':['serial_no']},
+		'QA Inspection Report': {'fields':['item_serial_no']},
+		'Sales and Pruchase Return Wizard': {'return_details':['serial_no']},
+		'Receivable Voucher': {'entries':['serial_no']},
+		'Stock Entry': {'mtn_details':['serial_no']},
+		'Stock Ledger Entry': {'fields':['serial_no']}
+	},
+	'item_group_in_details': {
+		'Delivery Note': {'delivery_note_details':['item_group']},
+		'Enquiry': {'enquiry_details':['item_group']},
+		'Indent': {'indent_details':['item_group']},
+		'Item': {'fields':['item_group']},
+		'Manage Account': {'fields':['default_item_group']},
+		'Purchase Order': {'po_details':['item_group']},
+		'Purchase Receipt': {'purchase_receipt_details':['item_group']},
+		'Purchase Voucher': {'entries':['item_group']},
+		'Quotation': {'quotation_details':['item_group']},
+		'Receivable Voucher': {'entries':['item_group']},
+		'Sales BOM': {'fields':['serial_no']},
+		'Sales Order': {'sales_order_details':['item_group']},
+		'Serial No': {'fields':['item_group']},
+		'Sales Partner': {'partner_target_details':['item_group']},
+		'Sales Person': {'target_details':['item_group']},
+		'Territory': {'target_details':['item_group']}
+	},
+	'page_break': {
+		'Delivery Note': {'delivery_note_details':['page_break'],'packing_details':['page_break']},
+		'Indent': {'indent_details':['page_break']},
+		'Purchase Order': {'po_details':['page_break']},
+		'Purchase Receipt': {'purchase_receipt_details':['page_break']},
+		'Purchase Voucher': {'entries':['page_break']},
+		'Quotation': {'quotation_details':['page_break']},
+		'Receivable Voucher': {'entries':['page_break']},
+		'Sales Order': {'sales_order_details':['page_break']}
+	},
+	'exports': {
+		'Delivery Note': {'fields':['Note','conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'delivery_note_details':['base_ref_rate','export_amount','export_rate']},
+		'POS Setting': {'fields':['conversion_rate','currency']},
+		'Quotation': {'fields':['Note HTML','OT Notes','conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'quotation_details':['base_ref_rate','export_amount','export_rate']},
+		'Receivable Voucher': {'fields':['conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'entries':['base_ref_rate','export_amount','export_rate']},
+		'Item': {'ref_rate_details':['ref_currency']},
+		'Sales BOM': {'fields':['currency']},
+		'Sales Order': {'fields':['Note1','OT Notes','conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'sales_order_details':['base_ref_rate','export_amount','export_rate']}
+	},
+	'imports': {
+		'Payable Voucher': {'fields':['conversion_rate','currency','grand_total_import','in_words_import','net_total_import','other_charges_added_import','other_charges_deducted_import'],'entries':['import_amount','import_rate']},
+		'Purchase Order': {'fields':['Note HTML','conversion_rate','currency','grand_total_import','in_words_import','net_total_import','other_charges_added_import','other_charges_deducted_import'],'po_details':['import_amount','import_rate']},
+		'Purchase Receipt': {'fields':['conversion_rate','currency','grand_total_import','in_words_import','net_total_import','other_charges_added_import','other_charges_deducted_import'],'purchase_receipt_details':['import_amount','import_rate']},
+		'Supplier Quotation': {'fields':['conversion_rate','currency']}
+	},
+	'item_advanced': {
+		'Item': {'fields':['item_customer_details']}
+	},
+	'sales_extras': {
+		'Address': {'fields':['sales_partner']},
+		'Contact': {'fields':['sales_partner']},
+		'Customer': {'fields':['sales_team']},
+		'Delivery Note': {'fields':['sales_team','Packing List']},
+		'Item': {'fields':['item_customer_details']},
+		'Receivable Voucher': {'fields':['sales_team']},
+		'Sales Order': {'fields':['sales_team','Packing List']}
+	},
+	'more_info': {
+		'Customer': {'fields':['More Info']},
+		'Delivery Note': {'fields':['More Info']},
+		'Enquiry': {'fields':['More Info']},
+		'Indent': {'fields':['More Info']},
+		'Lead': {'fields':['More Info']},
+		'Payable Voucher': {'fields':['More Info']},
+		'Purchase Order': {'fields':['More Info']},
+		'Purchase Receipt': {'fields':['More Info']},
+		'Quotation': {'fields':['More Info']},
+		'Receivable Voucher': {'fields':['More Info']},
+		'Sales Order': {'fields':['More Info']},
+		'Serial No': {'fields':['More Info']},
+		'Supplier': {'fields':['More Info']}
+	},
+	'quality': {
+		'Item': {'fields':['Item Inspection Criteria','inspection_required']},
+		'Purchase Receipt': {'purchase_receipt_details':['qa_no']}
+	},
+	'manufacturing': {
+		'Item': {'fields':['Manufacturing']}
+	},
+	'pos': {
+		'Receivable Voucher': {'fields':['is_pos']}
+	}
+}
+
+$(document).bind('form_refresh', function() {
+	for(sys_feat in sys_defaults)
+	{
+		if(sys_defaults[sys_feat]=='0' && (sys_feat in pscript.feature_dict)) //"Features to hide" exists
+		{
+			if(cur_frm.doc.doctype in  pscript.feature_dict[sys_feat])
+			{
+				for(fort in pscript.feature_dict[sys_feat][cur_frm.doc.doctype])
+				{
+					if(fort=='fields')
+						hide_field(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort]);
+					else if(cur_frm.fields_dict[fort])
+					{
+						for(grid_field in pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort])
+							cur_frm.fields_dict[fort].grid.set_column_disp(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort][grid_field], false);
+					}
+					else
+						msgprint('Grid "'+fort+'" does not exists');
+				}
+			}
+		}
+	}
+})
diff --git a/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt b/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt
index ef9f0fc..e1579f9 100644
--- a/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt
+++ b/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt
@@ -14,7 +14,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Project',
-		'idx': 1,
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Project-Delivery Note',
@@ -26,13 +25,16 @@
 
 	# These values are common for all Field Mapper Detail
 	{
+		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
+		'from_field': 'customer',
 		'map': 'Yes',
 		'match_id': 0,
 		'name': '__common__',
 		'parent': 'Project-Delivery Note',
 		'parentfield': 'field_mapper_details',
-		'parenttype': 'DocType Mapper'
+		'parenttype': 'DocType Mapper',
+		'to_field': 'customer'
 	},
 
 	# These values are common for all DocType Mapper
@@ -52,67 +54,7 @@
 
 	# Field Mapper Detail
 	{
-		'checking_operator': '=',
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 1,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 2,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 3,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 4,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_no',
-		'idx': 5,
-		'to_field': 'contact_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'email_id',
-		'idx': 6,
-		'to_field': 'email_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 7,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 8,
-		'to_field': 'customer_group'
+		'doctype': 'Field Mapper Detail'
 	},
 
 	# Table Mapper Detail
diff --git a/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt b/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
index ff00655..54e272a 100644
--- a/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
+++ b/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
 		'modified': '2011-05-13 12:42:57',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -50,90 +50,24 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'supplier',
-		'idx': 1,
 		'match_id': 0,
 		'to_field': 'supplier'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_address',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'supplier_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'supplier_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'supplier_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
-		'idx': 9,
 		'match_id': 0,
 		'to_field': 'company'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'currency',
-		'idx': 11,
 		'match_id': 0,
 		'to_field': 'currency'
 	},
@@ -141,44 +75,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'warehouse',
-		'idx': 12,
-		'match_id': 1,
-		'to_field': 'warehouse'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 13,
-		'match_id': 0,
-		'to_field': 'terms'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_factor',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'conversion_factor'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 16,
 		'match_id': 1,
 		'to_field': 'prevdoc_detail_docname'
 	},
@@ -187,7 +84,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 17,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -196,26 +92,15 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 18,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'uom',
-		'idx': 19,
-		'match_id': 1,
-		'to_field': 'uom'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'item_code',
-		'idx': 20,
 		'match_id': 1,
 		'to_field': 'item_code'
 	},
@@ -223,26 +108,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 21,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 22,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
-		'idx': 23,
 		'match_id': 1,
 		'to_field': 'received_qty'
 	},
@@ -251,7 +117,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
-		'idx': 24,
 		'match_id': 1,
 		'to_field': 'qty'
 	},
@@ -260,7 +125,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.conversion_factor)',
-		'idx': 25,
 		'match_id': 1,
 		'to_field': 'stock_qty'
 	},
@@ -268,44 +132,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'purchase_rate',
-		'idx': 26,
-		'match_id': 1,
-		'to_field': 'purchase_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 27,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 28,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'import_rate',
-		'idx': 29,
-		'match_id': 1,
-		'to_field': 'import_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.import_rate)',
-		'idx': 30,
 		'match_id': 1,
 		'to_field': 'import_amount'
 	},
@@ -313,144 +140,16 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'schedule_date',
-		'idx': 31,
-		'match_id': 1,
-		'to_field': 'schedule_date'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.purchase_rate)',
-		'idx': 32,
 		'match_id': 1,
 		'to_field': 'amount'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 33,
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 34,
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'category',
-		'idx': 35,
-		'match_id': 2,
-		'to_field': 'category'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'add_deduct_tax',
-		'idx': 36,
-		'match_id': 2,
-		'to_field': 'add_deduct_tax'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 37,
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 38,
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 39,
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 39,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 40,
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 41,
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'cost_center',
-		'idx': 42,
-		'match_id': 2,
-		'to_field': 'cost_center'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 43,
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'project_name',
-		'idx': 44,
-		'match_id': 0,
-		'to_field': 'project_name'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'po_details',
 		'from_table': 'PO Detail',
-		'idx': 1,
 		'match_id': 1,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'reference_key': 'prevdoc_detail_docname',
@@ -463,7 +162,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Purchase Order',
-		'idx': 2,
 		'match_id': 0,
 		'reference_key': 'prevdoc_docname',
 		'to_table': 'Purchase Receipt',
@@ -475,7 +173,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'purchase_tax_details',
 		'from_table': 'Purchase Tax Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'purchase_tax_details',
 		'to_table': 'Purchase Tax Detail',
diff --git a/stock/DocType Mapper/Receivable Voucher-Delivery Note/Receivable Voucher-Delivery Note.txt b/stock/DocType Mapper/Receivable Voucher-Delivery Note/Receivable Voucher-Delivery Note.txt
index f05a93b..6688f2b 100755
--- a/stock/DocType Mapper/Receivable Voucher-Delivery Note/Receivable Voucher-Delivery Note.txt
+++ b/stock/DocType Mapper/Receivable Voucher-Delivery Note/Receivable Voucher-Delivery Note.txt
@@ -48,134 +48,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'currency',
-		'idx': 1,
-		'match_id': 0,
-		'to_field': 'currency'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'price_list_name',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'price_list_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'charge'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'terms'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 10,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 11,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 12,
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 13,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: flt(obj.qty) - flt(obj.delivered_qty)',
-		'idx': 15,
 		'match_id': 1,
 		'to_field': 'qty'
 	},
@@ -183,44 +56,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'base_ref_rate',
-		'idx': 16,
-		'match_id': 1,
-		'to_field': 'base_ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'ref_rate',
-		'idx': 17,
-		'match_id': 1,
-		'to_field': 'ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'basic_rate',
-		'idx': 18,
-		'match_id': 1,
-		'to_field': 'basic_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 19,
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 20,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -229,7 +65,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 21,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -238,7 +73,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 22,
 		'match_id': 1,
 		'to_field': 'prevdoc_detail_docname'
 	},
@@ -246,17 +80,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 23,
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate)',
-		'idx': 24,
 		'match_id': 1,
 		'to_field': 'amount'
 	},
@@ -265,7 +89,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate)',
-		'idx': 25,
 		'match_id': 1,
 		'to_field': 'export_amount'
 	},
@@ -273,215 +96,15 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'adj_rate',
-		'idx': 26,
-		'match_id': 1,
-		'to_field': 'adj_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 27,
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'warehouse',
-		'idx': 28,
-		'match_id': 1,
-		'to_field': 'warehouse'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 29,
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 30,
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 31,
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 32,
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 33,
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 34,
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tax_amount',
-		'idx': 35,
-		'match_id': 2,
-		'to_field': 'tax_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total',
-		'idx': 36,
-		'match_id': 2,
-		'to_field': 'total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_person',
-		'idx': 37,
-		'match_id': 3,
-		'to_field': 'sales_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_percentage',
-		'idx': 38,
-		'match_id': 3,
-		'to_field': 'allocated_percentage'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_amount',
-		'idx': 39,
-		'match_id': 3,
-		'to_field': 'allocated_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 40,
-		'match_id': 0,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'campaign',
-		'idx': 41,
-		'match_id': 0,
-		'to_field': 'campaign'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_partner',
-		'idx': 42,
-		'match_id': 0,
-		'to_field': 'sales_partner'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer_address',
-		'idx': 43,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 44,
 		'match_id': 0,
 		'to_field': 'delivery_address'
 	},
 
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'net_total',
-		'idx': 45,
-		'match_id': 0,
-		'to_field': 'net_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total',
-		'idx': 46,
-		'match_id': 0,
-		'to_field': 'grand_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 47,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'project_name',
-		'idx': 48,
-		'match_id': 0,
-		'to_field': 'project_name'
-	},
-
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Receivable Voucher',
-		'idx': 1,
 		'match_id': 0,
 		'to_table': 'Delivery Note',
 		'validation_logic': 'docstatus=1'
@@ -492,7 +115,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'entries',
 		'from_table': 'RV Detail',
-		'idx': 2,
 		'match_id': 1,
 		'to_field': 'delivery_note_details',
 		'to_table': 'Delivery Note Detail',
@@ -504,7 +126,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'other_charges',
 		'from_table': 'RV Tax Detail',
-		'idx': 3,
 		'match_id': 2,
 		'to_field': 'other_charges',
 		'to_table': 'RV Tax Detail',
@@ -516,7 +137,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_team',
 		'from_table': 'Sales Team',
-		'idx': 4,
 		'match_id': 3,
 		'to_field': 'sales_team',
 		'to_table': 'Sales Team',
diff --git a/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt b/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt
index dad93dd..f93fadf 100644
--- a/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt
+++ b/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
 		'modified': '2011-05-16 11:48:19',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -49,7 +49,6 @@
 		'checking_operator': '>=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'transaction_date',
-		'idx': 1,
 		'map': 'No',
 		'match_id': 0,
 		'to_field': 'transaction_date'
@@ -58,18 +57,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'price_list_name',
-		'idx': 2,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'price_list_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 3,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'sales_order_no'
@@ -80,7 +68,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'company',
-		'idx': 4,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'company'
@@ -88,70 +75,9 @@
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 5,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'po_date',
-		'idx': 6,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'po_date'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'po_no',
-		'idx': 7,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'po_no'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_partner',
-		'idx': 8,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'sales_partner'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'commission_rate',
-		'idx': 9,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'commission_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total_commission',
-		'idx': 10,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'total_commission'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'currency',
-		'idx': 11,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'currency'
@@ -160,18 +86,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'conversion_rate',
-		'idx': 12,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'conversion_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'shipping_address_name',
-		'idx': 14,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'customer_address'
@@ -180,28 +95,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 15,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 16,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'shipping_address',
-		'idx': 17,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'address_display'
@@ -210,58 +104,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 18,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 19,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 20,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 22,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge',
-		'idx': 23,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'charge'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 24,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
@@ -271,7 +114,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 25,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
@@ -281,7 +123,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 26,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'prevdoc_detail_docname'
@@ -290,18 +131,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'export_rate',
-		'idx': 27,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'export_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate)',
-		'idx': 28,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'export_amount'
@@ -309,90 +139,9 @@
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 29,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 30,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 31,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_group',
-		'idx': 32,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'stock_uom',
-		'idx': 33,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'base_ref_rate',
-		'idx': 34,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'base_ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'ref_rate',
-		'idx': 35,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'ref_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'adj_rate',
-		'idx': 36,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'adj_rate'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'basic_rate',
-		'idx': 37,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'basic_rate'
@@ -402,7 +151,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: flt(obj.qty) - flt(obj.delivered_qty)',
-		'idx': 38,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'qty'
@@ -412,7 +160,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate)',
-		'idx': 39,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'amount'
@@ -422,7 +169,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'reserved_warehouse',
-		'idx': 40,
 		'map': 'Yes',
 		'match_id': 1,
 		'to_field': 'warehouse'
@@ -431,188 +177,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_tax_rate',
-		'idx': 41,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'item_tax_rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'charge_type',
-		'idx': 42,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'charge_type'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'row_id',
-		'idx': 43,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'row_id'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_wise_tax_detail',
-		'idx': 44,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'item_wise_tax_detail'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 45,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'account_head',
-		'idx': 46,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'account_head'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rate',
-		'idx': 47,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'rate'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tax_amount',
-		'idx': 48,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'tax_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'total',
-		'idx': 49,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'idx',
-		'idx': 50,
-		'map': 'Yes',
-		'match_id': 2,
-		'to_field': 'idx'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'net_total',
-		'idx': 51,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'net_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'other_charges_total',
-		'idx': 52,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'other_charges_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total',
-		'idx': 53,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'grand_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rounded_total',
-		'idx': 54,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'rounded_total'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'in_words',
-		'idx': 55,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'in_words'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'grand_total_export',
-		'idx': 56,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'grand_total_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'rounded_total_export',
-		'idx': 57,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'rounded_total_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'in_words_export',
-		'idx': 58,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'in_words_export'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'allocated_amount',
-		'idx': 59,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'customer_mobile_no'
@@ -620,100 +185,9 @@
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_amount',
-		'idx': 60,
-		'map': 'Yes',
-		'match_id': 3,
-		'to_field': 'allocated_amount'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'allocated_percentage',
-		'idx': 60,
-		'map': 'Yes',
-		'match_id': 3,
-		'to_field': 'allocated_percentage'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'sales_person',
-		'idx': 61,
-		'map': 'Yes',
-		'match_id': 3,
-		'to_field': 'sales_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'source',
-		'idx': 62,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'source'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'campaign',
-		'idx': 63,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'campaign'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'brand',
-		'idx': 64,
-		'map': 'Yes',
-		'match_id': 1,
-		'to_field': 'brand'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'terms',
-		'idx': 65,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'terms'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 66,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'tc_name',
-		'idx': 66,
-		'map': 'Yes',
-		'match_id': 0,
-		'to_field': 'tc_name'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'project_name',
-		'idx': 67,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'project_name'
@@ -724,7 +198,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer',
-		'idx': 70,
 		'map': 'Yes',
 		'match_id': 0,
 		'to_field': 'customer'
@@ -735,7 +208,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_team',
 		'from_table': 'Sales Team',
-		'idx': 1,
 		'match_id': 3,
 		'to_field': 'sales_team',
 		'to_table': 'Sales Team',
@@ -747,7 +219,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'other_charges',
 		'from_table': 'RV Tax Detail',
-		'idx': 2,
 		'match_id': 2,
 		'to_field': 'other_charges',
 		'to_table': 'RV Tax Detail',
@@ -759,7 +230,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_order_details',
 		'from_table': 'Sales Order Detail',
-		'idx': 3,
 		'match_id': 1,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'reference_key': 'prevdoc_detail_docname',
@@ -772,7 +242,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Sales Order',
-		'idx': 4,
 		'match_id': 0,
 		'reference_key': 'prevdoc_docname',
 		'to_table': 'Delivery Note',
diff --git a/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt b/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt
new file mode 100644
index 0000000..97f57a9
--- /dev/null
+++ b/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt
@@ -0,0 +1,27 @@
+# Print Format, Delivery Note Packing List Wise
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-08-18 16:29:14',
+		'docstatus': 0,
+		'modified': '2011-08-23 13:24:12',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doctype': 'Print Format',
+		'html': "<html>\n<head>\n\n<script>\nfunction replaceAll(s,s1,s2){ return s.split(s1).join(s2);}\n\nfunction get_letter_head(){\n  var cp = locals['Control Panel']['Control Panel'];\n    if(cp.letter_head != 'None') {return cp.letter_head; }\n      else{ return ''};\n  }\n</script>\n<style>\n.cust_tbl { border-collapse:collapse; }\n.cust_tbl td { border:1px solid #848484; }\n</style>\n</head>\n\n<body>\n<script>\nreplaceAll(doc.print_packing_slip,'[HEADER GOES HERE]',get_letter_head());\n</script>\n</body>\n</html>",
+		'module': 'Stock',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Delivery Note Packing List Wise
+	{
+		'doctype': 'Print Format',
+		'name': 'Delivery Note Packing List Wise'
+	}
+]
\ No newline at end of file
diff --git a/stock/doctype/bin/bin.py b/stock/doctype/bin/bin.py
index 1a1eb70..65b8686 100644
--- a/stock/doctype/bin/bin.py
+++ b/stock/doctype/bin/bin.py
@@ -37,9 +37,13 @@
 		self.doc.projected_qty = flt(self.doc.actual_qty) + flt(self.doc.ordered_qty) + flt(self.doc.indented_qty) + flt(self.doc.planned_qty) - flt(self.doc.reserved_qty)
 
 		self.doc.save()
-
+			
+		
 		# update valuation for post dated entry
 		if actual_qty:
+			# check actual qty with total number of serial no
+			self.check_qty_with_serial_no()
+			
 			prev_sle = self.get_prev_sle(dt, posting_time, sle_id)
 			cqty = flt(prev_sle.get('bin_aqat', 0))
 			# Block if actual qty becomes negative
@@ -48,6 +52,19 @@
 
 			self.update_item_valuation(sle_id, dt, posting_time, serial_no, prev_sle)
 
+	def check_qty_with_serial_no(self):
+		"""
+			check actual qty with total number of serial no in store
+			Temporary validation added on: 18-07-2011
+		"""
+		if sql("select name from `tabItem` where ifnull(has_serial_no, 'No') = 'Yes' and name = '%s'" % self.doc.item_code):
+			sr_count = sql("select count(name) from `tabSerial No` where item_code = '%s' and warehouse = '%s' and status  ='In Store' and docstatus != 2" % (self.doc.item_code, self.doc.warehouse))[0][0]
+			if sr_count != self.doc.actual_qty:
+				msg = "Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store for item: '%s' and warehouse: '%s'" % (self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
+				if getattr(webnotes.defs,'admin_email_notification',1):
+					sendmail(['developers@iwebnotes.com'], sender='automail@webnotestech.com', subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])			
+				msgprint(msg, raise_exception=1)
+
 	# --------------------------------
 	# get first stock ledger entry
 	# --------------------------------
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index 3534dad..e5acd16 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -13,7 +13,7 @@
 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
@@ -24,7 +24,7 @@
     self.doclist = doclist
     self.tname = 'Delivery Note Detail'
     self.fname = 'delivery_note_details'
-    
+
     # Notification objects
     self.notify_obj = get_obj('Notification Control')
 
@@ -33,7 +33,7 @@
   def autoname(self):
     self.doc.name = make_autoname(self.doc.naming_series+'.#####')
 
-    
+
 # DOCTYPE TRIGGERS FUNCTIONS
 # ==============================================================================
 #************Fiscal Year Validation*****************************
@@ -48,21 +48,21 @@
   # *********** Get Commission rate of Sales Partner ****************
   def get_comm_rate(self, sales_partner):
     return get_obj('Sales Common').get_comm_rate(sales_partner, self)
-  
+
   # *************** Pull Sales Order Details ************************
   def pull_sales_order_details(self):
     self.validate_prev_docname()
     self.doc.clear_table(self.doclist,'other_charges')
-        
-    if self.doc.sales_order_no:        
+
+    if self.doc.sales_order_no:
       get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Detail', 'Delivery Note Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team']]")
     else:
-      msgprint("Please select Sales Order No. whose details need to be pulled")    
+      msgprint("Please select Sales Order No. whose details need to be pulled")
 
     return cstr(self.doc.sales_order_no)
 
-    
-  
+
+
   #-------------------set item details -uom and item group----------------
   def set_item_details(self):
     for d in getlist(self.doclist,'delivery_note_details'):
@@ -70,14 +70,14 @@
       if not d.stock_uom:    d.stock_uom = res and cstr(res[0][0]) or ''
       if not d.item_group:   d.item_group = res and cstr(res[0][1]) or ''
       d.save()
-      
+
   # ::::: Validates that Sales Order is not pulled twice :::::::
   def validate_prev_docname(self):
-    for d in getlist(self.doclist, 'delivery_note_details'): 
+    for d in getlist(self.doclist, 'delivery_note_details'):
       if self.doc.sales_order_no == d.prevdoc_docname:
         msgprint(cstr(self.doc.sales_order_no) + " sales order details have already been pulled. ")
         raise Exception, "Validation Error. "
-  
+
   #Set Actual Qty based on item code and warehouse
   #------------------------------------------------------
   def set_actual_qty(self):
@@ -91,14 +91,14 @@
   # -------------------------------------
   def get_tc_details(self):
     return get_obj('Sales Common').get_tc_details(self)
-  
+
   #pull project customer
   #-------------------------
   def pull_project_customer(self):
     res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name)
     if res:
       get_obj('DocType Mapper', 'Project-Delivery Note').dt_map('Project', 'Delivery Note', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Delivery Note']]")
-        
+
 # DELIVERY NOTE DETAILS TRIGGER FUNCTIONS
 # ================================================================================
 
@@ -119,10 +119,10 @@
     }
     return ret
 
-    
+
 # OTHER CHARGES TRIGGER FUNCTIONS
 # ====================================================================================
-  
+
   # *********** Get Tax rate if account type is TAX ********************
   def get_rate(self,arg):
     return get_obj('Sales Common').get_rate(arg)
@@ -137,7 +137,7 @@
   def get_other_charges(self):
     return get_obj('Sales Common').get_other_charges(self)
 
-    
+
   #check in manage account if sales order required or not.
   # ====================================================================================
   def so_required(self):
@@ -147,9 +147,9 @@
          if not d.prevdoc_docname:
            msgprint("Sales Order No. required against item %s"%d.item_code)
            raise Exception
-       
 
-    
+
+
 # VALIDATE
 # ====================================================================================
   def validate(self):
@@ -167,13 +167,16 @@
     sales_com_obj.make_packing_list(self,'delivery_note_details')
     get_obj('Stock Ledger').validate_serial_no(self, 'packing_details')
     sales_com_obj.validate_max_discount(self, 'delivery_note_details')             #verify whether rate is not greater than max discount
-    sales_com_obj.get_allocated_sum(self)  # this is to verify that the allocated % of sales persons is 100%    
+    sales_com_obj.get_allocated_sum(self)  # this is to verify that the allocated % of sales persons is 100%
     sales_com_obj.check_conversion_rate(self)
     # ::::::: Get total in Words ::::::::
     dcc = TransactionBase().get_company_currency(self.doc.company)
     self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)
     self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export)
-    
+
+    # ::::::: Set Net Weight of each Packing
+    self.update_pack_nett_weight()
+    self.print_packing_slip()
     # ::::::: Set actual qty for each item in selected warehouse :::::::
     self.update_current_stock()
     # :::::: set DN status :::::::
@@ -181,8 +184,7 @@
     self.doc.status = 'Draft'
     if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
     if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'
-    
- 
+
   # ************** Validate Mandatory *************************
   def validate_mandatory(self):
     # :::::::::: Amendment Date ::::::::::::::
@@ -198,20 +200,20 @@
       if not res:
         msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
         raise Exception
-            
+
   # Validate values with reference document
   #----------------------------------------
   def validate_reference_value(self):
     get_obj('DocType Mapper', 'Sales Order-Delivery Note', with_children = 1).validate_reference_value(self, self.doc.name)
-  
-	  
+
+
   # ******* Validate Previous Document Details ************
   def validate_prevdoc_details(self):
     for d in getlist(self.doclist,'delivery_note_details'):
-           
+
       prevdoc = d.prevdoc_doctype
       prevdoc_docname = d.prevdoc_docname
-      
+
       if prevdoc_docname and prevdoc:
         # ::::::::::: Validates Transaction Date of DN and previous doc (i.e. SO , PO, PR) *********
         trans_date = sql("select transaction_date from `tab%s` where name = '%s'" %(prevdoc,prevdoc_docname))[0][0]
@@ -259,7 +261,7 @@
       ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
       if d.prevdoc_doctype and d.prevdoc_detail_docname and ch and ch[0][0]=='Yes':
         self.validate_items_with_prevdoc(d)
-      
+
       # validates whether item is not entered twice
       e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '', d.batch_no or '']
       f = [d.item_code, d.description, d.prevdoc_docname or '']
@@ -297,8 +299,8 @@
     for d in getlist(self.doclist, 'packing_details'):
       bin = sql("select actual_qty, projected_qty from `tabBin` where item_code =  %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
       d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
-      d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0  
-      
+      d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
+
 
 # ON SUBMIT
 # =================================================================================================
@@ -322,7 +324,7 @@
     # on submit notification
     self.notify_obj.notify_contact('Delivery Note',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person)
 
-   
+
   # *********** Checks whether actual quantity is present in warehouse *************
   def check_qty_in_stock(self):
     for d in getlist(self.doclist, 'packing_details'):
@@ -334,7 +336,7 @@
 
 
 # ON CANCEL
-# =================================================================================================  
+# =================================================================================================
   def on_cancel(self):
     sales_com_obj = get_obj(dt = 'Sales Common')
     sales_com_obj.check_stop_sales_order(self)
@@ -345,14 +347,14 @@
     # :::::: set DN status :::::::
     set(self.doc, 'status', 'Cancelled')
 
-  
+
   # ******************** Check Next DocStatus **************************
   def check_next_docstatus(self):
     submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
     if submit_rv:
       msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
       raise Exception , "Validation Error."
-    
+
     submit_in = sql("select t1.name from `tabInstallation Note` t1, `tabInstalled Item Details` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
     if submit_in:
       msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
@@ -369,11 +371,11 @@
         if not d[0]:
           msgprint("Message: Please enter Warehouse for item %s as it is stock item."% d[1])
           raise Exception
-        # if prevdoc_doctype = "Sales Order" 
+        # if prevdoc_doctype = "Sales Order"
         if d[3] < 0 :
           # Reduce Reserved Qty from warehouse
           bin = get_obj('Warehouse', d[0]).update_bin(0, flt(update_stock) * flt(d[3]), 0, 0, 0, d[1], self.doc.transaction_date)
-          
+
         # Reduce actual qty from warehouse
         self.make_sl_entry(d, d[0], - flt(d[2]) , 0, update_stock)
     get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values)
@@ -383,7 +385,7 @@
   def get_item_list(self, is_stopped):
    return get_obj('Sales Common').get_item_list(self, is_stopped)
 
-	
+
   # ********************** Make Stock Entry ************************************
   def make_sl_entry(self, d, wh, qty, in_value, update_stock):
     self.values.append({
@@ -394,8 +396,8 @@
       'posting_time'        : self.doc.posting_time,
       'voucher_type'        : 'Delivery Note',
       'voucher_no'          : self.doc.name,
-      'voucher_detail_no'   : '', 
-      'actual_qty'          : qty, 
+      'voucher_detail_no'   : '',
+      'actual_qty'          : qty,
       'stock_uom'           : d[4],
       'incoming_rate'       : in_value,
       'company'             : self.doc.company,
@@ -403,9 +405,9 @@
       'is_cancelled'        : (update_stock==1) and 'No' or 'Yes',
       'batch_no'            : d[5],
       'serial_no'           : d[6]
-    })    
+    })
 
-  
+
   # SEND SMS
   # ============================================================================================
   def send_sms(self):
@@ -436,3 +438,44 @@
   # ===========================================
   def repair_delivery_note(self):
     get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self)
+
+  # Packing Slip Related
+  # ==========================================
+  def update_pack_nett_weight(self):
+      for d in getlist(self.doclist, 'delivery_note_details'):
+        if d.item_name:
+          item_wt = sql("select nett_weight from `tabItem` where item_name = '%s'" % (d.item_name))
+          d.pack_nett_wt = item_wt and flt(item_wt[0][0])*flt(d.qty) or 0
+
+  # ==========================================
+  def print_packing_slip(self):
+    prev_pack='0'
+    sno=0
+    html=''
+    tot_nett_wt,tot_gross_wt=0,0
+    for d in getlist(self.doclist, 'delivery_note_details'):
+      sno=sno+1
+      if sno!=1:#Footer goes here
+        html+='</table><table width="100%"><tr><td>CASE NO</td><td>'+cstr(d.pack_no)+'</td><td>NETT WT</td><td>'+cstr(tot_nett_wt)+'</td><td>CHECKED BY</td><td></td></tr><tr><td>SIZE</td><td></td><td>GROSS WT</td><td>'+cstr(tot_gross_wt)+'</td><td>PACKED BY</td><td></td></tr></table>'
+      if prev_pack!=d.pack_no: #Prepare Header Here
+        #Header code goes here
+        html+='<div align="center">[HEADER GOES HERE]</div><div><center><h2>Packing Slip</h2></center></div> <table width="100%"><tr><td>Order No.</td><td>'+cstr(self.doc.sales_order_no)+'</td><td>Shipping Marks</td><td>'+cstr(d.pack_no)+'</td></tr></table>'
+        html+='<table class="cust_tbl" style="page-break-after:always" width="100%"><tr><td>S.NO.</td><td>QUANTITY</td><td>CS.NO.</td><td>DESCRIPTION</td><td>WEIGHT</td><tr>'
+        sno=0
+        tot_nett_wt,to_gross_wt=flt(d.pack_nett_wt),flt(d.pack_gross_wt)
+      #Body code goes here
+      html+='<tr><td>'+cstr(sno+1)+'</td><td>'+cstr(d.qty)+'</td><td></td><td>'+d.item_code+'</td><td>'+cstr(d.pack_nett_wt)+'</td></tr>'
+      prev_pack=d.pack_no
+      tot_nett_wt+=flt(d.pack_nett_wt)
+      tot_gross_wt+=flt(d.pack_gross_wt)
+    html+='</html>'
+    self.doc.print_packing_slip=html
+
+
+
+
+
+
+
+
+
diff --git a/stock/doctype/delivery_note/delivery_note.txt b/stock/doctype/delivery_note/delivery_note.txt
index b77a6a5..1ab19e0 100644
--- a/stock/doctype/delivery_note/delivery_note.txt
+++ b/stock/doctype/delivery_note/delivery_note.txt
@@ -5,14 +5,23 @@
 	{
 		'creation': '2011-04-18 15:58:20',
 		'docstatus': 0,
-		'modified': '2011-08-09 17:10:45',
+		'modified': '2011-08-23 15:26:57',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Delivery Note',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
 	# These values are common for all DocType
 	{
-		'_last_update': '1311621379',
+		'_last_update': '1313665263',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
 		'document_type': 'Transaction',
@@ -27,15 +36,16 @@
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
 		'tag_fields': 'billing_status',
-		'version': 446
+		'version': 449
 	},
 
-	# These values are common for all DocField
+	# These values are common for all DocFormat
 	{
-		'doctype': 'DocField',
+		'doctype': 'DocFormat',
+		'format': 'Delivery Note Packing List Wise',
 		'name': '__common__',
 		'parent': 'Delivery Note',
-		'parentfield': 'fields',
+		'parentfield': 'formats',
 		'parenttype': 'DocType'
 	},
 
@@ -109,21 +119,8 @@
 
 	# DocPerm
 	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
 		'doctype': 'DocPerm',
 		'idx': 5,
-		'permlevel': 0,
-		'role': 'Sales Manager',
-		'submit': 1,
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 6,
 		'permlevel': 1,
 		'role': 'All'
 	},
@@ -131,11 +128,23 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 7,
+		'idx': 6,
 		'permlevel': 2,
 		'role': 'All'
 	},
 
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'idx': 1
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'idx': 2
+	},
+
 	# DocField
 	{
 		'colour': 'White:FFF',
@@ -1471,5 +1480,18 @@
 		'options': 'repair_delivery_note',
 		'permlevel': 0,
 		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'print_packing_slip',
+		'fieldtype': 'Text',
+		'hidden': 1,
+		'idx': 95,
+		'in_filter': 0,
+		'label': 'Print Packing Slip',
+		'permlevel': 0,
+		'print_hide': 0
 	}
 ]
\ No newline at end of file
diff --git a/stock/doctype/delivery_note_detail/delivery_note_detail.txt b/stock/doctype/delivery_note_detail/delivery_note_detail.txt
index 78aea32..a8fea20 100644
--- a/stock/doctype/delivery_note_detail/delivery_note_detail.txt
+++ b/stock/doctype/delivery_note_detail/delivery_note_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:08:58',
 		'docstatus': 0,
-		'modified': '2011-03-01 10:35:06',
+		'modified': '2011-08-22 12:11:51',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -21,7 +21,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 35
+		'version': 38
 	},
 
 	# These values are common for all DocField
@@ -104,25 +104,11 @@
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'no_of_packs',
-		'fieldtype': 'Int',
-		'idx': 5,
-		'label': 'No of Packs',
-		'oldfieldname': 'no_of_packs',
-		'oldfieldtype': 'Int',
-		'permlevel': 0,
-		'print_hide': 1,
-		'width': '100px'
-	},
-
-	# DocField
-	{
 		'default': '0.00',
 		'doctype': 'DocField',
 		'fieldname': 'qty',
 		'fieldtype': 'Currency',
-		'idx': 6,
+		'idx': 5,
 		'label': 'Quantity',
 		'oldfieldname': 'qty',
 		'oldfieldtype': 'Currency',
@@ -138,7 +124,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'ref_rate',
 		'fieldtype': 'Currency',
-		'idx': 7,
+		'idx': 6,
 		'label': 'Ref Rate',
 		'no_copy': 0,
 		'oldfieldname': 'ref_rate',
@@ -156,7 +142,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'adj_rate',
 		'fieldtype': 'Float',
-		'idx': 8,
+		'idx': 7,
 		'label': 'Discount (%)',
 		'oldfieldname': 'adj_rate',
 		'oldfieldtype': 'Float',
@@ -171,7 +157,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'export_rate',
 		'fieldtype': 'Currency',
-		'idx': 9,
+		'idx': 8,
 		'label': 'Rate',
 		'oldfieldname': 'export_rate',
 		'oldfieldtype': 'Currency',
@@ -187,7 +173,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'export_amount',
 		'fieldtype': 'Currency',
-		'idx': 10,
+		'idx': 9,
 		'label': 'Amount',
 		'oldfieldname': 'export_amount',
 		'oldfieldtype': 'Currency',
@@ -202,7 +188,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'base_ref_rate',
 		'fieldtype': 'Currency',
-		'idx': 11,
+		'idx': 10,
 		'label': 'Ref Rate*',
 		'oldfieldname': 'base_ref_rate',
 		'oldfieldtype': 'Currency',
@@ -217,7 +203,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'basic_rate',
 		'fieldtype': 'Currency',
-		'idx': 12,
+		'idx': 11,
 		'label': 'Rate*',
 		'oldfieldname': 'basic_rate',
 		'oldfieldtype': 'Currency',
@@ -233,7 +219,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'amount',
 		'fieldtype': 'Currency',
-		'idx': 13,
+		'idx': 12,
 		'label': 'Amount*',
 		'oldfieldname': 'amount',
 		'oldfieldtype': 'Currency',
@@ -248,7 +234,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'warehouse',
 		'fieldtype': 'Link',
-		'idx': 14,
+		'idx': 13,
 		'label': 'Warehouse',
 		'oldfieldname': 'warehouse',
 		'oldfieldtype': 'Link',
@@ -264,7 +250,8 @@
 		'doctype': 'DocField',
 		'fieldname': 'serial_no',
 		'fieldtype': 'Text',
-		'idx': 15,
+		'idx': 14,
+		'in_filter': 1,
 		'label': 'Serial No',
 		'no_copy': 1,
 		'oldfieldname': 'serial_no',
@@ -279,14 +266,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'batch_no',
 		'fieldtype': 'Link',
-		'idx': 16,
+		'idx': 15,
 		'label': 'Batch No',
 		'oldfieldname': 'batch_no',
 		'oldfieldtype': 'Link',
 		'options': 'Batch',
 		'permlevel': 0,
-		'print_hide': 1,
-		'search_index': 0
+		'print_hide': 1
 	},
 
 	# DocField
@@ -294,14 +280,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_group',
 		'fieldtype': 'Link',
-		'idx': 17,
+		'idx': 16,
 		'label': 'Item Group',
 		'oldfieldname': 'item_group',
 		'oldfieldtype': 'Link',
 		'options': 'Item Group',
 		'permlevel': 1,
-		'print_hide': 1,
-		'search_index': 0
+		'print_hide': 1
 	},
 
 	# DocField
@@ -309,23 +294,77 @@
 		'doctype': 'DocField',
 		'fieldname': 'brand',
 		'fieldtype': 'Link',
-		'idx': 18,
+		'idx': 17,
 		'label': 'Brand Name',
 		'oldfieldname': 'brand',
 		'oldfieldtype': 'Link',
 		'options': 'Brand',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0,
 		'width': '150px'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'pack_no',
+		'fieldtype': 'Data',
+		'idx': 18,
+		'label': 'Pack No',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pack_gross_wt',
+		'fieldtype': 'Float',
+		'idx': 19,
+		'label': 'Pack Gross Wt',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'weight_uom',
+		'fieldtype': 'Link',
+		'idx': 20,
+		'label': 'Weight UOM',
+		'options': 'UOM',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pack_nett_wt',
+		'fieldtype': 'Float',
+		'idx': 21,
+		'label': 'Pack Nett Wt',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'no_of_packs',
+		'fieldtype': 'Int',
+		'idx': 22,
+		'label': 'No of Packs',
+		'oldfieldname': 'no_of_packs',
+		'oldfieldtype': 'Int',
+		'permlevel': 0,
+		'print_hide': 1,
+		'width': '100px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'pack_unit',
 		'fieldtype': 'Data',
-		'idx': 19,
+		'idx': 23,
 		'label': 'Pack Unit',
 		'oldfieldname': 'pack_unit',
 		'oldfieldtype': 'Data',
@@ -339,7 +378,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'installed_qty',
 		'fieldtype': 'Currency',
-		'idx': 20,
+		'idx': 24,
 		'label': 'Installed Qty',
 		'no_copy': 1,
 		'oldfieldname': 'installed_qty',
@@ -354,7 +393,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'actual_qty',
 		'fieldtype': 'Currency',
-		'idx': 21,
+		'idx': 25,
 		'label': 'Available Qty at Warehouse',
 		'no_copy': 1,
 		'oldfieldname': 'actual_qty',
@@ -366,27 +405,10 @@
 
 	# DocField
 	{
-		'colour': 'White:FFF',
-		'default': '0.00',
-		'doctype': 'DocField',
-		'fieldname': 'billed_qty',
-		'fieldtype': 'Currency',
-		'idx': 22,
-		'label': 'Billed Qty',
-		'no_copy': 1,
-		'oldfieldname': 'billed_qty',
-		'oldfieldtype': 'Currency',
-		'permlevel': 1,
-		'print_hide': 1,
-		'width': '100px'
-	},
-
-	# DocField
-	{
 		'doctype': 'DocField',
 		'fieldname': 'billed_amt',
 		'fieldtype': 'Currency',
-		'idx': 23,
+		'idx': 26,
 		'label': 'Billed Amt',
 		'no_copy': 1,
 		'permlevel': 1,
@@ -401,7 +423,7 @@
 		'fieldname': 'prevdoc_docname',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 24,
+		'idx': 27,
 		'in_filter': 1,
 		'label': 'Against Document No',
 		'no_copy': 1,
@@ -419,14 +441,14 @@
 		'fieldname': 'prevdoc_doctype',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 25,
+		'idx': 28,
 		'in_filter': 1,
 		'label': 'Document Type',
 		'oldfieldname': 'prevdoc_doctype',
 		'oldfieldtype': 'Data',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
@@ -436,7 +458,7 @@
 		'fieldname': 'prevdoc_date',
 		'fieldtype': 'Date',
 		'hidden': 1,
-		'idx': 26,
+		'idx': 29,
 		'in_filter': 1,
 		'label': 'Against Document Date',
 		'oldfieldname': 'prevdoc_date',
@@ -451,14 +473,14 @@
 		'fieldname': 'prevdoc_detail_docname',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 27,
+		'idx': 30,
 		'in_filter': 1,
 		'label': 'Against Document Detail No',
 		'oldfieldname': 'prevdoc_detail_docname',
 		'oldfieldtype': 'Data',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 1,
+		'search_index': 0,
 		'width': '150px'
 	},
 
@@ -468,7 +490,7 @@
 		'fieldname': 'item_tax_rate',
 		'fieldtype': 'Small Text',
 		'hidden': 1,
-		'idx': 28,
+		'idx': 31,
 		'label': 'Item Tax Rate',
 		'oldfieldname': 'item_tax_rate',
 		'oldfieldtype': 'Small Text',
@@ -482,7 +504,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'page_break',
 		'fieldtype': 'Check',
-		'idx': 29,
+		'idx': 32,
 		'label': 'Page Break',
 		'oldfieldname': 'page_break',
 		'oldfieldtype': 'Check',
diff --git a/stock/doctype/item/item.js b/stock/doctype/item/item.js
index 3c02629..691e259 100644
--- a/stock/doctype/item/item.js
+++ b/stock/doctype/item/item.js
@@ -1,17 +1,17 @@
 cur_frm.cscript.refresh = function(doc) {
 	// make sensitive fields(has_serial_no, is_stock_item, valuation_method)
 	// read only if any stock ledger entry exists
-	
+
 	if ((!doc.__islocal) && (doc.is_stock_item == 'Yes')) {
 		var callback = function(r, rt) {
 			if (r.message == 'exists') permlevel = 1;
 			else permlevel = 0;
-				
+
 			set_field_permlevel('has_serial_no', permlevel);
 			set_field_permlevel('is_stock_item', permlevel);
 			set_field_permlevel('valuation_method', permlevel);
 		}
-		$c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback); 
+		$c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback);
 	}
 }
 
@@ -24,25 +24,25 @@
 
 // Expense Account
 // ---------------------------------
-cur_frm.fields_dict['purchase_account'].get_query = function(doc){ 
+cur_frm.fields_dict['purchase_account'].get_query = function(doc){
   return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Debit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`is_pl_account` = "Yes" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50'
 }
 
-// Income Account 
+// Income Account
 // --------------------------------
 cur_frm.fields_dict['default_income_account'].get_query = function(doc) {
   return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Credit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`is_pl_account` = "Yes" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`account_type` ="Income Account" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50'
 }
 
 
-// Purchase Cost Center 
+// Purchase Cost Center
 // -----------------------------
 cur_frm.fields_dict['cost_center'].get_query = function(doc) {
   return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY  `tabCost Center`.`name` ASC LIMIT 50'
 }
 
 
-// Sales Cost Center 
+// Sales Cost Center
 // -----------------------------
 cur_frm.fields_dict['default_sales_cost_center'].get_query = function(doc) {
   return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY  `tabCost Center`.`name` ASC LIMIT 50'
@@ -66,7 +66,7 @@
 
 cur_frm.cscript.IGHelp = function(doc,dt,dn){
   var call_back = function(){
-    var sb_obj = new SalesBrowser();        
+    var sb_obj = new SalesBrowser();
     sb_obj.set_val('Item Group');
 
   }
@@ -79,21 +79,40 @@
 // in the "alternate_description" field
 cur_frm.cscript['Add Image'] = function(doc, dt, dn) {
 	if(!doc.file_list) {
-		msgprint('Please attach a file first!'); 
+		msgprint('Please attach a file first!');
 	}
-	
+
 	var f = doc.file_list.split('\n')[0];
 	var fname = f.split(',')[0];
 	var fid = f.split(',')[1];
 	if(!in_list(['jpg','jpeg','gif','png'], fname.split('.')[1].toLowerCase())) {
 		msgprint('File must be of extension jpg, jpeg, gif or png'); return;
 	}
-	
+
 	doc.description_html = repl('<table style="width: 100%; table-layout: fixed;">'+
 	'<tr><td style="width:110px"><img src="%(imgurl)s" width="100px"></td>'+
 	'<td>%(desc)s</td></tr>'+
 	'</table>', {imgurl: wn.urllib.get_file_url(fid), desc:doc.description});
-	
+
 	refresh_field('description_html');
 }
+//===================== Quotation to validation - either customer or lead mandatory ====================
+cur_frm.cscript.weight_to_validate = function(doc,cdt,cdn){
 
+  if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom)
+  {
+    alert('Weight is mentioned,\nPlease mention "Weight UOM" too');
+    validated=0;
+  }
+}
+//===================validation function =================================
+
+cur_frm.cscript.validate = function(doc,cdt,cdn){
+  cur_frm.cscript.weight_to_validate(doc,cdt,cdn);
+}
+
+//===========Fill Default Currency in "Ref Rate Details====================
+cur_frm.fields_dict['ref_rate_details'].grid.onrowadd = function(doc, cdt, cdn){
+	locals[cdt][cdn].ref_currency = sys_defaults.currency;
+	refresh_field('ref_currency',cdn,'ref_rate_details');
+}
\ No newline at end of file
diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py
index b506541..28f1d12 100644
--- a/stock/doctype/item/item.py
+++ b/stock/doctype/item/item.py
@@ -13,7 +13,7 @@
 get_value = webnotes.conn.get_value
 in_transaction = webnotes.conn.in_transaction
 convert_to_lists = webnotes.conn.convert_to_lists
-	
+
 # -----------------------------------------------------------------------------------------
 
 
@@ -21,7 +21,7 @@
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
-		
+
 	def get_tax_rate(self, tax_type):
 		rate = sql("select tax_rate from tabAccount where name = %s", tax_type)
 		ret = {
@@ -39,14 +39,14 @@
 			if not self.doc.stock_uom:
 				msgprint("Please enter Stock UOM first.")
 				raise Exception
-			
+
 			if cstr(d.uom) in check_list:
 				msgprint("UOM %s has been entered more than once in Conversion Factor Details." % cstr(d.uom))
 				raise Exception
-			
+
 			if not cstr(d.uom) in check_list:
 				check_list.append(cstr(d.uom))
-							
+
 			if cstr(d.uom) == cstr(self.doc.stock_uom):
 				if flt(d.conversion_factor) != 1:
 					msgprint("Conversion Fator of UOM : %s should be equal to 1. As UOM : %s is Stock UOM of Item: %s." % ( cstr(d.uom), cstr(d.uom), cstr(self.doc.name)))
@@ -56,14 +56,14 @@
 			elif cstr(d.uom) != cstr(self.doc.stock_uom) and flt(d.conversion_factor) == 1:
 				msgprint("Conversion Factor of UOM : %s should not be equal to 1. As UOM : %s is not Stock UOM of Item: %s." % ( cstr(d.uom), cstr(d.uom), cstr(self.doc.name)))
 				raise Exception
-		
+
 		if not cstr(self.doc.stock_uom) in check_list :
 			child = addchild( self.doc, 'uom_conversion_details', 'UOM Conversion Detail', 1, self.doclist)
 			child.uom = self.doc.stock_uom
 			child.conversion_factor = 1
 			child.save()
 
-	
+
 	# Check whether Ref Rate is not entered twice for same Price List and Currency
 	def check_ref_rate_detail(self):
 		check_list=[]
@@ -73,7 +73,13 @@
 				raise Exception
 			else:
 				check_list.append([cstr(d.price_list_name),cstr(d.ref_currency)])
-				
+
+	# Append all the customer codes and insert into "customer_code" field of item table
+	def fill_customer_code(self):
+		cust_code=[]
+		for d in getlist(self.doclist,'item_customer_details'):
+			cust_code.append(d.ref_code)
+		self.doc.customer_code=','.join(cust_code)
 
 	# Check whether Tax Rate is not entered twice for same Tax Type
 	def check_item_tax(self):
@@ -89,7 +95,7 @@
 					msgprint("Rate is entered twice for Tax : '%s'." % (d.tax_type))
 					raise Exception
 				else:
-					check_list.append(d.tax_type)				
+					check_list.append(d.tax_type)
 
 	def check_for_active_boms(self, check):
 		if check in ['Is Active', 'Is Purchase Item']:
@@ -102,7 +108,7 @@
 			if bom and bom[0][0]:
 				msgprint("%s should be 'Yes'. As Item %s is present in one or many Active BOMs." % (cstr(check), cstr(self.doc.name)))
 				raise Exception
-		
+
 	def validate(self):
 		fl = {'is_manufactured_item'	:'Is Manufactured Item',
 					'is_sub_contracted_item':'Is Sub Contracted Item',
@@ -112,18 +118,19 @@
 			if cstr(self.doc.fields[d]) != 'Yes':
 				self.check_for_active_boms(check = fl[d])
 		self.check_ref_rate_detail()
+		self.fill_customer_code()
 		self.check_item_tax()
 		if not self.doc.min_order_qty:
 			self.doc.min_order_qty = 0
 		self.check_non_asset_warehouse()
-		
+
 		if self.doc.is_pro_applicable == 'Yes' and self.doc.is_manufactured_item != 'Yes':
 			msgprint("If making Production Order is allowed then, it should also allow to make Bill of Materials. Refer Manufacturing section.")
 			raise Exception
-			
+
 		if self.doc.is_pro_applicable == 'Yes' and self.doc.is_stock_item == 'No':
 			msgprint("As Production Order can be made for this Item, then Is Stock Item Should be 'Yes' as we maintain it's stock. Refer Manufacturing and Inventory section.", raise_exception=1)
-			
+
 		if self.doc.is_stock_item == "Yes" and not self.doc.default_warehouse:
 			msgprint("As we maintain stock of this item, its better to maintain default warehouse. To add default warehouse please go to 'Inventory' section. It will be fetched automatically while making Sales Order, Delivery Note, etc.. ", 1)
 
@@ -146,7 +153,7 @@
 			if flt(total_qty) < flt(self.doc.minimum_inventory_level):
 				msgprint("Your minimum inventory level is reached")
 				send_to = []
-				send = sql("select t1.email from `tabProfile` t1,`tabUserRole` t2 where t2.role IN ('Material Master Manager','Purchase Manager') and t2.parent = t1.name") 
+				send = sql("select t1.email from `tabProfile` t1,`tabUserRole` t2 where t2.role IN ('Material Master Manager','Purchase Manager') and t2.parent = t1.name")
 				for d in send:
 					send_to.append(d[0])
 				msg = '''
@@ -167,10 +174,10 @@
 		ret = {
 			'file_group'	:	file and file[0]['file_group'] or '',
 			'description'	:	file and file[0]['description'] or ''
-			
+
 		}
 		return ret
-		
+
 	def check_if_sle_exists(self):
 		"""
 			checks if any stock ledger entry exists for this item
@@ -178,7 +185,7 @@
 
 		sle = sql("select name from `tabStock Ledger Entry` where item_code = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name)
 		return sle and 'exists' or 'not exists'
-		
+
 	def on_rename(self,newdn,olddn):
-		sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))	
-		
+		sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))
+
diff --git a/stock/doctype/item/item.txt b/stock/doctype/item/item.txt
index ec42ff4..0d20f7b 100644
--- a/stock/doctype/item/item.txt
+++ b/stock/doctype/item/item.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2010-08-08 17:09:05',
 		'docstatus': 0,
-		'modified': '2011-05-30 15:22:32',
+		'modified': '2011-08-18 13:03:31',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1309508838',
+		'_last_update': '1313651083',
 		'allow_attach': 1,
 		'allow_trash': 1,
 		'autoname': 'field:item_code',
@@ -22,13 +22,13 @@
 		'max_attachments': 1,
 		'module': 'Stock',
 		'name': '__common__',
-		'search_fields': 'item_name,description,item_group',
+		'search_fields': 'item_name,description,item_group,customer_code',
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': '%(item_name)s',
 		'tag_fields': 'item_group',
-		'version': 153
+		'version': 161
 	},
 
 	# These values are common for all DocField
@@ -42,14 +42,12 @@
 
 	# These values are common for all DocPerm
 	{
-		'amend': 0,
 		'doctype': 'DocPerm',
 		'name': '__common__',
 		'parent': 'Item',
 		'parentfield': 'permissions',
 		'parenttype': 'DocType',
-		'read': 1,
-		'submit': 0
+		'read': 1
 	},
 
 	# DocType, Item
@@ -60,44 +58,53 @@
 
 	# DocPerm
 	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': 'DocPerm',
-		'permlevel': 0,
-		'role': 'Material User',
-		'write': 0
-	},
-
-	# DocPerm
-	{
+		'amend': 0,
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 1,
 		'permlevel': 1,
 		'role': 'Material Manager',
+		'submit': 0,
 		'write': 0
 	},
 
 	# DocPerm
 	{
+		'amend': 0,
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 2,
 		'permlevel': 0,
 		'role': 'Material Manager',
+		'submit': 0,
 		'write': 0
 	},
 
 	# DocPerm
 	{
+		'amend': 0,
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 3,
 		'permlevel': 1,
 		'role': 'Material User',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
+		'role': 'Material User',
+		'submit': 0,
 		'write': 0
 	},
 
@@ -114,7 +121,6 @@
 
 	# DocPerm
 	{
-		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 6,
@@ -136,13 +142,10 @@
 
 	# DocPerm
 	{
-		'cancel': 0,
-		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 8,
 		'permlevel': 1,
-		'role': 'System Manager',
-		'write': 0
+		'role': 'System Manager'
 	},
 
 	# DocField
@@ -197,7 +200,7 @@
 		'oldfieldtype': 'Data',
 		'permlevel': 0,
 		'reqd': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -241,8 +244,7 @@
 		'options': 'Brand',
 		'permlevel': 0,
 		'print_hide': 1,
-		'reqd': 0,
-		'search_index': 0
+		'reqd': 0
 	},
 
 	# DocField
@@ -285,7 +287,7 @@
 		'description': 'Generates HTML to include image (1st attachment) in the description',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 12,
+		'idx': 11,
 		'label': 'Add Image',
 		'permlevel': 0
 	},
@@ -294,7 +296,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 13,
+		'idx': 12,
 		'label': 'Inventory',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -307,14 +309,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'stock_uom',
 		'fieldtype': 'Link',
-		'idx': 14,
+		'idx': 13,
 		'label': 'Default UoM',
 		'oldfieldname': 'stock_uom',
 		'oldfieldtype': 'Link',
 		'options': 'UOM',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -325,7 +326,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_stock_item',
 		'fieldtype': 'Select',
-		'idx': 15,
+		'idx': 14,
 		'label': 'Is Stock Item',
 		'oldfieldname': 'is_stock_item',
 		'oldfieldtype': 'Select',
@@ -339,7 +340,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'valuation_method',
 		'fieldtype': 'Select',
-		'idx': 16,
+		'idx': 15,
 		'label': 'Valuation Method',
 		'oldfieldname': 'valuation_method',
 		'oldfieldtype': 'Select',
@@ -352,13 +353,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'default_warehouse',
 		'fieldtype': 'Link',
-		'idx': 17,
+		'idx': 16,
 		'label': 'Default Warehouse',
 		'oldfieldname': 'default_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
-		'permlevel': 0,
-		'search_index': 0
+		'permlevel': 0
 	},
 
 	# DocField
@@ -368,7 +368,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'tolerance',
 		'fieldtype': 'Currency',
-		'idx': 18,
+		'idx': 17,
 		'label': 'Allowance Percent',
 		'oldfieldname': 'tolerance',
 		'oldfieldtype': 'Currency',
@@ -380,7 +380,7 @@
 		'doctype': 'DocField',
 		'fieldname': 're_order_level',
 		'fieldtype': 'Currency',
-		'idx': 19,
+		'idx': 18,
 		'label': 'Re-Order Level',
 		'oldfieldname': 're_order_level',
 		'oldfieldtype': 'Currency',
@@ -395,7 +395,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'minimum_inventory_level',
 		'fieldtype': 'Currency',
-		'idx': 20,
+		'idx': 19,
 		'label': 'Minimum Inventory Level',
 		'oldfieldname': 'minimum_inventory_level',
 		'oldfieldtype': 'Currency',
@@ -412,7 +412,7 @@
 		'fieldname': 'min_order_qty',
 		'fieldtype': 'Currency',
 		'hidden': 0,
-		'idx': 21,
+		'idx': 20,
 		'label': 'Minimum Order Qty',
 		'oldfieldname': 'min_order_qty',
 		'oldfieldtype': 'Currency',
@@ -423,7 +423,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 22,
+		'idx': 21,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -437,7 +437,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_asset_item',
 		'fieldtype': 'Select',
-		'idx': 23,
+		'idx': 22,
 		'label': 'Is Asset Item',
 		'oldfieldname': 'is_asset_item',
 		'oldfieldtype': 'Select',
@@ -453,7 +453,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'has_batch_no',
 		'fieldtype': 'Select',
-		'idx': 24,
+		'idx': 23,
 		'label': 'Has Batch No',
 		'oldfieldname': 'has_batch_no',
 		'oldfieldtype': 'Select',
@@ -470,7 +470,8 @@
 		'doctype': 'DocField',
 		'fieldname': 'has_serial_no',
 		'fieldtype': 'Select',
-		'idx': 25,
+		'idx': 24,
+		'in_filter': 1,
 		'label': 'Has Serial No',
 		'oldfieldname': 'has_serial_no',
 		'oldfieldtype': 'Select',
@@ -484,7 +485,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'warranty_period',
 		'fieldtype': 'Data',
-		'idx': 26,
+		'idx': 25,
 		'label': 'Warranty Period (in days)',
 		'oldfieldname': 'warranty_period',
 		'oldfieldtype': 'Data',
@@ -496,7 +497,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'end_of_life',
 		'fieldtype': 'Date',
-		'idx': 27,
+		'idx': 26,
 		'label': 'End of Life',
 		'oldfieldname': 'end_of_life',
 		'oldfieldtype': 'Date',
@@ -505,10 +506,41 @@
 
 	# DocField
 	{
+		'doctype': 'DocField',
+		'fieldname': 'nett_weight',
+		'fieldtype': 'Float',
+		'idx': 27,
+		'label': 'Nett Weight',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'gross_weight',
+		'fieldtype': 'Float',
+		'idx': 28,
+		'label': 'Gross Weight',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'weight_uom',
+		'fieldtype': 'Link',
+		'idx': 29,
+		'label': 'Weight UOM',
+		'options': 'UOM',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 28,
+		'idx': 30,
 		'label': 'Purchase Details',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -522,7 +554,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_purchase_item',
 		'fieldtype': 'Select',
-		'idx': 29,
+		'idx': 31,
 		'label': 'Is Purchase Item',
 		'oldfieldname': 'is_purchase_item',
 		'oldfieldtype': 'Select',
@@ -538,7 +570,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'lead_time_days',
 		'fieldtype': 'Int',
-		'idx': 30,
+		'idx': 32,
 		'label': 'Lead Time Days',
 		'no_copy': 1,
 		'oldfieldname': 'lead_time_days',
@@ -553,13 +585,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'purchase_account',
 		'fieldtype': 'Link',
-		'idx': 31,
+		'idx': 33,
 		'label': 'Default Expense Account',
 		'oldfieldname': 'purchase_account',
 		'oldfieldtype': 'Link',
 		'options': 'Account',
 		'permlevel': 0,
-		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -570,13 +601,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_center',
 		'fieldtype': 'Link',
-		'idx': 32,
+		'idx': 34,
 		'label': 'Default Cost Center',
 		'oldfieldname': 'cost_center',
 		'oldfieldtype': 'Link',
 		'options': 'Cost Center',
-		'permlevel': 0,
-		'search_index': 0
+		'permlevel': 0
 	},
 
 	# DocField
@@ -586,7 +616,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'buying_cost',
 		'fieldtype': 'Currency',
-		'idx': 33,
+		'idx': 35,
 		'label': 'Buying Cost',
 		'no_copy': 1,
 		'oldfieldname': 'buying_cost',
@@ -600,7 +630,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'last_purchase_rate',
 		'fieldtype': 'Currency',
-		'idx': 34,
+		'idx': 36,
 		'label': 'Last Purchase Rate',
 		'no_copy': 1,
 		'oldfieldname': 'last_purchase_rate',
@@ -613,7 +643,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'standard_rate',
 		'fieldtype': 'Currency',
-		'idx': 35,
+		'idx': 37,
 		'label': 'Standard Rate',
 		'oldfieldname': 'standard_rate',
 		'oldfieldtype': 'Currency',
@@ -624,7 +654,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 36,
+		'idx': 38,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -635,7 +665,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'uom_conversion_details',
 		'fieldtype': 'Table',
-		'idx': 37,
+		'idx': 39,
 		'label': 'UOM Conversion Details',
 		'oldfieldname': 'uom_conversion_details',
 		'oldfieldtype': 'Table',
@@ -647,7 +677,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 38,
+		'idx': 40,
 		'label': 'Sales Details',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -661,7 +691,8 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_sales_item',
 		'fieldtype': 'Select',
-		'idx': 39,
+		'idx': 41,
+		'in_filter': 1,
 		'label': 'Is Sales Item',
 		'oldfieldname': 'is_sales_item',
 		'oldfieldtype': 'Select',
@@ -678,7 +709,8 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_service_item',
 		'fieldtype': 'Select',
-		'idx': 40,
+		'idx': 42,
+		'in_filter': 1,
 		'label': 'Is Service Item',
 		'oldfieldname': 'is_service_item',
 		'oldfieldtype': 'Select',
@@ -695,7 +727,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_sample_item',
 		'fieldtype': 'Select',
-		'idx': 41,
+		'idx': 43,
 		'label': 'Allow Samples',
 		'oldfieldname': 'is_sample_item',
 		'oldfieldtype': 'Select',
@@ -709,7 +741,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'max_discount',
 		'fieldtype': 'Currency',
-		'idx': 42,
+		'idx': 44,
 		'label': 'Max Discount (%)',
 		'oldfieldname': 'max_discount',
 		'oldfieldtype': 'Currency',
@@ -721,11 +753,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'default_income_account',
 		'fieldtype': 'Link',
-		'idx': 43,
+		'idx': 45,
 		'label': 'Default Income Account',
 		'options': 'Account',
-		'permlevel': 0,
-		'search_index': 0
+		'permlevel': 0
 	},
 
 	# DocField
@@ -733,11 +764,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'default_sales_cost_center',
 		'fieldtype': 'Link',
-		'idx': 44,
+		'idx': 46,
 		'label': 'Cost Center',
 		'options': 'Cost Center',
-		'permlevel': 0,
-		'search_index': 0
+		'permlevel': 0
 	},
 
 	# DocField
@@ -746,7 +776,7 @@
 		'fieldname': 'sales_rate',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 45,
+		'idx': 47,
 		'label': 'Sales Rate',
 		'oldfieldname': 'sales_rate',
 		'oldfieldtype': 'Currency',
@@ -757,7 +787,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 46,
+		'idx': 48,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -770,7 +800,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'ref_rate_details',
 		'fieldtype': 'Table',
-		'idx': 47,
+		'idx': 49,
 		'label': 'Ref Rate Details',
 		'oldfieldname': 'ref_rate_details',
 		'oldfieldtype': 'Table',
@@ -780,9 +810,21 @@
 
 	# DocField
 	{
+		'description': 'For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes',
+		'doctype': 'DocField',
+		'fieldname': 'item_customer_details',
+		'fieldtype': 'Table',
+		'idx': 50,
+		'label': 'Customer Codes',
+		'options': 'Item Customer Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 48,
+		'idx': 51,
 		'label': 'Item Tax',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -793,7 +835,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_tax',
 		'fieldtype': 'Table',
-		'idx': 49,
+		'idx': 52,
 		'label': 'Item Tax1',
 		'oldfieldname': 'item_tax',
 		'oldfieldtype': 'Table',
@@ -805,7 +847,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 50,
+		'idx': 53,
 		'label': 'Inspection Criteria',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -817,7 +859,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'inspection_required',
 		'fieldtype': 'Select',
-		'idx': 51,
+		'idx': 54,
 		'label': 'Inspection Required',
 		'no_copy': 0,
 		'oldfieldname': 'inspection_required',
@@ -832,7 +874,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_specification_details',
 		'fieldtype': 'Table',
-		'idx': 52,
+		'idx': 55,
 		'label': 'Item Specification Detail',
 		'oldfieldname': 'item_specification_details',
 		'oldfieldtype': 'Table',
@@ -844,7 +886,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 53,
+		'idx': 56,
 		'label': 'Manufacturing',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -858,7 +900,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_manufactured_item',
 		'fieldtype': 'Select',
-		'idx': 54,
+		'idx': 57,
 		'label': 'Allow Bill of Materials',
 		'oldfieldname': 'is_manufactured_item',
 		'oldfieldtype': 'Select',
@@ -873,14 +915,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'default_bom',
 		'fieldtype': 'Link',
-		'idx': 55,
+		'idx': 58,
 		'label': 'Default BOM',
 		'no_copy': 1,
 		'oldfieldname': 'default_bom',
 		'oldfieldtype': 'Link',
 		'options': 'Bill Of Materials',
-		'permlevel': 1,
-		'search_index': 0
+		'permlevel': 1
 	},
 
 	# DocField
@@ -891,7 +932,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_pro_applicable',
 		'fieldtype': 'Select',
-		'idx': 56,
+		'idx': 59,
 		'label': 'Allow Production Order',
 		'oldfieldname': 'is_pro_applicable',
 		'oldfieldtype': 'Select',
@@ -908,7 +949,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_sub_contracted_item',
 		'fieldtype': 'Select',
-		'idx': 57,
+		'idx': 60,
 		'label': 'Is Sub Contracted Item',
 		'oldfieldname': 'is_sub_contracted_item',
 		'oldfieldtype': 'Select',
@@ -923,9 +964,23 @@
 		'fieldname': 'file_list',
 		'fieldtype': 'Text',
 		'hidden': 1,
-		'idx': 59,
+		'idx': 61,
 		'label': 'File List',
 		'permlevel': 0,
 		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'customer_code',
+		'fieldtype': 'Data',
+		'hidden': 1,
+		'idx': 62,
+		'in_filter': 1,
+		'label': 'Customer Code',
+		'no_copy': 1,
+		'permlevel': 0,
+		'print_hide': 1
 	}
 ]
\ No newline at end of file
diff --git a/hr/doctype/salary_slip_control_panel/__init__.py b/stock/doctype/item_customer_detail/__init__.py
similarity index 100%
rename from hr/doctype/salary_slip_control_panel/__init__.py
rename to stock/doctype/item_customer_detail/__init__.py
diff --git a/stock/doctype/item_customer_detail/item_customer_detail.txt b/stock/doctype/item_customer_detail/item_customer_detail.txt
new file mode 100644
index 0000000..f53f18e
--- /dev/null
+++ b/stock/doctype/item_customer_detail/item_customer_detail.txt
@@ -0,0 +1,73 @@
+# DocType, Item Customer Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-08-18 11:38:43',
+		'docstatus': 0,
+		'modified': '2011-08-18 11:54:36',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'autoname': 'ITEMCUST/.#####',
+		'colour': 'White:FFF',
+		'description': 'For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes',
+		'doctype': 'DocType',
+		'in_create': 1,
+		'istable': 1,
+		'module': 'Stock',
+		'name': '__common__',
+		'read_only': 0,
+		'section_style': 'Tray',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 7
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'in_filter': 1,
+		'name': '__common__',
+		'parent': 'Item Customer Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocType, Item Customer Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Item Customer Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'customer_name',
+		'fieldtype': 'Link',
+		'idx': 1,
+		'label': 'Customer Name',
+		'oldfieldname': 'price_list_name',
+		'oldfieldtype': 'Select',
+		'options': 'Customer',
+		'width': '180px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'ref_code',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Ref Code',
+		'oldfieldname': 'ref_rate',
+		'oldfieldtype': 'Currency',
+		'width': '120px'
+	}
+]
\ No newline at end of file
diff --git a/stock/doctype/ref_rate_detail/ref_rate_detail.txt b/stock/doctype/ref_rate_detail/ref_rate_detail.txt
index 1774b08..3f9b5a7 100644
--- a/stock/doctype/ref_rate_detail/ref_rate_detail.txt
+++ b/stock/doctype/ref_rate_detail/ref_rate_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-08-08 17:09:19',
 		'docstatus': 0,
-		'modified': '2010-09-20 14:06:57',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-08-31 11:36:41',
+		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
@@ -23,7 +23,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 2
+		'version': 3
 	},
 
 	# These values are common for all DocField
@@ -34,7 +34,8 @@
 		'parent': 'Ref Rate Detail',
 		'parentfield': 'fields',
 		'parenttype': 'DocType',
-		'permlevel': 0
+		'permlevel': 0,
+		'search_index': 1
 	},
 
 	# DocType, Ref Rate Detail
@@ -48,13 +49,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'price_list_name',
 		'fieldtype': 'Select',
-		'idx': 1,
 		'label': 'Price List Name',
 		'oldfieldname': 'price_list_name',
 		'oldfieldtype': 'Select',
 		'options': 'link:Price List',
 		'reqd': 1,
-		'search_index': 1
+		'trigger': 'Client'
 	},
 
 	# DocField
@@ -62,12 +62,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'ref_rate',
 		'fieldtype': 'Currency',
-		'idx': 2,
 		'label': 'Ref Rate',
 		'oldfieldname': 'ref_rate',
 		'oldfieldtype': 'Currency',
-		'reqd': 0,
-		'search_index': 0
+		'reqd': 0
 	},
 
 	# DocField
@@ -75,12 +73,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'ref_currency',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Currency',
 		'oldfieldname': 'ref_currency',
 		'oldfieldtype': 'Select',
 		'options': 'link:Currency',
-		'reqd': 1,
-		'search_index': 1
+		'reqd': 1
 	}
 ]
\ No newline at end of file
diff --git a/stock/doctype/serial_no/serial_no.js b/stock/doctype/serial_no/serial_no.js
index 32620dd..a41113c 100644
--- a/stock/doctype/serial_no/serial_no.js
+++ b/stock/doctype/serial_no/serial_no.js
@@ -7,15 +7,16 @@
 
 // ************************************** refresh ***************************************************
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-  if(!doc.__islocal && doc.warehouse) set_field_permlevel('warehouse', 1);
-  if(!doc.__islocal && doc.item_code) set_field_permlevel('item_code', 1);
-  if(doc.__islocal) set_field_permlevel('status', 0);
+  if(!doc.__islocal) {
+    flds = ['item_code', 'warehouse', 'purchase_document_type', 'purchase_document_no', 'purchase_date', 'purchase_time', 'purchase_rate', 'supplier']
+    for(i=0;i<flds.length;i++) 
+      set_field_permlevel(flds[i], 1);
+  }
 }
 
 
 // ************************************** triggers **************************************************
 
-// -------------
 // item details
 // -------------
 cur_frm.add_fetch('item_code', 'item_name', 'item_name')
@@ -24,23 +25,12 @@
 cur_frm.add_fetch('item_code', 'description', 'description')
 cur_frm.add_fetch('item_code', 'warranty_period', 'warranty_period')
 
-
-// ---------
 // customer
 // ---------
 cur_frm.add_fetch('customer', 'customer_name', 'customer_name')
 cur_frm.add_fetch('customer', 'address', 'delivery_address')
 cur_frm.add_fetch('customer', 'territory', 'territory')
 
-
-// ---------
-// supplier
-// ---------
-//cur_frm.add_fetch('supplier', 'supplier_name', 'supplier_name')
-//cur_frm.add_fetch('customer', 'address', 'supplier_address')
-
-
-// ----------
 // territory
 // ----------
 cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) {
@@ -48,10 +38,8 @@
 }
 
 // Supplier
+//-------------
 cur_frm.cscript.supplier = function(doc,dt,dn) {
   if(doc.supplier) get_server_fields('get_default_supplier_address', JSON.stringify({supplier: doc.supplier}),'', doc, dt, dn, 1);
   if(doc.supplier) unhide_field(['supplier_name','address_display']);
 }
-
-
-
diff --git a/stock/doctype/serial_no/serial_no.py b/stock/doctype/serial_no/serial_no.py
index 9c99357..b242edb 100644
--- a/stock/doctype/serial_no/serial_no.py
+++ b/stock/doctype/serial_no/serial_no.py
@@ -16,39 +16,19 @@
 		self.doc = doc
 		self.doclist = doclist
 
-
-# ********************************* validate warranty / amc status ***************************************
-
-	# --------------------
-	# validate amc status
-	# --------------------
 	def validate_amc_status(self):
-		if self.doc.amc_expiry_date and getdate(self.doc.amc_expiry_date) >= datetime.date.today() and self.doc.maintenance_status == 'Out of AMC':
-			msgprint("AMC expiry date and maintenance status mismatch. Please verify")
-			raise Exception
-		elif (not self.doc.amc_expiry_date or getdate(self.doc.amc_expiry_date) < datetime.date.today()) and self.doc.maintenance_status == 'Under AMC':
-			msgprint("AMC expiry date and maintenance status mismatch. Please verify")
-			raise Exception
+		"""
+			validate amc status
+		"""
+		if (self.doc.maintenance_status == 'Out of AMC' and self.doc.amc_expiry_date and getdate(self.doc.amc_expiry_date) >= datetime.date.today()) or (self.doc.maintenance_status == 'Under AMC' and (not self.doc.amc_expiry_date or getdate(self.doc.amc_expiry_date) < datetime.date.today())):
+			msgprint("AMC expiry date and maintenance status mismatch. Please verify", raise_exception=1)
 
-
-	# -------------------------
-	# validate warranty status
-	# -------------------------
 	def validate_warranty_status(self):
-		if self.doc.warranty_expiry_date and getdate(self.doc.warranty_expiry_date) >= datetime.date.today() and self.doc.maintenance_status == 'Out of Warranty':
-			msgprint("Warranty expiry date and maintenance status mismatch. Please verify")
-			raise Exception
-		elif (not self.doc.warranty_expiry_date or getdate(self.doc.warranty_expiry_date) < datetime.date.today()) and self.doc.maintenance_status == 'Under Warranty':
-			msgprint("Warranty expiry date and maintenance status mismatch. Please verify")
-			raise Exception
-
-
-	# -------------------------------
-	# validate warranty / amc status
-	# -------------------------------
-	def validate_warranty_amc_status(self):
-		self.validate_warranty_status()
-		self.validate_amc_status()
+		"""
+			validate warranty status	
+		"""
+		if (self.doc.maintenance_status == 'Out of Warranty' and self.doc.warranty_expiry_date and getdate(self.doc.warranty_expiry_date) >= datetime.date.today()) or (self.doc.maintenance_status == 'Under Warranty' and (not self.doc.warranty_expiry_date or getdate(self.doc.warranty_expiry_date) < datetime.date.today())):
+			msgprint("Warranty expiry date and maintenance status mismatch. Please verify", raise_exception=1)
 
 
 	def validate_warehouse(self):
@@ -56,6 +36,9 @@
 			msgprint("Warehouse is mandatory if this Serial No is <b>In Store</b>", raise_exception=1)
 
 	def validate_item(self):
+		"""
+			Validate whether serial no is required for this item
+		"""
 		item = sql("select name, has_serial_no from tabItem where name = '%s'" % self.doc.item_code)
 		if not item:
 			msgprint("Item is not exists in the system", raise_exception=1)
@@ -67,7 +50,8 @@
 	# validate
 	# ---------
 	def validate(self):
-		self.validate_warranty_amc_status()
+		self.validate_warranty_status()
+		self.validate_amc_status()
 		self.validate_warehouse()
 		self.validate_item()
 
@@ -75,7 +59,7 @@
 	# ------------------------
 	# make stock ledger entry
 	# ------------------------
-	def make_stock_ledger_entry(self, update_stock):
+	def make_stock_ledger_entry(self, qty):
 		from webnotes.model.code import get_obj
 		values = [{
 			'item_code'				: self.doc.item_code,
@@ -86,12 +70,12 @@
 			'voucher_type'			: 'Serial No',
 			'voucher_no'			: self.doc.name,
 			'voucher_detail_no'	 	: '', 
-			'actual_qty'			: 1, 
+			'actual_qty'			: qty, 
 			'stock_uom'				: webnotes.conn.get_value('Item', self.doc.item_code, 'stock_uom'),
 			'incoming_rate'			: self.doc.purchase_rate,
 			'company'				: self.doc.company,
 			'fiscal_year'			: self.doc.fiscal_year,
-			'is_cancelled'			: update_stock and 'No' or 'Yes',
+			'is_cancelled'			: 'No', # is_cancelled is always 'No' because while deleted it can not find creation entry if it not created directly, voucher no != serial no.
 			'batch_no'				: '',
 			'serial_no'				: self.doc.name
 		}]
@@ -102,8 +86,8 @@
 	# on update
 	# ----------
 	def on_update(self):
-		if self.doc.warehouse and not sql("select name from `tabStock Ledger Entry` where serial_no = '%s'" % (self.doc.name)) and self.doc.status == 'In Store':
-			self.make_stock_ledger_entry(update_stock = 1)
+		if self.doc.localname and self.doc.warehouse and self.doc.status == 'In Store' and not sql("select name from `tabStock Ledger Entry` where serial_no = '%s' and ifnull(is_cancelled, 'No') = 'No'" % (self.doc.name)):
+			self.make_stock_ledger_entry(1)
 
 
 	# ---------
@@ -114,7 +98,7 @@
 			msgprint("Cannot trash Serial No : %s as it is already Delivered" % (self.doc.name), raise_exception = 1)
 		else:
 			webnotes.conn.set(self.doc, 'status', 'Not in Use')
-			self.make_stock_ledger_entry(update_stock = 0)
+			self.make_stock_ledger_entry(-1)
 
 
 	def on_cancel(self):
@@ -124,4 +108,4 @@
 	# on restore
 	# -----------
 	def on_restore(self):
-		self.make_stock_ledger_entry(update_stock = 1)
+		self.make_stock_ledger_entry(1)
diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py
index 47f0394..024bd1f 100644
--- a/stock/doctype/stock_entry/stock_entry.py
+++ b/stock/doctype/stock_entry/stock_entry.py
@@ -355,6 +355,9 @@
 	# ----------------------------------
 	def update_serial_no(self, is_submit):
 		sl_obj = get_obj('Stock Ledger')
+		if is_submit:
+			sl_obj.validate_serial_no_warehouse(self, 'mtn_details')
+		
 		for d in getlist(self.doclist, 'mtn_details'):
 			if d.serial_no:
 				serial_nos = sl_obj.get_sr_no_list(d.serial_no)
@@ -363,7 +366,7 @@
 					if d.s_warehouse:
 						sl_obj.update_serial_delivery_details(self, d, serial_no, is_submit)
 					if d.t_warehouse:
-						sl_obj.update_serial_purchase_details(self, d, serial_no, is_submit, (self.doc.purpose in ['Material Transfer', 'Sales Return']) and 1 or 0)
+						sl_obj.update_serial_purchase_details(self, d, serial_no, is_submit, self.doc.purpose)
 					
 					if self.doc.purpose == 'Purchase Return':
 						delete_doc("Serial No", serial_no)
diff --git a/stock/doctype/stock_entry/stock_entry.txt b/stock/doctype/stock_entry/stock_entry.txt
index d7477c2..63f718b 100644
--- a/stock/doctype/stock_entry/stock_entry.txt
+++ b/stock/doctype/stock_entry/stock_entry.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2010-08-08 17:09:25',
 		'docstatus': 0,
-		'modified': '2011-07-11 12:48:52',
+		'modified': '2011-08-22 14:36:19',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1308741898',
+		'_last_update': '1311621379',
 		'allow_attach': 0,
 		'allow_copy': 0,
 		'allow_email': 0,
@@ -40,7 +40,7 @@
 		'subject': '%(remarks)s',
 		'tag_fields': 'purpose',
 		'use_template': 0,
-		'version': 243
+		'version': 245
 	},
 
 	# These values are common for all DocField
@@ -70,15 +70,15 @@
 
 	# DocPerm
 	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 1,
-		'permlevel': 0,
+		'permlevel': 1,
 		'role': 'Material Manager',
-		'submit': 1,
-		'write': 1
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
@@ -89,7 +89,7 @@
 		'doctype': 'DocPerm',
 		'idx': 2,
 		'permlevel': 1,
-		'role': 'Material Manager',
+		'role': 'Material User',
 		'submit': 0,
 		'write': 0
 	},
@@ -102,7 +102,7 @@
 		'doctype': 'DocPerm',
 		'idx': 3,
 		'permlevel': 0,
-		'role': 'Material User',
+		'role': 'Production User',
 		'submit': 1,
 		'write': 1
 	},
@@ -115,69 +115,60 @@
 		'doctype': 'DocPerm',
 		'idx': 4,
 		'permlevel': 1,
-		'role': 'Material User',
+		'role': 'Production User',
 		'submit': 0,
 		'write': 0
 	},
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 2,
+		'role': 'Production User',
+		'submit': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
 		'amend': 1,
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 5,
+		'idx': 6,
 		'permlevel': 0,
-		'role': 'Production User',
+		'role': 'Production Manager',
 		'submit': 1,
 		'write': 1
 	},
 
 	# DocPerm
 	{
-		'doctype': 'DocPerm',
-		'idx': 6,
-		'permlevel': 1,
-		'role': 'Production User'
-	},
-
-	# DocPerm
-	{
+		'amend': 0,
+		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 7,
-		'permlevel': 2,
-		'role': 'Production User',
-		'write': 1
+		'permlevel': 1,
+		'role': 'Production Manager',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
 	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 8,
-		'permlevel': 0,
-		'role': 'Production Manager',
-		'submit': 1,
-		'write': 1
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 9,
-		'permlevel': 1,
-		'role': 'Production Manager'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 10,
 		'permlevel': 2,
 		'role': 'Production Manager',
+		'submit': 0,
 		'write': 1
 	},
 
@@ -452,7 +443,7 @@
 		'oldfieldname': 'process',
 		'oldfieldtype': 'Select',
 		'options': '\nMaterial Transfer\nBackflush',
-		'permlevel': 2,
+		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
 		'search_index': 0,
@@ -474,7 +465,7 @@
 		'oldfieldname': 'production_order',
 		'oldfieldtype': 'Link',
 		'options': 'Production Order',
-		'permlevel': 2,
+		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
 		'search_index': 1,
@@ -493,7 +484,7 @@
 		'no_copy': 0,
 		'oldfieldname': 'fg_completed_qty',
 		'oldfieldtype': 'Currency',
-		'permlevel': 2,
+		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
 		'search_index': 0,
@@ -802,7 +793,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 36,
+		'idx': 35,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -814,13 +805,13 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 0,
-		'idx': 37,
+		'idx': 36,
 		'in_filter': 0,
 		'label': 'Get Items',
 		'no_copy': 0,
 		'oldfieldtype': 'Button',
 		'options': 'get_items',
-		'permlevel': 2,
+		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
 		'search_index': 0
@@ -830,7 +821,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 38,
+		'idx': 37,
 		'oldfieldtype': 'Section Break',
 		'options': 'Simple',
 		'permlevel': 0
@@ -843,7 +834,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'mtn_details',
 		'fieldtype': 'Table',
-		'idx': 39,
+		'idx': 38,
 		'in_filter': 0,
 		'label': 'MTN Details',
 		'no_copy': 0,
@@ -862,7 +853,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'total_amount',
 		'fieldtype': 'Currency',
-		'idx': 40,
+		'idx': 39,
 		'in_filter': 0,
 		'label': 'Total Amount',
 		'no_copy': 0,
@@ -878,7 +869,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 41,
+		'idx': 40,
 		'label': 'Other Details',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -890,7 +881,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Link',
-		'idx': 42,
+		'idx': 41,
 		'in_filter': 1,
 		'label': 'Company',
 		'no_copy': 0,
@@ -910,7 +901,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 43,
+		'idx': 42,
 		'in_filter': 0,
 		'label': 'Fiscal Year',
 		'no_copy': 0,
@@ -930,7 +921,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'select_print_heading',
 		'fieldtype': 'Link',
-		'idx': 44,
+		'idx': 43,
 		'in_filter': 0,
 		'label': 'Select Print Heading',
 		'no_copy': 0,
diff --git a/stock/doctype/stock_ledger/stock_ledger.py b/stock/doctype/stock_ledger/stock_ledger.py
index 5188e08..dca9754 100644
--- a/stock/doctype/stock_ledger/stock_ledger.py
+++ b/stock/doctype/stock_ledger/stock_ledger.py
@@ -57,11 +57,11 @@
 					s = s.strip()
 					sr_war = sql("select warehouse,name from `tabSerial No` where name = '%s'" % (s))
 					if not sr_war:
-						msgprint("Serial No %s does not exists",s, raise_exception = 1)
+						msgprint("Serial No %s does not exists"%s, raise_exception = 1)
 					elif not sr_war[0][0]:
-						msgprint("Please set a warehouse in the Serial No <b>%s</b>" % s, raise_exception = 1)
-					elif sr_war[0][0] != d.warehouse:
-						msgprint("Serial No : %s for Item : %s doesn't exists in Warehouse : %s" % (s, d.item_code, d.warehouse), raise_exception = 1)
+						msgprint("Warehouse not mentioned in the Serial No <b>%s</b>" % s, raise_exception = 1)
+					elif (d.warehouse and sr_war[0][0] != d.warehouse) or (d.s_warehouse and sr_war[0][0] != d.s_warehouse):
+						msgprint("Serial No : %s for Item : %s doesn't exists in Warehouse : %s" % (s, d.item_code, d.warehouse or d.s_warehouse), raise_exception = 1)
 
 
 	# ------------------------------------
@@ -119,10 +119,10 @@
 	# ----------------------------------
 	# update serial no purchase details
 	# ----------------------------------
-	def update_serial_purchase_details(self, obj, d, serial_no, is_submit, is_transfer = 0):
+	def update_serial_purchase_details(self, obj, d, serial_no, is_submit, purpose = ''):
 		exists = sql("select name, status, docstatus from `tabSerial No` where name = '%s'" % (serial_no))
 		if is_submit:
-			if exists and exists[0][2] != 2 and not is_transfer:
+			if exists and exists[0][2] != 2 and purpose not in ['Material Transfer', 'Sales Return']:
 				msgprint("Serial No: %s already %s" % (serial_no, exists and exists[0][1]), raise_exception = 1)
 			elif exists:
 				s = Document('Serial No', exists and exists[0][0])
@@ -133,8 +133,10 @@
 		else:
 			if exists and exists[0][1] == 'Delivered' and exists[0][2] != 2:
 				msgprint("Serial No: %s is already delivered, you can not cancel the document." % serial_no, raise_exception=1)
+			elif purpose in ['Material Transfer', 'Sales Return']:
+				sql("update `tabSerial No` set status = '%s', purchase_document_type = '', purchase_document_no = '', warehouse = '%s' where name = '%s'" % (purpose == 'Material Transfer' and 'In Store' or 'Delivered', d.s_warehouse, serial_no))				
 			else:
-				sql("update `tabSerial No` set docstatus = '%s', status = '%s', purchase_document_type = '', purchase_document_no = '', purchase_date = '', purchase_rate = '', supplier = null, supplier_name = '', supplier_address = '', warehouse = null where name = '%s'" % (not is_transfer and 2 or 0, is_transfer and 'In Store' or 'Not in Use', serial_no))
+				sql("update `tabSerial No` set docstatus = 2, status = 'Not in Use', purchase_document_type = '', purchase_document_no = '', purchase_date = '', purchase_rate = '', supplier = null, supplier_name = '', supplier_address = '', warehouse = '' where name = '%s'" % serial_no)
 
 
 	# -------------------------------
@@ -233,6 +235,7 @@
 				sle.fields['warehouse_type'] = get_value('Warehouse' , args[k], 'warehouse_type')
 			sle.fields[k] = args[k]
 		sle_obj = get_obj(doc=sle)
+		
 		# validate
 		sle_obj.validate()
 		sle.save(new = 1)
diff --git a/stock/doctype/warehouse/warehouse.py b/stock/doctype/warehouse/warehouse.py
index 51c615c..f3d600d 100644
--- a/stock/doctype/warehouse/warehouse.py
+++ b/stock/doctype/warehouse/warehouse.py
@@ -68,7 +68,7 @@
     bl = sql("select name from tabBin where warehouse=%s", self.doc.name)
     for b in bl:
       bobj = get_obj('Bin',b[0])
-      bobj.update_item_valuation()
+      bobj.update_item_valuation(posting_date = '2000-01-01', posting_time = '12:00')
 
       sql("COMMIT")
       sql("START TRANSACTION")
diff --git a/support/DocType Mapper/Customer Issue-Maintenance Visit/Customer Issue-Maintenance Visit.txt b/support/DocType Mapper/Customer Issue-Maintenance Visit/Customer Issue-Maintenance Visit.txt
index 5d2e6a1..75244de 100644
--- a/support/DocType Mapper/Customer Issue-Maintenance Visit/Customer Issue-Maintenance Visit.txt
+++ b/support/DocType Mapper/Customer Issue-Maintenance Visit/Customer Issue-Maintenance Visit.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:34',
 		'docstatus': 0,
 		'modified': '2011-05-18 13:37:43',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'ashwini@webnotestech.com'
 	},
 
@@ -53,7 +53,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer',
-		'idx': 1,
 		'match_id': 0,
 		'to_field': 'customer'
 	},
@@ -61,107 +60,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 13,
 		'match_id': 0,
 		'to_field': 'customer_issue_no'
 	},
@@ -171,7 +70,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'complaint',
-		'idx': 14,
 		'match_id': 1,
 		'to_field': 'description'
 	},
@@ -179,26 +77,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 16,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'doctype',
-		'idx': 17,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -207,7 +86,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 18,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -215,7 +93,6 @@
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
-		'idx': 1,
 		'match_id': 1,
 		'reference_doctype_key': 'prevdoc_doctype',
 		'to_field': 'maintenance_visit_details',
@@ -225,7 +102,6 @@
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
-		'idx': 2,
 		'match_id': 0,
 		'to_table': 'Maintenance Visit'
 	}
diff --git a/support/DocType Mapper/Sales Order-Maintenance Schedule/Sales Order-Maintenance Schedule.txt b/support/DocType Mapper/Sales Order-Maintenance Schedule/Sales Order-Maintenance Schedule.txt
index 9cc6c58..e56c4bd 100644
--- a/support/DocType Mapper/Sales Order-Maintenance Schedule/Sales Order-Maintenance Schedule.txt
+++ b/support/DocType Mapper/Sales Order-Maintenance Schedule/Sales Order-Maintenance Schedule.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
 		'modified': '2011-05-18 11:05:26',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
@@ -50,7 +50,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer',
-		'idx': 1,
 		'match_id': 0,
 		'to_field': 'customer'
 	},
@@ -58,98 +57,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 12,
 		'match_id': 0,
 		'to_field': 'sales_order_no'
 	},
@@ -159,7 +67,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'item_code',
-		'idx': 13,
 		'match_id': 1,
 		'to_field': 'item_code'
 	},
@@ -167,26 +74,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 16,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -196,7 +84,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_order_details',
 		'from_table': 'Sales Order Detail',
-		'idx': 1,
 		'match_id': 1,
 		'to_field': 'item_maintenance_detail',
 		'to_table': 'Item Maintenance Detail',
@@ -207,7 +94,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Sales Order',
-		'idx': 2,
 		'match_id': 0,
 		'to_table': 'Maintenance Schedule',
 		'validation_logic': 'docstatus=1'
diff --git a/support/DocType Mapper/Sales Order-Maintenance Visit/Sales Order-Maintenance Visit.txt b/support/DocType Mapper/Sales Order-Maintenance Visit/Sales Order-Maintenance Visit.txt
index 32de61a..26a48f8 100644
--- a/support/DocType Mapper/Sales Order-Maintenance Visit/Sales Order-Maintenance Visit.txt
+++ b/support/DocType Mapper/Sales Order-Maintenance Visit/Sales Order-Maintenance Visit.txt
@@ -6,7 +6,7 @@
 		'creation': '2010-08-08 17:09:36',
 		'docstatus': 0,
 		'modified': '2011-05-18 13:35:55',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'ashwini@webnotestech.com'
 	},
 
@@ -51,7 +51,6 @@
 		'checking_operator': '=',
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'customer',
-		'idx': 1,
 		'match_id': 0,
 		'to_field': 'customer'
 	},
@@ -59,107 +58,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_address',
-		'idx': 2,
-		'match_id': 0,
-		'to_field': 'customer_address'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_person',
-		'idx': 3,
-		'match_id': 0,
-		'to_field': 'contact_person'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_name',
-		'idx': 4,
-		'match_id': 0,
-		'to_field': 'customer_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'address_display',
-		'idx': 5,
-		'match_id': 0,
-		'to_field': 'address_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_display',
-		'idx': 6,
-		'match_id': 0,
-		'to_field': 'contact_display'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_mobile',
-		'idx': 7,
-		'match_id': 0,
-		'to_field': 'contact_mobile'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'contact_email',
-		'idx': 8,
-		'match_id': 0,
-		'to_field': 'contact_email'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'territory',
-		'idx': 9,
-		'match_id': 0,
-		'to_field': 'territory'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer_group',
-		'idx': 10,
-		'match_id': 0,
-		'to_field': 'customer_group'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'company',
-		'idx': 11,
-		'match_id': 0,
-		'to_field': 'company'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'fiscal_year',
-		'idx': 12,
-		'match_id': 0,
-		'to_field': 'fiscal_year'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'name',
-		'idx': 13,
 		'match_id': 0,
 		'to_field': 'sales_order_no'
 	},
@@ -167,35 +66,7 @@
 	# Field Mapper Detail
 	{
 		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_code',
-		'idx': 14,
-		'match_id': 1,
-		'to_field': 'item_code'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'item_name',
-		'idx': 15,
-		'match_id': 1,
-		'to_field': 'item_name'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'description',
-		'idx': 16,
-		'match_id': 1,
-		'to_field': 'description'
-	},
-
-	# Field Mapper Detail
-	{
-		'doctype': 'Field Mapper Detail',
 		'from_field': 'parent',
-		'idx': 17,
 		'match_id': 1,
 		'to_field': 'prevdoc_docname'
 	},
@@ -204,7 +75,6 @@
 	{
 		'doctype': 'Field Mapper Detail',
 		'from_field': 'parenttype',
-		'idx': 18,
 		'match_id': 1,
 		'to_field': 'prevdoc_doctype'
 	},
@@ -214,7 +84,6 @@
 		'doctype': 'Table Mapper Detail',
 		'from_field': 'sales_order_details',
 		'from_table': 'Sales Order Detail',
-		'idx': 1,
 		'match_id': 1,
 		'to_field': 'maintenance_visit_details',
 		'to_table': 'Maintenance Visit Detail'
@@ -224,7 +93,6 @@
 	{
 		'doctype': 'Table Mapper Detail',
 		'from_table': 'Sales Order',
-		'idx': 2,
 		'match_id': 0,
 		'to_table': 'Maintenance Visit'
 	}
diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py
index 9379280..23c4059 100644
--- a/support/doctype/support_ticket/__init__.py
+++ b/support/doctype/support_ticket/__init__.py
@@ -61,15 +61,15 @@
 		d.status = 'Open'
 		try:
 			d.save(1)
+			# update feed
+			update_feed(d)
+
+			# send auto reply
+			self.send_auto_reply(d)
+
 		except:
 			d.description = 'Unable to extract message'
 			d.save(1)
-
-		# update feed
-		update_feed(d)
-		
-		# send auto reply
-		self.send_auto_reply(d)
 		
 	def send_auto_reply(self, d):
 		"""