How to Add a column to Sales invoice list view From another doctype

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'));
                    }
                });
            }
        });
    }
};
1 Like