From 345ca405b0994ebbcbae5b7e3884c652a13d722c Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Fri, 8 Aug 2025 15:10:43 +0530 Subject: [PATCH] fix: modify all SRE queries to consider new Closed status --- .../serial_and_batch_bundle.py | 3 +- .../stock_reservation_entry.py | 37 +++++++------------ 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py index 790d80b56d6..eb13e784649 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py @@ -2180,8 +2180,7 @@ def get_reserved_batches_for_sre(kwargs) -> dict: .where( (sre.docstatus == 1) & (sre.item_code == kwargs.item_code) - & (sre.reserved_qty >= sre.delivered_qty) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) & (sre.reservation_based_on == "Serial and Batch") ) .groupby(sb_entry.batch_no, sre.warehouse) diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py index a55a3b2b73c..0080a4438ae 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -500,7 +500,7 @@ class StockReservationEntry(Document): status = "Delivered" elif self.delivered_qty and self.delivered_qty < self.reserved_qty: status = "Partially Delivered" - elif self.reserved_qty == self.voucher_qty: + elif self.reserved_qty >= self.voucher_qty: status = "Reserved" else: status = "Partially Reserved" @@ -699,8 +699,7 @@ def get_available_qty_to_reserve( (sre.docstatus == 1) & (sre.item_code == item_code) & (sre.warehouse == warehouse) - & (sre.reserved_qty >= sre.delivered_qty) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) ) @@ -750,8 +749,7 @@ def get_available_serial_nos_to_reserve( (sre.docstatus == 1) & (sre.item_code == item_code) & (sre.warehouse == warehouse) - & (sre.reserved_qty >= sre.delivered_qty) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) & (sre.reservation_based_on == "Serial and Batch") ) ) @@ -781,11 +779,7 @@ def get_sre_reserved_qty_for_item_and_warehouse(item_code: str, warehouse: str | "reserved_qty" ) ) - .where( - (sre.docstatus == 1) - & (sre.item_code == item_code) - & (sre.status.notin(["Delivered", "Cancelled"])) - ) + .where((sre.docstatus == 1) & (sre.item_code == item_code) & (sre.delivered_qty < sre.reserved_qty)) .groupby(sre.item_code, sre.warehouse) ) @@ -841,7 +835,7 @@ def get_sre_reserved_qty_details_for_voucher(voucher_type: str, voucher_no: str) (sre.docstatus == 1) & (sre.voucher_type == voucher_type) & (sre.voucher_no == voucher_no) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) .groupby(sre.voucher_detail_no) ).run(as_list=True) @@ -863,7 +857,7 @@ def get_sre_reserved_warehouses_for_voucher( (sre.docstatus == 1) & (sre.voucher_type == voucher_type) & (sre.voucher_no == voucher_no) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) .orderby(sre.creation) ) @@ -904,7 +898,7 @@ def get_sre_reserved_qty_for_voucher_detail_no( & (sre.voucher_type == voucher_type) & (sre.voucher_no == voucher_no) & (sre.voucher_detail_no == voucher_detail_no) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) ) @@ -938,8 +932,7 @@ def get_sre_reserved_serial_nos_details( (sre.docstatus == 1) & (sre.item_code == item_code) & (sre.warehouse == warehouse) - & (sre.reserved_qty > sre.delivered_qty) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) & (sre.reservation_based_on == "Serial and Batch") ) .orderby(sb_entry.creation) @@ -969,7 +962,7 @@ def get_sre_reserved_batch_nos_details(item_code: str, warehouse: str, batch_nos & (sre.item_code == item_code) & (sre.warehouse == warehouse) & ((sre.reserved_qty - sre.delivered_qty) > 0) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) & (sre.reservation_based_on == "Serial and Batch") ) .groupby(sb_entry.batch_no) @@ -1004,8 +997,7 @@ def get_sre_details_for_voucher(voucher_type: str, voucher_no: str) -> list[dict (sre.docstatus == 1) & (sre.voucher_type == voucher_type) & (sre.voucher_no == voucher_no) - & (sre.reserved_qty > sre.delivered_qty) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) .orderby(sre.creation) ).run(as_dict=True) @@ -1026,7 +1018,7 @@ def get_serial_batch_entries_for_voucher(sre_name: str) -> list[dict]: sb_entry.batch_no, (sb_entry.qty - sb_entry.delivered_qty).as_("qty"), ) - .where((sre.docstatus == 1) & (sre.name == sre_name) & (sre.status.notin(["Delivered", "Cancelled"]))) + .where((sre.docstatus == 1) & (sre.name == sre_name) & (sre.delivered_qty < sre.reserved_qty)) .where(sb_entry.qty > sb_entry.delivered_qty) .orderby(sb_entry.creation) ).run(as_dict=True) @@ -1246,8 +1238,7 @@ class StockReservation: (sre.docstatus == 1) & (sre.item_code == item_code) & (sre.warehouse == warehouse) - & (sre.reserved_qty >= sre.delivered_qty) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) ) @@ -1733,7 +1724,7 @@ def cancel_stock_reservation_entries( (sre.docstatus == 1) & (sre.from_voucher_type == from_voucher_type) & (sre.from_voucher_no == from_voucher_no) - & (sre.status.notin(["Delivered", "Cancelled"])) + & (sre.delivered_qty < sre.reserved_qty) ) .orderby(sre.creation) ) @@ -1789,7 +1780,7 @@ def get_stock_reservation_entries_for_voucher( query = query.where(sre.voucher_detail_no == voucher_detail_no) if ignore_status: - query = query.where(sre.status.notin(["Delivered", "Cancelled"])) + query = query.where(sre.delivered_qty < sre.reserved_qty) return query.run(as_dict=True)