NOTE: The "ref_lot_serial_number" field is added in stock_move
models/traceability_report.py
from odoo import models, api
class MrpStockReport(models.TransientModel):
_inherit = 'stock.traceability.report'
def _make_dict_move(self, level, parent_id, move_line, unfoldable=False):
result = super()._make_dict_move(level, parent_id, move_line, unfoldable)
ref_lot_serial = move_line.move_id.ref_lot_serial_number if move_line.move_id.ref_lot_serial_number else ''
print(f"level {level} parent_id {parent_id} move_line {move_line} ref_lot_serial {ref_lot_serial}")
for rec in result:
rec['ref_lot_serial_number'] = ref_lot_serial
print(f"result {result}")
return result
@api.model
def _final_vals_to_lines(self, final_vals, level):
lines = super()._final_vals_to_lines(final_vals, level)
for line in lines:
line['ref_lot_serial_number'] = ''
matching = next((f for f in final_vals if f['model_id'] == line['model_id']), None)
if matching and 'ref_lot_serial_number' in matching:
line['ref_lot_serial_number'] = matching['ref_lot_serial_number']
line['columns'].insert(4,line['ref_lot_serial_number'])
return lines
views/traceability_report.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="inherit_report_stock_inventory" inherit_id="stock.report_stock_inventory">
<xpath expr="//thead/tr[@class='o_report_header']/th[contains(., 'Lot/Serial #')]" position="after">
<th class="o_report_line_header">Ref Lot/Serial</th>
</xpath>
</template>
<template id="inherit_report_stock_body_print" inherit_id="stock.report_stock_body_print">
<xpath expr="//thead/tr[@class='o_report_header']/th[contains(., 'Lot/Serial #')]" position="after">
<th class="o_report_line_header">Ref Lot/Serial</th>
</xpath>
</template>
</odoo>
the result:
