La caisse d'Odoo est l'un de ses modules les plus aboutis : rapide, utilisable au doigt, capable de fonctionner hors connexion. Trois manques reviennent pourtant dans chaque projet de commerce.
Retirer un article du ticket demande de jouer avec le pavé numérique. Prendre une commande à emporter ou à livrer oblige à sortir du POS. Et le terminal de paiement reste à côté de la caisse, à ressaisir le montant. Trois modules communautaires comblent ces trois manques.
Résumé
pos_order_remove_line ajoute une icône de suppression sur chaque ligne du ticket, avec confirmation facultative : deux réglages dans la configuration du point de vente, et un geste de caissier qui cesse d'être une acrobatie. pos_order_to_sale_order ajoute un bouton Create Order qui transforme la commande de caisse en commande de vente — devis, vente confirmée, vente livrée ou vente livrée et facturée, au choix du caissier. pos_payment_terminal ajoute une option OCA Payment Terminal sur les méthodes de paiement et un bouton Send à l'écran de paiement, qui transmet montant, devise et mode au boîtier connecté.
Les trois se configurent au même endroit — Point de vente ▸ Configuration ▸ Réglages — et aucun n'ajoute de menu. Le troisième exige en plus un module matériel installé sur le boîtier IoT, qui n'est pas fourni.
L'essentiel
pos_order_remove_line: une icône poubelle par ligne du ticket, et une confirmation facultative — deux cases à cocher, désactivées par défaut.pos_order_to_sale_order: un bouton Create Order actif seulement si un client est sélectionné et le ticket non vide, et jusqu'à quatre destinations au choix.pos_payment_terminal: l'option OCA Payment Terminal sur une méthode de paiement, le bouton Send, et un statut interrogé toutes les secondes jusqu'au résultat.- Le mode « force_done » quand le boîtier ne répond plus : le caissier confirme manuellement l'issue plutôt que de bloquer la file.
- Le bouton de retour au panier peut être masqué dès qu'une ligne de paiement existe — actif par défaut, et c'est le bon réglage.
- Aucun des trois n'ajoute de menu : tout se passe dans les réglages du point de vente et dans l'écran de caisse.
Ce que ces modules ajoutent à l'instance
| Module | Version | Licence | Dépend de | Menus ajoutés |
|---|---|---|---|---|
pos_order_remove_line | 18.0.1.0.1 | LGPL-3 | point_of_sale | 0 |
pos_order_to_sale_order | 18.0.1.1.2 | AGPL-3 | point_of_sale, sale_stock | 0 |
pos_payment_terminal | 18.0.1.0.0 | AGPL-3 | point_of_sale | 0 |
Trois modules, aucun menu : c'est la signature des modules de caisse. L'écran de caisse n'est pas une vue Odoo classique mais une application web à part, et ces modules la modifient en « patchant » ses composants.
Conséquence pratique à connaître : après installation, il faut recharger l'écran de caisse (fermer et réouvrir la session, ou vider le cache du navigateur) pour que les boutons apparaissent. C'est la cause numéro un du « je l'ai installé et je ne vois rien ».
Supprimer une ligne du ticket, sans acrobatie
Sans module, retirer un article d'un ticket en cours consiste à sélectionner la ligne et à ramener sa quantité à zéro au pavé numérique. Le geste existe, il est juste contre-intuitif pour un caissier qui débute — et c'est précisément lui qui fera des erreurs.
Les deux réglages
- Aller dans Point de vente ▸ Configuration ▸ Réglages, section « Supprimer une ligne de commande dans le Point de Vente ».
- Cocher Afficher le bouton de suppression : l'icône poubelle apparaît sur chaque ligne du ticket.
- Cocher Afficher l'avertissement — visible seulement si la case précédente est cochée — pour demander une confirmation avant chaque suppression.
- Enregistrer. Les deux cases sont décochées par défaut : installé sans ce passage, le module ne change rien.
Le détail d'implémentation est rassurant : la suppression ne passe pas par un appel serveur dédié, elle simule deux appuis sur la touche retour arrière du pavé numérique. Autrement dit, elle réutilise le mécanisme standard d'Odoo — recalcul des taxes, du total, des remises — au lieu de le contourner.
Notre recommandation : activer les deux cases. La confirmation coûte un appui supplémentaire et évite la suppression accidentelle d'une ligne pendant qu'un client parle au caissier.
Transformer la commande de caisse en commande de vente
C'est le module qui change le plus un métier. Un commerce qui prend des commandes au comptoir — à livrer, à préparer, à facturer en fin de mois — n'a pas besoin d'un encaissement immédiat : il a besoin d'une commande de vente.
Les quatre destinations possibles
| Choix | Ce que fait Odoo | Cas d'usage |
|---|---|---|
| Devis | Crée la commande en brouillon | Le client réfléchit, on garde la trace du panier |
| Confirmée | Crée et confirme la vente | Commande à préparer, livraison générée |
| Livrée | Confirme, puis valide les bons de livraison | Emporté immédiatement, facturé plus tard |
| Livrée et facturée | Confirme, livre, crée et comptabilise les factures | Client professionnel facturé à l'enlèvement |

