fix: reserved qty for production plan (#37251)
This commit is contained in:
@@ -1039,6 +1039,59 @@ class TestProductionPlan(FrappeTestCase):
|
|||||||
|
|
||||||
self.assertEqual(after_qty, before_qty)
|
self.assertEqual(after_qty, before_qty)
|
||||||
|
|
||||||
|
def test_resered_qty_for_production_plan_for_work_order(self):
|
||||||
|
from erpnext.stock.utils import get_or_make_bin
|
||||||
|
|
||||||
|
bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
|
||||||
|
before_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
|
||||||
|
|
||||||
|
pln = create_production_plan(item_code="Test Production Item 1")
|
||||||
|
|
||||||
|
bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
|
||||||
|
after_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
|
||||||
|
|
||||||
|
self.assertEqual(after_qty - before_qty, 1)
|
||||||
|
|
||||||
|
pln.make_work_order()
|
||||||
|
|
||||||
|
work_orders = []
|
||||||
|
for row in frappe.get_all("Work Order", filters={"production_plan": pln.name}, fields=["name"]):
|
||||||
|
wo_doc = frappe.get_doc("Work Order", row.name)
|
||||||
|
wo_doc.source_warehouse = "_Test Warehouse - _TC"
|
||||||
|
wo_doc.wip_warehouse = "_Test Warehouse 1 - _TC"
|
||||||
|
wo_doc.fg_warehouse = "_Test Warehouse - _TC"
|
||||||
|
for d in wo_doc.required_items:
|
||||||
|
d.source_warehouse = "_Test Warehouse - _TC"
|
||||||
|
make_stock_entry(
|
||||||
|
item_code=d.item_code,
|
||||||
|
qty=d.required_qty,
|
||||||
|
rate=100,
|
||||||
|
target="_Test Warehouse - _TC",
|
||||||
|
)
|
||||||
|
|
||||||
|
wo_doc.submit()
|
||||||
|
work_orders.append(wo_doc)
|
||||||
|
|
||||||
|
bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
|
||||||
|
after_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
|
||||||
|
|
||||||
|
self.assertEqual(after_qty, before_qty)
|
||||||
|
|
||||||
|
rm_work_order = None
|
||||||
|
for wo_doc in work_orders:
|
||||||
|
for d in wo_doc.required_items:
|
||||||
|
if d.item_code == "Raw Material Item 1":
|
||||||
|
rm_work_order = wo_doc
|
||||||
|
break
|
||||||
|
|
||||||
|
if rm_work_order:
|
||||||
|
s = frappe.get_doc(make_se_from_wo(rm_work_order.name, "Material Transfer for Manufacture", 1))
|
||||||
|
s.submit()
|
||||||
|
bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
|
||||||
|
after_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
|
||||||
|
|
||||||
|
self.assertEqual(after_qty, before_qty)
|
||||||
|
|
||||||
def test_resered_qty_for_production_plan_for_material_requests_with_multi_UOM(self):
|
def test_resered_qty_for_production_plan_for_material_requests_with_multi_UOM(self):
|
||||||
from erpnext.stock.utils import get_or_make_bin
|
from erpnext.stock.utils import get_or_make_bin
|
||||||
|
|
||||||
|
|||||||
@@ -1497,16 +1497,17 @@ def get_reserved_qty_for_production(
|
|||||||
wo = frappe.qb.DocType("Work Order")
|
wo = frappe.qb.DocType("Work Order")
|
||||||
wo_item = frappe.qb.DocType("Work Order Item")
|
wo_item = frappe.qb.DocType("Work Order Item")
|
||||||
|
|
||||||
|
if check_production_plan:
|
||||||
|
qty_field = wo_item.required_qty
|
||||||
|
else:
|
||||||
|
qty_field = Case()
|
||||||
|
qty_field = qty_field.when(wo.skip_transfer == 0, wo_item.required_qty - wo_item.transferred_qty)
|
||||||
|
qty_field = qty_field.else_(wo_item.required_qty - wo_item.consumed_qty)
|
||||||
|
|
||||||
query = (
|
query = (
|
||||||
frappe.qb.from_(wo)
|
frappe.qb.from_(wo)
|
||||||
.from_(wo_item)
|
.from_(wo_item)
|
||||||
.select(
|
.select(Sum(qty_field))
|
||||||
Sum(
|
|
||||||
Case()
|
|
||||||
.when(wo.skip_transfer == 0, wo_item.required_qty - wo_item.transferred_qty)
|
|
||||||
.else_(wo_item.required_qty - wo_item.consumed_qty)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.where(
|
.where(
|
||||||
(wo_item.item_code == item_code)
|
(wo_item.item_code == item_code)
|
||||||
& (wo_item.parent == wo.name)
|
& (wo_item.parent == wo.name)
|
||||||
|
|||||||
Reference in New Issue
Block a user