Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/erpnext/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt b/erpnext/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt
index 9ed756f..7a4544f 100644
--- a/erpnext/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt
+++ b/erpnext/accounts/DocType Mapper/Delivery Note-Receivable Voucher/Delivery Note-Receivable Voucher.txt
@@ -134,6 +134,16 @@
 		'to_field': 'serial_no'
 	},
 
+	# Field Mapper Detail
+	{
+		'checking_operator': u'=',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'export_rate',
+		'map': u'Yes',
+		'match_id': 1,
+		'to_field': u'export_rate'
+	},
+
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
@@ -151,17 +161,6 @@
 		'match_id': 1,
 		'to_field': 'entries',
 		'to_table': 'RV Detail',
-		'validation_logic': 'amount > ifnull(billed_amt, 0) and docstatus = 1'
-	},
-
-	# Table Mapper Detail
-	{
-		'doctype': 'Table Mapper Detail',
-		'from_field': 'delivery_note_details',
-		'from_table': 'Delivery Note Detail',
-		'match_id': 1,
-		'to_field': 'entries',
-		'to_table': 'RV Detail',
 		'validation_logic': '(ifnull(amount, 0) = 0 or amount > ifnull(billed_amt, 0)) and docstatus = 1'
 	},
 
@@ -186,4 +185,4 @@
 		'to_table': 'Sales Team',
 		'validation_logic': 'name is not null'
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt b/erpnext/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt
index 630fb15..d076d9f 100644
--- a/erpnext/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt
+++ b/erpnext/accounts/DocType Mapper/Sales Order-Receivable Voucher/Sales Order-Receivable Voucher.txt
@@ -3,189 +3,188 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2010-08-08 17:09:36',
+		'creation': '2010-09-20 12:33:35',
 		'docstatus': 0,
-		'modified': '2011-09-15 15:04:45',
-		'modified_by': 'Administrator',
-		'owner': 'Administrator'
+		'modified': '2012-03-28 19:19:38',
+		'modified_by': u'Administrator',
+		'owner': u'Administrator'
 	},
 
 	# These values are common for all Table Mapper Detail
 	{
-		'doctype': 'Table Mapper Detail',
+		'doctype': u'Table Mapper Detail',
 		'name': '__common__',
-		'parent': 'Sales Order-Receivable Voucher',
-		'parentfield': 'table_mapper_details',
-		'parenttype': 'DocType Mapper'
+		'parent': u'Sales Order-Receivable Voucher',
+		'parentfield': u'table_mapper_details',
+		'parenttype': u'DocType Mapper'
 	},
 
 	# These values are common for all Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
+		'doctype': u'Field Mapper Detail',
 		'name': '__common__',
-		'parent': 'Sales Order-Receivable Voucher',
-		'parentfield': 'field_mapper_details',
-		'parenttype': 'DocType Mapper'
+		'parent': u'Sales Order-Receivable Voucher',
+		'parentfield': u'field_mapper_details',
+		'parenttype': u'DocType Mapper'
 	},
 
 	# These values are common for all DocType Mapper
 	{
 		'doctype': u'DocType Mapper',
-		'from_doctype': 'Sales Order',
-		'module': 'Accounts',
+		'from_doctype': u'Sales Order',
+		'module': u'Accounts',
 		'name': '__common__',
 		'ref_doc_submitted': 1,
-		'to_doctype': 'Receivable Voucher'
+		'to_doctype': u'Receivable Voucher'
 	},
 
 	# DocType Mapper, Sales Order-Receivable Voucher
 	{
 		'doctype': u'DocType Mapper',
-		'name': 'Sales Order-Receivable Voucher'
+		'name': u'Sales Order-Receivable Voucher'
 	},
 
 	# Field Mapper Detail
 	{
-		'checking_operator': '=',
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'customer',
-		'map': 'Yes',
+		'checking_operator': u'=',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'customer',
+		'map': u'Yes',
 		'match_id': 0,
-		'to_field': 'customer'
+		'to_field': u'customer'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: obj.basic_rate and (flt(obj.amount) - flt(obj.billed_amt))/flt(obj.basic_rate) or obj.qty',
-		'map': 'Yes',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'eval: obj.basic_rate and (flt(obj.amount) - flt(obj.billed_amt))/flt(obj.basic_rate) or obj.qty',
+		'map': u'Yes',
 		'match_id': 1,
-		'to_field': 'qty'
+		'to_field': u'qty'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'parent',
-		'map': 'Yes',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'parent',
+		'map': u'Yes',
 		'match_id': 1,
-		'to_field': 'sales_order'
+		'to_field': u'sales_order'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'name',
-		'map': 'Yes',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'name',
+		'map': u'Yes',
 		'match_id': 1,
-		'to_field': 'so_detail'
+		'to_field': u'so_detail'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval:flt(obj.amount) - flt(obj.billed_amt)',
-		'map': 'Yes',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'eval:flt(obj.amount) - flt(obj.billed_amt)',
+		'map': u'Yes',
 		'match_id': 1,
-		'to_field': 'amount'
+		'to_field': u'amount'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt))* flt(obj.export_rate)/flt(obj.basic_rate)',
-		'map': 'Yes',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'eval: (flt(obj.amount) - flt(obj.billed_amt))* flt(obj.export_rate)/flt(obj.basic_rate)',
+		'map': u'Yes',
 		'match_id': 1,
