feat: allow scrap items when backflush based on is Material Transfer
diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
index b28292f..4ab0c66 100644
--- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
+++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
@@ -149,41 +149,37 @@
@frappe.whitelist()
def get_scrap_items(self, recalculate_rate=False):
- if (
- frappe.db.get_single_value("Buying Settings", "backflush_raw_materials_of_subcontract_based_on")
- == "BOM"
- ):
- self.remove_scrap_items()
+ self.remove_scrap_items()
- for item in list(self.items):
- if item.bom:
- bom = frappe.get_doc("BOM", item.bom)
- for scrap_item in bom.scrap_items:
- qty = flt(item.qty) * (flt(scrap_item.stock_qty) / flt(bom.quantity))
- self.append(
- "items",
- {
- "is_scrap_item": 1,
- "reference_name": item.name,
- "item_code": scrap_item.item_code,
- "item_name": scrap_item.item_name,
- "qty": qty,
- "stock_uom": scrap_item.stock_uom,
- "recalculate_rate": 0,
- "rate": scrap_item.rate,
- "rm_cost_per_qty": 0,
- "service_cost_per_qty": 0,
- "additional_cost_per_qty": 0,
- "scrap_cost_per_qty": 0,
- "amount": qty * scrap_item.rate,
- "warehouse": self.set_warehouse,
- "rejected_warehouse": self.rejected_warehouse,
- },
- )
+ for item in list(self.items):
+ if item.bom:
+ bom = frappe.get_doc("BOM", item.bom)
+ for scrap_item in bom.scrap_items:
+ qty = flt(item.qty) * (flt(scrap_item.stock_qty) / flt(bom.quantity))
+ self.append(
+ "items",
+ {
+ "is_scrap_item": 1,
+ "reference_name": item.name,
+ "item_code": scrap_item.item_code,
+ "item_name": scrap_item.item_name,
+ "qty": qty,
+ "stock_uom": scrap_item.stock_uom,
+ "recalculate_rate": 0,
+ "rate": scrap_item.rate,
+ "rm_cost_per_qty": 0,
+ "service_cost_per_qty": 0,
+ "additional_cost_per_qty": 0,
+ "scrap_cost_per_qty": 0,
+ "amount": qty * scrap_item.rate,
+ "warehouse": self.set_warehouse,
+ "rejected_warehouse": self.rejected_warehouse,
+ },
+ )
- if recalculate_rate:
- self.calculate_additional_costs()
- self.calculate_items_qty_and_amount()
+ if recalculate_rate:
+ self.calculate_additional_costs()
+ self.calculate_items_qty_and_amount()
def remove_scrap_items(self, recalculate_rate=False):
for item in list(self.items):