fix: consider returned qty while calculating unsupplied qty
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 35f6230..c41349f 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -1020,14 +1020,34 @@
& (se.docstatus == 1)
& (se_detail.item_code == se_item.item_code)
& (
- (se.purchase_order == self.purchase_order)
+ ((se.purchase_order == self.purchase_order) & (se_detail.po_detail == se_item.po_detail))
if self.subcontract_data.order_doctype == "Purchase Order"
- else (se.subcontracting_order == self.subcontracting_order)
+ else (
+ (se.subcontracting_order == self.subcontracting_order)
+ & (se_detail.sco_rm_detail == se_item.sco_rm_detail)
+ )
)
)
- ).run()[0][0]
+ ).run()[0][0] or 0
- if flt(total_supplied, precision) > flt(total_allowed, precision):
+ total_returned = 0
+ if self.subcontract_data.order_doctype == "Subcontracting Order":
+ total_returned = (
+ frappe.qb.from_(se)
+ .inner_join(se_detail)
+ .on(se.name == se_detail.parent)
+ .select(Sum(se_detail.transfer_qty))
+ .where(
+ (se.purpose == "Material Transfer")
+ & (se.docstatus == 1)
+ & (se.is_return == 1)
+ & (se_detail.item_code == se_item.item_code)
+ & (se_detail.sco_rm_detail == se_item.sco_rm_detail)
+ & (se.subcontracting_order == self.subcontracting_order)
+ )
+ ).run()[0][0] or 0
+
+ if flt(total_supplied - total_returned, precision) > flt(total_allowed, precision):
frappe.throw(
_("Row {0}# Item {1} cannot be transferred more than {2} against {3} {4}").format(
se_item.idx,
diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js
index 47d8704..587a3b4 100644
--- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js
+++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js
@@ -193,7 +193,7 @@
}
has_unsupplied_items() {
- return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty);
+ return this.frm.doc['supplied_items'].some(item => item.required_qty > (item.supplied_qty - item.returned_qty));
}
make_subcontracting_receipt() {