mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-22 03:35:43 +00:00
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:
@@ -166,6 +166,24 @@ class StockReconciliation(StockController):
|
|||||||
if not frappe.db.exists("Item", item.item_code):
|
if not frappe.db.exists("Item", item.item_code):
|
||||||
frappe.throw(_("Item {0} does not exist").format(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:
|
if not item.reconcile_all_serial_batch and item.serial_and_batch_bundle:
|
||||||
bundle = self.get_bundle_for_specific_serial_batch(item)
|
bundle = self.get_bundle_for_specific_serial_batch(item)
|
||||||
item.current_serial_and_batch_bundle = bundle.name
|
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:
|
if voucher_detail_no and voucher_detail_no != item.name:
|
||||||
continue
|
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:
|
if not item.current_serial_and_batch_bundle:
|
||||||
serial_and_batch_bundle = frappe.get_doc(
|
serial_and_batch_bundle = frappe.get_doc(
|
||||||
{
|
{
|
||||||
@@ -400,6 +411,28 @@ class StockReconciliation(StockController):
|
|||||||
item.qty = bundle_doc.total_qty
|
item.qty = bundle_doc.total_qty
|
||||||
item.valuation_rate = bundle_doc.avg_rate
|
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):
|
def remove_items_with_no_change(self):
|
||||||
"""Remove items if qty or rate is not changed"""
|
"""Remove items if qty or rate is not changed"""
|
||||||
self.difference_amount = 0.0
|
self.difference_amount = 0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user