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
CS
Claudio Stevanato•264d ago
@Francesco Ballerini sposta pure qui il messaggio
FB
Francesco Ballerini•264d 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 sapereCS
Claudio Stevanato•264d 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 Ballerini•264d 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 problemi698Members
View on DiscordWant results from more Discord servers?
More PostsProblema controllo "La Partita Iva è già assegnata ad un altro partner."Se può aiutare a capire il problema, il record viene creato con il metodo `create`, non da GUIaiuto per un novellobuongiorno a tutti, sono nuovo e novellino su odoo, mi sapreste indicare un buon tutorial per creareWizard m2m context btnOk, in realtà context funziona ma non la prima volta, il wizard non viene ancora creato quando lo chFooter dedicato per DdT@sirtakobi Cos'è sbagliato?Fatture passive EXTRApuoi descriverlo in una issue o aggiornarne una esistente, se esiste?Ridefinizione funzione pythonRiecocmi. In effetti questa combinazione non l'avevo provata e non da errore ma ancora non "eredito"