diff --git a/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt b/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt
index ed67ba2..58f66c7 100644
--- a/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt
+++ b/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-08-08 17:09:16',
 		'docstatus': 0,
-		'modified': '2010-09-20 14:06:57',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-11-16 15:41:42',
+		'modified_by': 'Administrator',
 		'owner': 'wasim@webnotestech.com'
 	},
 
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'PVTD.######',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'hide_heading': 1,
 		'istable': 1,
@@ -22,7 +23,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 10
+		'version': 12
 	},
 
 	# These values are common for all DocField
@@ -45,7 +46,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'category',
 		'fieldtype': 'Select',
-		'idx': 1,
 		'label': 'Category',
 		'oldfieldname': 'category',
 		'oldfieldtype': 'Select',
@@ -60,7 +60,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'add_deduct_tax',
 		'fieldtype': 'Select',
-		'idx': 2,
 		'label': 'Add or Deduct',
 		'oldfieldname': 'add_deduct_tax',
 		'oldfieldtype': 'Select',
@@ -75,7 +74,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'charge_type',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Type',
 		'oldfieldname': 'charge_type',
 		'oldfieldtype': 'Select',
@@ -91,7 +89,6 @@
 		'fieldname': 'row_id',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 4,
 		'label': 'Enter Row',
 		'oldfieldname': 'row_id',
 		'oldfieldtype': 'Data',
@@ -104,7 +101,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_wise_tax_detail',
 		'fieldtype': 'Small Text',
-		'idx': 5,
 		'label': 'Item Wise Tax Detail ',
 		'oldfieldname': 'item_wise_tax_detail',
 		'oldfieldtype': 'Small Text',
@@ -116,7 +112,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Small Text',
-		'idx': 6,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Small Text',
@@ -130,7 +125,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'account_head',
 		'fieldtype': 'Link',
-		'idx': 7,
 		'label': 'Account Head',
 		'oldfieldname': 'account_head',
 		'oldfieldtype': 'Link',
@@ -145,13 +139,11 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_center',
 		'fieldtype': 'Link',
-		'idx': 8,
 		'label': 'Cost Center',
 		'oldfieldname': 'cost_center',
 		'oldfieldtype': 'Link',
 		'options': 'Cost Center',
 		'permlevel': 0,
-		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -160,7 +152,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'rate',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Rate',
 		'oldfieldname': 'rate',
 		'oldfieldtype': 'Currency',
@@ -174,7 +165,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'tax_amount',
 		'fieldtype': 'Currency',
-		'idx': 10,
 		'label': 'Amount',
 		'oldfieldname': 'tax_amount',
 		'oldfieldtype': 'Currency',
@@ -188,7 +178,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'total',
 		'fieldtype': 'Currency',
-		'idx': 11,
 		'label': 'Aggregate Total',
 		'oldfieldname': 'total',
 		'oldfieldtype': 'Currency',
@@ -201,7 +190,6 @@
 		'fieldname': 'parenttype',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 12,
 		'in_filter': 1,
 		'label': 'Parenttype',
 		'oldfieldname': 'parenttype',
@@ -218,7 +206,6 @@
 		'fieldname': 'total_tax_amount',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 13,
 		'label': 'Total +Tax',
 		'no_copy': 1,
 		'oldfieldname': 'total_tax_amount',
@@ -235,7 +222,6 @@
 		'fieldname': 'total_amount',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 14,
 		'label': 'Tax Amount',
 		'no_copy': 1,
 		'oldfieldname': 'total_amount',
diff --git a/erpnext/patches/reload_lc_wizard.py b/erpnext/patches/reload_lc_wizard.py
new file mode 100644
index 0000000..6c884c9
--- /dev/null
+++ b/erpnext/patches/reload_lc_wizard.py
@@ -0,0 +1,8 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	from webnotes.model import delete_doc
+
+	delete_doc('DocType', 'Landed Cost Wizard')
+	reload_doc('stock', 'doctype', 'landed_cost_wizard')
+	reload_doc('stock', 'doctype', 'lc_pr_detail')
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
index 5209d1a..7e68f9b 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
@@ -2,10 +2,7 @@
 if(!doc.currency){doc.currency = sys_defaults.currency;}
 }
 
