Удалить создать и редактировать в зависимости от значения другого поля в odoo11 - PullRequest
4 голосов
/ 29 июня 2019

Необходимо убрать создание и редактирование в поле partner_id в заказе клиента в зависимости от значения другого поля. Я нашел один похожий ответ, но он не работает.

<field name="partner_id" position="replace">
   <field name="partner_id" string="partner" domain=[('customer','=',True),('sale_invoice_type','=',sale_invoice_type)]" context="{'search_default_customer':1, 'show_address': 1,'default_sale_invoice_type':sale_invoice_type}" attrs="  {'invisible': [('sale_invoice_type', '=', 'cash')]}" options='{"always_reload": True, "no_create_edit": True}'/>         

   <field name="partner_id" domain="[('customer','=',True),('sale_invoice_type','=',sale_invoice_type)]" context="{'search_default_customer':1, 'show_address': 1,'default_sale_invoice_type':sale_invoice_type}" attrs="{'invisible': [('sale_invoice_type', '=', 'credit')]}" options='{"always_reload": True}'/>

</field>

Когда типом sale_invoice_type являются наличные деньги, редактирование и создание должны быть удалены

1 Ответ

4 голосов
/ 29 июня 2019

Сначала домен обоих полей должен выглядеть следующим образом:

    <field ....  attrs="  {'invisible': [('sale_invoice_type', '!=', 'cash')]}"/>

    <field ....  attrs="  {'invisible': [('sale_invoice_type', '=', 'cash')]}"/>

ЕСЛИ Решение не сработало, потому что вы не должны иметь одно и то же поле два раза в поле зрения. Odoo будет сбит с толку, когда его передадут.

Но вы можете обойти это, создав новое поле.

В вашей модели определите другое поле партнера, просто фиктивное, чтобы использовать его вместо реального partner_id, но убедитесь, что оба поля вконец записи и создания всегда будет равен.

    partner_no_create = fields.Man.......

В вашем коде убедитесь, что эти два поля всегда равны:

    # I think this onchage handle the cases in Odoo views
    @api.onchange('partner_id')
    def set_partner_no_create(self):
        if self.sale_invoice_type != 'cash':
            self.partner_no_create = self.partner_id


    @api.onchange('partner_no_create')
    def set_partner_no_create(self):
        if self.sale_invoice_type == 'cash':
            self.partner_id = self.partner_no_create

В вашем XML

       <field name="partner_no_create" string="partner" domain="[('customer','=',True),('sale_invoice_type','=',sale_invoice_type)]" 
           context="{'search_default_customer':1, 'show_address': 1,'default_sale_invoice_type':sale_invoice_type}" 
           attrs="  {'invisible': [('sale_invoice_type', '!=', 'cash')]}" options='{"always_reload": True, "no_create_edit": True}'/>         

       <field name="partner_id" domain="[('customer','=',True),('sale_invoice_type','=',sale_invoice_type)]" 
           context="{'search_default_customer':1, 'show_address': 1,'default_sale_invoice_type':sale_invoice_type}" 
           attrs="{'invisible': [('sale_invoice_type', '=', 'cash')]}" options='{"always_reload": True}'/>

Но все же приходится обрабатывать больше случаев, особенно когда запись обновляется или создается из вызова RPC, вам необходимо переопределить метод create и write для обработки всех случаев.

...