Odoo делит два поля с плавающей запятой - AttributeError - PullRequest
1 голос
/ 11 июля 2020

Может ли кто-нибудь помочь со следующим: Я пытаюсь разделить два поля с плавающей запятой, но получаю сообщение об ошибке

AttributeError: 'stock.picking' object has no attribute 'calculate_reserved_per'

вот мой код:

from odoo import models, fields, api

class PickingTotalQty(models.Model):
    _inherit = 'stock.picking'

    sum_dmd_qty = fields.Float(compute='calculate_dmd_qty', string='Total Demand Quantity')
    sum_reserved_qty = fields.Float(compute='calculate_reserved_qty', string='Total Reserved Quantity')
    reserved_qty_per = fields.Float(compute='calculate_reserved_per', string='Reserved Quantity (%)')

    def calculate_dmd_qty(self):
        for rs in self:
            dmdqty = 0
            for line in rs.move_lines:
                dmdqty += line.product_uom_qty
        rs.sum_dmd_qty = dmdqty

    def calculate_reserved_qty(self):
        for rs in self:
            reservedqty = 0
            for line in rs.move_lines:
                reservedqty += line.reserved_availability
        rs.sum_reserved_qty = reservedqty

    @api.depends('sum_reserved_qty', 'sum_dmd_qty')
    def calculate_reserved_per(self):
        for rec in self:
            rec.reserved_qty_per = rec.sum_reserved_qty / rec.sum_dmd_qty

1 Ответ

0 голосов
/ 11 июля 2020

Если вы уже перезапустили сервер, проверьте отступ метода calculate_reserved_per и убедитесь, что rec.sum_dmd_qty отличается от Zero перед разделением.

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

Чтобы исправить это, переместите последнюю строку каждого метода внутрь for-l oop.

sum_dmd_qty и sum_reserved_qty - это вычисляемые поля, которые зависят от move_lines.product_uom_qty и move_lines.reserved_availability соответственно, и их следует использовать, чтобы указать, когда пересчитывать их значения с помощью @api.depends.

Вы можете использовать счет-фактура _compute_amount в качестве ссылки и объединяет три метода в один метод, который вычисляет значения трех полей.

Пример:

@api.depends("move_lines.product_uom_qty", "move_lines.reserved_availability")
def _calculate_quantities(self):
    for picking in self:
        dmd_qty = 0
        reserved_qty = 0
        for move in picking.move_lines:
            dmd_qty += move.product_uom_qty
            reserved_qty += move.reserved_availability

        picking.sum_dmd_qty = dmd_qty
        picking.sum_reserved_qty = reserved_qty

        if picking.sum_dmd_qty:
            picking.reserved_qty_per = picking.sum_reserved_qty / picking.sum_dmd_qty  

Я не использовал @api.one, потому что его нет в Odoo13

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...