This question has been flagged
1 Reply
2021 Views

I'm attempting to add information to the template stock_barcode_lines_template. I have the xml for the template written and showing in the view.

<?xml version="1.0" encoding="utf-8"?>
    <templates id="template" xml:space="preserve">
        <t t-extend="stock_barcode_lines_template">
            <t t-jquery='.o_barcode_line_details' t-operation='append'>
                <div>
                    <span class="o_line_rack_name" t-esc="'Rack: '"/>
                    <span class="o_line_rack_value" t-esc="line.rack"/>
                    <span class="o_line_shelf_name" t-esc="'Shelf: '"/>
                    <span class="o_line_shelf_value" t-esc="line.shelf"/>
                    <span class="o_line_bin_name" t-esc="'Bin: '"/>
                    <span class="o_line_bin_value" t-esc="line.bin"/>
                </div>
            </t>
        </t>
</templates>

and the following Javascript will add the information into the line dict

LinesWidget.include({

    getProductLines: function(lines){
    var self = this
    lines.forEach(function(line){
        self._rpc({
            model: 'stock.move.line',
            method: 'get_rack_bin',
            args: [line,line.id],
        }).then(function(result){
            line.rack = result.rack;
            line.shelf = result.shelf;
            line.bin = result.bin;
        });
    });
    return self._super(lines)
    }
});

however when I put `<t t-log="line.bin"/>` (or rack or shelf) in the template it is logging as undefined however when I put `<t t-log="line"/>` in the template, the new data is in the dict.

bin: "11"
display_name: "[HJ-PCKRD-100-03] Hi Juku - Puckered (3 mg)"
dummy_id: false
id: 149541
location_dest_id: {id: 9, display_name: "Partner Locations/Customers"}
location_id: {id: 49, display_name: "ModFu/Stock"}
lot_id: false
lot_name: false
owner_id: false
package_id: false
product_barcode: "853668007979"
product_id: {id: 5429, barcode: "853668007979", tracking: "none"}
product_uom_id: (2) [1, "Unit(s)"]
length: 2
__proto__: Array(0)
product_uom_qty: 30
qty_done: 0
rack: "38.11"
result_package_id: false
shelf: "B"

How can I successfully pull the information from the dict?

Avatar
Discard
Best Answer

It's because the self._rpc request is a promise request (not provided immediately while the code is running.

As workaround I use name each span with a unique id then once the _rpc request is fullfiled you update the value.

try:

<?xml version="1.0" encoding="utf-8"?>
    <templates id="template" xml:space="preserve">
        <t t-extend="stock_barcode_lines_template">
            <t t-jquery='.o_barcode_line_details' t-operation='append'>
                <div>
                    <span class="o_line_rack_name" t-esc="'Rack: '"/>
                    <span class="o_line_rack_value" t-esc="line.rack" t-att-id="'rack' + line.id"/>
                    <span class="o_line_shelf_name" t-esc="'Shelf: '"/>
                    <span class="o_line_shelf_value" t-esc="line.shelf" t-att-id="'shelf' + line.id"/>
                    <span class="o_line_bin_name" t-esc="'Bin: '"/>
                    <span class="o_line_bin_value" t-esc="line.bin" t-att-id="'bin' + line.id"/>
                </div>
            </t>
        </t>


</templates>


Then for javascript:

LinesWidget.include({

    getProductLines: function(lines){
    var self = this
    lines.forEach(function(line){
        self._rpc({
            model: 'stock.move.line',
            method: 'get_rack_bin',
            args: [line,line.id],
        }).then(function(result){

            var span_rack = document.getElementById('rack' + line.id);

            span_rack.innerHTML = result.rack

            var span_shelf = document.getElementById('shelf' + line.id);

            span_shelf.innerHTML = result.shelf


            var span_bin = document.getElementById('bin' + line.id);

            span_bin.innerHTML = result.bin


        });
    });
    return self._super(lines)
    }
});


Avatar
Discard