fix: incorrect requested quantity for the subcontracting order

(cherry picked from commit 691e3bb24f)
This commit is contained in:
Rohit Waghchaure
2023-11-30 10:25:22 +05:30
committed by Mergify
parent 2d9ba88870
commit abe3e41a17
6 changed files with 179 additions and 25 deletions

View File

@@ -221,6 +221,10 @@ class PurchaseOrder(BuyingController):
self.reset_default_field_value("set_warehouse", "items", "warehouse")
def validate_with_previous_doc(self):
mri_compare_fields = [["project", "="], ["item_code", "="]]
if self.is_subcontracted:
mri_compare_fields = [["project", "="]]
super(PurchaseOrder, self).validate_with_previous_doc(
{
"Supplier Quotation": {
@@ -243,7 +247,7 @@ class PurchaseOrder(BuyingController):
},
"Material Request Item": {
"ref_dn_field": "material_request_item",
"compare_fields": [["project", "="], ["item_code", "="]],
"compare_fields": mri_compare_fields,
"is_child_table": True,
},
}
@@ -417,23 +421,6 @@ class PurchaseOrder(BuyingController):
check_list.append(d.material_request)
check_on_hold_or_closed_status("Material Request", d.material_request)
def update_requested_qty(self):
material_request_map = {}
for d in self.get("items"):
if d.material_request_item:
material_request_map.setdefault(d.material_request, []).append(d.material_request_item)
for mr, mr_item_rows in material_request_map.items():
if mr and mr_item_rows:
mr_obj = frappe.get_doc("Material Request", mr)
if mr_obj.status in ["Stopped", "Cancelled"]:
frappe.throw(
_("Material Request {0} is cancelled or stopped").format(mr), frappe.InvalidStatusError
)
mr_obj.update_requested_qty(mr_item_rows)
def update_ordered_qty(self, po_item_rows=None):
"""update requested qty (before ordered_qty is updated)"""
item_wh_list = []
@@ -475,7 +462,9 @@ class PurchaseOrder(BuyingController):
self.update_status_updater()
self.update_prevdoc_status()
self.update_requested_qty()
if not self.is_subcontracted or self.is_old_subcontracting_flow:
self.update_requested_qty()
self.update_ordered_qty()
self.validate_budget()
self.update_reserved_qty_for_subcontract()
@@ -509,7 +498,9 @@ class PurchaseOrder(BuyingController):
# Must be called after updating ordered qty in Material Request
# bin uses Material Request Items to recalculate & update
self.update_requested_qty()
if not self.is_subcontracted or self.is_old_subcontracting_flow:
self.update_requested_qty()
self.update_ordered_qty()
self.update_blanket_order()
@@ -875,6 +866,8 @@ def get_mapped_subcontracting_order(source_name, target_doc=None):
"doctype": "Subcontracting Order Service Item",
"field_map": {
"name": "purchase_order_item",
"material_request": "material_request",
"material_request_item": "material_request_item",
},
"field_no_map": [],
},