Les circuits de validation d'Odoo Community reposent sur un module communautaire générique. Il approuve et rejette, et c'est tout : pas de transfert, pas de correction de réviseur, pas de condition calculée, pas de contrôle d'identité.
Cinq modules l'étendent. Neuf autres apportent des briques que l'on retrouve partout : séquences, QR codes, assistants, plages de dates. Ils terminent le dépôt server-ux.
Résumé
Cinq modules étendent les circuits de validation : le mot de passe exigé avant approbation, la correction des réviseurs d'une revue déjà créée, la définition en Python de la condition de déclenchement et de la liste des réviseurs, le transfert d'une décision à un tiers, et le déclenchement d'une action serveur à l'approbation ou au rejet.
Trois modules traitent les séquences et les dates : une clé de contrôle ajoutée en fin de numéro, une périodicité de réinitialisation autre qu'annuelle, et le rattachement des écrans de plages de dates à la comptabilité.
Deux modules traitent les QR codes : retrouver instantanément n'importe quel enregistrement en scannant un code depuis la barre de navigation, et le classement automatique de PDF déposés dans un dossier surveillé, rattachés à l'enregistrement correspondant.
Quatre modules enfin sont des briques pour développeurs : un gabarit de message listant les enregistrements créés, un socle d'assistants multi-étapes, le remplacement d'un texte de gabarit sans surcharge, et le rejeu des recalculs de champs dans la modification en masse.
L'essentiel
- Le mot de passe exigé avant d'approuver une validation sensible.
- Le transfert d'un visa à une autre personne.
- La correction des réviseurs d'une revue déjà créée.
- Une condition de déclenchement en Python pour un palier.
- Une clé de contrôle en fin de numéro de séquence.
- Une réinitialisation de séquence mensuelle ou autre, pas seulement annuelle.
- Un QR code pour retrouver un enregistrement.
- Des PDF classés automatiquement depuis un dossier surveillé.
Ce que ces modules ajoutent à l'instance
| Famille | Modules | Nombre |
|---|---|---|
| Validation | base_tier_validation_confirm_auth, base_tier_validation_correction, base_tier_validation_formula, base_tier_validation_forward, base_tier_validation_server_action | 5 |
| Séquences et dates | sequence_check_digit, sequence_reset_period, date_range_account | 3 |
| QR codes | document_quick_access, document_quick_access_folder_auto_classification | 2 |
| Briques développeur | mail_message_destiny_link_template, multi_step_wizard, template_content_swapper, server_action_mass_edit_onchange | 4 |
Les menus : Paramètres ▸ Technique ▸ Validations par niveau ▸ Tier Review Correction, Facturation ▸ Configuration ▸ Plages de dates et ses trois sous-menus, Paramètres ▸ Technique ▸ Actions ▸ Document Quick Access Rule, Documents to process, Paramètres ▸ Technique ▸ Interface utilisateur ▸ Template Content Mappings.
Les circuits de validation, complétés
Le moteur de validation par paliers est traité dans sa fiche dédiée. Cinq modules lui ajoutent ce qui manque à un usage réel.
Un circuit de validation qui ne permet pas de transférer une décision bloque dès le premier congé. C'est la raison la plus fréquente pour laquelle une organisation abandonne les visas après trois mois : le directeur financier part en vacances, et les factures attendent.
base_tier_validation_forwardpermet à un validateur de transférer sa décision à une autre personne, au lieu de devoir approuver ou rejeter lui-même. Version 2.0.2, la plus avancée du lot.base_tier_validation_correctionpermet de corriger les réviseurs assignés à une revue déjà créée, sans modifier la définition d'origine ni relancer le processus.base_tier_validation_confirm_authexige que le réviseur ressaisisse son mot de passe avant d'approuver — le contrôle d'identité attendu sur un visa engageant.base_tier_validation_formulapermet de définir en Python la condition de déclenchement d'un palier et la liste des réviseurs. C'est ce qui permet un circuit dépendant du montant, du client ou de la marge.base_tier_validation_server_actiondéclenche une action serveur dès qu'un palier est approuvé ou rejeté, et permet une validation automatique.
Les deux derniers transforment le moteur : sans eux, un circuit est une suite de paliers fixes ; avec eux, c'est une règle métier.
Les séquences et les plages de dates
sequence_check_digit (LGPL-3) ajoute aux séquences la possibilité de calculer et d'ajouter une clé de contrôle en fin de numéro, selon un algorithme choisi.
Une clé de contrôle sur un numéro de pièce ou de colis divise les erreurs de saisie manuelle : un chiffre transposé rend le numéro invalide à la frappe, au lieu de pointer silencieusement vers une autre pièce.
sequence_reset_period (LGPL-3) permet de choisir la périodicité de réinitialisation d'une séquence — mensuelle, trimestrielle — au lieu de la seule réinitialisation annuelle du standard.
date_range_account est une colle : elle rattache les écrans de plages de dates à la comptabilité, sous Facturation ▸ Configuration ▸ Plages de dates, avec la génération, les plages et leurs types. Elle n'ajoute aucun modèle propre.
Les plages de dates sont la brique sur laquelle reposent plusieurs modules de reporting et le mois fiscal du dépôt analytique : les déclarer au bon endroit évite de les chercher dans les menus techniques.
Retrouver un document par son QR code
document_quick_access permet de retrouver n'importe quel enregistrement — facture, contact, produit — en scannant un QR code ou un code-barres qui encode son identifiant, depuis un bouton de la barre de navigation. Les règles de correspondance vivent sous Paramètres ▸ Technique ▸ Actions ▸ Document Quick Access Rule.
document_quick_access_folder_auto_classification va plus loin : il scanne les fichiers PDF déposés dans un dossier surveillé à la recherche d'un QR code, et rattache chaque fichier à l'enregistrement Odoo correspondant. Menu Documents to process.
Le second répond à un flux papier bien réel : un bon de livraison imprimé avec un QR code, signé par le client, scanné en pile le soir, et chaque page retrouve sa commande sans intervention. C'est la numérisation d'un circuit papier sans ressaisie.
Le module dépend d'un composant du dépôt d'échanges de données (edi_component_oca) pour la surveillance du stockage.
Quatre briques pour développeurs
mail_message_destiny_link_template(LGPL-3) fournit un gabarit de message réutilisable affichant, dans la conversation d'un enregistrement source, la liste des enregistrements créés ou modifiés depuis lui, avec un lien.multi_step_wizardfournit un socle d'assistants multi-étapes : un mécanisme et une vue de base, avec navigation Suivant et Retour.template_content_swapperpermet de remplacer un texte affiché par un gabarit — rapport PDF, page du site, portail — sans développer de surcharge. Référentiel sous Paramètres ▸ Technique ▸ Interface utilisateur ▸ Template Content Mappings.server_action_mass_edit_onchangeétend la modification en masse : pour chaque champ configuré, une option permet de rejouer les recalculs du champ avant d'écrire sa nouvelle valeur.
Le dernier corrige un défaut discret de la modification en masse : changer un champ sur deux cents enregistrements sans rejouer les recalculs laisse les champs dépendants inchangés — un taux de taxe modifié sans recalculer les montants, par exemple.
Le remplacement de texte dans un gabarit est le plus utile des quatre pour une PME : renommer « Bon de commande » en « Confirmation de commande » sur un rapport ne devrait pas demander un module.
Limites connues
- Les cinq extensions de validation dépendent du moteur
base_tier_validation: installer le moteur d'abord, et n'ajouter les extensions qu'en réponse à un besoin constaté. - Une condition de déclenchement en Python est du code dans la base : elle échappe au contrôle de version et aux tests. À documenter et à limiter.
- Le transfert de visa déplace la responsabilité : la traçabilité du transfert doit être vérifiée avant de s'y fier pour un visa engageant.
- La correction des réviseurs contourne la définition d'origine : à restreindre, sous peine de vider le circuit de son sens.
- Changer la périodicité d'une séquence en cours d'exercice produit des numéros qui se chevauchent : le faire à une date de rupture.
- Le classement automatique de PDF dépend de
edi_component_oca: une brique du dépôt d'échanges de données. document_quick_accessencode un identifiant d'enregistrement dans un QR code : un code imprimé reste valide et lisible par quiconque y a accès, donc à ne pas poser sur un document destiné à sortir de l'entreprise sans y réfléchir.
Identité technique
Les quatorze modules viennent du dépôt OCA server-ux, branche 18.0 — dont les 35 modules sont désormais tous documentés ici. Onze sont en AGPL-3, trois en LGPL-3. Les dépendances : base_tier_validation pour les cinq extensions, date_range et account pour les plages de dates, barcode_action et edi_component_oca pour les QR codes, server_action_mass_edit et onchange_helper pour la modification en masse.
L'autre fiche du dépôt : paramétrer sans développer.
Questions fréquentes
Que faire quand un validateur est en congé et bloque les factures ?
base_tier_validation_forward permet au validateur de transférer sa décision à une autre personne. C'est la raison la plus fréquente pour laquelle une organisation abandonne les visas après trois mois : le directeur financier part en vacances, et tout attend.
Peut-on exiger une confirmation d'identité avant d'approuver dans Odoo ?
Oui : base_tier_validation_confirm_auth exige que le réviseur ressaisisse son mot de passe avant d'approuver, via le mécanisme de contrôle de sécurité d'Odoo. C'est le contrôle attendu sur un visa engageant — un poste laissé ouvert ne suffit plus à valider.
Peut-on faire dépendre un circuit de validation du montant ?
Oui, avec base_tier_validation_formula, qui permet de définir en Python la condition de déclenchement d'un palier et la liste des réviseurs. C'est ce qui transforme un circuit fixe en règle métier. Attention : c'est du code dans la base, qui échappe au contrôle de version.
Peut-on retrouver un document Odoo en scannant un QR code ?
Oui : document_quick_access ouvre l'enregistrement correspondant depuis un bouton de la barre de navigation, et document_quick_access_folder_auto_classification classe automatiquement les PDF déposés dans un dossier surveillé. Un bon de livraison signé, scanné en pile, retrouve sa commande sans ressaisie.
Peut-on réinitialiser une séquence Odoo chaque mois ?
Oui, avec sequence_reset_period, qui permet de choisir la périodicité au lieu de la seule réinitialisation annuelle du standard. À faire à une date de rupture : changer la périodicité en cours d'exercice produit des numéros qui se chevauchent.
Se faire accompagner
Les circuits de validation sont l'exemple parfait d'un outil abandonné faute de deux détails : personne ne peut transférer son visa, et personne ne peut corriger un réviseur mal assigné. Les deux modules qui corrigent cela pèsent quelques kilo-octets.
Nous installons donc le moteur de visas avec ses extensions de transfert et de correction dès le départ, et nous réservons les conditions en Python aux cas qui le justifient vraiment — parce que du code dans la base est du code que personne ne relit. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
En résumé
Les circuits de validation d'Odoo Community approuvent et rejettent, et c'est tout : pas de transfert, pas de correction de réviseur, pas de contrôle d'identité. Cinq modules les complètent, neuf autres apportent séquences à clé de contrôle, QR codes et assistants. Parlons de vos circuits de visa.