zoukankan      html  css  js  c++  java
  • odoo11 审批流中行总额与申请单总额的计算问题

    一. 问题的描述

    在做审批流的过程中,涉及到这样一个问题,用户申请的行总额需要根据当前行的数量和单价相乘计算得出,这本来是一个很简单的功能需求,利用odoo的计算方法就可以轻松实现,但是在在view页面给amount设置了readonly=“1”属性之后,再次修改申请单单价或数量的时候,amount字段的值却无法跟新到数据库中。

    在view层的代码如下:

            <record id="workflow_ebilling_request_form_view" model="ir.ui.view">
                <field name="name">Workflow e-Billing</field>
                <field name="type">form</field>
                <field name="model">ebilling.request.header</field>
                <field name="arch" type="xml">
                    <form string="Workflow单">
                        <header>
                            <button name="workflow_submit" states="draft" string="Submit" type="workflow" class="oe_highlight"/>
                            <button name="workflow_approving" states="submit" string="Approving" type="workflow" class="oe_highlight"/>
                            <button name="workflow_completed" states="approving" string="completed" type="workflow" class="oe_highlight"/>
                            <field name="state" widget="statusbar" statusbar_visible="submit,approving,completed"/>
                        </header>
                        <sheet>
                            <group>
                                <group>
                                    <field name="project"/>
                                    <field name="bp_code"/>
                                </group>
                                <group>
                                    <field name="po_no"/>
                                    <field name="company_billing"/>
                                </group>
                            </group>
                            <group>
                                <group>
                                    <field name="company"/>
                                    <field name="nature_of_billing"/>
                                </group>
                                <group>
                                    <field name="currency"/>
                                    <field name="remark"/>
                                </group>
                            </group>
                            <field name='detail_ids'>
                                <tree string='List' editable='bottom'>
                                    <field name='part_number'/>
                                    <field name='qty' />
                                    <field name='unit_price'/>
                                    <field name='amount' readonly="1"/>
                                </tree>
                            </field>
                            <group class='oe_subtotal_footer oe_right'>
                                <field name='total_amount' widget='monetary' />
                            </group>
                        </sheet>
                    </form>
                </field>
            </record>

    二 解决问题的方案:

    经过查询相关资料,了解到如果前端的field字段一旦设置了readonly=”1“字段,在后台create/write的时候,其参数values里面就不会包含此字段,对应的解决方案也就是重写这两个方法。

            @api.model
            def write(self, values):
                    if "unit_price" in values and "qty" not in values:
                        values['amount'] = self.qty * values['unit_price']
                    if "unit_price" not in values and "qty" in values:
                        values['amount'] = self.unit_price * values['qty']
                    if "unit_price" in values and "qty" in values:
                        values['amount'] = values['unit_price'] * values['qty']
                    return super(BillingRequestDetail, self).write(values)
    
            @api.model
            def create(self, values):
                    if "unit_price" in values and "qty" in values:
                        values['amount'] = values['unit_price'] * values['qty']
                    return super(BillingRequestDetail, self).create(values)

    三 对比sale模块订单行的总价处理情况

    在解决以上问题的时候,发现销售订单模块也完全涉及到类似的情况,那么官方模块是如何处理这种情况的呢?

    发现其并没有在view端设置readonly=“1”这个属性,而是设置了groups属性,也就是说只有有权限的才可以修改这个行总价,和我们的完全只读属性还是不太一样的。

  • 相关阅读:
    [INS-32033] Central Inventory location is not writable
    ORACLE中的PL/SQL
    Oracle几大后台进程
    2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)
    NOIP复习资料——往年习题精选
    迪杰斯特拉dijkstar(算法个人观点)
    【USACO题库】1.4.2 The Clocks时钟.TJ
    【USACO题库】2.1.2 Ordered Fractions顺序的分数.tj
    纪中2016.10.6比赛不明总结
    纪中2016.8.17比赛不明总结
  • 原文地址:https://www.cnblogs.com/crazyguo/p/9222869.html
Copyright © 2011-2022 走看看