Как скрыть форму кнопки редактирования на основе поля состояния счета-фактуры Odoo v8?

Я хочу скрыть кнопку редактирования при оплате состояния счета, как на изображении ниже.

введите описание изображения здесь

И я унаследовал invoice_form и добавил соответствующий атрибут.

<record id="invoice_form_inherit" model="ir.ui.view">
    <field name="name">invoice.form.inherit</field>
    <field name="model">account.invoice</field>
    <field name="inherit_id" ref="account.invoice_form"/>
    <field name="arch" type="xml">
        <xpath expt='//form[@string="Invoice"]' possition='attributes'>

            <!-- Frist intent : nothing happened -->
            <attribute name="edit" attrs="{'invisible:[('state','=','paid')]'}"/>

            <!-- Second intent : edit, always hide -->
            <attribute name="edit" attrs="{'invisible:[('state','=','paid')]'}">false</field>

            <!-- Thirds intent : edit, never hide -->
            <attribute name="edit" attrs="{'invisible:[('state','=','paid')]'}">true</field>
    </field>

Пожалуйста, помогите мне, что не так? Спасибо!!

ИЗМЕНИТЬ

Следуя рекомендациям @Sathiyan, я создал файл /security/invoice_security.xml и добавил в свой __opnenerp__.py, внутри я добавил следующие строки:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">
        <record id="rule_no_edit_invoice_paid" model="ir.rule">
            <field name="name">rule.no.edit.invoice.paid</field>
            <field name="model_id" ref="account.model_account_invoice"/>
            <field name="group" eval="[(4,ref('account.group_account_invoice'))]"/>
            <field name="domain_force">[('state','=','paid')]</field>
            <field eval="1" name="perm_read"/>
            <!--
            <field eval="0" name="perm_create"/>
            <field eval="0" name="perm_write"/>
            <field eval="0" name="perm_unlink"/>
            -->
        </record>
    </data>
</openerp>

Когда я поставил noupdate="1", я создал новую базу данных и установил ее туда, но ничего не произошло! Вы можете сказать мне, что я делаю не так? пожалуйста.


person Juan Salcedo    schedule 23.06.2015    source источник
comment
почему вы хотите скрыть кнопку редактирования?   -  person m3asmi    schedule 11.07.2015
comment
@ m3asmi Счет-фактура в оплаченном состоянии не может быть отредактирована по соображениям безопасности   -  person Juan Salcedo    schedule 14.07.2015
comment
добавить атрибут в поля, которые вы не хотите редактировать, со статусом оплачено   -  person m3asmi    schedule 19.07.2015
comment
То же самое и для меня в Лидах, если не собственные лиды, должны быть доступны только для чтения. Одна вещь, ‹attribute name = edit› 0 ‹/attribute› будет скрывать кнопку редактирования. ТАК, я думаю, что не нужно отправлять невидимое и все такое, нам нужно еще кое-что сделать.   -  person Krishh    schedule 03.05.2016
comment
Вы можете обработать это из .py, переопределив функцию записи и проверив состояние при попытке сделать запись   -  person dccdany    schedule 10.10.2017
comment
проверить мой ответ здесь: https://stackoverflow.com/questions/46663748/odoo-disabled-edit-button-depending-on-state   -  person Charif DZ    schedule 23.11.2018


Ответы (3)


Добавьте правило записи для объекта account.invoice только с разрешением на чтение. И фильтр домена как [('state','=','paid')].

person Sathiyan S    schedule 28.08.2015
comment
Я пытался добавить правило записи, подобное приведенному выше коду, в моем текущем редактировании, но ничего не меняется, проверьте его и скажите, что я делаю не так! - person Juan Salcedo; 28.08.2015
comment
Сначала попробуйте добавить правила записи через приложение. И используйте указанный выше домен, как было предложено. Если вы хотите, чтобы это применялось ко всем пользователям, оставьте группу как есть (пустая), это сделает правило записи глобальным. - person Sathiyan S; 01.09.2015

Попробуйте заменить поля через наследование и добавить к нему attrs. Используя attrs, вы можете сделать поле невидимым, когда состояние оплачивается следующим образом,

        <field name="edit" attrs="{'invisible':[('state', '=', 'paid')]}"/>

person Soaad    schedule 10.07.2015
comment
редактировать это не поле! даже если вы измените «поле» на «кнопку», по xpath я получил <xpath expr="//field[@name='edit']" > can not be located in parent view, в традиционной форме я получил <field name="edit"> can not be located in parent view, как я сказал, что ошибка с использованием поля или кнопки такая же. - person Juan Salcedo; 14.07.2015

Вы можете сделать это, переопределив load_record из FormView виджета:

openerp.module_name = function(instance, local) {
    var instance = openerp;
    var FormView = instance.web.FormView;

    // override load_record
    FormView.include({
        load_record: function(record) {
        // disable only for purchase.order
        if (record){
            // allow this behavior only for purchase.order  
            if (this.model == 'purchase.order' & _.contains(['done', 'cancel'], record.state)){
                    $('button.oe_form_button_edit').hide()
                }else {
                    $('button.oe_form_button_edit').show()
                }
        }
        // call super
        return this._super(record);
        }
    });
}

Отметьте это app, если вы ищете полный код:

Отключить кнопку редактирования для оплаченного счета

person Charif DZ    schedule 07.10.2019