[minor] [cleanup] Landed cost wizard
diff --git a/controllers/stock_controller.py b/controllers/stock_controller.py
index 9554913..fc4997e 100644
--- a/controllers/stock_controller.py
+++ b/controllers/stock_controller.py
@@ -113,10 +113,6 @@
 					make_gl_entries(expected_gle)
 			else:
 				self.delete_gl_entries(voucher_type, voucher_no)
-			
-			# else:
-			# 	# make adjustment entry on that date
-			# 	self.make_adjustment_entry(expected_gle, voucher_obj)
 				
 		
 	def get_future_stock_vouchers(self):
@@ -185,7 +181,7 @@
 			
 	def check_expense_account(self, item):
 		if item.fields.has_key("expense_account") and not item.expense_account:
-			msgprint(_("""Expense account is mandatory for item: """) + item.item_code, 
+			msgprint(_("""Expense/Difference account is mandatory for item: """) + item.item_code, 
 				raise_exception=1)
 				
 		if item.fields.has_key("expense_account") and not item.cost_center:
diff --git a/docs/docs.user.stock.perpetual_inventory.md b/docs/docs.user.stock.perpetual_inventory.md
index ff8a920..8dc2a2d 100644
--- a/docs/docs.user.stock.perpetual_inventory.md
+++ b/docs/docs.user.stock.perpetual_inventory.md
@@ -210,7 +210,7 @@
 >		<tr><th>Item</th><th>Target Warehouse</th><th>Qty</th><th>Rate</th><th>Amount</th></tr>
 >	</thead>
 >	<tbody>
->		<tr><td>RM0001</td><td>Stores</td><td>50</td><td>200</td><td>10000</td></tr>
+>		<tr><td>RM0001</td><td>Stores</td><td>50</td><td>220</td><td>11000</td></tr>
 >	</tbody>
 ></table>
 
@@ -221,7 +221,7 @@
 **General Ledger**
 
 ![si_stock_ledger](img/accounting-for-stock-10.png)
-
+ 
 --
 
 ### **Stock Entry (Material Issue)**
@@ -232,7 +232,7 @@
 >		<tr><th>Item</th><th>Source Warehouse</th><th>Qty</th><th>Rate</th><th>Amount</th></tr>
 >	</thead>
 >	<tbody>
->		<tr><td>RM0001</td><td>Stores</td><td>10</td><td>200</td><td>2000</td></tr>
+>		<tr><td>RM0001</td><td>Stores</td><td>10</td><td>220</td><td>2200</td></tr>
 >	</tbody>
 ></table>
 
@@ -256,7 +256,7 @@
 >	</thead>
 >	<tbody>
 >		<tr><td>RM0001</td><td>Stores</td><td>Work In Progress</td>
->		<td>10</td><td>200</td><td>2000</td></tr>
+>		<td>10</td><td>220</td><td>2200</td></tr>
 >	</tbody>
 ></table>
 
diff --git a/stock/doctype/landed_cost_item/landed_cost_item.txt b/stock/doctype/landed_cost_item/landed_cost_item.txt
index 3e14ce8..bfd6216 100644
--- a/stock/doctype/landed_cost_item/landed_cost_item.txt
+++ b/stock/doctype/landed_cost_item/landed_cost_item.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-02-22 01:28:02", 
   "docstatus": 0, 
-  "modified": "2013-07-10 14:54:10", 
+  "modified": "2013-09-02 17:36:19", 
   "modified_by": "Administrator", 
   "owner": "wasim@webnotestech.com"
  }, 
@@ -14,7 +14,6 @@
  }, 
  {
   "doctype": "DocField", 
-  "in_list_view": 1, 
   "name": "__common__", 
   "parent": "Landed Cost Item", 
   "parentfield": "fields", 
@@ -30,6 +29,7 @@
   "doctype": "DocField", 
   "fieldname": "account_head", 
   "fieldtype": "Link", 
+  "in_list_view": 1, 
   "label": "Account Head", 
   "oldfieldname": "account_head", 
   "oldfieldtype": "Link", 
@@ -38,8 +38,16 @@
  }, 
  {
   "doctype": "DocField", 
+  "fieldname": "cost_center", 
+  "fieldtype": "Link", 
+  "label": "Cost Center", 
+  "options": "Cost Center"
+ }, 
+ {
+  "doctype": "DocField", 
   "fieldname": "description", 
   "fieldtype": "Data", 
+  "in_list_view": 1, 
   "label": "Description", 
   "oldfieldname": "description", 
   "oldfieldtype": "Data", 
@@ -50,6 +58,7 @@
   "doctype": "DocField", 
   "fieldname": "amount", 
   "fieldtype": "Currency", 
+  "in_list_view": 1, 
   "label": "Amount", 
   "oldfieldname": "amount", 
   "oldfieldtype": "Currency", 
diff --git a/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.txt b/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.txt
index e47dd27..5f0bc90 100644
--- a/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.txt
+++ b/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-02-22 01:28:02", 
   "docstatus": 0, 
-  "modified": "2013-07-10 14:54:10", 
+  "modified": "2013-09-02 13:44:28", 
   "modified_by": "Administrator", 
   "owner": "wasim@webnotestech.com"
  }, 
