Hello,
I'm stuck to populate a wizard and I'm completely lost on the way to do that.
Until know, I've created a custom button on the stock module, view_picking_form record with an inherited model (see views.xml). I also know how to create a custom wizard (wizard.py wizard.xml).
But what I do not know is how to populate it with the list of products fields (product_id, product_qty, qty_done) that are linked to the active view. I'm working with the new API on Odoo 10 and couln't find the method to do that. Odoo always tells me it doesn't know the fields I want to pass and they don't display on the wizard.
Can anyone help me on that please ?
views.xml
<?xml version="1.0" encoding="utf-8"?> <odoo> <data> <record id="view_picking_form_inherit" model="ir.ui.view"> <field name="name">stock.picking.form.inherit</field> <field name="model">stock.picking</field> <field name="inherit_id" ref="stock.view_picking_form"/> <field name="arch" type="xml"> <xpath expr="//form/sheet/h1[@class='hidden-xs']" position="inside"> <div class="oe_right oe_button_box"> <button string="Open Wizard" name="%(action_wizard)d" type="action" class="oe_button oe_form_button oe_highlight"
context="{'default_active_id': active_id}"/> </div> </xpath> </field> </record> </data> </odoo>
wizard.py
# -*- coding: utf-8 -*- from odoo import _, api, fields, models class MyClass(models.TransientModel): _name = 'stock.picking.wizard' _inherit = ['stock.picking', 'stock.pack.operation']
@api.multi
def _default_products(self):
self.ensure_one()
active_id = self.env.context.get('active_ids', []) or []
record = self.env['stock.picking'].browse(active_id)
return record.product_id product_id = fields.Many2one('product.product', string='Product', default=_default_products)
wizard.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_wizard" model="ir.ui.view">
<field name="name">stock_picking_wizard</field>
<field name="model">stock.picking.wizard</field>
<field name="arch" type="xml">
<form string="Stock Products">
<tree string="Product list">
<field name="product_id"/>
</tree>
</form>
</field>
</record>
<record id="action_wizard" model="ir.actions.act_window">
<field name="name">Wizard</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stock.picking.wizard</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_wizard"/>
<field name="target">new</field>
</record>
</data>
</odoo>
Hi Bérengère Bouillon,
I didn't understand what exactly you are looking for, as far as i undestood do you want to add all the product into the new field you have created in the wizard from the active stock picking lines ?
Hi Niyas Raphy,
Yes it's that. When I'm on an available transfert, I need to retrieve all the products of the active record in my wizard.
Hi , you can make it a many to many field, ie the product field in the wizard. Then you can write the products from the stock picking lines into it.
link : https://stackoverflow.com/questions/31853402/filling-many2many-field-odoo-8
Thanks Niyas, but I don't understand how a many2many relation could be useful in this situation. Maybe I didn't explained well. The goal is to get the active view informations (included the product_id, product_qty,...) and pass them into the wizard to get the same products I had in the previous view (but only these ones). The lead I found to do that was to get the context through the active_id, but I didn't manage to do it for know.