Here I added a dynamic scenario for Item Listview, i get the total stock qty in the listview with the dynamic row. so you can check it.
ListView Client Script:
frappe.listview_settings['Item'] = {
refresh: function(listview) {
frappe.call({
method: "frappe.client.get_list",
args: {
doctype: "Bin",
fields: ["item_code", "actual_qty", "warehouse"],
limit_page_length: 1000
},
callback: function(response) {
let stock_data = {};
response.message.forEach(function(bin) {
if (!stock_data[bin.item_code]) {
stock_data[bin.item_code] = 0;
}
stock_data[bin.item_code] += bin.actual_qty || 0;
});
if (listview.$result.find('.list-row-head .list-row-col:contains("Stock Qty")').length === 0) {
listview.$result.find('.list-row-head .list-row-col:last').each(function() {
$('<div class="list-row-col ellipsis hidden-xs"><span>Stock Qty</span></div>').insertAfter($(this));
});
}
listview.$result.find('.list-row-container .list-row').each(function() {
let $row = $(this);
if ($row.find('.list-row-col:contains("Stock Qty")').length === 0) {
let item_id = $row.find('.list-row-col:last').text().trim();
let stock_qty = stock_data[item_id] || 0;
let $stock_col = $(`<div class="list-row-col ellipsis hidden-xs"><span>${stock_qty}</span></div>`);
$stock_col.insertAfter($row.find('.list-row-col:last'));
}
});
}
});
}
};