fix: incorrect supplied qty error
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index c85d015..0181ae7 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -839,6 +839,59 @@
update_backflush_based_on("BOM")
+ def test_supplied_qty_against_subcontracted_po(self):
+ item_code = "_Test Subcontracted FG Item 5"
+ make_item('Sub Contracted Raw Material 4', {
+ 'is_stock_item': 1,
+ 'is_sub_contracted_item': 1
+ })
+
+ make_subcontracted_item(item_code=item_code, raw_materials=["Sub Contracted Raw Material 4"])
+
+ update_backflush_based_on("Material Transferred for Subcontract")
+
+ order_qty = 250
+ po = create_purchase_order(item_code=item_code, qty=order_qty,
+ is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", do_not_save=True)
+
+ # Add same subcontracted items multiple times
+ po.append("items", {
+ "item_code": item_code,
+ "qty": order_qty,
+ "schedule_date": add_days(nowdate(), 1),
+ "warehouse": "_Test Warehouse - _TC"
+ })
+
+ po.set_missing_values()
+ po.submit()
+
+ # Material receipt entry for the raw materials which will be send to supplier
+ make_stock_entry(target="_Test Warehouse - _TC",
+ item_code = "Sub Contracted Raw Material 4", qty=500, basic_rate=100)
+
+ rm_items = [
+ {
+ "item_code":item_code,"rm_item_code":"Sub Contracted Raw Material 4","item_name":"_Test Item",
+ "qty":250,"warehouse":"_Test Warehouse - _TC", "stock_uom":"Nos", "name": po.supplied_items[0].name
+ },
+ {
+ "item_code":item_code,"rm_item_code":"Sub Contracted Raw Material 4","item_name":"_Test Item",
+ "qty":250,"warehouse":"_Test Warehouse - _TC", "stock_uom":"Nos", "name": po.supplied_items[1].name
+ },
+ ]
+
+ # Raw Materials transfer entry from stores to supplier's warehouse
+ rm_item_string = json.dumps(rm_items)
+ se = frappe.get_doc(make_subcontract_transfer_entry(po.name, rm_item_string))
+ se.submit()
+
+ po_doc = frappe.get_doc("Purchase Order", po.name)
+ for row in po_doc.supplied_items:
+ # Valid that whether transferred quantity is matching with supplied qty or not in the purchase order
+ self.assertEqual(row.supplied_qty, 250.0)
+
+ update_backflush_based_on("BOM")
+
def test_advance_payment_entry_unlink_against_purchase_order(self):
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
frappe.db.set_value("Accounts Settings", "Accounts Settings",
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 7161f4b..a1e01bf 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -752,9 +752,9 @@
rm_items = [
{"item_code":item_code,"rm_item_code":"Sub Contracted Raw Material 3","item_name":"_Test Item",
- "qty":300,"warehouse":"_Test Warehouse - _TC", "stock_uom":"Nos"},
+ "qty":300,"warehouse":"_Test Warehouse - _TC", "stock_uom":"Nos", "name": po.supplied_items[0].name},
{"item_code":item_code,"rm_item_code":"Sub Contracted Raw Material 3","item_name":"_Test Item",
- "qty":200,"warehouse":"_Test Warehouse - _TC", "stock_uom":"Nos"}
+ "qty":200,"warehouse":"_Test Warehouse - _TC", "stock_uom":"Nos", "name": po.supplied_items[0].name}
]
rm_item_string = json.dumps(rm_items)
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 54e70d4..4583c51 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -1306,8 +1306,9 @@
FROM
`tabStock Entry Detail` sed, `tabStock Entry` se
WHERE
- (pos.name = sed.po_detail OR sed.subcontracted_item = pos.main_item_code)
- AND sed.docstatus = 1 AND se.name = sed.parent and se.purchase_order = %(po)s
+ pos.name = sed.po_detail AND pos.rm_item_code = sed.item_code
+ AND pos.parent = se.purchase_order AND sed.docstatus = 1
+ AND se.name = sed.parent and se.purchase_order = %(po)s
), 0)
WHERE pos.docstatus = 1 and pos.parent = %(po)s""", {"po": self.purchase_order})