mirror of
https://github.com/frappe/erpnext.git
synced 2026-04-12 19:35:09 +00:00
fix: handle disassembly for secondary / scrap items
(cherry picked from commit 2be8313819)
This commit is contained in:
@@ -807,7 +807,7 @@ class StockEntry(StockController):
|
|||||||
|
|
||||||
if self.purpose == "Disassemble":
|
if self.purpose == "Disassemble":
|
||||||
if has_bom:
|
if has_bom:
|
||||||
if d.is_finished_item:
|
if d.is_finished_item or d.type or d.is_legacy_scrap_item:
|
||||||
d.t_warehouse = None
|
d.t_warehouse = None
|
||||||
if not d.s_warehouse:
|
if not d.s_warehouse:
|
||||||
frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx))
|
frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx))
|
||||||
@@ -2101,10 +2101,16 @@ class StockEntry(StockController):
|
|||||||
qty = flt(self.fg_completed_qty)
|
qty = flt(self.fg_completed_qty)
|
||||||
s_warehouse = self.from_warehouse or source_row.t_warehouse
|
s_warehouse = self.from_warehouse or source_row.t_warehouse
|
||||||
t_warehouse = ""
|
t_warehouse = ""
|
||||||
else:
|
elif source_row.s_warehouse:
|
||||||
|
# RM: was consumed FROM s_warehouse → return TO s_warehouse
|
||||||
qty = flt(source_row.qty * scale_factor)
|
qty = flt(source_row.qty * scale_factor)
|
||||||
s_warehouse = ""
|
s_warehouse = ""
|
||||||
t_warehouse = self.to_warehouse or source_row.s_warehouse
|
t_warehouse = self.to_warehouse or source_row.s_warehouse
|
||||||
|
else:
|
||||||
|
# Scrap/secondary: was produced TO t_warehouse → take FROM t_warehouse
|
||||||
|
qty = flt(source_row.qty * scale_factor)
|
||||||
|
s_warehouse = source_row.t_warehouse
|
||||||
|
t_warehouse = ""
|
||||||
|
|
||||||
use_serial_batch_fields = 1 if (source_row.batch_no or source_row.serial_no) else 0
|
use_serial_batch_fields = 1 if (source_row.batch_no or source_row.serial_no) else 0
|
||||||
|
|
||||||
@@ -2122,6 +2128,9 @@ class StockEntry(StockController):
|
|||||||
"s_warehouse": s_warehouse,
|
"s_warehouse": s_warehouse,
|
||||||
"t_warehouse": t_warehouse,
|
"t_warehouse": t_warehouse,
|
||||||
"is_finished_item": source_row.is_finished_item,
|
"is_finished_item": source_row.is_finished_item,
|
||||||
|
"type": source_row.type,
|
||||||
|
"is_legacy_scrap_item": source_row.is_legacy_scrap_item,
|
||||||
|
"bom_secondary_item": source_row.bom_secondary_item,
|
||||||
"against_stock_entry": self.source_stock_entry,
|
"against_stock_entry": self.source_stock_entry,
|
||||||
"ste_detail": source_row.name,
|
"ste_detail": source_row.name,
|
||||||
# batch and serial bundles built on submit
|
# batch and serial bundles built on submit
|
||||||
@@ -2156,6 +2165,16 @@ class StockEntry(StockController):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Secondary/Scrap items
|
||||||
|
secondary_items = self.get_secondary_items(self.fg_completed_qty)
|
||||||
|
if secondary_items:
|
||||||
|
scrap_warehouse = wo.scrap_warehouse or self.from_warehouse or wo.fg_warehouse
|
||||||
|
for item in secondary_items.values():
|
||||||
|
item["from_warehouse"] = scrap_warehouse
|
||||||
|
item["to_warehouse"] = ""
|
||||||
|
item["is_finished_item"] = 0
|
||||||
|
self.add_to_stock_entry_detail(secondary_items, bom_no=self.bom_no)
|
||||||
|
|
||||||
# FG
|
# FG
|
||||||
self.append(
|
self.append(
|
||||||
"items",
|
"items",
|
||||||
@@ -2187,6 +2206,23 @@ class StockEntry(StockController):
|
|||||||
|
|
||||||
self.add_to_stock_entry_detail(item_dict)
|
self.add_to_stock_entry_detail(item_dict)
|
||||||
|
|
||||||
|
# Secondary/Scrap items (reverse of what set_secondary_items does for Manufacture)
|
||||||
|
secondary_items = self.get_secondary_items(self.fg_completed_qty)
|
||||||
|
if secondary_items:
|
||||||
|
scrap_warehouse = self.from_warehouse
|
||||||
|
if self.work_order:
|
||||||
|
wo_values = frappe.db.get_value(
|
||||||
|
"Work Order", self.work_order, ["scrap_warehouse", "fg_warehouse"], as_dict=True
|
||||||
|
)
|
||||||
|
scrap_warehouse = wo_values.scrap_warehouse or scrap_warehouse or wo_values.fg_warehouse
|
||||||
|
|
||||||
|
for item in secondary_items.values():
|
||||||
|
item["from_warehouse"] = scrap_warehouse
|
||||||
|
item["to_warehouse"] = ""
|
||||||
|
item["is_finished_item"] = 0
|
||||||
|
|
||||||
|
self.add_to_stock_entry_detail(secondary_items, bom_no=self.bom_no)
|
||||||
|
|
||||||
# Finished goods
|
# Finished goods
|
||||||
self.load_items_from_bom()
|
self.load_items_from_bom()
|
||||||
|
|
||||||
@@ -2240,6 +2276,9 @@ class StockEntry(StockController):
|
|||||||
SED.basic_rate,
|
SED.basic_rate,
|
||||||
SED.conversion_factor,
|
SED.conversion_factor,
|
||||||
SED.is_finished_item,
|
SED.is_finished_item,
|
||||||
|
SED.type,
|
||||||
|
SED.is_legacy_scrap_item,
|
||||||
|
SED.bom_secondary_item,
|
||||||
SED.batch_no,
|
SED.batch_no,
|
||||||
SED.serial_no,
|
SED.serial_no,
|
||||||
SED.use_serial_batch_fields,
|
SED.use_serial_batch_fields,
|
||||||
|
|||||||
Reference in New Issue
Block a user