Hello!, I've been developing since a month on Odoo, everything was ok till now, my problem is this I have a "Many2one" field that is automatically genereted if my products posses attributes, and i can use the external link to see this record and it shows me every attribute and possible values of the product, and on that same view, i show the calculated price of the product with each attribute additional price.
The thing is that in my original view, i can't change the price by changing the records inside of the Many2one record, @api.onchange doesnt trigger it. I'm not sure if i explained my self very well.
these are the models(simplified)
class Orders(models.Model):
_name = 'orders'
_description = "Generacion de Ordenes"
products = fields.One2many(
'orders.products',
'order_id',
string='Productos de la Orden',
)
class OrdersProducts(models.Model):
_name = 'orders.products'
_description = "Productos de Ordenes"
order_id = fields.Many2one('orders', 'Orden')
products_attributes = fields.Many2one('orders.products.attributes', domain="[('order_product_id', '=', 0)]" )
#This is the price i would like to change
price_with_extra = fields.Float()
#This is not working.
#Neither @api.onchange('products_attributes.field')
@api.onchange('products_attributes')
def _get_price_extra(self):
for record in self:
record.price_with_extra = record.products_attributes.product_with_extra
class OrdersAttributes(models.Model):
_name = 'orders.products.attributes'
_description = "Facturas de las Ordenes"
order_product_id = fields.Many2one('orders.products', 'Productos de Ordenes')
name = fields.Text('Descripcion')
note = fields.Text('Notas Adicionales')
order_product_lines = fields.One2many('orders.products.attributes.lines', 'order_product_attribute_id', 'Lineas de los Atributos')
product_price = fields.Float()
sub_total_extra = fields.Float('Total Extras / Variantes', compute="_get_sub_total")
product_with_extra = fields.Float('Total Producto', compute="_get_product_and_extra")
xml:
centralista_view.xml
<record id="orders_form_view" model="ir.ui.view">
<field name="name">orders.form.view</field>
<field name="model">orders</field>
<field name="arch" type="xml">
<form string="Orden de Pedido">
<sheet>
<notebook>
<page string="Productos Solicitados" name="orders_products">
<field name="products" widget="one2many" context="{'default_commerce': pricelist_id}"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
centralista_products_view.xml
<record id="orders_product_tree_view" model="ir.ui.view">
<field name="name">orders.products.tree.view</field>
<field name="model">orders.products</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="product_id" widget="many2one" string="Producto" attrs="{'readonly':[('pricelist_id', '=', False)]}"/>
<field name="products_attributes" widget="many2one" string="Descripcion" options="{'no_quick_create': True, 'no_create': True, 'no_click': True}" context="{'product': product_id, 'price': price}"/>
#This is the input i want to change.
<field name="price_with_extra" string="Precio Anormal" readonly="1"/>
</tree>
</field>
</record>
centralista_products_attributes_views.xml
#this is the modal.
<record id="orders_products_attributes_form_view" model="ir.ui.view">
<field name="name">orders.products.attributes.form.view</field>
<field name="model">orders.products.attributes</field>
<field name="arch" type="xml">
<form>
<sheet>
<group col="2">
<field name="product_id" string="Producto" readonly="1"/>
<field name="name" string="Descripcion del Producto" readonly="1"/>
<field name="note"/>
</group>
<field name="name" invisible="1"/>
<field name="order_product_lines" widget="one2many"/>
<group col="2">
<field name="sub_total_extra" string="Total Extras / Variantes" readonly="1" force_save="1"/>
<field name="product_with_extra" string="Total Producto" readonly="1" force_save="1"/>
</group>
</sheet>
</form>
</field>
</record>