feat(stock): expose all Bin qty fields in Stock Summary and Stock Projected Qty

Stock Summary's sort selector only offered 5 of Bin's 10 qty fields; add
the rest (ordered, requested, planned, reserved for production plan,
reserved stock) and extend get_data's or_filters so bins whose only
nonzero qty is one of the new fields show up when sorted by it. Sort
labels now mirror Bin field labels.

Stock Projected Qty report had a column for every Bin qty field except
reserved_stock; add it.
This commit is contained in:
Mihir Kandoi
2026-07-20 20:05:37 +05:30
parent b917aca361
commit 59c0c15c2e
3 changed files with 27 additions and 5 deletions

View File

@@ -70,6 +70,11 @@ def get_data(
"reserved_qty": ["!=", 0],
"reserved_qty_for_production": ["!=", 0],
"reserved_qty_for_sub_contract": ["!=", 0],
"reserved_qty_for_production_plan": ["!=", 0],
"reserved_stock": ["!=", 0],
"ordered_qty": ["!=", 0],
"indented_qty": ["!=", 0],
"planned_qty": ["!=", 0],
"actual_qty": ["!=", 0],
},
filters=filters,

View File

@@ -48,11 +48,19 @@ frappe.pages["stock-balance"].on_page_load = function (wrapper) {
sort_by: "projected_qty",
sort_order: "asc",
options: [
{ fieldname: "projected_qty", label: __("Projected qty") },
{ fieldname: "reserved_qty", label: __("Reserved for sale") },
{ fieldname: "reserved_qty_for_production", label: __("Reserved for manufacturing") },
{ fieldname: "reserved_qty_for_sub_contract", label: __("Reserved for sub contracting") },
{ fieldname: "actual_qty", label: __("Actual qty in stock") },
{ fieldname: "projected_qty", label: __("Projected Qty") },
{ fieldname: "reserved_qty", label: __("Reserved Qty") },
{ fieldname: "reserved_qty_for_production", label: __("Reserved Qty for Production") },
{ fieldname: "reserved_qty_for_sub_contract", label: __("Reserved Qty for Subcontract") },
{
fieldname: "reserved_qty_for_production_plan",
label: __("Reserved Qty for Production Plan"),
},
{ fieldname: "reserved_stock", label: __("Reserved Stock") },
{ fieldname: "ordered_qty", label: __("Ordered Qty") },
{ fieldname: "indented_qty", label: __("Requested Qty") },
{ fieldname: "planned_qty", label: __("Planned Qty") },
{ fieldname: "actual_qty", label: __("Actual Qty") },
],
},
change: function (sort_by, sort_order) {

View File

@@ -84,6 +84,7 @@ def execute(filters=None):
bin.reserved_qty_for_production_plan,
bin.reserved_qty_for_sub_contract,
reserved_qty_for_pos,
bin.reserved_stock,
bin.projected_qty,
re_order_level,
re_order_qty,
@@ -202,6 +203,13 @@ def get_columns():
"width": 100,
"convertible": "qty",
},
{
"label": _("Reserved Stock"),
"fieldname": "reserved_stock",
"fieldtype": "Float",
"width": 100,
"convertible": "qty",
},
{
"label": _("Projected Qty"),
"fieldname": "projected_qty",
@@ -248,6 +256,7 @@ def get_bin_list(filters):
bin.reserved_qty_for_production,
bin.reserved_qty_for_sub_contract,
bin.reserved_qty_for_production_plan,
bin.reserved_stock,
bin.projected_qty,
)
.orderby(bin.item_code, bin.warehouse)