Если вы уже перезапустили сервер, проверьте отступ метода 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