Как отобразить предупреждающее сообщение в Odoo-11?

Я использую Odoo 11 и хочу отобразить всплывающее окно с предупреждением в методе @api.constraint. Всплывающее окно с предупреждением, которое я хочу отобразить, имеет две кнопки: первая — это кнопка «ОК», используемая для игнорирования предупреждения, а другая — кнопка «Отмена», используемая для попытки сохранения, она похожа на всплывающее окно с предупреждением, которое использует odoo, например на картинке ниже: Предупреждающее сообщение, которое я хочу отобразить, похоже на это

Я много искал в Интернете и нашел различные предлагаемые решения, такие как использование Wizard, exception.Warning() и osv.except_osv(), но, к сожалению, ни одно из этих решений не дает мне именно то, что я хочу.

Любая помощь, пожалуйста?


person LALMI Mohamed Lamine    schedule 27.03.2018    source источник
comment
Итак, вы не хотите нормального предупреждения, верно? Обычное предупреждение всегда прерывает транзакцию. Не могли бы вы подробнее описать, чего бы вы хотели достичь? Я имею в виду, что если @api.constrains вызывает предупреждение, то запись не может быть сохранена. Сохранить его, если вы нажмете кнопку OK в Мастере предупреждений?   -  person ChesuCR    schedule 27.03.2018


Ответы (4)


Основное предупреждение odoo, которое вы можете использовать, вызывается из класса odoo.exception. Например:

from odoo.exceptions import AccessError, UserError, RedirectWarning, ValidationError, Warning

@api.constrains('age')
def _check_something(self):
    for record in self:
        if record.age > 20:
            raise Warning(_("Your record is too old: %s" % record.age))

Это должно работать для вашей проблемы.

person stee    schedule 20.06.2019

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

if self.qty > new_qty:
       message = _('You plan to sell %s quantity but you only have %s available in %s warehouse.') % \
                     (self.qty, self.product_id.virtual_available, self.order_id.warehouse_id.name)
       mess= {
                    'title': _('Not enough inventory!'),
                    'message' : message
                }
       return {'warning': mess}

Это возвращает тот же мастер предупреждения, который вы хотите, и как показано на данном изображении.

person Keval Mehta    schedule 27.03.2018

Я пишу (черновой) модуль, чтобы открыть диалоговое окно, см.: https://github.com/Micronaet/micronaet-sales/tree/master/confirm_dialog_wizard

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

@api.multi
def hide_product_pricelist(self):
    """ Hide product
    """
    return self.env['dialog.box.wizard'].open_dialog(
        message='The product will be hided, <b>you cannot use again</b> '
                'but remain in sale order where yet present, <br/>'
                'confirm?',
        action='self.env["product.product"].browse(%s).write('
               '{"active": False})' % self.id,
        title='Confirm request:',
        mode='cancel_confirm',
    )

Программа выдаст всплывающее окно для подтверждения (поскольку в дереве вы не можете использовать параметр сообщения «подтвердить»), я пытаюсь сделать лучше, но... это начало... :)

person user2095717    schedule 11.04.2020

Это похоже на предупреждение, отображаемое при использовании атрибута confirm на кнопке.

<button confirm="Reset to draft!"/>

Вызов ошибки проверки или возврат предупреждения, так как словарь не отображал кнопку Cancel.

person Kenly    schedule 27.03.2018