Переопределить метод в odoo - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь добавить дополнительный код для метода в (odoo11 / hr_payroll). то, что я сделал, скопировал и вставил весь код и добавил в него дополнительный код, но когда метод выполняется, он выполняется два раза, что доказывает, что я сделал, неправильно.

Я ищу решение проблемы масла, а не копирование и вставку всего кода.

Итак, вот что я хочу добавить в базовый метод:

Базовый метод:

   if debit_account_id:
                  debit_line = (0, 0, {
                      'name': line.name,
                      'partner_id': line._get_partner_id(credit_account=False),
                      'account_id': debit_account_id,
                      'journal_id': slip.journal_id.id,
                      'date': date,
                      'debit': amount > 0.0 and amount or 0.0,
                      'credit': amount < 0.0 and -amount or 0.0,
                      'analytic_account_id': line.salary_rule_id.analytic_account_id.id,
                      'tax_line_id': line.salary_rule_id.account_tax_id.id,
                  })
                  line_ids.append(debit_line)
                  debit_sum += debit_line[2]['debit'] - debit_line[2]['credit']

Унаследованный метод:

  @api.multi
  def action_payslip_done(self):
      res = super(PayslipBills, self).action_payslip_done()

      if debit_account_id:
                  debit_line = (0, 0, {
                      'name': line.name,
                      'partner_id': line._get_partner_id(credit_account=False),
                      'account_id': debit_account_id,
                      'journal_id': slip.journal_id.id,
                      'x_account_no': x_debit_account, # extra
                      'x_jtag': [(6, 0, x_tags)], # extra
                      'x_jtag_option': [(6, 0, x_tags_option)], # extra
                      'date': date,
                      'debit': amount > 0.0 and amount or 0.0,
                      'credit': amount < 0.0 and -amount or 0.0,
                      'analytic_account_id': line.salary_rule_id.analytic_account_id.id,
                      'tax_line_id': line.salary_rule_id.account_tax_id.id,
                  })
                  line_ids.append(debit_line)
                  debit_sum += debit_line[2]['debit'] - debit_line[2]['credit']

      return res

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Во избежание проблем с другими модулями, которые могут наследовать и переопределять тот же модуль и метод, я оставляю вызов исходному методу с ужином (...) и сразу после этого обновляю эти записи с дополнительными полями и значениями. что вам нужно добавить, например, если значения x_wh независимо всегда одинаковы для этого набора записей, и независимо от того, являются ли они кредитными или дебетовыми линиями, вы можете попробовать что-то вроде:

class PayslipBills(models.Model):
      _inherit = 'hr.payslip'

      (... define new fields and new methods...)

      @api.multi
      def action_payslip_done(self):
          res = super(PayslipBills, self).action_payslip_done()
          for record in res:
              for lines in record.line_ids
                  # add values to the extra fields...
                  lines.write({'x_account_no': x_debit_account,
                     'x_jtag': [(6, 0, x_tags)],
                     'x_jtag_option': [(6, 0, x_tags_option)],
                      })
          return res
0 голосов
/ 25 марта 2019

Есть интересная информация, которая отсутствует в вашем вопросе.Во-первых, этот оригинальный метод (модуль hr_payroll) уже переопределен hr_payroll_account.И во-вторых, это первое переопределение с помощью hr_payroll_account действительно messed_up, поэтому вы не можете переопределить его, пытаясь изменить / расширить.

Таким образом, единственное решение - полностью переписать / переопределить оригинальный метод БЕЗ вызова super.Остерегайтесь факта бизнес-логики в двух уже существующих методах!Вы должны скопировать обе логики в ваши новые методы.

Мне не нравятся эти решения, но это единственно возможное (насколько я знаю).

...