создать наследовать переопределить ODOO

1

Я пытаюсь выполнить переопределение с odoo 10, правда в том, что я хочу добавить функциональность к существующему методу odoo, и я не знаю, как это сделать, я уже добавил то, что у меня было, но поведение не подходит

оригинальный метод проверки нижней части оду:

@api.multi
def action_invoice_open(self):
    # lots of duplicate calls to action_invoice_open, so we remove those already open
    to_open_invoices = self.filtered(lambda inv: inv.state != 'open')
    if to_open_invoices.filtered(lambda inv: inv.state not in ['proforma2', 'draft']):
        raise UserError(_("Invoice must be in draft or Pro-forma state in order to validate it."))
    to_open_invoices.action_date_assign()
    to_open_invoices.action_move_create()
    return to_open_invoices.invoice_validate()

Я хочу добавить этот код к этой функции:

print('enter')
        Replique = self.env['dues.replique'] 
            new = Replique.create({
                    're_customer': self.partner_id.id,
                    'amount_invoice':self.amount_total,
                    'amount_total':self.t_invoice_amount,
                    'n_invoice' : self.number,
                })

и я сделал это вот так:

class AddFields(models.Model):
    _inherit = "account.invoice"

    @api.model
    def action_invoice_open(self):
        print('enter')
        Replique = self.env['dues.replique'] 
            new = Replique.create({
                    're_customer': self.partner_id.id,
                    'amount_invoice':self.amount_total,
                    'amount_total':self.t_invoice_amount,
                    'n_invoice' : self.number,
                })
        campus_write = super(AddFields,self).action_invoice_open()
        return campus_write

но ошибка в том, что теперь выполняется только новый код, который я добавил, и код исходного метода не выполняется, я не знаю, как отредактировать метод, а не полностью его отменить.

  • 0
    используйте super (ClassName, self) .function_name (). Если вы хотите добавить свой код после основного кода, поместите «супер» вверху
Теги:
odoo
odoo-10

1 ответ

0
Лучший ответ

Ваш подход не так уж плох ;-)

Метод origin использует api.multi качестве декоратора, не изменяйте его с вашим расширением. api.model сделает его не методом экземпляра/набора записей, поэтому супер-вызов будет выполнен с пустым набором записей, что не приведет к чему-либо подтвержденному.

Плюс: расширение будет работать только в том случае, если будет проверен один счет-фактура. Но что происходит с несколькими счетами? Он поднимет "ожидаемую синглтонную ошибку", потому что self не будет Singleton.

Так что просто измените его на цикл:

@api.multi  # don't change it to another decorator
def action_invoice_open(self):
    Replique = self.env['dues.replique']
    for invoice in self:
        Replique.create({
            're_customer': invoice.partner_id.id,
            'amount_invoice':invoice.amount_total,
            'amount_total':invoice.t_invoice_amount,
            'n_invoice' : invoice.number,
        })
    result = super(AddFields, self).action_invoice_open()
    return result
  • 0
    Большое спасибо, мой друг, это решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню