Aquest post conté la segona part de la guia Filtres avançats a Odoo. A la primera part hem vist com es defineix un filtre, què és el mode desenvolupador i com utilitzar-lo, els camps que podem utilitzar a un domini i els tipus d'operadors disponibles a Odoo.
En aquesta segona part, contemplem els temes següents:
- Filtres amb dominis complexos
- Filtres amb dates dinàmiques
- Filtres amb context
Filtres amb dominis complexos
En alguns casos cal utilitzar més d'una condició per filtrar les dades. Odoo permet definir dominis amb múltiples condicions enllaçades entre elles amb operadors lògics.
Operador Lògic | Descripció |
---|---|
& | AND lògic – veritable si tots dos operands són veritables (per defecte en dominis sense operador especificat) |
| | OR lògic – veritable si qualsevol operand és veritable |
! | NOT lògic – inverteix el valor de l'operand |
Els dominis amb múltiples operands es defineixen utilitzant una forma de notació lògica anomenada notació de prefix. La seva característica distintiva és que els operadors es col·loquen a l'esquerra dels operands.
Per exemple, un filtre que mostraria totes les vendes amb un import entre 1000€ i 5000€ tindrà el domini següent:
['&', ('amount_total', '>=', 1500), ('amount_total', '<=', 5000)]
Un altre exemple seria consultar tots els productes de la categoria 5 amb una quantitat en estoc menor que 20 o una quantitat prevista menor que 10.
['&', ('categ_id', '=', 5), '|', ('qty_available', '<', 20), ('virtual_available', '<', 10)]
Filtres amb dates dinàmiques
Moltes vegades necessitem crear filtres amb dates que depenen de la data actual. Aquests filtres tenen uns dominis més complexos amb expressions de manipulació de dates de Python.
Per exemple, per obtenir les vendes de els darrers 10 dies, creem un filtre nou per al model “Sale Order” amb el següent domini:
[('date_order', '>=', ((context_today()-datetime.timedelta(days=10)).strftime('%Y-%m-%d')))]
Un altre exemple seria llistar totes les vendes d'aquest mes, utilitzant el domini següent:
[('date_order', '>=', (context_today().strftime('%Y-%m-1')))]
Filtres amb context
El context és un diccionari de Python que s'utilitza per passar certa informació a diferents objectes a Odoo (vistes, mètodes, informes, etc.).
Als filtres, el context s'utilitza per passar agrupacions a les vistes i té la següent estructura: {'group_by': ['camp1', 'camp2', ...]}
En alguns casos cal utilitzar més d'una condició per filtrar les dades. Odoo permet definir dominis amb múltiples condicions enllaçades entre elles amb operadors lògics.
El context es pot utilitzar també a informes dinàmics (vista gràfic) per passar mesures i agrupacions de files o columnes.