This question has been flagged
2 Replies
2138 Views

Hello,


I have my cutom class A :

class SubstitutionPage(models.Model):
_name = 'product.substitution'

product = fields.Many2one('product.product', string='Nom du produit')
barcode = fields.Char(string='Code barre')

@api.onchange('product')
def onchange_product(self):
for i in self.env['product.template'].search([('id', '=', self.product.id)]):
self.barcode = i.barcode

And my class B :

class ProductButton(models.Model):
_inherit = 'product.template'

@api.multi
def substitution(self):
subst_action = {
'type': "ir.actions.act_window",
'res_model': 'product.substitution',
'view_type': "form",
'view_mode': "tree",
'target': 'view_substitution_tree',
}
return subst_action

Then the xml :

<record id="c2m_product_template" model="ir.ui.view">
<field name="name">c2m.product.template</field>
<field name="model">product.template</field>
<field name = "view_mode">tree,form</field>
<field name="inherit_id" ref="product.product_template_only_form_view"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button name="substitution" class="oe_inline oe_stat_button"
type="object" style="background:rgba(46, 210, 162,0.2);"
string="Substitution" icon="fa-sitemap">
<field string="Counter" name="counter" widget="statinfo" />
</button>
</xpath>
<field name="name" position="after">
<div>
<field name="message_subst"/>
<label for="message_subst"/>
</div>
</field>
</field>
</record>

<!--Vue substitution-->
<!-- Tree -->
<record id="view_substitution_tree" model="ir.ui.view">
<field name="name">app.substitution.product.substitution.tree</field>
<field name="model">product.substitution</field>
<field name="arch" type="xml">
<tree string="Substitution" editable="bottom">
<field name="product"/>
<field name="barcode"/>
</tree>
</field>
</record>


So when I'm on the product page I've a button on the right corner (where you can see the sales, purchase, stocks ...) that send to my new custom page (Substitution).

On this new page I've a tree view where I can put values into


Problem is it's not linked to a product. I mean if I chose product 1 and then I go to the substitution page of this product and enter values, I would see them on product 2, 3, ...

I can even see on the top of the page that the breadcrulb is not set correctly.

Product/name of my product / nothing --> it should ben Product /name of my product/ substitution


Thx for you help.


Avatar
Discard
Best Answer

You are not passing the domain/condition in action to show the substitution of the current product.

Try the following code:

@api.multi
def substitution(self):
return {
'type': "ir.actions.act_window",
'res_model': 'product.substitution',
'view_type': "form",
'view_mode': "tree",
'domain': [('product', 'in', self.product_variant_ids.ids)]
}


Avatar
Discard
Author Best Answer

I resolve it.

So firstly i needed to pass a context in my object :

'context': {'parent': self.product_variant_ids.id},


Thanks to this i know who is my parent product.

After that I use the domain based on the parent.

Thanks

Avatar
Discard