Я пытаюсь выполнить переопределение с 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
но ошибка в том, что теперь выполняется только новый код, который я добавил, и код исходного метода не выполняется, я не знаю, как отредактировать метод, а не полностью его отменить.
Ваш подход не так уж плох ;-)
Метод 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