Search code examples
moduleoverridingodooodoo-14

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!


Solution

  • 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.