Esempi pratici
In questa sezione vengono riportati esempi concreti di utilizzo delle regole di controllo sul modello Ordine di produzione (mrp.production) . Gli esempi mostrano sia configurazioni di base con condizioni AND, sia casi più avanzati con filtri Python e combinazioni di gruppi AND/OR.
Condizioni (AND/OR)
Tutte le regole riportate, hanno di default il gruppo Root con AND.
✦ Scadenza vicina/passata e senza quantità prodotta
Controllare gli ordini con scadenza passata o alla data odierna e senza quantità prodotte.
Campo | Operatore | Tipo valore | Sorgente valore | Valore |
Scadenza | <= | Date | Oggi (date) | |
Quantità in produzione | = | Integer | Valore literal | 0 |
✦ Scadenza nella prossima settimana e non completato
Controllare gli ordini con scadenza nella prossima settimana (non mostra le passate) e senza quantità prodotte.
Campo | Operatore | Tipo valore | Sorgente valore | Valore |
Scadenza | >= | Datetime | Adesso (datetime) | - |
Scadenza | <= | Datetime | Python (safe_eval) | |
Stato | in | Char/Testo | Python (safe_eval) | ['confirmed','progress','to_close'] |
✦ Non completato con materiale pronto
Controllare gli ordini non completati dove il materiale da consumare è pronto.
Campo | Operatore | Tipo valore | Sorgente valore | Valore |
Stato | not in | Char/Testo | Python (safe_eval) | ['done','cancel','draft'] |
Disponibilità materiale | = | Char/Testo | Valore literal | assigned |
Filtro Python
Molto utile su confronto campi o con assegnazioni
✦ Ordine non completato con data programmata prima di scadenza
Controllare gli ordini con la data programmata prima di scadenza non completati
model.search([]).filtered(
lambda r: r.date_deadline and r.date_planned_start and r.date_deadline < r.date_planned_start and
r.state in ['confirmed', 'in_progress', 'to_close']
)
✦ Ordine di vendita e scadenza passata (CUSTOM)
Controllare gli ordini con scadenza passata ad oggi e ordine di vendita collegato
# Scadenza già passata rispetto ad "adesso", sale_order_id nostro campo custom
result = [('date_deadline', '<', now), ('sale_order_id', '!=', False)]
✦ Ordine non completato con stato spedizione in riga ordine di vendita evaso(CUSTOM)
Controllare gli ordini non completati dove la consegna è stata forzata o non ad evasa.
# sale_line_id nostro campo custom - delivery_state = stato consegna
result = [('sale_line_id', '!=', False), ('sale_line_id.delivery_state', '=', 'done'),
('state', 'not in', ['draft', 'done', 'cancel'])]
Mix Condizione + Filtro Python
Permette di combinare tutte le casistiche ma impegna molte risorse per l'esecuzione
✦ Ordine non completato con 5 o meno quantità da produrre (rimanenti)
Applicare entrambi i filtri riportati per ottenere il risultato previsto
Campo | Operatore | Tipo valore | Sorgente valore | Valore |
Stato | not in | Char/Testo | Python (safe_eval) | ['done','cancel','draft'] |
# Ordini con quantità rimanente <= 5 & qty_producing > 0 (Esclude ordini non prodotti)
# remaining = product_qty - qty_producing
model.search([]).filtered(
lambda p: (p.product_qty - p.qty_producing) <= 5
and p.qty_producing > 0
)