-		'to_field': 'export_amount'
+		'to_field': u'export_amount'
 	},
 
 	# Field Mapper Detail
 	{
-		'checking_operator': '=',
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'project_name',
-		'map': 'Yes',
+		'checking_operator': u'=',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'project_name',
+		'map': u'Yes',
 		'match_id': 0,
-		'to_field': 'project_name'
+		'to_field': u'project_name'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'reserved_warehouse',
-		'map': 'Yes',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'reserved_warehouse',
+		'map': u'Yes',
 		'match_id': 1,
-		'to_field': 'warehouse'
+		'to_field': u'warehouse'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'naming_series',
-		'map': 'No',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'naming_series',
+		'map': u'No',
 		'match_id': 0,
-		'to_field': 'naming_series'
+		'to_field': u'naming_series'
 	},
 
 	# Field Mapper Detail
 	{
-		'doctype': 'Field Mapper Detail',
-		'from_field': 'incentives',
-		'map': 'No',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'incentives',
+		'map': u'No',
 		'match_id': 3,
-		'to_field': 'incentives'
+		'to_field': u'incentives'
+	},
+
+	# Field Mapper Detail
+	{
+		'checking_operator': u'=',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'export_rate',
+		'map': u'Yes',
+		'match_id': 1,
+		'to_field': u'export_rate'
 	},
 
 	# Table Mapper Detail
 	{
-		'doctype': 'Table Mapper Detail',
-		'from_table': 'Sales Order',
+		'doctype': u'Table Mapper Detail',
+		'from_table': u'Sales Order',
 		'match_id': 0,
-		'to_table': 'Receivable Voucher',
-		'validation_logic': 'docstatus=1'
+		'to_table': u'Receivable Voucher',
+		'validation_logic': u'docstatus=1'
 	},
 
 	# Table Mapper Detail
 	{
-		'doctype': 'Table Mapper Detail',
-		'from_field': 'sales_order_detail',
-		'from_table': 'Sales Order Detail',
+		'doctype': u'Table Mapper Detail',
+		'from_field': u'sales_order_detail',
+		'from_table': u'Sales Order Detail',
 		'match_id': 1,
-		'to_field': 'entries',
-		'to_table': 'RV Detail',
-		'validation_logic': 'docstatus = 1'
+		'to_field': u'entries',
+		'to_table': u'RV Detail',
+		'validation_logic': u'(ifnull(amount, 0) = 0 or amount > ifnull(billed_amt, 0)) and docstatus = 1'
 	},
 
 	# Table Mapper Detail
 	{
-		'doctype': 'Table Mapper Detail',
-		'from_field': 'sales_order_detail',
-		'from_table': 'Sales Order Detail',
-		'match_id': 1,
-		'to_field': 'entries',
-		'to_table': 'RV Detail',
-		'validation_logic': '(ifnull(amount, 0) = 0 or amount > ifnull(billed_amt, 0)) and docstatus = 1'
-	},
-
-	# Table Mapper Detail
-	{
-		'doctype': 'Table Mapper Detail',
-		'from_field': 'other_charges',
-		'from_table': 'RV Tax Detail',
+		'doctype': u'Table Mapper Detail',
+		'from_field': u'other_charges',
+		'from_table': u'RV Tax Detail',
 		'match_id': 2,
-		'to_field': 'other_charges',
-		'to_table': 'RV Tax Detail',
-		'validation_logic': 'name is not null'
+		'to_field': u'other_charges',
+		'to_table': u'RV Tax Detail',
+		'validation_logic': u'name is not null'
 	},
 
 	# Table Mapper Detail
 	{
-		'doctype': 'Table Mapper Detail',
-		'from_field': 'sales_team',
-		'from_table': 'Sales Team',
+		'doctype': u'Table Mapper Detail',
+		'from_field': u'sales_team',
+		'from_table': u'Sales Team',
 		'match_id': 3,
-		'to_field': 'sales_team',
-		'to_table': 'Sales Team',
-		'validation_logic': 'name is not null'
+		'to_field': u'sales_team',
+		'to_table': u'Sales Team',
+		'validation_logic': u'name is not null'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index 367b27a..bc5ed7b 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -46,6 +46,14 @@
 		else:
 			msgprint("Please enter atleast 1 invoice in the table below", raise_exception=1)
 
+		self.calculate_total_invoiced_amount()
+
+	def calculate_total_invoiced_amount(self):
+		total = 0
+		for d in getlist(self.doclist, 'invoice_details'):
+			total += flt(d.grand_total)
+		webnotes.conn.set(self.doc, 'total_invoiced_amount', total)
+
 
 	def get_invoice_details(self, invoice_no):
 		"""	Pull details from invoices for referrence """
diff --git a/erpnext/accounts/doctype/c_form/c_form.txt b/erpnext/accounts/doctype/c_form/c_form.txt
index 987bc9a..2cead89 100644
--- a/erpnext/accounts/doctype/c_form/c_form.txt
+++ b/erpnext/accounts/doctype/c_form/c_form.txt
@@ -3,188 +3,223 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-12-07 16:16:16',
+		'creation': '2011-12-14 11:40:47',
 		'docstatus': 0,
-		'modified': '2011-12-07 17:50:17',
-		'modified_by': 'Administrator',
-		'owner': 'Administrator'
+		'modified': '2012-04-06 17:29:50',
+		'modified_by': u'Administrator',
+		'owner': u'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1323255350',
-		'colour': 'White:FFF',
+		'_last_update': u'1333712835',
+		'allow_attach': 1,
+		'colour': u'White:FFF',
 		'doctype': 'DocType',
-		'module': 'Accounts',
+		'max_attachments': 3,
+		'module': u'Accounts',
 		'name': '__common__',
-		'section_style': 'Simple',
+		'section_style': u'Simple',
 		'show_in_menu': 0,
-		'version': 11
+		'version': 19
 	},
 
 	# These values are common for all DocField
 	{
-		'doctype': 'DocField',
+		'doctype': u'DocField',
 		'name': '__common__',
-		'parent': 'C-Form',
-		'parentfield': 'fields',
-		'parenttype': 'DocType',
-		'permlevel': 0
+		'parent': u'C-Form',
+		'parentfield': u'fields',
+		'parenttype': u'DocType'
 	},
 
 	# These values are common for all DocPerm
 	{
-		'doctype': 'DocPerm',
+		'doctype': u'DocPerm',
 		'name': '__common__',
-		'parent': 'C-Form',
-		'parentfield': 'permissions',
-		'parenttype': 'DocType',
+		'parent': u'C-Form',
+		'parentfield': u'permissions',
+		'parenttype': u'DocType',
 		'read': 1
 	},
 
 	# DocType, C-Form
 	{
 		'doctype': 'DocType',
-		'name': 'C-Form'
+		'name': u'C-Form'
 	},
 
 	# DocPerm
 	{
 		'create': 1,
-		'doctype': 'DocPerm',
+		'doctype': u'DocPerm',
 		'permlevel': 0,
-		'role': 'Accounts User',
+		'role': u'Accounts User',
 		'write': 1
 	},
 
 	# DocPerm
 	{
 		'create': 1,
-		'doctype': 'DocPerm',
+		'doctype': u'DocPerm',
 		'permlevel': 0,
-		'role': 'Accounts Manager',
+		'role': u'Accounts Manager',
 		'submit': 0,
 		'write': 1
 	},
 
 	# DocPerm
 	{
-		'doctype': 'DocPerm',
+		'doctype': u'DocPerm',
 		'permlevel': 1,
-		'role': 'All'
+		'role': u'All'
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldtype': 'Column Break',
-		'width': '50%'
+		'doctype': u'DocField',
+		'fieldtype': u'Column Break',
+		'permlevel': 0,
+		'width': u'50%'
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'naming_series',
-		'fieldtype': 'Select',
-		'label': 'Series',
-		'options': '\nC-FORM/',
+		'doctype': u'DocField',
+		'fieldname': u'naming_series',
+		'fieldtype': u'Select',
+		'label': u'Series',
+		'options': u'\nC-FORM/',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'c_form_no',
-		'fieldtype': 'Data',
-		'label': 'C-Form No',
+		'doctype': u'DocField',
+		'fieldname': u'c_form_no',
+		'fieldtype': u'Data',
+		'label': u'C-Form No',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'received_date',
-		'fieldtype': 'Date',
-		'label': 'Received Date',
+		'doctype': u'DocField',
+		'fieldname': u'received_date',
+		'fieldtype': u'Date',
+		'label': u'Received Date',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'customer',
-		'fieldtype': 'Link',
-		'label': 'Customer',
-		'options': 'Customer',
+		'doctype': u'DocField',
+		'fieldname': u'customer',
+		'fieldtype': u'Link',
+		'label': u'Customer',
+		'options': u'Customer',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldtype': 'Column Break',
-		'width': '50%'
+		'doctype': u'DocField',
+		'fieldtype': u'Column Break',
+		'permlevel': 0,
+		'width': u'50%'
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'company',
-		'fieldtype': 'Select',
-		'label': 'Company',
-		'options': 'link:Company'
+		'doctype': u'DocField',
+		'fieldname': u'company',
+		'fieldtype': u'Select',
+		'label': u'Company',
+		'options': u'link:Company',
+		'permlevel': 0
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'fiscal_year',
-		'fieldtype': 'Select',
-		'label': 'Fiscal Year',
-		'options': 'link:Fiscal Year',
+		'doctype': u'DocField',
+		'fieldname': u'fiscal_year',
+		'fieldtype': u'Select',
+		'label': u'Fiscal Year',
+		'options': u'link:Fiscal Year',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'quarter',
-		'fieldtype': 'Select',
-		'label': 'Quarter',
-		'options': '\nI\nII\nIII\nIV'
+		'doctype': u'DocField',
+		'fieldname': u'quarter',
+		'fieldtype': u'Select',
+		'label': u'Quarter',
+		'options': u'\nI\nII\nIII\nIV',
+		'permlevel': 0
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'total_amount',
-		'fieldtype': 'Currency',
-		'label': 'Total Amount',
+		'doctype': u'DocField',
+		'fieldname': u'total_amount',
+		'fieldtype': u'Currency',
+		'label': u'Total Amount',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'state',
-		'fieldtype': 'Select',
-		'label': 'State',
-		'options': "link:State\ncountry='India'",
+		'doctype': u'DocField',
+		'fieldname': u'state',
+		'fieldtype': u'Select',
+		'label': u'State',
+		'options': u"link:State\ncountry='India'",
+		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldtype': 'Section Break'
+		'doctype': u'DocField',
+		'fieldtype': u'Section Break',
+		'permlevel': 0
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'invoice_details',
-		'fieldtype': 'Table',
-		'label': 'Invoice Details',
-		'options': 'C-Form Invoice Detail'
+		'doctype': u'DocField',
+		'fieldname': u'invoice_details',
+		'fieldtype': u'Table',
+		'label': u'Invoice Details',
+		'options': u'C-Form Invoice Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'total_invoiced_amount',
+		'fieldtype': u'Currency',
+		'label': u'Total Invoiced Amount',
+		'permlevel': 1,
+		'print_hide': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'file_list',
+		'fieldtype': u'Text',
+		'hidden': 1,
+		'label': u'File List',
+		'permlevel': 0,
+		'print_hide': 1
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/ledger_balance_export/ledger_balance_export.py b/erpnext/accounts/doctype/ledger_balance_export/ledger_balance_export.py
index b790d06..88a31f2 100755
--- a/erpnext/accounts/doctype/ledger_balance_export/ledger_balance_export.py
+++ b/erpnext/accounts/doctype/ledger_balance_export/ledger_balance_export.py
@@ -35,45 +35,111 @@
 		yr = 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)",dt)
 		return yr and yr[0][0] or ''
 
