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": ["!=", 0],
"reserved_qty_for_production": ["!=", 0], "reserved_qty_for_production": ["!=", 0],
"reserved_qty_for_sub_contract": ["!=", 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], "actual_qty": ["!=", 0],
}, },
filters=filters, filters=filters,

View File

@@ -48,11 +48,19 @@ frappe.pages["stock-balance"].on_page_load = function (wrapper) {
sort_by: "projected_qty", sort_by: "projected_qty",
sort_order: "asc", sort_order: "asc",
options: [ options: [
{ fieldname: "projected_qty", label: __("Projected qty") }, { fieldname: "projected_qty", label: __("Projected Qty") },
{ fieldname: "reserved_qty", label: __("Reserved for sale") }, { fieldname: "reserved_qty", label: __("Reserved Qty") },
{ fieldname: "reserved_qty_for_production", label: __("Reserved for manufacturing") }, { fieldname: "reserved_qty_for_production", label: __("Reserved Qty for Production") },
{ fieldname: "reserved_qty_for_sub_contract", label: __("Reserved for sub contracting") }, { fieldname: "reserved_qty_for_sub_contract", label: __("Reserved Qty for Subcontract") },
{ fieldname: "actual_qty", label: __("Actual qty in stock") }, {
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) { 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_production_plan,
bin.reserved_qty_for_sub_contract, bin.reserved_qty_for_sub_contract,
reserved_qty_for_pos, reserved_qty_for_pos,
bin.reserved_stock,
bin.projected_qty, bin.projected_qty,
re_order_level, re_order_level,
re_order_qty, re_order_qty,
@@ -200,6 +201,13 @@ def get_columns():
"width": 100, "width": 100,
"convertible": "qty", "convertible": "qty",
}, },
{
"label": _("Reserved Stock"),
"fieldname": "reserved_stock",
"fieldtype": "Float",
"width": 100,
"convertible": "qty",
},
{ {
"label": _("Projected Qty"), "label": _("Projected Qty"),
"fieldname": "projected_qty", "fieldname": "projected_qty",
@@ -246,6 +254,7 @@ def get_bin_list(filters):
bin.reserved_qty_for_production, bin.reserved_qty_for_production,
bin.reserved_qty_for_sub_contract, bin.reserved_qty_for_sub_contract,
bin.reserved_qty_for_production_plan, bin.reserved_qty_for_production_plan,
bin.reserved_stock,
bin.projected_qty, bin.projected_qty,
) )
.orderby(bin.item_code, bin.warehouse) .orderby(bin.item_code, bin.warehouse)