там действительно я заблокирован, я хочу скрыть кнопку "Создать счет", но, исходя из условия, мое условие: если в строке заказа есть услуги, кнопка скрыта. Я создал поле и функцию, но в конце всегда возникает ошибка, что поле не существует в модели, вот мой код:
Ошибка :
Поле 'hide_invoice', используемое в атрибутах, должно присутствовать в поле зрения, но отсутствует
Мое поле и функция (Python):
from odoo import api, fields, models,_
class SaleOrder(models.Model):
_inherit = 'sale.order'
hide_invoice = fields.Boolean(compute="_hide_button_invoice", string="",)
@api.multi
@api.depends('tasks_count')
def _hide_button_invoice(self):
for order in self:
if order.tasks_count > 0:
order.hide_invoice = True
elif order.tasks_count == 0:
order.hide_invoice = False
Мой XML (я вижу в форме, что он работает):
<odoo>
<record id="button_invoice_view_form" model="ir.ui.view">
<field name="name">sale.order.button.create.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="before">
<field name ="hide_invoice"/>
</xpath>
</field>
</record>
</odoo>
Кнопка затем я хочу скрыть это:
<button name="%(sale.action_view_sale_advance_payment_inv)d" string="Create Invoice"
type="action" context="{'default_advance_payment_method': 'percentage'}"
attrs="{'invisible': ['|','|',('hide_invoice', '=', True),('invoice_status', '!=', 'no'), ('state', '!=', 'sale')]}"/>
Вы должны отобразить поле на уровне заголовка, чтобы справиться с этим.
Как сделать следующий код, прежде чем ваша кнопка объявлена.
<field name='hide_invoice' invisible='1'/>
И удалите его перед полем partner_id.