-	# Get gl entries for the period and account
-	def get_gl_entries(self, lft, rgt):
-		gle = sql("select t1.posting_date, t1.voucher_type, t1.voucher_no, t1.debit, t1.credit, t1.remarks from `tabGL Entry` t1, `tabAccount` t2 WHERE t1.posting_date >= %s AND t1.posting_date <= %s and ifnull(t1.is_opening, 'No') = 'No' AND t1.account = t2.name AND t2.lft >= %s AND t2.rgt <= %s and ifnull(t1.is_cancelled, 'No') = 'No'", (self.doc.from_date, self.doc.to_date, lft, rgt), as_dict=1)
+
+	def validate_date(self):
+		"""check for from date and to date within same year"""
+		if not 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) and %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",(self.doc.from_date, self.doc.to_date)):
+			msgprint("From Date and To Date must be within same year")
+			raise Exception
+
+		if not self.doc.from_date or not self.doc.to_date:
+			msgprint("From Date and To Date is mandatory")
+			raise Exception
+
+	
+	def add_header(self):
+		title = 'Ledger Balances Between ' + getdate(self.doc.from_date).strftime('%d-%m-%Y') + ' and ' + getdate(self.doc.to_date).strftime('%d-%m-%Y')
+		return [[title], ['Account', 'Opening(Dr)', 'Opening (Cr)', 'Debit', 'Credit', 'Closing(Dr)', 'Closing(Cr)'], ['', '', '', '', '', '', '', 'Posting Date', 'Voucher Type', 'Voucher No', 'Debit', 'Credit', 'Remarks']]
+		
+
+
+	def get_account_subtree(self, acc):		
+		return sql("""
+			SELECT 
+				CONCAT(REPEAT('    ', COUNT(parent.name) - (sub_tree.depth + 1)), node.name) as account, 
+				node.lft AS lft, node.rgt AS rgt, 
+				node.debit_or_credit as dr_or_cr, node.group_or_ledger as group_or_ledger, node.is_pl_account as is_pl_account
+			FROM tabAccount AS node,
+				tabAccount AS parent,
+				tabAccount AS sub_parent,
+				(
+					SELECT node.name, (COUNT(parent.name) - 1) AS depth
+					FROM tabAccount AS node, tabAccount AS parent
+					WHERE node.lft BETWEEN parent.lft AND parent.rgt
+					AND node.name = %s
+					GROUP BY node.name
+					ORDER BY node.lft
+			    )AS sub_tree
+			WHERE node.lft BETWEEN parent.lft AND parent.rgt
+		        AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
+				AND sub_parent.name = sub_tree.name
+			GROUP BY node.name
+			ORDER BY node.lft""", acc, as_dict = 1)
+
+
+
+	def show_acc_summary(self, glc, acc_det):
+		from_date_year = self.get_year(add_days(self.doc.from_date, -1))
+		to_date_year = self.get_year(self.doc.to_date)
+		acc = acc_det['account'].strip()
+
+		if from_date_year == to_date_year:
+			debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(self.doc.from_date, -1), acc_det['dr_or_cr'], acc_det['lft'], acc_det['rgt']) # opening = closing of prev_date
+		elif acc_det['is_pl_account'] == 'No': # if there is no previous year in system and not pl account
+			opening = sql("select opening from `tabAccount Balance` where account = %s and period = %s", (acc, to_date_year))
+			debit_on_fromdate, credit_on_fromdate, opening = 0, 0, flt(opening[0][0])
+		else: # if pl account and there is no previous year in system
+			debit_on_fromdate, credit_on_fromdate, opening = 0,0,0
+		
+		# closing balance
+		#--------------------------------
+		debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, self.doc.to_date, acc_det['dr_or_cr'], acc_det['lft'], acc_det['rgt']) 
+
+		# transaction betn the period
+		#----------------------------------------
+		debit = flt(debit_on_todate) - flt(debit_on_fromdate)
+		credit = flt(credit_on_todate) - flt(credit_on_fromdate)
+	
+		# Debit / Credit
+		if acc_det['dr_or_cr'] == 'Credit':
+			opening, closing = -1*opening, -1*closing
+
+		return [acc_det['account'], flt(opening>0 and opening or 0), flt(opening<0 and -opening or 0), 
+				debit, credit, flt(closing>0.01 and closing or 0), flt(closing<-0.01 and -closing or 0)]
+
+
+	def show_gl_entries(self, acc):
+		"""Get gl entries for the period and account"""
+		gle = sql("select posting_date, voucher_type, voucher_no, debit, credit, remarks from `tabGL Entry` WHERE account = %s and posting_date >= %s AND posting_date <= %s and ifnull(is_opening,	'No') = 'No' and ifnull(is_cancelled, 'No') = 'No'", (acc, self.doc.from_date, self.doc.to_date), as_dict=1)
 		entries, dr, cr = [], 0, 0
 		for d in gle:
-			dr, cr = dr + flt(d['debit']), cr + flt(d['credit'])
-			entries.append(['', d['posting_date'], d['voucher_type'], d['voucher_no'], d['debit'], d['credit'], d['remarks']])
-		return entries, dr, cr
+			entries.append(['', '', '', '', '', '', '', d['posting_date'], d['voucher_type'], d['voucher_no'], d['debit'], d['credit'], d['remarks']])
+		return entries
+
+
+
 
 	# Get Report Data
 	def get_report_data(self):
-		from_date_year = self.get_year(add_days(self.doc.from_date, -1))
-		to_date_year = self.get_year(self.doc.to_date)
+		self.validate_date()
 
-		# result initiatlization
-		header = 'Ledger Balances Between ' + getdate(self.doc.from_date).strftime('%d-%m-%Y') + ' and ' + getdate(self.doc.to_date).strftime('%d-%m-%Y')
-		res = [[header], ['Account', 'Posting Date', 'Voucher Type', 'Voucher No', 'Debit', 'Credit', 'Remarks']]
+		res = []
+		res += self.add_header()
+
 		glc = get_obj('GL Control')
 
 		for d in getlist(self.doclist, 'ledger_details'):
 			# Fetch acc details
-			acc_det = sql("select debit_or_credit, is_pl_account, lft, rgt from tabAccount where name = '%s'" % d.account, as_dict=1)[0]
+			sub_tree = self.get_account_subtree(d.account)
 
-			# Opening
-			opening = glc.get_as_on_balance(d.account, from_date_year, add_days(self.doc.from_date, -1), acc_det['debit_or_credit'], acc_det['lft'], acc_det['rgt'])[2]
-			if acc_det['debit_or_credit'] == 'Credit':
-				opening = -1*opening
+			for acc_det in sub_tree:
+				acc_summary = self.show_acc_summary(glc, acc_det)
+				res.append(acc_summary)
+				
+				# Show gl entries if account is ledger
+				if acc_det['group_or_ledger'] == 'Ledger' and (acc_summary[3] or acc_summary[4]):
+					gle = self.show_gl_entries(acc_det['account'].strip())
+					res += gle
 
-			# GL Entries
-			gle, debit, credit = self.get_gl_entries(acc_det['lft'], acc_det['rgt'])
-
-			# Closing
-			closing = opening + debit - credit
-
-			# Append to result
-			res.append([d.account])
-			res += gle
-			res.append(['', '', '', 'Total Debit/Credit', debit, credit])
-			res.append(['', '', '', 'Opening Balance', opening])
-			res.append(['', '', '', 'Closing Balance', closing])
 
 		return res
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
index 546d997..9d84f21 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
@@ -935,7 +935,7 @@
 		'oldfieldname': u'in_words_export',
 		'oldfieldtype': u'Data',
 		'permlevel': 1,
-		'print_hide': 1
+		'print_hide': 0
 	},
 
 	# DocField
@@ -1518,4 +1518,4 @@
 		'permlevel': 0,
 		'print_hide': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/accounts/page/accounts_home/accounts_home.js b/erpnext/accounts/page/accounts_home/accounts_home.js
index 4551db0..52738a8 100644
--- a/erpnext/accounts/page/accounts_home/accounts_home.js
+++ b/erpnext/accounts/page/accounts_home/accounts_home.js
@@ -19,4 +19,12 @@
 	if(wn.control_panel.country!='India') {
 		$('.india-specific').toggle(false);
 	}