Chaque destination s'active séparément dans les réglages : un point de vente peut n'offrir que le devis, ou les quatre. Les quatre sont actives par défaut, ce qui est généreux — nous conseillons de ne laisser que celles que le métier utilise, pour que le caissier n'ait pas à choisir.
Ce qui est repris, et ce qui est perdu
- Repris : le client, les lignes avec quantité, remise, prix unitaire et taxes, la liste de prix, la position fiscale, le vendeur.
- Repris aussi : la note client de chaque ligne POS, ajoutée à la description de la ligne de vente. Détail précieux pour un commerce qui prend des instructions de préparation.
- Tracé : l'origine indique « Point of Sale » suivi du nom de la session, et la référence client reprend le nom du ticket. Un champ relie la commande à la session de caisse.
- Perdu : la commande POS en cours est abandonnée et remplacée par un ticket vide. Il n'y a pas d'encaissement POS, donc pas de ligne dans la caisse du jour.
Deux conditions pour que le bouton soit actif : un client sélectionné et au moins une ligne. La première est structurante — ce flux n'existe pas pour un client de passage anonyme.
Une option imprime automatiquement le PDF de la commande de vente. Sur un comptoir qui remet un bon de commande au client, c'est le réglage qui évite un aller-retour au bureau.
Ce flux rejoint la mécanique des types de commande et de l'automatisation des ventes : le type de commande peut porter le journal, le préfixe et le circuit de validation propres aux ventes nées au comptoir.
Le terminal de paiement piloté depuis la caisse
Ressaisir le montant sur le terminal est le geste qui produit les écarts de caisse : un chiffre inversé, et la clôture du soir ne tombe pas juste. Ce module transmet le montant au terminal.
Comment ça se branche
- Installer ce module sur le serveur Odoo.
- Installer sur le boîtier IoT (IoTBox, POSbox ou pywebdriver) le module matériel correspondant au protocole du lecteur — par exemple celui des lecteurs Ingenico Telium en France. Ce module n'est pas fourni par
pos_payment_terminal. - Dans Point de vente ▸ Configuration ▸ Méthodes de paiement, choisir OCA Payment Terminal dans le champ du terminal de paiement, puis le mode : carte ou chèque.
- Dans Point de vente ▸ Configuration ▸ Réglages, bloc des périphériques connectés, activer le proxy matériel et le terminal OCA pour ce point de vente.

