OI
Odoo ItaliaClaudio Stevanato

Personalizzazione comportamento tree view

Il nostro problema è questo: abbiamo tre tabelle, da sinistra a destra le tabelle sono a cascata, quindi un Valore ha un m2o ad un Attributo, ed una Localizzazione ha un m2o ad un Valore. Abbiamo messo l'icona check su Attributo e Valore per selezionare a cascata i record della tabella successiva, ma abbiamo dei problemi per quanto riguarda l'usabilità: - Quando aggiungo un record sulla tabella Attributo, non posso selezionarlo a meno che non salvo il record, questo significa che se voglio aggiungere tante righe devo fare ogni volta un salvataggio e perdo tempo, vorremmo poter salvare direttamente i record in maniera da non dover fare avanti e indietro tra Salva e Modifica
No description
CS
Claudio Stevanato264d ago
@Francesco Ballerini sposta pure qui il messaggio
FB
Francesco Ballerini264d ago
Se non riesci a uscirne lato python puoi sempre chiamare il saveRecord lato JS. Ti serve un onchange sulla vista per impostare a True un flag e rilevare quando il check è selezionato. Se fai amicizia con "js_class" e lo metti sul one2many (penso si possa fare) ti allacci al controller JS specifico che "bindi" con quella view. C'è tutto sulla doc. https://www.odoo.com/documentation/14.0/developer/reference/javascript/javascript_cheatsheet.html#customizing-an-existing-view Metti un event handler sul bottone, impostando lato xml una classe come selettore, poi definisci l'evento lato js events: _.extend({}, MyController.prototype.events, { 'click .my_selector': '_onCheckBtnClick ', }), Per l'handler '_onCheckBtnClick' vedi il codice nel messaggio sotto, aggiornato e corretto a livello di sintassi Importante, il bottone definito lato xml NON deve avere type="object" e nemmeno type="action", altrimenti non fa la call in JS Se riuscite a fare l'equivalente usando solo python fateci sapere
CS
Claudio Stevanato264d ago
Che casino comunque, vediamo di uscirne fuori E facendo così: https://www.cybrosys.com/blog/customizing-an-existing-view-type-in-odoo-14 Qui c'è l'esempio per la kanban view
FB
Francesco Ballerini264d ago
E' la stessa identica cosa che dicevo di fare io, cioè estendere una view esistente, in questo caso tree-view, creandone una copia e associandovi un controller custom (su cui puoi fare un bind dell'evento click tramite class selector sul bottone, e poi associarvi un handler). Per specificare di usare il tuo JS custom invece che il JS nativo, sul one2many metti "js_class". Nulla di diverso rispetto alla soluzione proposta sopra, con la differenza che ti ho già scritto l'handler, però ti confermo che la soluzione è quella __ Ti risposto il codice dell'handler perché girandolo su Odoo dava errori di sintassi, in quanto l'ho preso da mio codice e riadattato leggermente alla tua situazione ma senza testarlo nello specifico. Gli errori di sintassi però li ho corretti, è possibile che ci sia qualcosa da riadattare a livello di logica ovviamente, ma in sostanza dovrebbe girare , lo riposto qui perché sopra non ho più caratteri a disposizione _onClickSetupConfirm: function (ev) { var record = this.model.get(this.handle); var self = this; if (record.data.is_checked === true) { // se è checckato salvo il record poi chiamo python per praticità, in caso // devo fare altre operazioni var def = this.saveRecord(this.handle, { stayInEdit: true, }).then(function (result){ var record = self.model.get(self.handle); self._rpc({ model: 'modello.col.bottone', method: 'metodo_del_bottone', kwargs: {arg1: record.data.field_a_caso}, }).then(function (res) { // togli questa parte se non devi fare ulteriori operazioni post-python return res; }); }); } else { // però poi devi cancellare il record se toglie il check. // E' possibile che debba prima inserire un controllo per // vedere se il record è effettivamente cancellabile (presente nel db) this._deleteRecords(this.handle); } return def; }, Come dicevo, è la stessa cosa che ti linkavo qui https://www.odoo.com/documentation/14.0/developer/reference/javascript/javascript_cheatsheet.html#customizing-an-existing-view Solo che cybrosys la spiega un pò più in dettaglio, ma è la stessa identica soluzione con js_class. In quel modo puoi intercettare il click e chiamare del JS sulla tua view specifica, senza impattare sul codice nativo perché SOLO quella view userà QUEL controller. Mi viene solo il dubbio che si possa mettere un js_class attributo sui fields one2many/many2many, ma direi che si possa fare senza problemi