-cur_frm.fields_dict['landed_cost_details'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
-  return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus != 2 AND tabAccount.account_type = "Chargeable" AND  tabAccount.name LIKE "%s"'
-}
 
 cur_frm.fields_dict['landed_cost_details'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
   return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus != 2 AND (tabAccount.account_type = "Tax" OR tabAccount.account_type = "Chargeable") AND  tabAccount.name LIKE "%s"'
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index e1d5774..fccc3db 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -1,236 +1,47 @@
-# Please edit this list and import only required elements
 import webnotes
+from webnotes.utils import cint, cstr, flt
+from webnotes.model.doc import addchild, getchildren
+from webnotes.model.doclist import getlist
+from webnotes.model.code import get_obj
+from webnotes import msgprint
 
-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
+		self.prwise_cost = {}
+		
+	def check_mandatory(self):
+		""" Check mandatory fields """		
+		if not self.doc.from_pr_date or not self.doc.to_pr_date:
+			msgprint("Please enter From and To PR Date", raise_exception=1)
+
+		if not self.doc.currency:
+			msgprint("Please enter Currency.", raise_exception=1)
+
 
 	def get_purchase_receipts(self):
+		"""	Get purchase receipts for given period """
+				
 		self.doc.clear_table(self.doclist,'lc_pr_details',1)
-		if not self.doc.from_pr_date or not self.doc.to_pr_date:
-			msgprint("Please enter From and To PR Date")
-			raise Exception
-		if not self.doc.currency:
-			msgprint("Please enter Currency.")
-			raise Exception
-		pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name "%(self.doc.from_pr_date,self.doc.to_pr_date,self.doc.currency), as_dict = 1)
+		self.check_mandatory()
+		
+		pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name " % (self.doc.from_pr_date, self.doc.to_pr_date, self.doc.currency), as_dict = 1)
 		if len(pr)>200:
-			msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.")
-			raise Exception
+			msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.", raise_exception=1)
+			
 		for i in pr:
-			if i and i['name']:
-				pr_no = addchild(self.doc, 'lc_pr_details', 'LC PR Detail', 1, self.doclist)
-				pr_no.purchase_receipt_no = i and i['name'] or ''
-				pr_no.save()
+			ch = addchild(self.doc, 'lc_pr_details', 'LC PR Detail', 1, self.doclist)
+			ch.purchase_receipt = i and i['name'] or ''
+			ch.save()
 
 
-	def update_pr_lc_se(self):
-		lst = []
-		condition = ' name in('
-		
-		amt = 0
-		for d in getlist(self.doclist, 'lc_pr_details'):
-			
-			if cint(d.include_in_landed_cost) == 1:
-				condition += '"'+d.purchase_receipt_no+'",'
-				lst.append(d.purchase_receipt_no) 
-		condition += '"")'
-		
-		amount = sql("SELECT SUM(net_total) FROM `tabPurchase Receipt` WHERE docstatus = 1 AND %s"%condition)
-		amt = amount and flt(amount[0][0]) or 0
-		for lc in getlist(self.doclist, 'landed_cost_details'):
-			for name in lst:
-				pr_oc_det = sql("select name from `tabPurchase Tax Detail` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s ",(name, lc.account_head))
-				#obj = get_obj('Purchase Receipt', name, with_children = 1)
-				if not pr_oc_det:
-					obj = get_obj('Purchase Receipt', name, with_children = 1)
-					lgth = cint(sql("select count(name) from `tabPurchase Tax Detail` where parent = '%s' "%(name))[0][0])
-					pr_oc = addchild(obj.doc, 'purchase_tax_details', 'Purchase Tax Detail', 1)
-					pr_oc.category = 'For Valuation'
-					pr_oc.add_deduct_tax = 'Add'
-					pr_oc.charge_type = 'Actual'
-					pr_oc.description = lc.description
-					pr_oc.account_head = lc.account_head
-					pr_oc.rate = flt(flt(lc.amount) * flt(obj.doc.net_total/ amt))
-					pr_oc.tax_amount = flt(flt(lc.amount) * flt(obj.doc.net_total/ amt))
-					pr_oc.total = obj.doc.grand_total
-					pr_oc.docstatus = 1
-					pr_oc.idx = cint(lgth)
-					pr_oc.save()
-				else:
-					obj = get_obj('Purchase Receipt', name)
-					sql("update `tabPurchase Tax Detail` set rate = %s, tax_amount = %s where name = %s and parent = %s",(flt(flt(lc.amount) * flt(obj.doc.net_total/ amt)),flt(flt(lc.amount) * flt(obj.doc.net_total/ amt)),pr_oc_det[0][0],name))
-					
-				self.calc_pr_other_charges(name)
-				obj = get_obj('Purchase Receipt', name, with_children = 1)
-				for d in getlist(obj.doclist, 'purchase_receipt_details'):
-					if flt(d.qty):
-						d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost) / flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor)
-						d.save()
-					sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
-
-					bin_name = sql("select t1.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1"%(d.name))
-					if bin_name and bin_name[0][0]:
-						obj = get_obj('Bin', bin_name[0][0]).update_entries_after(bin_name[0][1], bin_name[0][2])
-
-		# now distribute the taxes among the PRs
-		for lc in getlist(self.doclist, 'landed_cost_details'):
-			for d in lst:
-				pr_id = d.purchase_receipt_no
-				
-				# load the purchase receipt object
-				pr = get_obj('Purchase Receipt', pr_id, with_children = 1)
-				
-				# get the tax detail (for valuation) in the PR if it exists 
-				pr_oc_det = sql("select name from `tabPurchase Tax Detail` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s ",(pr_id, lc.account_head))
-				
-				# update tax rate and tax amount
-				tax_amount = flt(flt(lc.amount) * flt(pr.doc.net_total/ amt))
-				
-				# for display
-				d.net_total = pr.doc.net_total
-				d.added_cost = tax_amount
-				d.save()
-				
-				# if not exist, create the tax detail for valuation
-				if not pr_oc_det:
-					lgth = cint(sql("select count(name) from `tabPurchase Tax Detail` where parent = '%s' "%(pr_id))[0][0])
-					pr_oc = addchild(pr.doc, 'purchase_tax_details', 'Purchase Tax Detail', 1)
-					pr_oc.category = 'For Valuation'
-					pr_oc.add_deduct_tax = 'Add'
-					pr_oc.charge_type = 'Actual'
-					pr_oc.description = lc.description
-					pr_oc.account_head = lc.account_head
-					pr_oc.rate = tax_amount
-					pr_oc.tax_amount = tax_amount
-					pr_oc.total = obj.doc.grand_total
-					pr_oc.docstatus = 1
-					pr_oc.idx = cint(lgth)
-					pr_oc.save()
-				else:
-					obj = get_obj('Purchase Receipt', name)
-					sql("update `tabPurchase Tax Detail` set rate = %s, tax_amount = %s where name = %s and parent = %s", \
-						(tax_amount, tax_amount, pr_oc_det[0][0], pr_id))
-					
-				self.calc_pr_other_charges(name)
-				
-				# reload - and update the stock entries with the
-				# additional valuations
-				
-				obj = get_obj('Purchase Receipt', name, with_children = 1)
-				for d in getlist(obj.doclist, 'purchase_receipt_details'):
-					if flt(d.qty):
-						d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost) / flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor)
-						d.save()
-					sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
-					bin_name = sql("select t1.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1"%(d.name))
-
-					# update valuation of the item
-					if bin_name and bin_name[0][0]:
-						obj = get_obj('Bin', bin_name[0][0]).update_entries_after(bin_name[0][1], bin_name[0][2])
-
-	def add_deduct_taxes(self, ocd, oc, tax_amount, total_amount, total, prev_total, f=1):
-		ocd[oc].total_amount = flt(tax_amount.toFixed(2))		 
-		ocd[oc].total_tax_amount = flt(prev_total.toFixed(2))
-		ocd[oc].tax_amount += flt(tax_amount.toFixed(2))
-			 
-		total_amount = flt(ocd[oc].tax_amount)
-		total_tax_amount = flt(ocd[oc].total_tax_amount) + (f * flt(total_amount))
-		
-		if ocd[oc].category != "For Valuation":	
-			prev_total += f * flt(ocd[oc].total_amount)
-			total += f * flt(ocd[oc].tax_amount)
-			ocd[oc].total = flt(total) + (f * flt(tax[t].tax_amount))
-		else:
-			prev_total = prev_total				
-			ocd[oc].total = flt(total)
-		if ocd[oc].category != "For Total":
-			item_tax += f * ocd[oc].total_amount
-		ocd[oc].save()
-		
-		return total, prev_total
-		
-	# calculate the taxes for these PRs		
-	def calc_pr_other_charges(self, name):
-		
-		# re-calculate other charges
-		obj = get_obj('Purchase Receipt', name, with_children = 1)
-		total = 0
-		net_total = obj.doc.net_total
-
-
-		for prd in getlist(obj.doclist, 'purchase_receipt_details'):
-			prev_total, item_tax = flt(prd.amount), 0
-			total += flt(flt(prd.qty) * flt(prd.purchase_rate))
-			
-			check_tax = prd.item_tax_rate and eval(prd.item_tax_rate) or {}
-			ocd = getlist(obj.doclist, 'purchase_tax_details')
-			
-			# calculate tax for other charges
-			for oc in range(len(ocd)):
-				if check_tax.get(ocd[oc].account_head) and ocd[oc].charge_type != 'Actual':
-					rate = check_tax[ocd[oc].account_head]
-				else:
-					rate = flt(ocd[oc].rate)
-				
-				tax_amount = self.cal_tax(ocd, prd, rate, net_total, oc)
-				if ocd[oc].add_deduct_tax == 'Add':
-					add_deduct_taxes(self, ocd, oc, tax_amount, total_amount, total, prev_total, f=1)
-											
-				elif ocd[oc].add_deduct_tax == 'Deduct':
-					add_deduct_taxes(self, ocd, oc, tax_amount, total_amount, total, prev_total, f=-1)
-
-			prd.item_tax_amount = flt(item_tax)
-			prd.save()
-		obj.doc.save()
-					
-	def cal_tax(self, ocd, prd, rate, net_total, oc):
-		tax_amount = 0
-		if ocd[oc].charge_type == 'Actual':
-			value = flt(flt(rate) / flt(net_total))
-			return flt(flt(value) * flt(prd.amount))
-			
-		elif ocd[oc].charge_type == 'On Net Total':
-			return flt(flt(rate) * flt(prd.amount) / 100)
-			
-		elif ocd[oc].charge_type == 'On Previous Row Amount':
-			
-			row_no = cstr(ocd[oc].row_id)
-			row = (row_no).split("+")
-			for r in range(0, len(row.length)):
-				id = cint(row[r])
-				tax_amount += flt((flt(rate) * flt(ocd[id-1].total_amount) / 100))
-			row_id = row_no.find("/")
-			if row_id != -1:
-				rate = ''
-				row = (row_no).split("/")
-				
-				id1 = cint(row[0])
-				id2 = cint(row[1])
-				tax_amount = flt(flt(ocd[id1-1].total_amount) / flt(ocd[id2-1].total_amount))
-				
-			return tax_amount
-
-	# get details for landed cost table from master
-	# ---------------------------------------------
 	def get_landed_cost_master_details(self):
