fix: correct sorting while updating bin
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 6ea4525..1bfce66 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -4,8 +4,8 @@
import frappe
from frappe.model.document import Document
-from frappe.query_builder import Case
-from frappe.query_builder.functions import Coalesce, Sum
+from frappe.query_builder import Case, Order
+from frappe.query_builder.functions import Coalesce, CombineDatetime, Sum
from frappe.utils import flt
@@ -121,24 +121,23 @@
bin_details = get_bin_details(bin_name)
# actual qty is already updated by processing current voucher
- actual_qty = bin_details.actual_qty
+ actual_qty = bin_details.actual_qty or 0.0
+ sle = frappe.qb.DocType("Stock Ledger Entry")
# actual qty is not up to date in case of backdated transaction
if future_sle_exists(args):
- actual_qty = (
- frappe.db.get_value(
- "Stock Ledger Entry",
- filters={
- "item_code": args.get("item_code"),
- "warehouse": args.get("warehouse"),
- "is_cancelled": 0,
- },
- fieldname="qty_after_transaction",
- order_by="posting_date desc, posting_time desc, creation desc",
- )
- or 0.0
+ last_sle_qty = (
+ frappe.qb.from_(sle)
+ .select(sle.qty_after_transaction)
+ .where((sle.item_code == args.get("item_code")) & (sle.warehouse == args.get("warehouse")))
+ .orderby(CombineDatetime(sle.posting_date, sle.posting_time), order=Order.desc)
+ .orderby(sle.creation, order=Order.desc)
+ .run()
)
+ if last_sle_qty:
+ actual_qty = last_sle_qty[0][0]
+
ordered_qty = flt(bin_details.ordered_qty) + flt(args.get("ordered_qty"))
reserved_qty = flt(bin_details.reserved_qty) + flt(args.get("reserved_qty"))
indented_qty = flt(bin_details.indented_qty) + flt(args.get("indented_qty"))