Как мне создать вычисляемое поле на счете в Odoo 11, используя Python? - PullRequest
2 голосов
/ 14 марта 2019

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

Я использую Odoo studio в версии 12.0 и создал поле x_studio_field_dakHb с пометкой «Сумма комиссии», которое отображается в модели account.invoice.line.

Я установил флажки «Только чтение» и «Сохранено».В поле «Зависимости» у меня есть «discount, price_subtotal».

В разделе «Дополнительные свойства» у меня есть:

def compute_commission_amount(self):
  for record in self:
    if (discount >= 55.0):
      x_studio_field_dakHb = (price_subtotal * .05)
    elif (discount >= 45.0):
      x_studio_field_dakHb = (price_subtotal * .10)
    elif (discount >= 30.0):
      x_studio_field_dakHb = (price_subtotal * .15)
    elif (discount >= 25.0):
      x_studio_field_dakHb = (price_subtotal * .20)
    elif (discount >= 0.0):
      x_studio_field_dakHb = (price_subtotal * .25)

Я не получаю никаких ошибок, но поле нене рассчитывать, как я ожидал.

Пример того, что я ожидаю, будет следующим:

Таблица счетов

Есть ли что-то, чего мне не хватает в моем коде, чтобы получить этоправильно рассчитать?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Вы должны использовать record, чтобы присвоить свои значения. В поле вы найдете следующую подсказку о методах вычисления:

Поле Compute - это код Python для вычисления значения поля. на множестве записей. Значение поля должно быть назначено каждому запись со словарным присваиванием.

for record in self:
    record['size'] = len(record.name)

Итак, ваш код должен выглядеть так:

def compute_commission_amount(self):
    for record in self:
        if (record.discount >= 55.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .05)
        elif (record.discount >= 45.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .10)
        elif (record.discount >= 30.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .15)
        elif (record.discount >= 25.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .20)
        elif (record.discount >= 0.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .25)

Редактировать: и была еще одна ошибка для price_subtotal, которую следует получить из record. Edit2: и то же самое с discount

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

На самом деле вам нужно использовать @ api.depends ('fields1', 'fields2', ..) Каждое fields1 или fields2 изменилось, ваше значение комиссии будет изменено. пример кода можно найти в том, как система изменяет промежуточный итог в соответствии с ценой, количеством, скидкой и налогом продукта.

...