From c5d92d79996ed95e9c56f3ab21f1becb5120ce84 Mon Sep 17 00:00:00 2001 From: Sherin KR Date: Mon, 17 Nov 2025 12:41:44 +0530 Subject: [PATCH 1/2] fix: item price not considering based on valid_upto (cherry picked from commit dfda8e6241aaebc9ce48f0a81a82387976a67a37) # Conflicts: # erpnext/selling/page/point_of_sale/point_of_sale.py --- .../page/point_of_sale/point_of_sale.py | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py index 4b7c06dea39..06f81dadde2 100644 --- a/erpnext/selling/page/point_of_sale/point_of_sale.py +++ b/erpnext/selling/page/point_of_sale/point_of_sale.py @@ -5,7 +5,12 @@ import json import frappe +<<<<<<< HEAD from frappe.utils import cint, get_datetime +======= +from frappe.query_builder import DocType, Order +from frappe.utils import cint +>>>>>>> dfda8e6241 (fix: item price not considering based on valid_upto) from frappe.utils.nestedset import get_root_of from erpnext.accounts.doctype.pos_invoice.pos_invoice import get_item_group, get_stock_availability @@ -200,18 +205,24 @@ def get_items(start, page_length, price_list, item_group, pos_profile, search_te for item in items_data: item.actual_qty, _, is_negative_stock_allowed = get_stock_availability(item.item_code, warehouse) - item_prices = frappe.get_all( - "Item Price", - fields=["price_list_rate", "currency", "uom", "batch_no", "valid_from", "valid_upto"], - filters={ - "price_list": price_list, - "item_code": item.item_code, - "selling": True, - "valid_from": ["<=", current_date], - "valid_upto": ["in", [None, "", current_date]], - }, - order_by="valid_from desc", - ) + ItemPrice = DocType("Item Price") + item_prices = ( + frappe.qb.from_(ItemPrice) + .select( + ItemPrice.price_list_rate, + ItemPrice.currency, + ItemPrice.uom, + ItemPrice.batch_no, + ItemPrice.valid_from, + ItemPrice.valid_upto, + ) + .where(ItemPrice.price_list == price_list) + .where(ItemPrice.item_code == item.item_code) + .where(ItemPrice.selling == 1) + .where((ItemPrice.valid_from <= current_date) | (ItemPrice.valid_from.isnull())) + .where((ItemPrice.valid_upto >= current_date) | (ItemPrice.valid_upto.isnull())) + .orderby(ItemPrice.valid_from, order=Order.desc) + ).run(as_dict=True) stock_uom_price = next((d for d in item_prices if d.get("uom") == item.stock_uom), {}) item_uom = item.stock_uom From 31142b2f4794f570db7b474512e4179da6cd9e89 Mon Sep 17 00:00:00 2001 From: Diptanil Saha Date: Thu, 27 Nov 2025 16:40:55 +0530 Subject: [PATCH 2/2] chore: resolve conflict --- erpnext/selling/page/point_of_sale/point_of_sale.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py index 06f81dadde2..50ab2404078 100644 --- a/erpnext/selling/page/point_of_sale/point_of_sale.py +++ b/erpnext/selling/page/point_of_sale/point_of_sale.py @@ -5,12 +5,8 @@ import json import frappe -<<<<<<< HEAD -from frappe.utils import cint, get_datetime -======= from frappe.query_builder import DocType, Order -from frappe.utils import cint ->>>>>>> dfda8e6241 (fix: item price not considering based on valid_upto) +from frappe.utils import cint, get_datetime from frappe.utils.nestedset import get_root_of from erpnext.accounts.doctype.pos_invoice.pos_invoice import get_item_group, get_stock_availability