@@ -14,36 +14,26 @@
  }, 
  {
   "doctype": "DocField", 
+  "fieldname": "purchase_receipt", 
+  "fieldtype": "Link", 
   "in_list_view": 1, 
+  "label": "Purchase Receipt", 
   "name": "__common__", 
+  "oldfieldname": "purchase_receipt_no", 
+  "oldfieldtype": "Link", 
+  "options": "Purchase Receipt", 
   "parent": "Landed Cost Purchase Receipt", 
   "parentfield": "fields", 
   "parenttype": "DocType", 
-  "permlevel": 0
+  "permlevel": 0, 
+  "print_width": "220px", 
+  "width": "220px"
  }, 
  {
   "doctype": "DocType", 
   "name": "Landed Cost Purchase Receipt"
  }, 
  {
-  "doctype": "DocField", 
-  "fieldname": "purchase_receipt", 
-  "fieldtype": "Link", 
-  "label": "Purchase Receipt", 
-  "oldfieldname": "purchase_receipt_no", 
-  "oldfieldtype": "Link", 
-  "options": "Purchase Receipt", 
-  "print_width": "220px", 
-  "width": "220px"
- }, 
- {
-  "doctype": "DocField", 
-  "fieldname": "select_pr", 
-  "fieldtype": "Check", 
-  "label": "Select PR", 
-  "oldfieldname": "include_in_landed_cost", 
-  "oldfieldtype": "Check", 
-  "print_width": "120px", 
-  "width": "120px"
+  "doctype": "DocField"
  }
 ]
\ No newline at end of file
diff --git a/stock/doctype/landed_cost_wizard/landed_cost_wizard.js b/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
index 06f3fd6..3a8cb78 100644
--- a/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
+++ b/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
@@ -1,13 +1,15 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
-if(!doc.currency){doc.currency = sys_defaults.currency;}
+
+cur_frm.fields_dict['lc_pr_details'].grid.get_field("purchase_receipt").get_query = function(doc, cdt, cdn) {
+	return {
+		filters:[['Purchase Receipt', 'docstatus', '=', '1']]
+	}
 }
 
