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.

(cherry picked from commit 59c0c15c2e)
This commit is contained in:
Mihir Kandoi
2026-07-20 20:05:37 +05:30
committed by Mergify
parent 942a8db7fa
commit 0bdf258888
3 changed files with 27 additions and 5 deletions

View File

@@ -59,6 +59,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,
@@ -200,6 +201,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",
@@ -246,6 +254,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)