-}
\ No newline at end of file
+
+	if(wn.boot.profile.roles.indexOf('Accounts Manager')==-1 && wn.boot.profile.roles.indexOf('Accounts User')==-1) {
+		$('[href*="Accounts Browser"]').each(function() {
+			var txt = $(this).text();
+			$(this).parent().css('color', '#999').html(txt);
+		});
+	}
+
+}
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index ca9181f..597eec4 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -227,7 +227,7 @@
 				if d.fields.has_key(x):
 					d.fields[x] = f_lst[x]
 			
-			item = sql("select is_stock_item, is_purchase_item from tabItem where name=%s and (ifnull(end_of_life,'')=''	or end_of_life = '0000-00-00' or end_of_life >	now())", d.item_code)
+			item = sql("select is_stock_item, is_purchase_item, is_sub_contracted_item from tabItem where name=%s and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life >	now())", d.item_code)
 			if not item:
 				msgprint("Item %s does not exist in Item Master." % cstr(d.item_code))
 				raise Exception
@@ -239,9 +239,10 @@
 					raise Exception
 			
 			# validate purchase item
-			if not item[0][1]=='Yes':
-				msgprint("Item %s is not purchase item." % (d.item_code))
+			if item[0][1] != 'Yes' and item[0][2] != 'Yes':
+				msgprint("Item %s is not a purchase item or sub-contracted item. Please check" % (d.item_code))
 				raise Exception
+
 			
 			if d.fields.has_key('prevdoc_docname') and d.prevdoc_docname:
 				# check warehouse, uom	in previous doc and in current doc are same.
diff --git a/erpnext/patches/april_2012/__init__.py b/erpnext/patches/april_2012/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/patches/april_2012/__init__.py
diff --git a/erpnext/patches/april_2012/reload_c_form.py b/erpnext/patches/april_2012/reload_c_form.py
new file mode 100644
index 0000000..246ea0f
--- /dev/null
+++ b/erpnext/patches/april_2012/reload_c_form.py
@@ -0,0 +1,4 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('accounts', 'doctype', 'c_form')
diff --git a/erpnext/patches/jan_mar_2012/mapper_fix.py b/erpnext/patches/jan_mar_2012/mapper_fix.py
new file mode 100644
index 0000000..c651c5e
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/mapper_fix.py
@@ -0,0 +1,3 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("delete from `tabTable Mapper Detail` where to_table = 'RV Detail' and parent = 'Delivery Note-Receivable Voucher' and validation_logic = 'amount > ifnull(billed_amt, 0) and docstatus = 1'")
diff --git a/erpnext/patches/jan_mar_2012/reload_mapper.py b/erpnext/patches/jan_mar_2012/reload_mapper.py
new file mode 100644
index 0000000..a6e3102
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/reload_mapper.py
@@ -0,0 +1,9 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+
+	reload_doc('stock', 'DocType Mapper', 'Sales Order-Delivery Note')
+	reload_doc('accounts', 'DocType Mapper', 'Sales Order-Receivable Voucher')
+	reload_doc('accounts', 'DocType Mapper', 'Delivery Note-Receivable Voucher')
+
+	webnotes.conn.sql("delete from `tabField Mapper Detail` where parent = 'Sales Order-Delivery Note' and from_field = 'basic_rate' and to_field = 'basic_rate'")
diff --git a/erpnext/patches/mar_2012/earning_deduction_type_patch.py b/erpnext/patches/mar_2012/earning_deduction_type_patch.py
new file mode 100644
index 0000000..438b34e
--- /dev/null
+++ b/erpnext/patches/mar_2012/earning_deduction_type_patch.py
@@ -0,0 +1,14 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("""
+		UPDATE `tabDocField`
+		SET fieldtype = 'Link', options = 'Deduction Type'
+		WHERE parent = 'Deduction Detail'
+		AND fieldname = 'd_type'
+		""")
+	webnotes.conn.sql("""
+		UPDATE `tabDocField`
+		SET fieldtype = 'Link', options = 'Earning Type'
+		WHERE parent = 'Earning Detail'
+		AND fieldname = 'e_type'
+		""")
diff --git a/erpnext/patches/mar_2012/so_rv_mapper_fix.py b/erpnext/patches/mar_2012/so_rv_mapper_fix.py
new file mode 100644
index 0000000..8844773
--- /dev/null
+++ b/erpnext/patches/mar_2012/so_rv_mapper_fix.py
@@ -0,0 +1,10 @@
+def execute():
+	import webnotes
+	count = webnotes.conn.sql("""SELECT COUNT(*) FROM `tabTable Mapper Detail`
+		WHERE parent='Sales Order-Receivable Voucher'
+		AND from_table='Sales Order Detail'""")
+	if count and count[0][0]==2:
+		webnotes.conn.sql("""DELETE FROM `tabTable Mapper Detail`
+			WHERE parent='Sales Order-Receivable Voucher'
+			AND from_table='Sales Order Detail'
+			AND validation_logic='docstatus = 1'""")
diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py
index 3bf4b6a..cd38480 100644
--- a/erpnext/patches/patch_list.py
+++ b/erpnext/patches/patch_list.py
@@ -207,5 +207,25 @@
 		'patch_file': 'update_se_fld_options',
 		'description': 'Purpose SE: Others to Other' 
 	},
+	{
+		'patch_module': 'patches.jan_mar_2012',
+		'patch_file': 'reload_mapper',
+		'description': 'SO-DN, SO-Rv, DN-RV'
+	},
+	{
+		'patch_module': 'patches.jan_mar_2012',
+		'patch_file': 'mapper_fix',
+		'description': 'DN-RV duplicate table entry'
+	},
+	{
+		'patch_module': 'patches.mar_2012',
+		'patch_file': 'so_rv_mapper_fix',
+		'description': 'SO-RV duplicate mapper entry removal'
+	},
+	{
+		'patch_module': 'patches.april_2012',
+		'patch_file': 'reload_c_form',
+		'description': 'Added attchemnt option and total field'
+	},
 
 ]