+		""" pull details from landed cost master"""
 		self.doc.clear_table(self.doclist, 'landed_cost_details')
 		idx = 0
 		landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1)
@@ -238,3 +49,176 @@
 			lct = addchild(self.doc, 'landed_cost_details', 'Landed Cost Detail', 1, self.doclist)
 			lct.account_head = cost['account_head']
 			lct.description = cost['description']
+
+
+	def get_selected_pr(self):
+		""" Get selected purchase receipt no """
+		self.selected_pr = [d.purchase_receipt for d in getlist(self.doclist, 'lc_pr_details') if d.select_pr]
+		
+	def validate_selected_pr(self):
+		"""Validate selected PR as submitted"""
+		invalid_pr =  sql("SELECT name FROM `tabPurchase Receipt` WHERE docstatus != 1 and name in (%s)" % ("'" + "', '".join(self.selected_pr) + "'"))
+		if invalid_pr:
+			msgprint("Selected purchase receipts must be submitted. Following PR are not submitted: %s" % invalid_pr, raise_exception=1)
+			
+
+	def get_total_amt(self):
+		""" Get sum of net total of all selected PR"""		
+		return sql("SELECT SUM(net_total) FROM `tabPurchase Receipt` WHERE name in (%s)" % ("'" + "', '".join(self.selected_pr) + "'"))[0][0]
+		
+
+	def add_charges_in_pr(self):
+		""" Add additional charges in selected pr proportionately"""
+		total_amt = self.get_total_amt()
+		
+		for pr in self.selected_pr:
+			pr_obj = get_obj('Purchase Receipt', pr, with_children = 1)
+			cumulative_grand_total = flt(pr_obj.doc.grand_total)
+			
+			for lc in getlist(self.doclist, 'landed_cost_details'):
+				amt = flt(lc.amount) * flt(pr_obj.doc.net_total)/ flt(total_amt)
+				self.prwise_cost[pr] = self.prwise_cost.get(pr, 0) + amt
+				cumulative_grand_total += amt
+				
+				pr_oc_row = sql("select name from `tabPurchase Tax Detail` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head))
+				if not pr_oc_row:	# add if not exists
+					ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Tax Detail', 1)
+					ch.category = 'For Valuation'
+					ch.add_deduct_tax = 'Add'
+					ch.charge_type = 'Actual'
+					ch.description = lc.description
+					ch.account_head = lc.account_head
+					ch.rate = amt
+					ch.tax_amount = amt
+					ch.total = cumulative_grand_total
+					ch.docstatus = 1
+					ch.idx = 500 # add at the end
+					ch.save(1)
+				else:	# overwrite if exists
+					sql("update `tabPurchase Tax Detail` set rate = %s, tax_amount = %s where name = %s and parent = %s ", (amt, amt, pr_oc_row[0][0], pr))
+		
+		
+	def reset_other_charges(self, pr_obj):
+		""" Reset all calculated values to zero"""
+		for t in getlist(pr_obj.doclist, 'purchase_tax_details'):
+			t.total_tax_amount = 0;
+			t.total_amount = 0;
+			t.tax_amount = 0;
+			t.total = 0;
+			t.save()
+			
+		
+	def cal_charges_and_item_tax_amt(self):
+		""" Re-calculates other charges values and itemwise tax amount for getting valuation rate"""
+		for pr in self.selected_pr:
+			obj = get_obj('Purchase Receipt', pr, with_children = 1)
+			total = 0
+			self.reset_other_charges(obj)
+
+			for prd in getlist(obj.doclist, 'purchase_receipt_details'):
+				prev_total, item_tax = flt(prd.amount), 0
+				total += flt(prd.qty) * flt(prd.purchase_rate)
+			
+				item_tax_rate = prd.item_tax_rate and eval(prd.item_tax_rate) or {}
+				
+				ocd = getlist(obj.doclist, 'purchase_tax_details')
+				# calculate tax for other charges
+				for oc in range(len(ocd)):
+					# Get rate : consider if diff for this item
+					if item_tax_rate.get(ocd[oc].account_head) and ocd[oc].charge_type != 'Actual':
+						rate = item_tax_rate[ocd[oc].account_head]
+					else:
+						rate = flt(ocd[oc].rate)
+				
+					tax_amount = self.cal_tax(ocd, prd, rate, obj.doc.net_total, oc)					
+					total, prev_total, item_tax = self.add_deduct_taxes(ocd, oc, tax_amount, total, prev_total, item_tax)
+
+				prd.item_tax_amount = flt(item_tax)
+				prd.save()
+			obj.doc.save()
+	
+	
+	def cal_tax(self, ocd, prd, rate, net_total, oc):
+		""" Calculates tax amount for one item"""
+		tax_amount = 0
+		if ocd[oc].charge_type == 'Actual':
+			tax_amount = flt(rate) * flt(prd.amount) / flt(net_total)
+		elif ocd[oc].charge_type == 'On Net Total':
+			tax_amount = flt(rate) * flt(prd.amount) / 100		
+		elif ocd[oc].charge_type == 'On Previous Row Amount':			
+			row_no = cstr(ocd[oc].row_id)
+			row = row_no.split("+")
+			for r in range(0, len(row)):
+				id = cint(row[r])
+				tax_amount += flt((flt(rate) * flt(ocd[id-1].total_amount) / 100))
+			row_id = row_no.find("/")
+			if row_id != -1:
+				rate = ''
+				row = (row_no).split("/")				
+				id1 = cint(row[0])
+				id2 = cint(row[1])
+				tax_amount = flt(flt(ocd[id1-1].total_amount) / flt(ocd[id2-1].total_amount))
+		elif ocd[oc].charge_type == 'On Previous Row Total':
+			row = cint(ocd[oc].row_id)
+			if ocd[row-1].add_deduct_tax == 'Add':
+			  tax_amount = flt(rate) * (flt(ocd[row-1].total_tax_amount)+flt(ocd[row-1].total_amount)) / 100
+			elif ocd[row-1].add_deduct_tax == 'Deduct':
+			  tax_amount = flt(rate) * (flt(ocd[row-1].total_tax_amount)-flt(ocd[row-1].total_amount)) / 100
+			  
+		return tax_amount  
+
+	def add_deduct_taxes(self, ocd, oc, tax_amount, total, prev_total, item_tax):
+		"""Calculates other charges values"""
+		add_ded = ocd[oc].add_deduct_tax == 'Add' and 1 or ocd[oc].add_or_deduct == 'Deduct' and -1
+		ocd[oc].total_amount = flt(tax_amount)
+		ocd[oc].total_tax_amount = flt(prev_total)
+		ocd[oc].tax_amount += flt(tax_amount)
+		
+		total_amount = flt(ocd[oc].tax_amount)
+		total_tax_amount = flt(ocd[oc].total_tax_amount) + (add_ded * flt(total_amount))
+		
+		if ocd[oc].category != "For Valuation":	
+			prev_total += add_ded * flt(ocd[oc].total_amount)
+			total += add_ded * flt(ocd[oc].tax_amount)
+			msgprint(add_ded * flt(ocd[oc].tax_amount))
+			ocd[oc].total = total
+		else:
+			prev_total = prev_total
+			ocd[oc].total = flt(total)
+		ocd[oc].save()
+				
+		if ocd[oc].category != "For Total":
+			item_tax += add_ded * ocd[oc].total_amount
+		
+		return total, prev_total, item_tax
+
+
+	def update_sle(self):
+		""" Recalculate valuation rate in all sle after pr posting date"""
+		for pr in self.selected_pr:
+			pr_obj = get_obj('Purchase Receipt', pr, with_children = 1)
+			
+			for d in getlist(pr_obj.doclist, 'purchase_receipt_details'):
+				if flt(d.qty):
+					d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost)/flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor)
+					d.save()	
+				sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
+				
+				bin = sql("select t1.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1" % d.name)
+
+				# update valuation rate after pr posting date
+				if bin and bin[0][0]:
+					obj = get_obj('Bin', bin[0][0]).update_entries_after(bin[0][1], bin[0][2])
+
+				
+	def update_landed_cost(self):
+		""" 
+			Add extra cost and recalculate all values in pr, 
+			Recalculate valuation rate in all sle after pr posting date
+		"""	
+		self.get_selected_pr()
+		self.validate_selected_pr()			
+		self.add_charges_in_pr()		
+		self.cal_charges_and_item_tax_amt()
+		self.update_sle()
+		msgprint("Landed Cost updated successfully")
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
index 90c570a..76f4968 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
@@ -5,14 +5,16 @@
 	{
 		'creation': '2010-08-08 17:09:07',
 		'docstatus': 0,
-		'modified': '2011-06-30 18:47:46',
+		'modified': '2011-11-16 15:59:42',
 		'modified_by': 'Administrator',
 		'owner': 'wasim@webnotestech.com'
 	},
 
 	# These values are common for all DocType
 	{
+		'_last_update': '1321350727',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'issingle': 1,
 		'module': 'Stock',
@@ -20,7 +22,7 @@
 		'section_style': 'Simple',
 		'server_code_error': ' ',
 		'show_in_menu': 1,
-		'version': 31
+		'version': 33
 	},
 
 	# These values are common for all DocField
