Benvenuto!
Questo è il forum ufficiale dell'Associazione Odoo Italia. Dopo esserti registrato potrai partecipare ponendo domande o rispondendo a quelle esistenti. Non scordarti di compilare il tuo profilo e consultare le linee guida prima di iniziare a scrivere.
Warning o popup in Controller
Buongiorno.
Mi trovo a cercare una soluzione per un mio problema che è poco documentato.
In pratica vorrei far vedere un messaggio di errore tipo raise warnining() nella funzione del controller.
in pratica vorrei fare una cosa del genere:
from openerp.http import Controller, route, request
from openerp.exceptions import Warning
class FrontPanelWeb(Controller):
@http.route('/web/print_labels', type='http', auth="public")
def download_document(self, model, id, **kw):
raise Warning('Mio messaggio')
Ovviamente questa cosa non funzione era solo per farvi capire le mie intenzioni.
C'è un'api per fare questo?
Grazie
Ho risolto modificando il codice javascript del pulsante che mi innesca la chiamata al controller.
Ricapitolando velocemente ho creato un pulsante:
<button name="start_edit" string="Edit" type="object" class="oe_highlight oe_inline" custom="warning" />
questo mi chiama una funzione che apparentemente non fa nulla:
@api.multi
def start_edit(self, data):
""" L'url viene chiamato in javascript """
return True
Quello che segue è il codice javascript che fa funzionare il tutto:
(function () {
'use strict';
var instance = openerp;
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
instance.web.form.WidgetButton.include({
custom_alert: function(message, title) {
if( !title)
title = 'Alert';
if( !message)
message = 'No Message to Display.';
$('<div></div>').html(message).dialog({
title: title,
resizable: false,
modal: true,
show: { effect: "puff", duration: 300 },
hide: { effect: "puff", duration: 300 },
buttons: {
'Ok': function () {
$(this).dialog('close');
}
}
});
},
on_click: function () {
console.log('this',this);
if (this.node.attrs.custom === "warning") {
var self = this;
var model = this.view.model;
var id = this.view.datarecord.id;
instance.jsonRpc('/web/print_labels', 'call', { 'model': model, 'id': id }).then(function (result) {
// Your JS code here for checking backend validator result
if (result.message) {
self.custom_alert(result.message, result.title);
// alert(result.data);
}
})
}
this._super();
},
});
})();
In pratica il pulsante ha un attributo "custom" che se uguale a "warning" mi fa partire un controller che mi ritorna l'errore che voglio che mi serve.
Questo è il controller:
from openerp.http import Controller, route, request
from openerp import http, _
class FrontPanelWeb(Controller):
@http.route(['/web/print_labels'], type='json', auth="public")
def download_document(self, model, id, **kw):
url = request.httprequest.url
# url_root = request.httprequest.url_root
if 'localhost' not in url:
return {
'message': _('Editing of this field is only possible on the local server.'),
'title': _('Server Error')
}
Probabilmente l'errore si potrebbe anche mostrare con "respose" ma non l'ho provato.
Questo codice fa parte di una soluzione ad un altro post. Insomma cono due post collegati.
https://www.odoo-italia.org/forum/forum-1/question/stato-pulsante-locale-o-remoto-921
Volendo migliorare il codice javascript si potrebbe mettere anche un altro attributo per lanciare in automatico uno specifico controller. Tipo "controller='/mio/controller/'" in modo da avere un modo più generale per far partire un controller a scelta premendo un pulsante.
Ma questa è un altra storia.....
Resta informato
Informazioni sulla comunità
Strumenti di richiesta
Statistiche
Richiesta del: 01/05/20, 06:47 |
Vista: 1418 volte |
Ultimo aggiornamento: 31/05/20, 16:50 |