我想隐藏"创建"和"编辑" 表单视图中的状态和组角色按钮。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">
但是我以这种方式为所有州的所有用户隐藏它们。还有另一种方法可以隐藏创建和编辑按钮取决于state
和group 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="{"approved":"green"}"/>
</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>
答案 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,它可能有所不同,但是我没有检查用户组,它可能存在或可能不存在...