@@ -52,7 +54,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 0,
 		'role': 'All',
 		'write': 0
@@ -64,7 +65,6 @@
 		'cancel': 0,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 0,
 		'role': 'Purchase Manager',
 		'submit': 0,
@@ -75,7 +75,6 @@
 	{
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'write': 1
@@ -85,7 +84,6 @@
 	{
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 0,
 		'role': 'Purchase User',
 		'write': 1
@@ -94,7 +92,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 5,
 		'permlevel': 1,
 		'role': 'All'
 	},
@@ -102,7 +99,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 6,
 		'permlevel': 1,
 		'role': 'System Manager'
 	},
@@ -110,7 +106,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 7,
 		'permlevel': 1,
 		'role': 'Purchase User'
 	},
@@ -118,7 +113,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 8,
 		'permlevel': 1,
 		'role': 'Purchase Manager'
 	},
@@ -126,9 +120,16 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Select PR',
+		'options': 'Simple'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'from_pr_date',
 		'fieldtype': 'Date',
-		'idx': 1,
 		'label': 'From PR Date',
 		'reqd': 1
 	},
@@ -138,7 +139,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'to_pr_date',
 		'fieldtype': 'Date',
-		'idx': 2,
 		'label': 'To PR Date',
 		'reqd': 1
 	},
