Crear un Wizard llamado desde el menú Acción de un modelo de Odoo

30 de noviembre de 2024 por
Andres Dawidowicz
| Sin comentarios aún
 

Una utilidad que se necesita muy a menudo es seleccionar uno o varios registros de un modelo y asignarle o cambiarles algún dato

Por ejemplo tomar los picking y asignarles un camión o tomar varios artículos y cambiarles la unidad de medida.

Una de las formas es agregar una acción que llame a un wizard desde una acción de ventana, también podría ser desde un botón o una acción de servidor, pero ahora lo vamos a ver desde la acción de ventana.


Para poder ejecutar este Wizard, primero creamos el modelo transitorio que va a tener los campos a pedir en el formulario. Se define igual que un modelo común salvo que al definir la clase se le pone TransientModel. Acordarse de definir el acceso de seguridad como cualquier modelo para que los usuarios tengan acceso.

class BankFileLineWizard(models.TransientModel):

Se definen los campos y la acción del botón de confirmar :

class BankFileLineWizard(models.TransientModel):
_name = "bank.file.line.wizard"
_description = "bank.file.line.wizard"

partner_id = fields.Many2one('res.partner',string='Cliente')

def btn_confirm(self):
if not self.partner_id:
raise ValidationError('Tiene que seleccionar el cliente')
context = self.env.context
bank_lines = self.env['bank.file.line'].browse(context.get('active_ids'))
for bank_line in bank_lines:
bank_line.write({'partner_id': self.partner_id.id})

Luego definir la acción de ventana que va a tener este modelo

<record id="account_move_reclassify_wizard_action" model="ir.actions.act_window">
<field name="name">Cambiar Cliente</field>
<field name="res_model" >bank.file.line.wizard</field>
<field name="view_mode">form</field>
<field name="binding_model_id" ref="import_bank_files.model_bank_file_line"></field>
<field name="target">new</field>
<field name="binding_view_types">list</field>
</record>

El binding_model_id indica que va a estar en el menú de acción del modelo que indica "ref"  y el binding_view_type indica en cual de las vistas va a estar, por ejemplo en este caso en la vista lista, pero no va a aparecer en la vista form si no se indica

Luego se define el formulario del wizard que se vincula con el nombre del modelo creado para el wizard

        <record id="bank_file_line_wizard_view" model="ir.ui.view">
<field name="name">Cambiar Cliente Wizard</field>
<field name="model">bank.file.line.wizard</field>
<field name="arch" type="xml">
<form string="Cambiar Cliente">
<sheet>
<group>
<field name="partner_id" options="{'no_create': True, 'no_create_edit':True}"/>
</group>
</sheet>
<footer>
<button string="Confirm" name="btn_confirm" type="object" default_focus="1" class="btn-primary"/>
<button string="Cancel" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>

En la acción confirmar del modelo vemos como recorre los registros seleccionados y les asigna el cliente elegido del Wizard.





Andres Dawidowicz 30 de noviembre de 2024
Compartir
Categorías
Archivar
Identificarse dejar un comentario