diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py index 7c23e4c8f1e..3ebea0f72af 100644 --- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py @@ -134,7 +134,65 @@ def get_stock_ledger_entries(filters): if filters.get(field): query = query.where(sle[field] == filters.get(field)) +<<<<<<< HEAD return query +======= + if filters.start_from: + query = query.where(sle.posting_datetime > get_datetime(filters.start_from)) + + return query.run(as_dict=True) or [] + + +def get_stock_ledger_entries_for_batch_bundle(filters): + sle = frappe.qb.DocType("Stock Ledger Entry") + batch_package = frappe.qb.DocType("Serial and Batch Entry") + + to_date = get_datetime(filters.to_date + " 23:59:59") + + query = ( + frappe.qb.from_(sle) + .inner_join(batch_package) + .on(batch_package.parent == sle.serial_and_batch_bundle) + .select( + sle.item_code, + sle.warehouse, + batch_package.batch_no, + sle.posting_date, + fn.Sum(batch_package.qty).as_("actual_qty"), + ) + .where( + (sle.docstatus < 2) + & (sle.is_cancelled == 0) + & (sle.has_batch_no == 1) + & (sle.posting_datetime <= to_date) + ) + .groupby(sle.voucher_no, batch_package.batch_no, batch_package.warehouse) + .orderby(sle.item_code, sle.warehouse) + ) + + query = apply_warehouse_filter(query, sle, filters) + if filters.warehouse_type and not filters.warehouse: + warehouses = frappe.get_all( + "Warehouse", + filters={"warehouse_type": filters.warehouse_type, "is_group": 0}, + pluck="name", + ) + + if warehouses: + query = query.where(sle.warehouse.isin(warehouses)) + + for field in ["item_code", "batch_no", "company"]: + if filters.get(field): + if field == "batch_no": + query = query.where(batch_package[field] == filters.get(field)) + else: + query = query.where(sle[field] == filters.get(field)) + + if filters.start_from: + query = query.where(sle.posting_date > getdate(filters.start_from)) + + return query.run(as_dict=True) or [] +>>>>>>> e61ab48145 (fix: posting_date to posting_datetime in stock related queries) def get_item_warehouse_batch_map(filters, float_precision): diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py index c09137e645b..ea94c15c0e8 100644 --- a/erpnext/stock/report/stock_ageing/stock_ageing.py +++ b/erpnext/stock/report/stock_ageing/stock_ageing.py @@ -6,7 +6,7 @@ from operator import itemgetter import frappe from frappe import _ -from frappe.utils import cint, date_diff, flt +from frappe.utils import cint, date_diff, flt, get_datetime from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos @@ -387,6 +387,7 @@ class FIFOSlots: def __get_stock_ledger_entries(self) -> list[dict]: sle = frappe.qb.DocType("Stock Ledger Entry") item = self.__get_item_query() # used as derived table in sle query + to_date = get_datetime(self.filters.get("to_date") + " 23:59:59") sle_query = ( frappe.qb.from_(sle) @@ -411,7 +412,7 @@ class FIFOSlots: .where( (sle.item_code == item.name) & (sle.company == self.filters.get("company")) - & (sle.posting_date <= self.filters.get("to_date")) + & (sle.posting_datetime <= to_date) & (sle.is_cancelled != 1) ) ) @@ -428,7 +429,7 @@ class FIFOSlots: if warehouses: sle_query = sle_query.where(sle.warehouse.isin(warehouses)) - sle_query = sle_query.orderby(sle.posting_date, sle.posting_time, sle.creation, sle.actual_qty) + sle_query = sle_query.orderby(sle.posting_datetime, sle.creation) return sle_query.run(as_dict=True, as_iterator=True) diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index bde1434e600..13f546d950b 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -4,8 +4,13 @@ import frappe from frappe import _ +<<<<<<< HEAD from frappe.query_builder.functions import CombineDatetime from frappe.utils import cint, flt +======= +from frappe.query_builder.functions import CombineDatetime, Sum +from frappe.utils import cint, flt, get_datetime +>>>>>>> e61ab48145 (fix: posting_date to posting_datetime in stock related queries) from erpnext.stock.doctype.inventory_dimension.inventory_dimension import get_inventory_dimensions from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos @@ -264,6 +269,9 @@ def get_columns(filters): def get_stock_ledger_entries(filters, items): + from_date = get_datetime(filters.from_date + " 00:00:00") + to_date = get_datetime(filters.to_date + " 23:59:59") + sle = frappe.qb.DocType("Stock Ledger Entry") query = ( frappe.qb.from_(sle) @@ -286,12 +294,8 @@ def get_stock_ledger_entries(filters, items): sle.serial_no, sle.project, ) - .where( - (sle.docstatus < 2) - & (sle.is_cancelled == 0) - & (sle.posting_date[filters.from_date : filters.to_date]) - ) - .orderby(CombineDatetime(sle.posting_date, sle.posting_time)) + .where((sle.docstatus < 2) & (sle.is_cancelled == 0) & (sle.posting_datetime[from_date:to_date])) + .orderby(sle.posting_datetime) .orderby(sle.creation) )