diff --git a/erpnext/selling/doctype/quotation/quotation.txt b/erpnext/selling/doctype/quotation/quotation.txt
index c8e3ecb..39a7327 100644
--- a/erpnext/selling/doctype/quotation/quotation.txt
+++ b/erpnext/selling/doctype/quotation/quotation.txt
@@ -875,7 +875,7 @@
 		'oldfieldname': u'in_words_export',
 		'oldfieldtype': u'Data',
 		'permlevel': 1,
-		'print_hide': 1,
+		'print_hide': 0,
 		'width': u'200px'
 	},
 
@@ -1199,4 +1199,4 @@
 		'permlevel': 0,
 		'print_hide': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/selling/doctype/sales_common/sales_common.js b/erpnext/selling/doctype/sales_common/sales_common.js
index cad8ec1..b257d6d 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.js
+++ b/erpnext/selling/doctype/sales_common/sales_common.js
@@ -157,11 +157,18 @@
 			args: {'price_list':doc.price_list_name, 'company': doc.company},
 			callback: function(r, rt) {
 				pl_currency = r.message[0]?r.message[0]:[];
+				unhide_field(['price_list_currency', 'plc_conversion_rate']);
+				
 				if (pl_currency.length==1) {
-					if (pl_currency[0] == doc.currency) set_multiple(cdt, cdn, {price_list_currency:doc.currency, plc_conversion_rate:doc.conversion_rate});
-					else if (pl_currency[0] = r.message[1]) set_multiple(cdt, cdn, {price_list_currency:pl_currency[0], plc_conversion_rate:1})
-					hide_field(['price_list_currency', 'plc_conversion_rate']);
-				} else unhide_field(['price_list_currency', 'plc_conversion_rate']);
+					set_multiple(cdt, cdn, {price_list_currency:pl_currency[0]});
+					if (pl_currency[0] == doc.currency) {
+						set_multiple(cdt, cdn, {plc_conversion_rate:doc.conversion_rate});
+						hide_field(['price_list_currency', 'plc_conversion_rate']);
+					} else if (pl_currency[0] == r.message[1]) {
+						set_multiple(cdt, cdn, {plc_conversion_rate:1})
+						hide_field(['price_list_currency', 'plc_conversion_rate']);
+					}					
+				}
 
 				if (r.message[1] == doc.currency) {
 					set_multiple(cdt, cdn, {conversion_rate:1});
diff --git a/erpnext/selling/doctype/sales_order/sales_order.txt b/erpnext/selling/doctype/sales_order/sales_order.txt
index a82f970..7a11bda 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.txt
+++ b/erpnext/selling/doctype/sales_order/sales_order.txt
@@ -963,7 +963,7 @@
 		'oldfieldname': u'in_words_export',
 		'oldfieldtype': u'Data',
 		'permlevel': 1,
-		'print_hide': 1,
+		'print_hide': 0,
 		'width': u'200px'
 	},
 
@@ -1333,4 +1333,4 @@
 		'permlevel': 0,
 		'print_hide': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index ff9bf68..fb3730c 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -240,7 +240,9 @@
 			Adds common conditions in dictionary "args"
 		"""
 		start_date, end_date = self.get_start_end_dates()
-		fiscal_start_date = webnotes.utils.get_defaults()['year_start_date']
+		fiscal_year = webnotes.utils.get_defaults()['fiscal_year']
+		fiscal_start_date = webnotes.conn.get_value('Fiscal Year', fiscal_year,
+				'year_start_date')
 
 		if 'new' in args['type']:
 			args.update({
diff --git a/erpnext/setup/doctype/other_charges/other_charges.js b/erpnext/setup/doctype/other_charges/other_charges.js
index a6f457d..85bdb79 100644
--- a/erpnext/setup/doctype/other_charges/other_charges.js
+++ b/erpnext/setup/doctype/other_charges/other_charges.js
@@ -36,6 +36,10 @@
 	return '';
 }
 
+cur_frm.pformat.in_words_export = function(doc) {
+	return '';
+}
+
 cur_frm.pformat.other_charges= function(doc){
   //function to make row of table
 	var make_row = function(title,val,bold){
@@ -89,7 +93,7 @@
 			out += make_row('Rounded Total',fmt_money(doc.rounded_total_export),1);
 		}
 
-		if(doc.in_words_export){
+		if(doc.in_words_export && !print_hide_dict['in_words_export']){
 			out +='</table></td></tr>';
 			out += '<tr><td colspan = "2">';
 			out += '<table><tr><td style="width:25%;"><b>In Words</b></td>'
diff --git a/erpnext/setup/doctype/permission_control/permission_control.py b/erpnext/setup/doctype/permission_control/permission_control.py
index 049a3f5..bb05bec 100644
--- a/erpnext/setup/doctype/permission_control/permission_control.py
+++ b/erpnext/setup/doctype/permission_control/permission_control.py
@@ -70,7 +70,10 @@
 			ret.append(p)
 						
 		# fields list
-		fl = ['', 'owner'] + [l[0] for l in sql("select fieldname from tabDocField where parent=%s and fieldtype='Link' and ifnull(options,'')!=''", doctype)]
+		fl = ['', 'owner'] + [l[0] for l in sql("""\
+			select fieldname from tabDocField where parent=%s
+			and ((fieldtype='Link' and ifnull(options,'')!='') or
+			(fieldtype='Select') and lcase(ifnull(options,'')) like 'link:%%')""", doctype)]
 						
 		return {'perms':ret, 'fields':fl}
 		
diff --git a/erpnext/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt b/erpnext/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt
index fcadcd4..43e800f 100644
--- a/erpnext/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt
+++ b/erpnext/stock/DocType Mapper/Sales Order-Delivery Note/Sales Order-Delivery Note.txt
@@ -131,10 +131,10 @@
 	{
 		'checking_operator': u'=',
 		'doctype': u'Field Mapper Detail',
-		'from_field': u'basic_rate',
+		'from_field': u'export_rate',
 		'map': u'Yes',
 		'match_id': 1,
-		'to_field': u'basic_rate'
+		'to_field': u'export_rate'
 	},
 
 	# Field Mapper Detail
@@ -264,4 +264,4 @@
 		'to_table': u'Delivery Note',
 		'validation_logic': u'docstatus = 1'
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index dc847f6..de2d131 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -337,12 +337,12 @@
 				and t1.docstatus != 2
 			""", self.doc.item_code)
 