@@ -148,7 +148,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'currency',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Currency',
 		'options': 'link:Currency',
 		'reqd': 1
@@ -158,7 +157,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 4,
 		'label': 'Get Purchase Receipt',
 		'options': 'get_purchase_receipts'
 	},
@@ -166,18 +164,8 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 5,
-		'label': 'LC PR Detail',
-		'options': 'Simple'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
 		'fieldname': 'lc_pr_details',
 		'fieldtype': 'Table',
-		'idx': 6,
 		'label': 'LC PR Details',
 		'options': 'LC PR Detail'
 	},
@@ -186,8 +174,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 7,
-		'label': 'Landed Cost Detail',
+		'label': 'Update Landed Cost',
 		'options': 'Simple'
 	},
 
@@ -196,7 +183,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'landed_cost',
 		'fieldtype': 'Link',
-		'idx': 8,
 		'label': 'Select Landed Cost Details Master',
 		'options': 'Landed Cost Master'
 	},
@@ -206,7 +192,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 9,
 		'label': 'Get Details',
 		'options': 'get_landed_cost_master_details'
 	},
@@ -216,7 +201,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'landed_cost_details',
 		'fieldtype': 'Table',
-		'idx': 10,
 		'label': 'Landed Cost Details',
 		'options': 'Landed Cost Detail'
 	},
