fix: update qty in SABB if qty changed in stock reco (backport #44542) (#44546)

fix: update qty in SABB if qty changed in stock reco (#44542)

(cherry picked from commit 7249cf0001)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
This commit is contained in:
mergify[bot]
2024-12-05 15:51:44 +05:30
committed by GitHub
parent 59c7b80a2f
commit 99a327155e

View File

@@ -166,6 +166,24 @@ class StockReconciliation(StockController):
if not frappe.db.exists("Item", item.item_code):
frappe.throw(_("Item {0} does not exist").format(item.item_code))
item_details = frappe.get_cached_value(
"Item", item.item_code, ["has_serial_no", "has_batch_no"], as_dict=1
)
if not (item_details.has_serial_no or item_details.has_batch_no):
continue
if (
not item.use_serial_batch_fields
and not item.reconcile_all_serial_batch
and not item.serial_and_batch_bundle
):
frappe.throw(
_("Row # {0}: Please add Serial and Batch Bundle for Item {1}").format(
item.idx, frappe.bold(item.item_code)
)
)
if not item.reconcile_all_serial_batch and item.serial_and_batch_bundle:
bundle = self.get_bundle_for_specific_serial_batch(item)
item.current_serial_and_batch_bundle = bundle.name
@@ -181,13 +199,6 @@ class StockReconciliation(StockController):
if voucher_detail_no and voucher_detail_no != item.name:
continue
item_details = frappe.get_cached_value(
"Item", item.item_code, ["has_serial_no", "has_batch_no"], as_dict=1
)
if not (item_details.has_serial_no or item_details.has_batch_no):
continue
if not item.current_serial_and_batch_bundle:
serial_and_batch_bundle = frappe.get_doc(
{
@@ -400,6 +411,28 @@ class StockReconciliation(StockController):
item.qty = bundle_doc.total_qty
item.valuation_rate = bundle_doc.avg_rate
elif item.serial_and_batch_bundle and item.qty:
self.update_existing_serial_and_batch_bundle(item)
def update_existing_serial_and_batch_bundle(self, item):
batch_details = frappe.get_all(
"Serial and Batch Entry",
fields=["batch_no", "qty", "name"],
filters={"parent": item.serial_and_batch_bundle, "batch_no": ("is", "set")},
)
if batch_details and len(batch_details) == 1:
batch = batch_details[0]
if abs(batch.qty) == abs(item.qty):
return
update_values = {
"qty": item.qty,
"stock_value_difference": flt(item.valuation_rate) * flt(item.qty),
}
frappe.db.set_value("Serial and Batch Entry", batch.name, update_values)
def remove_items_with_no_change(self):
"""Remove items if qty or rate is not changed"""
self.difference_amount = 0.0