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.....