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.

0

0
Giuseppe Stoduto
Il 31/05/20, 16:50

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


La tua risposta


0
Giuseppe Stoduto
Il 02/05/20, 13:11

Grazie per la risposta.

La versione di odoo è la 8 e dovrebbe avere la libreria bootstrap.

Mi potresti indicare un qualche esempio su come utilizzare tale libreria?


La tua risposta


0
Walter Tosolini
Il 01/05/20, 14:23

Bella domanda... in effetti avrei utilizzato anche io l'approccio ai Raise. La parte web però dovrebbe utilizzare bootstrap, per cui se non hai un odoo troppo vecchio (e vedendo che usi openerp mi sa di si) dovresti poter usare la funzione "toast" di Bootstrap.


La tua risposta

Resta informato

Informazioni sulla comunità

Forum ufficiale dell'Associazione Odoo Italia Leggi le linee guida

Strumenti di richiesta

46 follower

Statistiche

Richiesta del: 01/05/20, 06:47
Vista: 1418 volte
Ultimo aggiornamento: 31/05/20, 16:50