-			if ((flt(ret[0]['re_order_level']) > flt(current_qty)) and ret[0]['re_order_level']):
-				self.create_auto_indent(ret[0], doc_type, doc_name)
+			if ((flt(ret[0]['re_order_level']) > flt(current_qty[0][0])) and ret[0]['re_order_level']):
+				self.create_auto_indent(ret[0], doc_type, doc_name, current_qty[0][0])
 
 	
 
-	def create_auto_indent(self, i , doc_type, doc_name):
+	def create_auto_indent(self, i , doc_type, doc_name, cur_qty):
 		"""	Create indent on reaching reorder level	"""
 
 		indent = Document('Indent')
@@ -361,7 +361,7 @@
 		indent_details_child.item_name = i['item_name']
 		indent_details_child.description = i['description']
 		indent_details_child.item_group = i['item_group']
-		indent_details_child.qty = i['re_order_qty']
+		indent_details_child.qty = i['re_order_qty'] or (flt(i['re_order_level']) - flt(cur_qty))
 		indent_details_child.brand = i['brand']
 		indent_details_child.save()
 		indent_obj = get_obj('Indent',indent.name,with_children=1)
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.txt b/erpnext/stock/doctype/delivery_note/delivery_note.txt
index 4878c36..7bbd7d5 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.txt
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.txt
@@ -869,7 +869,7 @@
 		'oldfieldname': u'in_words_export',
 		'oldfieldtype': u'Data',
 		'permlevel': 1,
-		'print_hide': 1,
+		'print_hide': 0,
 		'width': u'150px'
 	},
 
@@ -1346,4 +1346,4 @@
 		'permlevel': 0,
 		'print_hide': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 59235ab..f60a5f0 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -41,13 +41,13 @@
 // Expense Account
 // ---------------------------------
 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'