@@ -225,8 +209,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 11,
 		'label': 'Update PR',
-		'options': 'update_pr_lc_se'
+		'options': 'update_landed_cost'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt b/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt
index d09285d..b6bcb42 100644
--- a/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt
+++ b/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:07',
 		'docstatus': 0,
-		'modified': '2011-06-30 18:47:22',
+		'modified': '2011-11-16 16:10:00',
 		'modified_by': 'Administrator',
 		'owner': 'wasim@webnotestech.com'
 	},
@@ -13,6 +13,7 @@
 	# These values are common for all DocType
 	{
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Stock',
@@ -20,7 +21,7 @@
 		'section_style': 'Simple',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 2
+		'version': 5
 	},
 
 	# These values are common for all DocField
@@ -42,25 +43,23 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'purchase_receipt_no',
+		'fieldname': 'purchase_receipt',
 		'fieldtype': 'Link',
-		'idx': 1,
-		'label': 'Purchase Receipt No',
+		'label': 'Purchase Receipt',
 		'oldfieldname': 'purchase_receipt_no',
 		'oldfieldtype': 'Link',
 		'options': 'Purchase Receipt',
-		'search_index': 1
+		'width': '220px'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'include_in_landed_cost',
+		'fieldname': 'select_pr',
 		'fieldtype': 'Check',
-		'idx': 2,
-		'label': 'Include In Landed Cost',
+		'label': 'Select PR',
 		'oldfieldname': 'include_in_landed_cost',
 		'oldfieldtype': 'Check',
-		'width': '150px'
+		'width': '120px'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt b/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt
index 2348e8e..2e3514e 100644
--- a/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt
+++ b/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:16',
 		'docstatus': 0,
-		'modified': '2011-10-20 18:40:15',
+		'modified': '2011-11-16 15:43:36',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -22,7 +22,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 60
+		'version': 63
 	},
 
 	# These values are common for all DocField
@@ -451,6 +451,7 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'item_tax_amount',
 		'fieldtype': 'Currency',
@@ -501,6 +502,7 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'valuation_rate',
 		'fieldtype': 'Currency',
@@ -517,6 +519,7 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'description': 'Tax detail table fetched from item master as a string and stored in this field.\nUsed for Purchase Other Charges',
 		'doctype': 'DocField',
 		'fieldname': 'item_tax_rate',