La deuxième étape est celle qui décide du projet : le protocole du lecteur doit être couvert par un module matériel disponible. C'est la question à poser à la banque avant de commander le terminal, pas après.
Ce qui se passe à l'encaissement
- Le caissier choisit la méthode de paiement liée au terminal : un bouton Send apparaît.
- Le clic transmet montant, devise et mode au boîtier, qui pilote physiquement le lecteur.
- Odoo interroge le statut de la transaction toutes les secondes jusqu'au résultat.
- Si le boîtier ne répond plus, un mode de secours laisse le caissier confirmer manuellement l'issue : la file ne reste pas bloquée sur un terminal muet.
Le réglage complémentaire, actif par défaut et à conserver : masquer le bouton de retour au panier dès qu'une ligne de paiement liée au terminal existe. Il empêche de modifier le panier pendant qu'une transaction est en cours sur le lecteur — l'incohérence classique entre le ticket et le relevé bancaire.
Limites connues
- Les deux réglages de suppression de ligne sont désactivés par défaut : installé sans configuration, le module ne montre rien.
- Le module matériel du terminal n'est pas fourni. Le protocole du lecteur doit être couvert côté boîtier IoT ; c'est la contrainte à vérifier en premier.
- La bascule en commande de vente abandonne le ticket POS : pas d'encaissement, donc rien dans la caisse du jour pour cette vente. C'est voulu, et cela change la lecture de la clôture de session.
- Un client est obligatoire pour créer une commande de vente depuis la caisse : le flux ne s'applique pas à un client de passage.
- L'écran de caisse doit être rechargé après installation pour que les boutons apparaissent.
Identité technique
| Module | Dépôt OCA | Version | Licence |
|---|---|---|---|
pos_order_remove_line | pos | 18.0.1.0.1 | LGPL-3 |
pos_order_to_sale_order | pos | 18.0.1.1.2 | AGPL-3 |
pos_payment_terminal | pos | 18.0.1.0.0 | AGPL-3 |
Les trois figurent dans notre pack commerce (68 modules), au-delà du socle commun.
Questions fréquentes
Pourquoi le bouton de suppression n'apparaît-il pas sur le ticket ?
Deux causes. Les réglages sont décochés par défaut : il faut activer « Afficher le bouton de suppression » dans Point de vente ▸ Configuration ▸ Réglages. Et l'écran de caisse doit être rechargé après installation — fermer puis réouvrir la session, ou vider le cache du navigateur.
La bascule en commande de vente encaisse-t-elle le paiement ?
Non. La commande POS en cours est abandonnée et remplacée par un ticket vide : il n'y a aucun encaissement de caisse pour cette vente. Le règlement suit le circuit de la commande de vente ou de la facture. C'est précisément l'intérêt du module pour un client facturé en fin de mois.
Quels terminaux de paiement sont compatibles ?
Ceux dont le protocole est couvert par un module matériel installé sur le boîtier IoT (IoTBox, POSbox ou pywebdriver) — par exemple les lecteurs Ingenico Telium en France. Ce module matériel n'est pas fourni par pos_payment_terminal : c'est la compatibilité à vérifier avec la banque avant de commander le terminal.
Que se passe-t-il si le terminal ne répond plus ?
Odoo interroge le statut toutes les secondes ; si le boîtier reste muet, un mode de secours permet au caissier de confirmer manuellement l'issue de la transaction. La file d'attente ne reste pas bloquée, et le ticket peut être clôturé selon ce que le lecteur a réellement fait.
Peut-on limiter les choix proposés au caissier ?
Oui : les quatre destinations — devis, confirmée, livrée, livrée et facturée — s'activent séparément dans les réglages du point de vente. Elles sont toutes actives par défaut ; ne laisser que celles que le métier utilise évite une décision inutile au comptoir.
Se faire accompagner
La caisse est l'endroit où une mauvaise configuration se paie en secondes, multipliées par le nombre de clients. Un choix de trop dans une fenêtre, une confirmation absente, un terminal qu'il faut ressaisir : ce sont des minutes par heure de rush, et des écarts de caisse le soir.
Nous réglons ces trois modules avec les caissiers, sur un point de vente de test, avant de les déployer : quelles destinations laisser, faut-il la confirmation de suppression, et surtout quel protocole de terminal votre banque fournit. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
- Ventes : types de commande, workflows et blocages
- Le commerce de détail avec Odoo : caisse, stock, e-commerce
- Site web et boutique : six modules pour un site tenable
En résumé
Trois manques du comptoir, trois modules : l'icône de suppression sur le ticket, la bascule en commande de vente avec ses quatre destinations, et le terminal de paiement piloté depuis la caisse. Trois choses à vérifier : les réglages sont décochés par défaut, l'écran de caisse doit être rechargé, et le protocole du terminal doit être couvert côté boîtier. Parlons de votre caisse.