Odoo hide" Create"和"编辑"按钮取决于状态和角色

时间:2017-03-31 12:40:18

标签: python-2.7 openerp odoo-9 formview

我想隐藏"创建"和"编辑" 表单视图中的状态和组角色按钮For example hide Create and Edit buttons when the state is not draft and user belongs to request user group.

据我了解隐藏按钮,我可以编辑视图。在组角色规则中,我可以禁用创建或编辑。

我尝试write a rule for request user group,然后用can't use按钮but see

从视图中我发现只能隐藏默认的创建和编辑按钮:

<form string="Request" create="false" edit="false">

但是我以这种方式为所有州的所有用户隐藏它们。还有另一种方法可以隐藏创建和编辑按钮取决于stategroup role吗?

我尝试在状态为#34;已批准&#34;的情况下扩展base.xml模板。或者&#34;完成&#34;组角色为purchase_request_user,视图ID为view_purchase_request_form&#34;创建&#34;和&#34;编辑&#34;按钮:

<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space='preserve'>
    <t t-extend="FormView.buttons">
        <t t-if="widget.fields_view.state !== 'done' or widget.fields_view.state !== 'approved'">
        <div class="o_form_buttons_view">
            <button t-if="widget.is_action_enabled('edit')"
                    type="button"
                    class="oe_form_button_edit btn btn-default btn-sm" accesskey="E">
                Edit
            </button>
            <button t-if="widget.is_action_enabled('create')"
                    type="button" class="oe_form_button_create btn btn-default btn-sm"
                    accesskey="C">
                Create
            </button>
        </div>
        </t>
    </t>
</templates>

添加&#39; base&#39;依赖。

UPDATED base.xml 现在我可以更改&#34;创建&#34;按钮名称取决于我的视图名称,但不取决于我的模块状态。

<templates>
<t t-extend="FormView.buttons">
    <t t-jquery="button.oe_form_button_create" t-operation="replace">
        <t t-if="widget.fields_view.name == 'purchase.request.form'">
            <button t-if="widget.is_action_enabled('create')"
                    type="button" class="oe_form_button_create btn btn-default btn-sm"
                    accesskey="C">
                New button name
            </button>
        </t>
    </t>
 </t>
</templates>

我的表单视图xml peace:

<openerp>
    <data>
        <record model="ir.ui.view" id="view_purchase_request_form">
            <field name="name">purchase.request.form</field>
            <field name="model">purchase.request</field>
            <field name="arch" type="xml">
                <form string="Purchase Request" create="false" edit="false">
                <header>
                    <button name="%(action_sale_order_reset)d" attrs="{'invisible': [('state','not in', ('to_approve_first'))]}" string="Reset" type="action" groups="purchase_request.group_purchase_request_manager"/>
                    <button name="button_to_approve_first" states="draft" string="Request approval" type="object" class="oe_highlight"/>
                    <button name="button_approved" states="to_approve_first" string="Approve" type="object" class="oe_highlight" groups="purchase_request.group_purchase_request_manager"/>
                    <button name="button_approvedd" states="approved" string="Return Request" type="object" class="oe_highlight" groups="purchase_request.group_purchase_request_manager"/>
                    <button name="button_create_order" states="approvedd" string="Create Order" type="object" class="oe_highlight" groups="purchase_request.group_purchase_request_user"/>
                    <button name="button_to_approve_second" states="create_order" string="Approve" type="object" class="oe_highlight" groups="purchase_request.group_purchase_request_manager"/>
                    <button name="button_approved2" states="to_approve_second" string="Done" type="object" class="oe_highlight" groups="purchase_request.group_purchase_request_manager"/>
                    <button name="button_rejected" states="draft,approvedd" string="Reject" type="object" groups="purchase_request.group_purchase_request_user"/>
                    <field name="state" widget="statusbar" statusbar_visible="draft,to_approve_first,approved,rejected" statusbar_colors="{&quot;approved&quot;:&quot;green&quot;}"/>
                </header>
                <sheet>
                    <group>
                        <group>
                            <field name="date_start" readonly="1"/>
                            <field name="participate_process"/>
                        </group>
                        <group>
                            <field name="requested_by" readonly="1"/>
                            <field name="assigned_to" attrs="{'readonly': [('state','not in', ('draft'))]}" />
                        </group>
                  <notebook>
                        <page string="Order" attrs="{'invisible': [('state','in', ('draft', 'to_approve_first', 'approved', 'approvedd'))]}">
                            <field name="supply_ids" attrs="{'readonly': [('state','not in', ('to_approve_second'))]}"/>
                        </page>
                   </notebook>
                </sheet>
                </form>
            </field>
        </record>

3 个答案:

答案 0 :(得分:0)

您必须编写一个继承'FormView.buttons'的模板,检查上下文字段,如组和状态,并根据所需字段设置条件。

这样的事情:

<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space='preserve'>
    <t t-extend="FormView.buttons">
        <t t-if="widget.fields_view.state == <wanted_state>">
            <your operations>
        </t>
    </t>
</templates>

答案 1 :(得分:0)

使用此功能可以检查所有FormView小部件字段,您可以在 /odoo/addons/web/static/src/js/views/form_view.js 中找到它。
我还在其中找到了 datarecord ,其中应包含 state 信息和值。
然后,如果您想对编辑模式中的按钮执行相同操作,请将&#39; .o_form_buttons_view&#39; 替换为&#39; .o_form_buttons_edit& #39;

告诉我你是否有问题。再次抱歉延迟,我有点忙。

<t t-extend="FormView.buttons">
    <t t-jquery=".o_form_buttons_view" t-operation="before">
        <t t-log="widget"/>
    </t>
</t>

答案 2 :(得分:0)

谢谢! @Michele Zaccheddu使用您的答案,我可以使用许多类型的小部件

<t t-extend="FormView.buttons">
    <t t-jquery=".o_form_buttons_view" t-operation="before">
        <t t-log="widget"/>
    </t>
</t>

只需将代码作为测试并更新应用程序-进入表单视图,使用浏览器开发人员工具进行检查,在控制台中,您会从“类”中获得列表,我正在使用odoo 11并可以定位

<t t-if="widget.initialState.data.state === 'draft'">

对于其他版本,请您自己检查t-log,它可能有所不同,但是我没有检查用户组,它可能存在或可能不存在...