Merge pull request #22726 from rohitwaghchaure/fixed-actual-qty-showing-as-zero-develop

fix: Stock Reconciliation Invalid Quantity for Batched Item
This commit is contained in:
rohitwaghchaure 2020-07-17 16:55:59 +05:30 committed by GitHub
commit b4ef13c686
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 5 deletions

View File

@ -143,7 +143,7 @@ class Batch(Document):
@frappe.whitelist() @frappe.whitelist()
def get_batch_qty(batch_no=None, warehouse=None, item_code=None): def get_batch_qty(batch_no=None, warehouse=None, item_code=None, posting_date=None, posting_time=None):
"""Returns batch actual qty if warehouse is passed, """Returns batch actual qty if warehouse is passed,
or returns dict of qty by warehouse if warehouse is None or returns dict of qty by warehouse if warehouse is None
@ -155,9 +155,14 @@ def get_batch_qty(batch_no=None, warehouse=None, item_code=None):
out = 0 out = 0
if batch_no and warehouse: if batch_no and warehouse:
cond = ""
if posting_date and posting_time:
cond = " and timestamp(posting_date, posting_time) <= timestamp('{0}', '{1}')".format(posting_date,
posting_time)
out = float(frappe.db.sql("""select sum(actual_qty) out = float(frappe.db.sql("""select sum(actual_qty)
from `tabStock Ledger Entry` from `tabStock Ledger Entry`
where warehouse=%s and batch_no=%s""", where warehouse=%s and batch_no=%s {0}""".format(cond),
(warehouse, batch_no))[0][0] or 0) (warehouse, batch_no))[0][0] or 0)
if batch_no and not warehouse: if batch_no and not warehouse:

View File

@ -74,6 +74,20 @@ frappe.ui.form.on("Stock Reconciliation", {
, __("Get Items"), __("Update")); , __("Get Items"), __("Update"));
}, },
posting_date: function(frm) {
frm.trigger("set_valuation_rate_and_qty_for_all_items");
},
posting_time: function(frm) {
frm.trigger("set_valuation_rate_and_qty_for_all_items");
},
set_valuation_rate_and_qty_for_all_items: function(frm) {
frm.doc.items.forEach(row => {
frm.events.set_valuation_rate_and_qty(frm, row.doctype, row.name);
});
},
set_valuation_rate_and_qty: function(frm, cdt, cdn) { set_valuation_rate_and_qty: function(frm, cdt, cdn) {
var d = frappe.model.get_doc(cdt, cdn); var d = frappe.model.get_doc(cdt, cdn);

View File

@ -184,8 +184,12 @@ class StockReconciliation(StockController):
sl_entries = [] sl_entries = []
has_serial_no = False has_serial_no = False
has_batch_no = False
for row in self.items: for row in self.items:
item = frappe.get_doc("Item", row.item_code) item = frappe.get_doc("Item", row.item_code)
if item.has_batch_no:
has_batch_no = True
if item.has_serial_no or item.has_batch_no: if item.has_serial_no or item.has_batch_no:
has_serial_no = True has_serial_no = True
self.get_sle_for_serialized_items(row, sl_entries) self.get_sle_for_serialized_items(row, sl_entries)
@ -222,7 +226,11 @@ class StockReconciliation(StockController):
if has_serial_no: if has_serial_no:
sl_entries = self.merge_similar_item_serial_nos(sl_entries) sl_entries = self.merge_similar_item_serial_nos(sl_entries)
self.make_sl_entries(sl_entries) allow_negative_stock = False
if has_batch_no:
allow_negative_stock = True
self.make_sl_entries(sl_entries, allow_negative_stock=allow_negative_stock)
if has_serial_no and sl_entries: if has_serial_no and sl_entries:
self.update_valuation_rate_for_serial_no() self.update_valuation_rate_for_serial_no()
@ -493,7 +501,7 @@ def get_stock_balance_for(item_code, warehouse,
qty, rate = data qty, rate = data
if item_dict.get("has_batch_no"): if item_dict.get("has_batch_no"):
qty = get_batch_qty(batch_no, warehouse) or 0 qty = get_batch_qty(batch_no, warehouse, posting_date=posting_date, posting_time=posting_time) or 0
return { return {
'qty': qty, 'qty': qty,

View File

@ -33,7 +33,7 @@ def execute(filters=None):
actual_qty += flt(sle.actual_qty, precision) actual_qty += flt(sle.actual_qty, precision)
stock_value += sle.stock_value_difference stock_value += sle.stock_value_difference
if sle.voucher_type == 'Stock Reconciliation': if sle.voucher_type == 'Stock Reconciliation' and not sle.actual_qty:
actual_qty = sle.qty_after_transaction actual_qty = sle.qty_after_transaction
stock_value = sle.stock_value stock_value = sle.stock_value