mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-14 02:31:21 +00:00
feat(subcontracting): Added provision to create multiple Subcontracting Orders against a single Purchase Order (backport #44711) (#44782)
* feat(subcontracting): Added provision to create multiple Subcontracting Orders against a single Purchase Order (#44711)
* feat(subcontracting): Added provision to create multiple Subcontracting Orders from a single Subcontracted Purchase Order
* refactor(new_sc_flow_2): Fixed error thrown by semgrep
(cherry picked from commit 3eba6bf3dd)
# Conflicts:
# erpnext/buying/doctype/purchase_order/purchase_order.js
# erpnext/buying/doctype/purchase_order/test_purchase_order.py
# erpnext/buying/doctype/purchase_order_item/purchase_order_item.json
# erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json
# erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.json
* feat(subcontracting): Added provision to create multiple Subcontracting Orders against a single Purchase Order (#44711)
* feat(subcontracting): Added provision to create multiple Subcontracting Orders from a single Subcontracted Purchase Order
* refactor(new_sc_flow_2): Fixed error thrown by semgrep
* fix: Resolved errors and removed code from develop branch merged by mistake
---------
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
This commit is contained in:
@@ -103,6 +103,19 @@ class SubcontractingController(StockController):
|
||||
_("Row {0}: Item {1} must be a subcontracted item.").format(item.idx, item.item_name)
|
||||
)
|
||||
|
||||
if (
|
||||
self.doctype not in "Subcontracting Receipt"
|
||||
and item.qty
|
||||
> flt(get_pending_sco_qty(self.purchase_order).get(item.purchase_order_item))
|
||||
/ item.sc_conversion_factor
|
||||
):
|
||||
frappe.throw(
|
||||
_(
|
||||
"Row {0}: Item {1}'s quantity cannot be higher than the available quantity."
|
||||
).format(item.idx, item.item_name)
|
||||
)
|
||||
item.amount = item.qty * item.rate
|
||||
|
||||
if item.bom:
|
||||
is_active, bom_item = frappe.get_value("BOM", item.bom, ["is_active", "item"])
|
||||
|
||||
@@ -1110,6 +1123,12 @@ def get_item_details(items):
|
||||
return item_details
|
||||
|
||||
|
||||
def get_pending_sco_qty(po_name):
|
||||
table = frappe.qb.DocType("Purchase Order Item")
|
||||
query = frappe.qb.from_(table).select(table.name, table.qty, table.sco_qty).where(table.parent == po_name)
|
||||
return {item.name: item.qty - item.sco_qty for item in query.run(as_dict=True)}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def make_rm_stock_entry(
|
||||
subcontract_order, rm_items=None, order_doctype="Subcontracting Order", target_doc=None
|
||||
|
||||
Reference in New Issue
Block a user