Impostazione - Buona
DT Point of Control consente di definire regole di controllo periodiche su un modello (es. mrp.production
): ad ogni esecuzione la regola applica un dominio, calcola il totale reale dei record trovati, mostra fino a N esempi (configurabili) e invia un messaggio in un canale con un bottone che apre direttamente la lista filtrata.
1) Configurazione principale
Apri Impostazioni ▸ Funzioni tecniche▸ Point of Control ▸ Regole e crea una nuova regola.
- Nome: titolo chiaro della regola (es. ODP scadute e ferme).
- Azienda: azienda corrente (preimpostata).
- Modello target (obbligatorio): il modello da controllare (es.
mrp.production
). - Canale destinazione (obbligatorio): canale di messaggistica in cui inviare il messaggio.
- Attiva: se spuntato, la regola viene eseguita da cron.
-
Pianificazione:
-
Ogni N + Periodo (minuti/ore/giorni/settimane/mesi).
-
Prossima esecuzione / Ultima esecuzione: viene ricalcolata automaticamente
-
- Messaggio: testo che viene riportato nel messaggio sul canale, se vuoto viene usato il modello di default. Ogni messaggio è personalizzabile e riporta nell'intestazione il titolo della regola ed il bottone per accedere all'elenco.
- {count} : Segnaposto che riporta il num. totale di voci trovate
- {sample} : Segnaposto che riporta un max. di 10 esempi delle voci trovate
2) Configurazione azione
L’azione Python è il codice che viene eseguito quando si clicca il bottone all’interno del messaggio.
Questa configurazione è fondamentale per garantire il corretto funzionamento del modulo.
{
'type': 'ir.actions.act_window',
'res_model': model._name,
'name': "Ordini di produzione",
'domain': domain,
'context': dict(context or {}),
'target': "main",
}
- type → Non modificare mai. Deve rimanere invariato rispetto al valore riportato.
- res_model → Inserire sempre
model._name
in modo da compilare automaticamente il campo con il valore selezionato sul Modello target. - name → Nome che verrà mostrato nel navigatore.
- domain → Lasciare sempre
domain
. Questo verrà compilato secondo le regole già definite. - context → Si consiglia di utilizzare il valore di default oppure aggiungerne altri per attivare filtri o raggruppamenti specifici.
- target → Impostare il valore main oppure current, a seconda della necessità.
3) Configurazione viste
Le viste sono fondamentali per visualizzare l’interfaccia nel modo più efficace possibile e permettere una corretta analisi dei dati.
È consigliato sempre configurare almeno due tipologie di viste nel seguente ordine:
- Tree / Lista → per visualizzare l’elenco delle voci in formato tabellare.
- Form → per accedere al dettaglio di una singola voce.
Il sistema utilizza una sequenza per definire l’ordine di priorità delle viste.
Non è necessario applicare filtri nella selezione, poiché il sistema propone automaticamente solo le viste relative al modello e alla tipologia selezionati.
È altamente consigliato definire viste primarie, ossia non ereditate da altre viste.
4) Condizioni (AND/OR)
La tabella Condizioni (AND/OR) definisce tutti filtri/regole da applicare nella regola di controllo.
Ogni condizione creata può appartenere a un gruppo, che stabilisce la logica di valutazione.
Senza gruppo tutte le condizione vengono valutate come AND.
Campi di configurazione
- Campo: un campo memorizzato del modello.
- Operatore:
=
,!=
,<
,<=
,>
,>=
,ilike
,not ilike
,in
,not in
,is set
,is not set
. - Tipo valore:
char
,integer
,float
,date
,datetime
,boolean
,selection
,many2one
. - Sorgente valore:
- literal: inserisci il valore direttamente.
- today: data odierna (date).
- now: data e ora correnti (datetime).
- field: confronto campo vs campo (placeholder; non supportato nativamente dal dominio → completare in Filtro Python).
- python: calcoli il valore con
safe_eval
(scalare/lista coerente con l’operatore).
5) Gruppi (AND/OR)
La tabella Gruppi (AND/OR) consente di organizzare e raggruppare più condizioni in insiemi logici.
Ogni gruppo definisce come devono essere valutate le condizioni al suo interno e come deve avvenire la combinazione con altri gruppi.
Funzionamento
- AND → tutte le condizioni contenute nel gruppo devono risultare vere affinché il gruppo sia valido.
- OR → è sufficiente che almeno una delle condizioni contenute nel gruppo sia vera affinché il gruppo sia valido.
I gruppi possono essere utilizzati per creare logiche complesse, combinando condizioni multiple tra loro e migliorando la precisione dei controlli.
6) Filtro Python (opz.)
Il Filtro Python rappresenta un meccanismo avanzato e opzionale che permette di definire regole di controllo complesse tramite codice Python.
Si utilizza quando le condizioni standard (domini Odoo) non sono sufficienti a coprire casi particolari o quando è necessario applicare logiche personalizzate.
Funzionamento
- Il filtro viene valutato tramite la funzione
safe_eval
, che interpreta il codice in un ambiente sicuro. - Il risultato deve restituire un valore booleano (
True
oFalse
) che stabilisce se la condizione è rispettata. - È possibile accedere ai campi del modello corrente e combinarli con funzioni o calcoli Python.
Esempio di filtro
# La condizione è valida solo se l'importo è maggiore di 1000
record.amount_total > 1000
Note
- Il filtro Python è opzionale e va utilizzato solo quando non è possibile esprimere la regola con condizioni standard.
- Un uso eccessivo può impattare sulle prestazioni e ridurre la leggibilità delle regole.