如何根据 Odoo 10 中的状态使打印菜单上的某些项目不可见或可见?

How can I make invisible or visible some item on the print menu depending on its state in Odoo 10?

我希望报告仅在状态仅处于 'transfer' 时显示,并使其在除 'transfer' 状态之外的所有状态下不可见。我尝试了属性菜单并将其设置为 false,如 menu = "False" 但它也没有出现在 'transfer' 状态。使报告隐藏的任何属性是否取决于其状态?属性不起作用。有吗?

这是我的代码。

<report
        id="handover_info_rep"
        header="False"
        menu="False"
        model="asset.management.handover"
        string="Handover issuance receipt"
        name="etsi_asset.handover_info_temp"
        file="etsi_asset.handover_info_temp"
        report_type="qweb-pdf"
        paperformat="paperformat_handover"
    />

非常感谢。

你不能以简单的方式做到这一点。您可以使用 menu="False"menu="True" 是否要在打印菜单中无条件显示该项目。

第一种方法

您可以在 render_html 方法中添加一些条件,以验证所选记录是否处于正确状态:

@api.multi
def render_html(self, data=None):
    report_obj = self.env['report']
    report = report_obj._get_report_from_name('etsi_asset.handover_info_temp')

    model_obj = self.env[self.env.context["active_model"]].browse(self.env.context["active_ids"]
    # or >> model_obj = self.env['model.name'].browse(self._ids)

    for record in model_obj:
        if record.state == 'some_state':
            raise ValidationError(
                _('This record cannot be printed in that state.')
            )

    docargs = {
        'doc_ids': self._ids,
        'doc_model': report.model,
        'docs': self,
    }
    return report_obj.render('etsi_asset.handover_info_temp', docargs)

第二种方法

您可以使用 attrs 属性创建按钮。您可以在树视图或表单视图上添加此按钮:

<button name="%(your_module.handover_info_rep)d"
    string="Report name"
    type="action"
    attrs="{'invisible':[('state', '=', 'some_state')]}"/>