Jon
Jon

Reputation: 62

Odoo 14 overriding method

I'm trying to create an Odoo module which override Sales order confirm button. I followed the information I found, and I created the following code, but it doesn't work.

from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__) 

class saleoverride(models.Model):
    _name = 'saleoverride.saleoverride'
    _description = 'saleoverride'
    _inherit = 'sale.order'

    name = fields.Char()
    # value = fields.Integer()
    # value2 = fields.Float(compute="_value_pc", store=True)
    description = fields.Text()

    transaction_ids = fields.Many2many('payment.transaction', 'saleoverride_transaction_rel', 'saleoverride_id', 'transaction_id',
                                   string='Transactions', copy=False, readonly=True)
    tag_ids = fields.Many2many('crm.tag', 'saleoverride_tag_rel', 'saleoverride_id', 'tag_id', string='Tags')

    @api.model
    def action_confirm(self):
        res = super(SaleOrder, self).action_confirm()
        _logger.info("saleoverride_action_confirm")
        _logger.info(self)
        return res

I tried to search the message in the log file, but can't find anything. Can someone help me?

Thanks!

Upvotes: 0

Views: 1402

Answers (2)

Sakthi Priya
Sakthi Priya

Reputation: 337

When you want to override the code in addons, all you can do is just inheriting it. So, you can't define name while overriding the existing code. Remove: _name ='saleoverride.saleoverride'

Upvotes: 0

Tiki
Tiki

Reputation: 780

The problem is that you are not extending the sale.order model, but creating a new one (saleoverride.saleoverride) based on sale.order.

Check odoo docs: Inheritance and extension

from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__) 

class saleoverride(models.Model):
    _description = 'saleoverride'
    _inherit = 'sale.order'

    name = fields.Char()
    # value = fields.Integer()
    # value2 = fields.Float(compute="_value_pc", store=True)
    description = fields.Text()

    transaction_ids = fields.Many2many('payment.transaction', 'saleoverride_transaction_rel', 'saleoverride_id', 'transaction_id',
                                   string='Transactions', copy=False, readonly=True)
    tag_ids = fields.Many2many('crm.tag', 'saleoverride_tag_rel', 'saleoverride_id', 'tag_id', string='Tags')

    def action_confirm(self):
        res = super(SaleOrder, self).action_confirm()
        _logger.info("saleoverride_action_confirm")
        _logger.info(self)
        return res

Removing _name = 'saleoverride.saleoverride' from your class adds new features to sale.order.

Also remove the decorator since the original function doesn't have one.

Upvotes: 1

Related Questions