-
-cur_frm.fields_dict['landed_cost_details'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
-return{
+cur_frm.fields_dict['landed_cost_details'].grid.get_field("account_head").get_query = function(doc, cdt, cdn) {
+	return{
 		filters:[
 			['Account', 'group_or_ledger', '=', 'Ledger'],
 			['Account', 'account_type', 'in', 'Tax, Chargeable'],
diff --git a/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index 797b39a..8c714b3 100644
--- a/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -13,81 +13,36 @@
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
-		self.prwise_cost = {}
-		
-	def check_mandatory(self):
-		if not self.doc.from_pr_date or not self.doc.to_pr_date:
-			webnotes.throw(_("Please enter From and To PR Date"))
-
-		if not self.doc.currency:
-			webnotes.throw(_("Please enter Currency"))
 			
 	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()
+		"""
+		purchase_receipts = [row.purchase_receipt for row in 
+			self.doclist.get({"parentfield": "lc_pr_details"})]
+			
+		self.validate_purchase_receipts(purchase_receipts)
+		self.cancel_pr(purchase_receipts)
+		self.add_charges_in_pr(purchase_receipts)
+		self.submit_pr(purchase_receipts)
 		msgprint("Landed Cost updated successfully")
-		
-	def get_selected_pr(self):
-		""" Get selected purchase receipt no """
-		self.selected_pr = [d.purchase_receipt for d in \
-			self.doclist.get({"parentfield": "lc_pr_details"}) if d.select_pr]
-		if not self.selected_pr:
-			webnotes.throw(_("Please select atleast one PR to proceed."))
 
-	def get_purchase_receipts(self):
-		"""	Get purchase receipts for given period """
-				
-		self.doclist = self.doc.clear_table(self.doclist,'lc_pr_details')
-		self.check_mandatory()
-		
-		pr = webnotes.conn.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:
-			webnotes.throw(_("Please enter date of shorter duration as there are too many \
-				purchase receipt, hence it cannot be loaded."))
-			
-		for i in pr:
-			ch = addchild(self.doc, 'lc_pr_details', 'Landed Cost Purchase Receipt', 
-				self.doclist)
-			ch.purchase_receipt = i.name
-		
-	def validate_selected_pr(self):
-		"""Validate selected PR as submitted"""
-		invalid_pr =  webnotes.conn.sql("""SELECT name FROM `tabPurchase Receipt` 
-			WHERE docstatus!=1 and name in (%s)""" % 
-			', '.join(['%s']*len(self.selected_pr)), tuple(self.selected_pr))
-		if invalid_pr:
-			webnotes.throw(_("Selected purchase receipts must be submitted. \
-				Following PR are not submitted") + ": " + invalid_pr)
-			
+	def validate_purchase_receipts(self, purchase_receipts):
+		for pr in purchase_receipts:
+			if webnotes.conn.get_value("Purchase Receipt", pr, "docstatus") != 1:
+				webnotes.throw(_("Purchase Receipt") + ": " + pr + _(" is not submitted document"))
 
-	def get_total_amt(self):
-		""" Get sum of net total of all selected PR"""		
-		return webnotes.conn.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt` 
-			WHERE name in (%s)""" % ', '.join(['%s']*len(self.selected_pr)), 
-			tuple(self.selected_pr))[0][0]
-		
-
-	def add_charges_in_pr(self):
+	def add_charges_in_pr(self, purchase_receipts):
 		""" Add additional charges in selected pr proportionately"""
-		total_amt = self.get_total_amt()
+		total_amt = self.get_total_pr_amt(purchase_receipts)
 		
-		for pr in self.selected_pr:
+		for pr in purchase_receipts:
 			pr_obj = get_obj('Purchase Receipt', pr, with_children = 1)
-			cumulative_grand_total = flt(pr_obj.doc.grand_total)
+			idx = max([d.idx for d in pr_obj.doclist.get({"parentfield": "purchase_tax_details"})])
 			
-			for lc in getlist(self.doclist, 'landed_cost_details'):
+			for lc in self.doclist.get({"parentfield": "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 = webnotes.conn.sql("""select name from `tabPurchase Taxes and Charges` 
 						where parent = %s and category = 'Valuation' and add_deduct_tax = 'Add' 
@@ -99,140 +54,43 @@
 					ch.charge_type = 'Actual'
 					ch.description = lc.description
 					ch.account_head = lc.account_head
+					ch.cost_center = lc.cost_center
 					ch.rate = amt
 					ch.tax_amount = amt
-					ch.total = cumulative_grand_total
 					ch.docstatus = 1
-					ch.idx = 500 # add at the end
+					ch.idx = idx
 					ch.save(1)
+					idx += 1
 				else:	# overwrite if exists
 					webnotes.conn.sql("""update `tabPurchase Taxes and Charges` 
 						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"""
-		import json
-		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)
-			
-				try:
-					item_tax_rate = prd.item_tax_rate and json.loads(prd.item_tax_rate) or {}
-				except ValueError:
-					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()
+			pr_obj.calculate_taxes_and_totals()
+			for d in pr_obj.doclist:
+				d.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)
-		
-		if ocd[oc].category != "Valuation":	
-			prev_total += add_ded * flt(ocd[oc].total_amount)
-			total += 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 != "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"""
-		from stock.stock_ledger import update_entries_after
-		
-		for pr in self.selected_pr:
-			pr_obj = get_obj('Purchase Receipt', pr, with_children = 1)
+	def get_total_pr_amt(self, purchase_receipts):
+		return webnotes.conn.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt` 
+			WHERE name in (%s)""" % ', '.join(['%s']*len(purchase_receipts)), 
+			tuple(purchase_receipts))[0][0]
 			
-			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()
-					if d.serial_no:
-						self.update_serial_no(d.serial_no, d.valuation_rate)
-				webnotes.conn.sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
-				
-				res = webnotes.conn.sql("""select item_code, warehouse, posting_date, posting_time 
-					from `tabStock Ledger Entry` where voucher_detail_no = %s LIMIT 1""", 
-					d.name, as_dict=1)
-
-				# update valuation rate after pr posting date
-				if res:
-					update_entries_after(res[0])
-
-	def update_serial_no(self, sr_no, rate):
-		""" update valuation rate in serial no"""
-		sr_no = map(lambda x: x.strip(), cstr(sr_no).split('\n'))
-		
-		webnotes.conn.sql("""update `tabSerial No` set purchase_rate = %s where name in (%s)""" % 
-			('%s', ', '.join(['%s']*len(sr_no))), tuple([rate] + sr_no))
\ No newline at end of file
+	def cancel_pr(self, purchase_receipts):
+		for pr in purchase_receipts:
+			pr_bean = webnotes.bean("Purchase Receipt", pr)
+			
+			pr_bean.run_method("update_ordered_qty", is_cancelled="Yes")
+			pr_bean.run_method("update_serial_nos", cancel=True)
+			
+			webnotes.conn.sql("""delete from `tabStock Ledger Entry` 
+				where voucher_type='Purchase Receipt' and voucher_no=%s""", pr)
+			webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type='Purchase Receipt' 
+				and voucher_no=%s""", pr)
+			
+	def submit_pr(self, purchase_receipts):
+		for pr in purchase_receipts:
+			pr_bean = webnotes.bean("Purchase Receipt", pr)
+			pr_bean.run_method("update_ordered_qty")
+			pr_bean.run_method("update_stock")
+			pr_bean.run_method("update_serial_nos")
+			pr_bean.run_method("make_gl_entries")
\ No newline at end of file
diff --git a/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt b/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
index 53f2407..ec9ece1 100644
--- a/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
+++ b/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-01-22 16:50:39", 
   "docstatus": 0, 
-  "modified": "2013-07-22 15:31:20", 
+  "modified": "2013-09-02 13:45:54", 
   "modified_by": "Administrator", 
   "owner": "wasim@webnotestech.com"
  }, 
@@ -40,48 +40,13 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "process", 
-  "fieldtype": "HTML", 
-  "label": "Process", 
-  "options": "<div class=\"field_description\"><b>Process:</b><br>1. Fetch and select Purchase Receipt<br>2. Enter extra costs<br>3. Click on Update Landed Cost button<br> 4. Cost will be added into other charges table of selected PR proportionately based on net total<br>5. Item Valuation Rate will be recalculated</div>"
- }, 
- {
-  "doctype": "DocField", 
   "fieldname": "section_break0", 
   "fieldtype": "Section Break", 
+  "label": "Select Purchase Receipts", 
   "options": "Simple"
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "from_pr_date", 
-  "fieldtype": "Date", 
-  "label": "From PR Date", 
-  "reqd": 1
- }, 
- {
-  "doctype": "DocField", 
-  "fieldname": "to_pr_date", 
-  "fieldtype": "Date", 
-  "label": "To PR Date", 
-  "reqd": 1
- }, 
- {
-  "doctype": "DocField", 
-  "fieldname": "currency", 
-  "fieldtype": "Link", 
-  "label": "Currency", 
-  "options": "Currency", 
-  "reqd": 1
- }, 
- {
-  "doctype": "DocField", 
-  "fieldname": "get_purchase_receipt", 
-  "fieldtype": "Button", 
-  "label": "Get Purchase Receipt", 
-  "options": "get_purchase_receipts"
- }, 
- {
-  "doctype": "DocField", 
   "fieldname": "lc_pr_details", 
   "fieldtype": "Table", 
   "label": "Landed Cost Purchase Receipts", 
@@ -91,7 +56,7 @@
   "doctype": "DocField", 
   "fieldname": "section_break1", 
   "fieldtype": "Section Break", 
-  "options": "Simple"
+  "label": "Add Taxes and Charges"
  }, 
  {
   "doctype": "DocField", 
@@ -102,9 +67,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "update_pr", 
+  "fieldname": "update_landed_cost", 
   "fieldtype": "Button", 
-  "label": "Update PR", 
+  "label": "Update Landed Cost", 
   "options": "update_landed_cost"
  }, 
  {
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index 9f07799..b9aa233 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -151,7 +151,6 @@
 		for d in getlist(self.doclist, 'purchase_receipt_details'):
 			if d.item_code in stock_items and d.warehouse:
 				pr_qty = flt(d.qty) * flt(d.conversion_factor)
-				self.update_ordered_qty(pr_qty, d)
 				
 				if pr_qty:
 					sl_entries.append(self.get_sl_entries(d, {
@@ -171,28 +170,33 @@
 		self.bk_flush_supp_wh(sl_entries)
 		self.make_sl_entries(sl_entries)
 		
-	def update_ordered_qty(self, pr_qty, d):
+	def update_ordered_qty(self, is_cancelled="No"):
 		pc_obj = get_obj('Purchase Common')
-		if cstr(d.prevdoc_doctype) == 'Purchase Order':
-			# get qty and pending_qty of prevdoc
-			curr_ref_qty = pc_obj.get_qty( d.doctype, 'prevdoc_detail_docname',
-			 	d.prevdoc_detail_docname, 'Purchase Order Item', 
-				'Purchase Order - Purchase Receipt', self.doc.name)
-			max_qty, qty, curr_qty = flt(curr_ref_qty.split('~~~')[1]), \
-			 	flt(curr_ref_qty.split('~~~')[0]), 0
+		stock_items = self.get_stock_items()
+		for d in getlist(self.doclist, 'purchase_receipt_details'):
+			if d.item_code in stock_items and d.warehouse \
+					and cstr(d.prevdoc_doctype) == 'Purchase Order':
+				pr_qty = flt(d.qty) * flt(d.conversion_factor)
 
-			if flt(qty) + flt(pr_qty) > flt(max_qty):
-				curr_qty = (flt(max_qty) - flt(qty)) * flt(d.conversion_factor)
-			else:
-				curr_qty = flt(pr_qty)
-				
-			args = {
-				"item_code": d.item_code,
-				"warehouse": d.warehouse,
-				"posting_date": self.doc.posting_date,
-				"ordered_qty": self.doc.docstatus==1 and -1*flt(curr_qty) or flt(curr_qty)
-			}
-			update_bin(args)
+				# get qty and pending_qty of prevdoc
+				curr_ref_qty = pc_obj.get_qty(d.doctype, 'prevdoc_detail_docname',
+				 	d.prevdoc_detail_docname, 'Purchase Order Item', 
+					'Purchase Order - Purchase Receipt', self.doc.name)
+				max_qty, qty, curr_qty = flt(curr_ref_qty.split('~~~')[1]), \
+				 	flt(curr_ref_qty.split('~~~')[0]), 0
+
+				if flt(qty) + flt(pr_qty) > flt(max_qty):
+					curr_qty = (flt(max_qty) - flt(qty)) * flt(d.conversion_factor)
+				else:
+					curr_qty = flt(pr_qty)
+			
+				args = {
+					"item_code": d.item_code,
+					"warehouse": d.warehouse,
+					"posting_date": self.doc.posting_date,
+					"ordered_qty": (is_cancelled=="Yes" and -1 or 1)*flt(curr_qty)
+				}
+				update_bin(args)
 	
 	def bk_flush_supp_wh(self, sl_entries):
 		for d in getlist(self.doclist, 'pr_raw_material_details'):
@@ -234,12 +238,12 @@
 
 		self.update_prevdoc_status()
 		
-		# Update Stock
+		self.update_ordered_qty()
+		
 		self.update_stock()
 
 		self.update_serial_nos()
 
-		# Update last purchase rate
 		purchase_controller.update_last_purchase_rate(self, 1)
 		
 		self.make_gl_entries()
@@ -270,7 +274,7 @@
 		pc_obj = get_obj('Purchase Common')
 
 		self.check_for_stopped_status(pc_obj)
-		# 1.Check if Purchase Invoice has been submitted against current Purchase Order
+		# Check if Purchase Invoice has been submitted against current Purchase Order
 		# pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Invoice', docname = self.doc.name, detail_doctype = 'Purchase Invoice Item')
 
 		submitted = webnotes.conn.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % self.doc.name)
@@ -278,10 +282,11 @@
 			msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
 			raise Exception
 
-		# 2.Set Status as Cancelled
+		
 		webnotes.conn.set(self.doc,'status','Cancelled')
 
-		# 3. Cancel Serial No
+		self.update_ordered_qty(is_cancelled="Yes")
+		
 		self.update_stock()
 		self.update_serial_nos(cancel=True)
 
diff --git a/stock/doctype/stock_entry/stock_entry.js b/stock/doctype/stock_entry/stock_entry.js
index 87f9a9c..4695fdb 100644
--- a/stock/doctype/stock_entry/stock_entry.js
+++ b/stock/doctype/stock_entry/stock_entry.js
@@ -88,7 +88,7 @@
 	set_default_account: function() {
 		var me = this;
 		
-		if(cint(wn.defaults.get_default("auto_accounting_for_stock")) {
+		if(cint(wn.defaults.get_default("auto_accounting_for_stock"))) {
 			var account_for = "stock_adjustment_account";
 			if (this.frm.doc.purpose == "Sales Return")
 				account_for = "stock_in_hand_account";