Skip to content

Commit 264855e

Browse files
ljain112mergify[bot]
authored andcommitted
fix: throw if item order field is not set in subcontracting controller
(cherry picked from commit d256365)
1 parent be9112b commit 264855e

1 file changed

Lines changed: 37 additions & 22 deletions

File tree

erpnext/controllers/subcontracting_controller.py

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -166,29 +166,46 @@ def validate_items(self):
166166
_("Row {0}: Item {1} must be a subcontracted item.").format(item.idx, item.item_name)
167167
)
168168

169-
if self.doctype != "Subcontracting Receipt" and item.qty > flt(
170-
get_pending_subcontracted_quantity(
171-
self.doctype,
172-
self.purchase_order if self.doctype == "Subcontracting Order" else self.sales_order,
173-
).get(
174-
item.purchase_order_item
175-
if self.doctype == "Subcontracting Order"
176-
else item.sales_order_item
177-
)
178-
/ item.subcontracting_conversion_factor,
179-
frappe.get_precision(
169+
if self.doctype != "Subcontracting Receipt":
170+
order_item_doctype = (
180171
"Purchase Order Item"
181172
if self.doctype == "Subcontracting Order"
182-
else "Sales Order Item",
183-
"qty",
184-
),
185-
):
186-
frappe.throw(
187-
_(
188-
"Row {0}: Item {1}'s quantity cannot be higher than the available quantity."
189-
).format(item.idx, item.item_name)
173+
else "Sales Order Item"
174+
)
175+
176+
order_name = (
177+
self.purchase_order if self.doctype == "Subcontracting Order" else self.sales_order
178+
)
179+
order_item_field = frappe.scrub(order_item_doctype)
180+
181+
if not item.get(order_item_field):
182+
frappe.throw(
183+
_("Row {0}: Item {1} must be linked to a {2}.").format(
184+
item.idx, item.item_name, order_item_doctype
185+
)
186+
)
187+
188+
pending_qty = flt(
189+
flt(
190+
get_pending_subcontracted_quantity(
191+
order_item_doctype,
192+
order_name,
193+
).get(item.get(order_item_field))
194+
)
195+
/ item.subcontracting_conversion_factor,
196+
frappe.get_precision(
197+
order_item_doctype,
198+
"qty",
199+
),
190200
)
191201

202+
if item.qty > pending_qty:
203+
frappe.throw(
204+
_(
205+
"Row {0}: Item {1}'s quantity cannot be higher than the available quantity."
206+
).format(item.idx, item.item_name)
207+
)
208+
192209
if self.doctype != "Subcontracting Inward Order":
193210
item.amount = item.qty * item.rate
194211

@@ -1333,9 +1350,7 @@ def get_item_details(items):
13331350

13341351

13351352
def get_pending_subcontracted_quantity(doctype, name):
1336-
table = frappe.qb.DocType(
1337-
"Purchase Order Item" if doctype == "Subcontracting Order" else "Sales Order Item"
1338-
)
1353+
table = frappe.qb.DocType(doctype)
13391354
query = (
13401355
frappe.qb.from_(table)
13411356
.select(table.name, table.stock_qty, table.subcontracted_qty)

0 commit comments

Comments
 (0)