Skip to content

Commit

Permalink
fix: consider received qty while creating SO -> MR (backport #37414) (#…
Browse files Browse the repository at this point in the history
…37514)

fix: consider received qty while creating SO -> MR

(cherry picked from commit b2cee39)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
  • Loading branch information
mergify[bot] and s-aga-r authored Oct 15, 2023
1 parent 65b7fb1 commit 1b94510
Showing 1 changed file with 24 additions and 16 deletions.
40 changes: 24 additions & 16 deletions erpnext/selling/doctype/sales_order/sales_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -542,29 +542,37 @@ def close_or_unclose_sales_orders(names, status):


def get_requested_item_qty(sales_order):
return frappe._dict(
frappe.db.sql(
"""
select sales_order_item, sum(qty)
from `tabMaterial Request Item`
where docstatus = 1
and sales_order = %s
group by sales_order_item
""",
sales_order,
)
)
result = {}
for d in frappe.db.get_all(
"Material Request Item",
filters={"docstatus": 1, "sales_order": sales_order},
fields=["sales_order_item", "sum(qty) as qty", "sum(received_qty) as received_qty"],
group_by="sales_order_item",
):
result[d.sales_order_item] = frappe._dict({"qty": d.qty, "received_qty": d.received_qty})

return result


@frappe.whitelist()
def make_material_request(source_name, target_doc=None):
requested_item_qty = get_requested_item_qty(source_name)

def get_remaining_qty(so_item):
return flt(
flt(so_item.qty)
- flt(requested_item_qty.get(so_item.name, {}).get("qty"))
- max(
flt(so_item.get("delivered_qty"))
- flt(requested_item_qty.get(so_item.name, {}).get("received_qty")),
0,
)
)

def update_item(source, target, source_parent):
# qty is for packed items, because packed items don't have stock_qty field
qty = source.get("qty")
target.project = source_parent.project
target.qty = qty - requested_item_qty.get(source.name, 0) - flt(source.get("delivered_qty"))
target.qty = get_remaining_qty(source)
target.stock_qty = flt(target.qty) * flt(target.conversion_factor)

args = target.as_dict().copy()
Expand Down Expand Up @@ -597,8 +605,8 @@ def update_item(source, target, source_parent):
"Sales Order Item": {
"doctype": "Material Request Item",
"field_map": {"name": "sales_order_item", "parent": "sales_order"},
"condition": lambda doc: not frappe.db.exists("Product Bundle", doc.item_code)
and (doc.stock_qty - flt(doc.get("delivered_qty"))) > requested_item_qty.get(doc.name, 0),
"condition": lambda item: not frappe.db.exists("Product Bundle", item.item_code)
and get_remaining_qty(item) > 0,
"postprocess": update_item,
},
},
Expand Down

0 comments on commit 1b94510

Please sign in to comment.