Merge pull request #3807 from nabinhait/hotfix
[fix] fifo in stock ledger
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index d5bdde7..04ef935 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -133,11 +133,12 @@
var me = this;
this.toggle_enable_bom();
- return this.frm.call({
- method: "get_production_order_details",
+ return frappe.call({
+ method: "erpnext.stock.doctype.stock_entry.stock_entry.get_production_order_details",
args: {production_order: this.frm.doc.production_order},
callback: function(r) {
if (!r.exc) {
+ me.frm.set_value(r.message);
if (me.frm.doc.purpose == "Material Transfer for Manufacture" && !me.frm.doc.to_warehouse)
me.frm.set_value("to_warehouse", r.message["wip_warehouse"]);
me.frm.set_value("from_bom", 1);
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index c92663f..c0d5cd0 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -300,22 +300,21 @@
# select first batch or the batch with same rate
batch = self.stock_queue[index]
- if batch[0]:
- if qty_to_pop >= batch[0]:
- # consume current batch
- qty_to_pop = qty_to_pop - batch[0]
- self.stock_queue.pop(index)
- if not self.stock_queue and qty_to_pop:
- # stock finished, qty still remains to be withdrawn
- # negative stock, keep in as a negative batch
- self.stock_queue.append([-qty_to_pop, outgoing_rate or batch[1]])
- break
+ if qty_to_pop >= batch[0]:
+ # consume current batch
+ qty_to_pop = qty_to_pop - batch[0]
+ self.stock_queue.pop(index)
+ if not self.stock_queue and qty_to_pop:
+ # stock finished, qty still remains to be withdrawn
+ # negative stock, keep in as a negative batch
+ self.stock_queue.append([-qty_to_pop, outgoing_rate or batch[1]])
+ break
- else:
- # qty found in current batch
- # consume it and exit
- batch[0] = batch[0] - qty_to_pop
- qty_to_pop = 0
+ else:
+ # qty found in current batch
+ # consume it and exit
+ batch[0] = batch[0] - qty_to_pop
+ qty_to_pop = 0
stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in self.stock_queue))
stock_qty = sum((flt(batch[0]) for batch in self.stock_queue))
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 4f1e427..ee4303b 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -133,20 +133,19 @@
qty_to_pop = abs(qty)
while qty_to_pop and previous_stock_queue:
batch = previous_stock_queue[0]
- if batch[0]:
- if 0 < batch[0] <= qty_to_pop:
- # if batch qty > 0
- # not enough or exactly same qty in current batch, clear batch
- available_qty_for_outgoing += flt(batch[0])
- outgoing_cost += flt(batch[0]) * flt(batch[1])
- qty_to_pop -= batch[0]
- previous_stock_queue.pop(0)
- else:
- # all from current batch
- available_qty_for_outgoing += flt(qty_to_pop)
- outgoing_cost += flt(qty_to_pop) * flt(batch[1])
- batch[0] -= qty_to_pop
- qty_to_pop = 0
+ if 0 < batch[0] <= qty_to_pop:
+ # if batch qty > 0
+ # not enough or exactly same qty in current batch, clear batch
+ available_qty_for_outgoing += flt(batch[0])
+ outgoing_cost += flt(batch[0]) * flt(batch[1])
+ qty_to_pop -= batch[0]
+ previous_stock_queue.pop(0)
+ else:
+ # all from current batch
+ available_qty_for_outgoing += flt(qty_to_pop)
+ outgoing_cost += flt(qty_to_pop) * flt(batch[1])
+ batch[0] -= qty_to_pop
+ qty_to_pop = 0
return outgoing_cost / available_qty_for_outgoing