mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-15 23:48:38 +00:00
fix: skip stock reservation for opted-out production plans
(backport of #56798) Co-Authored-By: pandiyan <pandiyanpalani37@gmail.com>
This commit is contained in:
@@ -1034,6 +1034,13 @@ class PurchaseReceipt(BuyingController):
|
|||||||
return
|
return
|
||||||
|
|
||||||
production_plan_references = self.get_production_plan_references()
|
production_plan_references = self.get_production_plan_references()
|
||||||
|
if not production_plan_references:
|
||||||
|
return
|
||||||
|
|
||||||
|
reservable_plans = self.get_reservable_production_plans(production_plan_references)
|
||||||
|
if not reservable_plans:
|
||||||
|
return
|
||||||
|
|
||||||
production_plan_items = []
|
production_plan_items = []
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
@@ -1041,6 +1048,9 @@ class PurchaseReceipt(BuyingController):
|
|||||||
for row in self.items:
|
for row in self.items:
|
||||||
if row.material_request_item and row.material_request_item in production_plan_references:
|
if row.material_request_item and row.material_request_item in production_plan_references:
|
||||||
_ref = production_plan_references[row.material_request_item]
|
_ref = production_plan_references[row.material_request_item]
|
||||||
|
if _ref.production_plan not in reservable_plans:
|
||||||
|
continue
|
||||||
|
|
||||||
docnames.append(_ref.production_plan)
|
docnames.append(_ref.production_plan)
|
||||||
row.update(
|
row.update(
|
||||||
{
|
{
|
||||||
@@ -1066,6 +1076,25 @@ class PurchaseReceipt(BuyingController):
|
|||||||
docnames, from_doctype="Production Plan", to_doctype="Work Order"
|
docnames, from_doctype="Production Plan", to_doctype="Work Order"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_reservable_production_plans(self, production_plan_references) -> set:
|
||||||
|
"""Production Plans that opted into stock reservation (``reserve_stock``).
|
||||||
|
|
||||||
|
A Production Plan only gets this flag set if "Auto Reserve Stock" was enabled in
|
||||||
|
Stock Settings when it was created, or the user ticked "Reserve Stock" manually.
|
||||||
|
Without this check, a Purchase Receipt would auto-reserve stock for every
|
||||||
|
Production Plan whenever "Enable Stock Reservation" is on, ignoring both of those.
|
||||||
|
"""
|
||||||
|
plan_names = {ref.production_plan for ref in production_plan_references.values()}
|
||||||
|
return {
|
||||||
|
p.name
|
||||||
|
for p in frappe.get_all(
|
||||||
|
"Production Plan",
|
||||||
|
filters={"name": ["in", list(plan_names)]},
|
||||||
|
fields=["name", "reserve_stock"],
|
||||||
|
)
|
||||||
|
if p.reserve_stock
|
||||||
|
}
|
||||||
|
|
||||||
def get_production_plan_references(self):
|
def get_production_plan_references(self):
|
||||||
production_plan_references = frappe._dict()
|
production_plan_references = frappe._dict()
|
||||||
material_request_items = []
|
material_request_items = []
|
||||||
|
|||||||
Reference in New Issue
Block a user