Hi!,
Im trying to create a zpl report by giving products from an delivery move, but when i print the report the products are empty, my wizard have a grid where i write the quantity of labels and the quantity of each product, but when the zpl prints it doesnt contain the products, i read about transient models and saw that the many2one fields are not maintained when I create the zpl, what can i do?
This is the code to my wizard:
from odoo import models, fields, api
class WizardOutLabel(models.Model):
_name = "out.label.wizard"
_description = "Wizard para etiquetas de salida"
transient_out_label_id = fields.One2many(
'out.label', 'wizard_id', string="Wizard ID"
)
stock_picking_id = fields.Many2one('stock.picking', string="Movimiento de salida")
@api.model
def default_get(self, fields):
res = super().default_get(fields)
picking_id = self.env.context.get('default_stock_picking_id')
if picking_id:
picking = self.env['stock.picking'].browse(picking_id)
lines = []
for move in picking.move_ids_without_package:
lines.append((0, 0, {
'product_id': move.product_id.product_tmpl_id.id,
'product_qty': move.product_uom_qty,
'labels_qty': 1,
'stock_picking_id': picking.id,
'product_name': move.product_id.display_name,
}))
res['transient_out_label_id'] = lines
res['stock_picking_id'] = picking.id
return res
def action_confirm(self):
report_action = self.env.ref('inventory_labels.download_out_label_report_zpl').report_action(self)
report_action['close_on_report_download'] = True
return report_action
Then i have my grid for products in other model:
from odoo import models, fields, api
class TransientOutLabel(models.Model):
_name = "out.label"
_description = "Utilizado para etiquetas de salida"
wizard_id = fields.Many2one('out.label.wizard', string="Wizard")
product_id = fields.Many2one(
'product.template',
string="Producto"
)
product_name = fields.Char(string="Nombre del producto")
stock_picking_id = fields.Many2one('stock.picking', string="Movimiento de salida")
labels_qty = fields.Integer(string="Cantidad de etiquetas")
product_qty = fields.Float(string="Cantidad de producto")
my code xml is:
<data>
<record id="view_out_labels_wizard_form" model="ir.ui.view">
<field name="name">out.labels.wizard.list</field>
<field name="model">out.label.wizard</field>
<field name="arch" type="xml">
<form string="Etiquetas de salida">
<field name="transient_out_label_id">
<tree editable="bottom" create="0" delete="0">
<field name="product_id" readonly="1"/>
<field name="product_name" readonly="1"/>
<field name="labels_qty"/>
<field name="product_qty"/>
</tree>
</field>
<footer>
<button name="action_confirm" type="object" string="Confirmar" class="btn-primary"/>
<button string="Cancelar" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="out_label_form_view_inherit_wizard" model="ir.ui.view">
<field name="name">stock.picking.form.inherit.wizard</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='do_print_picking']" position="replace">
<button string="Imprimir etiquetas" name="%(open_out_label_wizard)d" type="action"/>
</xpath>
</field>
</record>
<record id="product_out_label_zpl_report" model="ir.ui.view">
<field name="name">out_label.zpl_report</field>
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-name="inventory_labels.product_out_label_zpl_report">
<t t-foreach="docs" t-as="wizard">
<t t-foreach="wizard.transient_out_label_id" t-as="line">
<t t-foreach="range(line.labels_qty)" t-as="i">
<t t-set="clean_name"
t-value="(line.product_name or '').translate({
ord('á'): 'a', ord('é'): 'e', ord('í'): 'i', ord('ó'): 'o', ord('ú'): 'u',
ord('Á'): 'A', ord('É'): 'E', ord('Í'): 'I', ord('Ó'): 'O', ord('Ú'): 'U',
ord('ñ'): 'n', ord('Ñ'): 'N'
}).strip()"/>
<t t-if="len(clean_name) <= 48">
^XA
^FO50,50^A0N,30,30^FDProducto: <t t-esc="line.product_id.name"/>^FS
^FO50,95^A0N,30,30^FDCantidad: <t t-esc="line.product_qty"/>^FS
^XZ
</t>
<t t-else="">
^XA
^FO50,50^A0N,30,30^FDProducto: <t t-esc="clean_name[:48]"/>^FS
^FO50,85^A0N,30,30^FD<t t-esc="clean_name[48:]"/>^FS
^FO50,140^A0N,30,30^FDCantidad: <t t-esc="line.product_qty"/>^FS
^XZ
</t>
</t>
</t>
</t>
</t>
</field>
</record>
</data>
and my actions:
<record id="open_out_label_wizard" model="ir.actions.act_window">
<field name="name">Etiquetas de salida de producto</field>
<field name="res_model">out.label.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{'default_stock_picking_id': active_id}</field>
</record>
<record id="download_out_label_report_zpl" model="ir.actions.report">
<field name="name">Etiquetas de salida de producto</field>
<field name="model">out.label.wizard</field>
<field name="report_type">qweb-text</field>
<field name="report_name">inventory_labels.product_out_label_zpl_report</field>
</record>