Odoo - 更改预测小部件的颜色

Odoo - Change color on Forecast Widget

我正在尝试更改销售订单视图中预测小部件的颜色。我认为它是在这个位置定义的 odoo/addons/sale_stock/static/src/xml/sale_stock.xml 这部分代码:

<div t-name="sale_stock.qtyAtDate">
    <div t-att-class="!widget.data.display_qty_widget ? 'invisible' : ''">
        <a tabindex="0" t-attf-class="fa fa-area-chart {{ widget.data.forecasted_issue ? 'text-danger' : 'text-primary' }}"/>
    </div>
</div>

我创建了自定义模块并尝试用我的版本替换上面的代码(当可用数量 = 0 时它应该是红色的,当可用数量 < 5 时它应该是黄色的,当可用数量 > 5 时它应该是绿色的)但是没有成功

<?xml version="1.0" encoding="utf-8"?>
<templates id="template" xml:space="preserve">
    <xpath expr="//div[@t-name='sale_stock.qtyAtDate']" position="replace">
        <div t-att-class="!widget.data.display_qty_widget ? 'invisible' : ''">
            <div t-elif="widget.data.forecasted_issue == 0">
                <a tabindex="0" t-attf-class="fa fa-area-chart text-danger"/>
            </div>
            <div t-if="widget.data.forecasted_issue < 5">
                <a tabindex="0" t-attf-class="fa fa-area-chart text-warning"/>
            </div>
            <div t-elif="widget.data.forecasted_issue > 5">
                <a tabindex="0" t-attf-class="fa fa-area-chart text-primary"/>
            </div>
        </div>
    </xpath>
</templates>

谁能指导我如何更改此图标的颜色。谢谢

Odoo 将引发以下错误(终端):

XMLSyntaxError: Unescaped '<' not allowed in attributes values

您需要转义 <>

如果您修复了上述错误,您将在浏览器控制台中看到以下错误消息:

Error: QWeb2: Error: t-elif and t-else directives must be preceded by a t-if or t-elif directive

您只需更改 div 的顺序(您可能需要将 widget.data.product_uom_qty != 0 添加到 t-if)。

查看 Odoo 文档,了解如何 alter qweb templates

扩展继承(in-place改造):

<t t-inherit="base.template" t-inherit-mode="extension">
    <xpath expr="//tr[1]" position="after">
        <tr><td>new cell</td></tr>
    </xpath>
</t>

示例:

<templates>
    <t t-inherit="sale_stock.qtyAtDate" t-inherit-mode="extension">
        <xpath expr="//div" position="replace">
            <div t-att-class="!widget.data.display_qty_widget ? 'invisible' : ''">
                <div t-if="widget.data.product_uom_qty != 0 and widget.data.product_uom_qty &lt; 5">
                    <a tabindex="0" t-attf-class="fa fa-area-chart text-warning"/>
                </div>
                <div t-elif="widget.data.product_uom_qty == 0">
                    <a tabindex="0" t-attf-class="fa fa-area-chart text-danger"/>
                </div>
                <div t-elif="widget.data.product_uom_qty &gt; 5">
                    <a tabindex="0" t-attf-class="fa fa-area-chart text-primary"/>
                </div>
            </div>
        </xpath>
    </t>
</templates>

对于 v14 - 这是有效的解决方案 - 只需将其放入您的 XML 文件中。对于 v15,使用 @Kenly 提供的解决方案。

<?xml version="1.0" encoding="utf-8"?>
<templates id="template" xml:space="preserve">
    <t t-inherit="sale_stock.qtyAtDate" t-operation="replace">
        <xpath expr="//div" position="replace">
            <div t-att-class="!widget.data.display_qty_widget ? 'invisible' : ''">
            <a tabindex="0" t-attf-class="fa fa-area-chart {{ widget.data.forecasted_issue ? 'text-danger' : widget.data.qty_available_today &gt; 5 ? 'text-primary' : 'text-warning'}}"/>
            </div>    
        </xpath>
    </t>
</templates>

谢谢@Kenly 的帮助,你让我明白了一些事情。