Odoo - поле с плавающей запятой не отображает значение в дереве - PullRequest
0 голосов
/ 11 июля 2020

Я добавил настраиваемое поле с плавающей запятой в форму, и я использовал это поле для отображения в древовидном представлении

, но на самом деле внутри формы поле вычисляется правильное значение и работает правильно, но в столбце древовидного представления оно отображается Значение 0.00 для всех записей .. почему?

вот мой код модели:

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 (%)')

    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:
            if rec.sum_dmd_qty > 0:
                rec.reserved_qty_per = rec.sum_reserved_qty / rec.sum_dmd_qty

а вот XML код просмотра:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="inherit_stock_picking_form_view" model="ir.ui.view">
            <field name="name">Stock Picking</field>
            <field name="model">stock.picking</field>
            <field name="inherit_id" ref="stock.view_picking_form"/>
            <field name="arch" type="xml">
                <xpath expr="/form/sheet/notebook" position="after">
                    <group>
                        <group>
                            <field name="reserved_qty_per" nolabel="0"/>
                        </group>
                    </group>
                </xpath>
            </field>
        </record>
        <record id="inherit_stock_picking_tree_view2" model="ir.ui.view">
            <field name="name">Stock Picking2</field>
            <field name="model">stock.picking</field>
            <field name="inherit_id" ref="stock.vpicktree"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='state']" position="after">
                      <field name="reserved_qty_per"/>
                </xpath>
            </field>
        </record>
    </data>
</odoo>

1 Ответ

1 голос
/ 11 июля 2020

Значение sum повторно инициализируется для каждой записи и назначается вне цикла for, расчет не будет работать, кроме последней записи в древовидном представлении. методы вызываются с набором записей, в представлении формы он вызывается с набором записей, содержащим только одну запись, и поэтому он работает в представлении формы, а не в древовидном представлении.

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

Отсутствует декоратор зависимостей, попробуйте добавить его.

Пример:

@api.depends("move_lines.product_uom_qty")
def calculate_dmd_qty(self):
    for rs in self:
        dmdqty = 0
        for line in rs.move_ids_without_package:
            dmdqty += line.product_uom_qty
        rs.sum_dmd_qty = dmdqty

@api.depends("move_lines.reserved_availability")
def calculate_reserved_qty(self):
    for rs in self:
        reservedqty = 0
        for line in rs.move_ids_without_package:
            reservedqty += line.reserved_availability
        rs.sum_reserved_qty = reservedqty

Изменить:

<odoo>
    <record id="view_picking_form" model="ir.ui.view">
        <field name="name">view.picking.form</field>
        <field name="model">stock.picking</field>
        <field name="inherit_id" ref="stock.view_picking_form"/>
        <field name="arch" type="xml">
            <xpath expr='//notebook' position="after">
                <group>
                    <field name="reserved_qty_per"/>
                </group>
            </xpath>
        </field>
    </record>

    <record id="vpicktree" model="ir.ui.view">
        <field name="name">view.vpicktree</field>
        <field name="model">stock.picking</field>
        <field name="inherit_id" ref="stock.vpicktree"/>
        <field name="arch" type="xml">
            <field name="state" position="before">
                <field name="reserved_qty_per"/>
            </field>
        </field>
    </record>
</odoo>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...