Skip to content

Commit

Permalink
perf: update_completed_qty() in material_request.py
Browse files Browse the repository at this point in the history
(cherry picked from commit 8ad9e99)
  • Loading branch information
s-aga-r authored and mergify[bot] committed Mar 7, 2023
1 parent 1b51463 commit b37712c
Showing 1 changed file with 34 additions and 17 deletions.
51 changes: 34 additions & 17 deletions erpnext/stock/doctype/material_request/material_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import frappe
from frappe import _, msgprint
from frappe.model.mapper import get_mapped_doc
from frappe.query_builder.functions import Sum
from frappe.utils import cint, cstr, flt, get_link_to_form, getdate, new_line_sep, nowdate

from erpnext.buying.utils import check_on_hold_or_closed_status, validate_for_items
Expand Down Expand Up @@ -183,25 +184,48 @@ def on_cancel(self):
self.update_requested_qty()
self.update_requested_qty_in_production_plan()

def get_mr_items_ordered_qty(self, mr_items):
mr_items_ordered_qty = {}
mr_items = [d.name for d in self.get("items") if d.name in mr_items]

doctype = qty_field = None
if self.material_request_type in ("Material Issue", "Material Transfer", "Customer Provided"):
doctype = frappe.qb.DocType("Stock Entry Detail")
qty_field = doctype.transfer_qty
elif self.material_request_type == "Manufacture":
doctype = frappe.qb.DocType("Work Order")
qty_field = doctype.qty

if doctype and qty_field:
query = (
frappe.qb.from_(doctype)
.select(doctype.material_request_item, Sum(qty_field))
.where(
(doctype.material_request == self.name)
& (doctype.material_request_item.isin(mr_items))
& (doctype.docstatus == 1)
)
.groupby(doctype.material_request_item)
)

mr_items_ordered_qty = frappe._dict(query.run())

return mr_items_ordered_qty

def update_completed_qty(self, mr_items=None, update_modified=True):
if self.material_request_type == "Purchase":
return

if not mr_items:
mr_items = [d.name for d in self.get("items")]

mr_items_ordered_qty = self.get_mr_items_ordered_qty(mr_items)
mr_qty_allowance = frappe.db.get_single_value("Stock Settings", "mr_qty_allowance")

for d in self.get("items"):
if d.name in mr_items:
if self.material_request_type in ("Material Issue", "Material Transfer", "Customer Provided"):
d.ordered_qty = flt(
frappe.db.sql(
"""select sum(transfer_qty)
from `tabStock Entry Detail` where material_request = %s
and material_request_item = %s and docstatus = 1""",
(self.name, d.name),
)[0][0]
)
mr_qty_allowance = frappe.db.get_single_value("Stock Settings", "mr_qty_allowance")
d.ordered_qty = flt(mr_items_ordered_qty.get(d.name))

if mr_qty_allowance:
allowed_qty = d.qty + (d.qty * (mr_qty_allowance / 100))
Expand All @@ -220,14 +244,7 @@ def update_completed_qty(self, mr_items=None, update_modified=True):
)

elif self.material_request_type == "Manufacture":
d.ordered_qty = flt(
frappe.db.sql(
"""select sum(qty)
from `tabWork Order` where material_request = %s
and material_request_item = %s and docstatus = 1""",
(self.name, d.name),
)[0][0]
)
d.ordered_qty = flt(mr_items_ordered_qty.get(d.name))

frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)

Expand Down

0 comments on commit b37712c

Please sign in to comment.