refactor: move reserve quantity computation to work order

(cherry picked from commit a8bf3a3f0d)

# Conflicts:
#	erpnext/stock/doctype/bin/bin.py
This commit is contained in:
Ankush Menat
2022-02-09 11:26:03 +05:30
committed by mergify-bot
parent bde3bece36
commit 197bf8fbec
2 changed files with 32 additions and 0 deletions

View File

@@ -8,6 +8,8 @@ from dateutil.relativedelta import relativedelta
from frappe import _
from frappe.model.document import Document
from frappe.model.mapper import get_mapped_doc
from frappe.query_builder import Case
from frappe.query_builder.functions import Sum
from frappe.utils import (
cint,
date_diff,
@@ -1171,3 +1173,27 @@ def create_pick_list(source_name, target_doc=None, for_qty=None):
doc.set_item_locations()
return doc
def get_reserved_qty_for_production(item_code: str, warehouse: str) -> float:
"""Get total reserved quantity for any item in specified warehouse"""
wo = frappe.qb.DocType("Work Order")
wo_item = frappe.qb.DocType("Work Order Item")
return (
frappe.qb
.from_(wo)
.from_(wo_item)
.select(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(
(wo_item.item_code == item_code)
& (wo_item.parent == wo.name)
& (wo.docstatus == 1)
& (wo_item.source_warehouse == warehouse)
& (wo.status.notin(["Stopped", "Completed", "Closed"]))
& ((wo_item.required_qty > wo_item.transferred_qty)
| (wo_item.required_qty > wo_item.consumed_qty))
)
).run()[0][0] or 0.0

View File

@@ -31,6 +31,7 @@ class Bin(Document):
def update_reserved_qty_for_production(self):
'''Update qty reserved for production from Production Item tables
in open work orders'''
<<<<<<< HEAD
<<<<<<< HEAD
self.reserved_qty_for_production = frappe.db.sql('''
SELECT
@@ -72,6 +73,11 @@ class Bin(Document):
)
).run()[0][0] or 0.0
>>>>>>> 6a8b7eeffe (fix: Reserved for Production calculation considered closed work orders)
=======
from erpnext.manufacturing.doctype.work_order.work_order import get_reserved_qty_for_production
self.reserved_qty_for_production = get_reserved_qty_for_production(self.item_code, self.warehouse)
>>>>>>> a8bf3a3f0d (refactor: move reserve quantity computation to work order)
self.set_projected_qty()