Hello, I asked on this forum how to put 2 actions for 1 menuitem but someone answers that I don't need to put 2 actions for 1 menuitem but I've to return the tree view in my python function which is called in my action server in my XML file.
This is my python code :
class miadi_poidsConditionnement(models.Model):
_name = 'miadi.poidsconditionnement'
# _order = 'conditionnement_id asc'
conditionnement_id = fields.Many2one('miadi.packaging', 'Packaging', default='', required=True)
produit_id = fields.Many2one('product.product', 'Product', default='', required=True)
nb_articles = fields.Integer(string='Number of products', default=0)
poids = fields.Float(string='Packaging Weight', default=0)
_sql_constraints = [
('uniq_id', 'unique(produit_id, conditionnement_id)', 'A product already exists with this packaging !'),
]
@api.multi
@api.model
def chargement_ratio(self):
productRatio = self.env['miadi.poidsconditionnement']
conditionnements = self._cr.execute("SELECT id FROM miadi_packaging")
query_cond = self.env.cr.dictfetchall()
produits = self._cr.execute("SELECT id FROM product_product")
query_prod = self.env.cr.dictfetchall()
for conditionnements in query_cond:
nom_conditionnement = conditionnements['id']
for produits in query_prod:
product = produits['id']
if_exist = self._cr.execute("SELECT * FROM miadi_poidsConditionnement WHERE conditionnement_id=%s AND produit_id=%s", (nom_conditionnement, product))
if not if_exist:
Ratio = productRatio.create({'conditionnement_id': nom_conditionnement, 'produit_id': product})
return {'type': 'ir.actions.act_window', 'view_type': 'tree', 'view_mode': 'tree', 'res_model': 'miadi.poidsconditionnement', 'res_id': miadi.poidsconditionnement.id, 'view_id': self.env.ref('action_miadi_poidsConditionnement').id, 'target': 'current',}
And this is my XML :
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="miadi_poidsConditionnement_form" model="ir.ui.view">
<field name="name">miadi.poidsconditionnement.form</field>
<field name="model">miadi.poidsconditionnement</field>
<field name="arch" type="xml">
<form string="Weight/number ratio">
<group col="4">
<field name="produit_id" widget="selection" eval="ref('product.product.attribute_value_ids')" />
<!-- <field name="produit_id" /> -->
<field name="conditionnement_id" widget="selection" eval="ref('miadi.packaging.conditionnement_id')" />
<!-- <field name="conditionnement_id" /> -->
<field name="nb_articles" />
<field name="poids" />
</group>
</form>
</field>
</record>
<record id="miadi_poidsConditionnement_tree" model="ir.ui.view">
<field name="name">miadi.poidsconditionnement.tree</field>
<field name="model">miadi.poidsconditionnement</field>
<field name="arch" type="xml">
<tree string="Weight/number ratio">
<field name="produit_id" ref="product.product.attribute_value_ids" />
<field name="conditionnement_id" ref="miadi.packaging.conditionnement_id" />
<field name="nb_articles" />
<field name="poids" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="miadi_poidsConditionnement_search">
<field name="name">miadi.poidsconditionnement.search</field>
<field name="model">miadi.poidsconditionnement</field>
<field name="arch" type="xml">
<search string="Weight/number ratio">
<field name="produit_id" />
<group expand="0" string="Group by">
<filter string="Product" domain="[]" context="{'group_by':'produit_id'}"/>
<filter string="Packaging" domain="[]" context="{'group_by':'conditionnement_id'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_miadi_poidsConditionnement">
<field name="name">Weight/number ratio</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">miadi.poidsconditionnement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="miadi_poidsConditionnement_tree"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Click here to create a weight/number ratio.</p>
</field>
</record>
<record id="action_chargement_ratio" model="ir.actions.server">
<field name="name">Chargement Ratio</field>
<field name="res_model">action_miadi_poidsConditionnement</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="model_miadi_poidsconditionnement"/>
<field name="code">chargementRatio = env['miadi.poidsconditionnement'].browse(context.get('active_id'));chargementRatio.chargement_ratio()</field>
</record>
<menuitem name="Weight/number ratio" id="menu_miadi_poidsConditionnement" parent="menu_miadi_packaging" sequence="15" groups="sales_team.group_sale_manager" action="action_chargement_ratio" />
</data>
</openerp>
And it gives me an issue :
ValueError: <type 'exceptions.NameError'>: "global name 'miadi' is not defined" while evaluating u"chargementRatio = env['miadi.poidsconditionnement'].browse(context.get('active_id'));chargementRatio.chargement_ratio()"
I want to return the tree view (action_miadi_packaging) and I want my python function is called when I click on the menuitem
How can I resolve this issue ?
And if I write "'res_id': productRatio.id" (where productRatio = self.env['miadi.poidsconditionnement']), instead of "'res_id': miadi.poidsconditionnement.id" the error is :
ValueError: <type 'exceptions.ValueError'>: "need more than 1 value to unpack" while evaluating u"chargementRatio = env['miadi.poidsconditionnement'].browse(context.get('active_id'));chargementRatio.chargement_ratio()"
Thanks for answers
PS : I'm on Odoo 10