+  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`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50'
 }
 
 // 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'
+  return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Credit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`account_type` ="Income Account" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50'
 }
 
 
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 07e83ed..55e7b41 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -23,7 +23,10 @@
 
 var cfn_set_fields = function(doc, cdt, cdn) {
   lst = ['supplier','supplier_name','supplier_address','customer','customer_name','customer_address'];
-  hide_field(lst);  
+  if (in_list(['Material Issue', 'Material Transfer', 'Material Receipt', 'Production Order', 'Subcontracting', 'Other'], doc.purpose)) {
+    hide_field(lst);
+  } else unhide_field(lst);
+
 
   if (doc.purpose == 'Production Order' || doc.purpose == 'Other'){
     unhide_field('Get Items');
@@ -52,6 +55,7 @@
   if(doc.purpose == 'Purchase Return'){
     doc.customer=doc.customer_name = doc.customer_address=doc.delivery_note_no=doc.sales_invoice_no='';
     unhide_field(['supplier','supplier_name','supplier_address','purchase_receipt_no']);
+
   }
   else if(doc.purpose == 'Sales Return'){
     doc.supplier=doc.supplier_name = doc.supplier_address=doc.purchase_receipt_no='';
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 96642d0..a6fbba0 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -31,8 +31,9 @@
 convert_to_lists = webnotes.conn.convert_to_lists
 	
 # -----------------------------------------------------------------------------------------
+from utilities.transaction_base import TransactionBase
 
-class DocType:
+class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
@@ -510,10 +511,11 @@
 
 
 	def get_cust_addr(self):
-		res = sql("select customer_name,address from `tabCustomer` where name = '%s'"%self.doc.customer)
+		res = sql("select customer_name from `tabCustomer` where name = '%s'"%self.doc.customer)
+		addr = self.get_address_text(customer = self.doc.customer)
 		ret = { 
 			'customer_name'		: res and res[0][0] or '',
-			'customer_address' : res and res[0][1] or ''}
+			'customer_address' : addr and addr[0] or ''}
 
 		return ret
 
@@ -530,7 +532,8 @@
 
 	def get_supp_addr(self):
 		res = sql("select supplier_name,address from `tabSupplier` where name = '%s'"%self.doc.supplier)
+		addr = self.get_address_text(supplier = self.doc.supplier)
 		ret = {
 			'supplier_name' : res and res[0][0] or '',
-			'supplier_address' : res and res[0][1] or ''}
+			'supplier_address' : addr and addr[0] or ''}
 		return ret
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.txt b/erpnext/stock/doctype/stock_entry/stock_entry.txt
index 9792fc9..54053b7 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.txt
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.txt
@@ -3,16 +3,16 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2010-08-08 17:09:25',
+		'creation': '2009-05-12 16:46:45',
 		'docstatus': 0,
-		'modified': '2012-03-21 11:00:48',
+		'modified': '2012-04-13 14:12:02',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': u'1332233897',
+		'_last_update': u'1334303911',
 		'allow_attach': 0,
 		'allow_copy': 0,
 		'allow_email': 0,
@@ -41,7 +41,7 @@
 		'subject': u'%(remarks)s',
 		'tag_fields': u'purpose',
 		'use_template': 0,
-		'version': 259
+		'version': 263
 	},
 
 	# These values are common for all DocField
@@ -71,26 +71,26 @@
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
 		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Material Manager',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
+		'permlevel': 0,
 		'role': u'Material User',
-		'submit': 0,
-		'write': 0
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Material Manager',
+		'submit': 1,
+		'write': 1
 	},
 
 	# DocPerm
@@ -107,30 +107,6 @@
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Production User',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 2,
-		'role': u'Production User',
-		'submit': 0,
-		'write': 1
-	},
-
-	# DocPerm
-	{
 		'amend': 1,
 		'cancel': 1,
 		'create': 1,
@@ -148,20 +124,25 @@
 		'create': 0,
 		'doctype': u'DocPerm',
 		'permlevel': 1,
-		'role': u'Production Manager',
+		'role': u'All',
 		'submit': 0,
 		'write': 0
 	},
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
 		'create': 0,
 		'doctype': u'DocPerm',
 		'permlevel': 2,
+		'role': u'Production User',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': u'DocPerm',
+		'permlevel': 2,
 		'role': u'Production Manager',
-		'submit': 0,
 		'write': 1
 	},
 
@@ -191,12 +172,13 @@
 		'doctype': u'DocField',
 		'fieldname': u'naming_series',
 		'fieldtype': u'Select',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Series',
 		'no_copy': 1,
 		'oldfieldname': u'naming_series',
 		'oldfieldtype': u'Select',
-		'options': u'STE',
+		'options': u'\nSTE',
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
@@ -211,6 +193,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'amendment_date',
 		'fieldtype': u'Date',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Amendment Date',
 		'no_copy': 1,
@@ -219,6 +202,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -229,6 +213,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'purpose',
 		'fieldtype': u'Select',
+		'hidden': 0,
 		'in_filter': 1,
 		'label': u'Purpose',
 		'no_copy': 0,
@@ -236,6 +221,7 @@
 		'oldfieldtype': u'Select',
 		'options': u'Material Issue\nMaterial Receipt\nMaterial Transfer\nSales Return\nPurchase Return\nSubcontracting\nProduction Order\nOther',
 		'permlevel': 0,
+		'print_hide': 0,
 		'report_hide': 0,
 		'reqd': 1,
 		'search_index': 0,
@@ -259,6 +245,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 1,
 		'trigger': u'Client'
 	},
@@ -280,6 +267,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 1,
 		'trigger': u'Client'
 	},
@@ -303,7 +291,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'supplier',
 		'fieldtype': u'Link',
-		'hidden': 1,
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Supplier',
 		'no_copy': 0,
@@ -313,6 +301,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0,
 		'trigger': u'Client'
 	},
@@ -323,13 +312,16 @@
 		'doctype': u'DocField',
 		'fieldname': u'supplier_name',
 		'fieldtype': u'Data',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Supplier Name',
 		'no_copy': 0,
 		'oldfieldname': u'supplier_name',
 		'oldfieldtype': u'Data',
 		'permlevel': 1,
+		'print_hide': 0,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -340,14 +332,16 @@
 		'doctype': u'DocField',
 		'fieldname': u'supplier_address',
 		'fieldtype': u'Small Text',
-		'hidden': 1,
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Supplier Address',
 		'no_copy': 0,
 		'oldfieldname': u'supplier_address',
 		'oldfieldtype': u'Small Text',
 		'permlevel': 0,
+		'print_hide': 0,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0,
 		'trigger': u'Client'
 	},
@@ -359,7 +353,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'customer',
 		'fieldtype': u'Link',
-		'hidden': 1,
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Customer',
 		'no_copy': 0,
@@ -369,6 +363,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0,
 		'trigger': u'Client'
 	},
@@ -379,14 +374,16 @@
 		'doctype': u'DocField',
 		'fieldname': u'customer_name',
 		'fieldtype': u'Data',
-		'hidden': 1,
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Customer Name',
 		'no_copy': 0,
 		'oldfieldname': u'customer_name',
 		'oldfieldtype': u'Data',
 		'permlevel': 1,
+		'print_hide': 0,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -396,14 +393,16 @@
 		'doctype': u'DocField',
 		'fieldname': u'customer_address',
 		'fieldtype': u'Small Text',
-		'hidden': 1,
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Customer Address',
 		'no_copy': 0,
 		'oldfieldname': u'customer_address',
 		'oldfieldtype': u'Small Text',
 		'permlevel': 0,
+		'print_hide': 0,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -424,6 +423,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0,
 		'trigger': u'Client'
 	},
@@ -445,6 +445,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 1,
 		'trigger': u'Client'
 	},
@@ -479,6 +480,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'fg_completed_qty',
 		'fieldtype': u'Currency',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'FG Completed Qty',
 		'no_copy': 0,
@@ -487,6 +489,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0,
 		'trigger': u'Client'
 	},
@@ -511,6 +514,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'from_warehouse',
 		'fieldtype': u'Link',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Source Warehouse',
 		'no_copy': 0,
@@ -533,6 +537,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'to_warehouse',
 		'fieldtype': u'Link',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Target Warehouse',
 		'no_copy': 0,
@@ -576,6 +581,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'transfer_date',
 		'fieldtype': u'Date',
+		'hidden': 0,
 		'in_filter': 1,
 		'label': u'Transfer Date',
 		'no_copy': 1,
@@ -595,6 +601,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'posting_date',
 		'fieldtype': u'Date',
+		'hidden': 0,
 		'in_filter': 1,
 		'label': u'Posting Date',
 		'no_copy': 1,
@@ -613,6 +620,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'posting_time',
 		'fieldtype': u'Time',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Posting Time',
 		'no_copy': 1,
@@ -631,6 +639,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'amended_from',
 		'fieldtype': u'Link',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Amended From',
 		'no_copy': 1,
@@ -640,6 +649,7 @@
 		'permlevel': 1,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -649,6 +659,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'transporter',
 		'fieldtype': u'Data',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Transporter',
 		'no_copy': 0,
@@ -657,6 +668,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -666,6 +678,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'is_excisable_goods',
 		'fieldtype': u'Select',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Is Excisable Goods',
 		'no_copy': 0,
@@ -675,6 +688,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -684,6 +698,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'excisable_goods',
 		'fieldtype': u'Select',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Excisable Goods',
 		'no_copy': 0,
@@ -693,6 +708,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -712,6 +728,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -721,6 +738,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'remarks',
 		'fieldtype': u'Text',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Remarks',
 		'no_copy': 1,
@@ -795,6 +813,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -814,6 +833,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'mtn_details',
 		'fieldtype': u'Table',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'MTN Details',
 		'no_copy': 0,
@@ -823,6 +843,7 @@
 		'permlevel': 0,
 		'print_hide': 0,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -832,6 +853,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'total_amount',
 		'fieldtype': u'Currency',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Total Amount',
 		'no_copy': 0,
@@ -840,6 +862,7 @@
 		'permlevel': 1,
 		'print_hide': 1,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	},
 
@@ -858,6 +881,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'company',
 		'fieldtype': u'Link',
+		'hidden': 0,
 		'in_filter': 1,
 		'label': u'Company',
 		'no_copy': 0,
@@ -877,6 +901,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'fiscal_year',
 		'fieldtype': u'Select',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Fiscal Year',
 		'no_copy': 0,
@@ -896,6 +921,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'select_print_heading',
 		'fieldtype': u'Link',
+		'hidden': 0,
 		'in_filter': 0,
 		'label': u'Select Print Heading',
 		'no_copy': 0,
@@ -903,7 +929,9 @@
 		'oldfieldtype': u'Link',
 		'options': u'Print Heading',
 		'permlevel': 0,
+		'print_hide': 0,
 		'report_hide': 0,
+		'reqd': 0,
 		'search_index': 0
 	}
 ]
\ No newline at end of file