Nous sommes fiers d'annoncer la sortie de la version 8.0 LTS de Tryton. Cette version apporte de nombreuses corrections de bogues, des améliorations en termes de performances et quelques ajustements. Vous pouvez l'essayer sur le serveur de démonstration, utiliser l'image Docker ou la télécharger ici. Comme d'habitude, la mise à niveau depuis la série précédente est entièrement prise en charge.
Voici une liste des changements les plus notables :
Changements pour l'utilisateur
Client
Un indicateur visuel apparaît désormais sur les widgets des champs modifiés. L'utilisateur peut ainsi voir ce qui a été modifié avant d'enregistrer.
Web
Il est désormais possible de réorganiser l'ordre des onglets.
L'option de déconnexion a été déplacée dans le même menu que les notifications. Une entrée pour l'aide a également été ajoutée. Cela simplifie visuellement le contenu de l'en-tête.
Comptabilité
Le rapprochement des lignes comptables peut désormais être automatisé via une tâche planifiée.
Le grand livre affiche uniquement les soldes bruts, ce qui est plus complet pour une liste de comptes au format brut.
Nous avons ajouté la possibilité de calculer l'arrondi pour les espèces en utilisant la méthode d'arrondi inverse. Cette fonctionnalité existait déjà pour l'arrondi des devises standard, mais faisait défaut pour l'arrondi des espèces.
Il est désormais possible de définir certains moyens de paiement sur la facture. Ils peuvent être définis manuellement ou à l'aide d'un moteur de règles. Les moyens de paiement pris en charge pour l'instant sont le virement bancaire et le prélèvement automatique.
Lorsque des factures sont créées à partir d'une source externe (comme PEPPOL), nous vérifions les montants par rapport à la source lors de la validation ou de la comptabilisation de la facture. Cela permet de créer des factures pour lesquelles le calcul est différent dans Tryton par rapport à la source et de laisser l'utilisateur les corriger manuellement.
Tryton avertit désormais l'utilisateur lorsqu'il tente de créer un trop-perçu.
Europe
Nous avons ajouté tous les codes d'exonération de TVA aux taxes pouvant être utilisées dans les factures électroniques.
Belgique
Les taxes sont désormais configurées avec les codes UNECE et VATEX, ce qui est utile pour générer et analyser des factures UBL comme sur PEPPOL.
Documents entrants
Le module OCR prend désormais en charge la référence de paiement du fournisseur. Celle-ci est enregistrée sur la facture du fournisseur et utilisée lors d'un paiement.
Document électronique
Nous avons ajouté un bouton sur le document PEPPOL pour déclencher une mise à jour du statut. Les utilisateurs ne souhaitent pas toujours attendre que la tâche planifiée mette à jour le statut.
Nous veillons à ce que le prix unitaire de toutes les lignes de facture envoyées à PEPPOL ne soit pas négatif. Il s'agit d'une règle du réseau PEPPOL qu'il est préférable d'appliquer avant la comptabilisation de la facture.
Le modèle de facture UBL a été étendu pour afficher l'identification de l'article par l'acheteur, les remises et les frais, la référence de facturation, les moyens de paiement, les codes VATEX et les montants prépayés. L'analyseur de factures UBL prend désormais en charge les moyens de paiement.
Le modèle de facture UN/CEFACT affiche les moyens de paiement et les codes VATEX.
Incoterm
L'Incoterm définit désormais qui est responsable des droits d'exportation et d'importation entre l'acheteur et le vendeur.
Tiers
Les identifiants suivants ont été ajoutés : numéro d'enregistrement des sociétés slovène, numéro de sécurité sociale belge, code d'établissement d'activité espagnol, numéro d'enregistrement d'État principal russe, numéro fiscal du Mozambique, numéro d'enregistrement commercial français, numéro fiscal de l'Azerbaïdjan et numéro fiscal du Sénégal.
Les identifiants sont désormais formatés pour faciliter la lecture.
Nous avons ajouté une nouvelle entrée de menu qui répertorie tous les identifiants des tiers.
Un champ « À l'attention de » a été ajouté à l'adresse. Cela est utile pour gérer les adresses de livraison de la boutique en ligne lorsque le client expédie à un autre tiers.
Production
Le groupe « Stock d'annulation » peut désormais également annuler les productions en cours et terminées.
Il n'est pas possible de définir si le coût issu des feuilles de temps doit être inclus dans le calcul du coût de production. Ceci est défini par centre de travail.
Projet
Les tâches sont désormais numérotées afin de faciliter la communication entre les employés.
Un champ « Origine » a été ajouté aux tâches.
Achats
Le mode de facturation « à l'expédition » a été renommé « à la livraison » afin d'être plus générique.
Les quantités à facturer sont désormais calculées pour chaque ligne d'achat. Les achats comportant au moins une ligne à facturer sont marqués comme « À facturer ».
Qualité
Nous avons ajouté un champ de référence aux contrôles qualité. Cela permet de stocker un numéro externe si le contrôle a été effectué par un service externe.
Ventes
La méthode de facturation « à l'expédition » a été renommée « à l'exécution » afin d'être plus générique.
Les quantités à expédier et à facturer sont désormais calculées pour chaque ligne de vente. Les ventes comportant au moins une ligne à expédier ou à facturer sont marquées comme « À expédier » ou « À facturer ».
Stock
Nous avons ajouté un groupe spécial autorisé à annuler les expéditions et les mouvements terminés. Cela est utile pour corriger les erreurs.
Les expéditions disposent désormais d’un assistant pour faciliter la création des colis. Cela simplifie les opérations telles que placer un colis à l’intérieur d’un autre, ne mettre qu’une partie d’un mouvement dans un colis, etc.
Pour le transporteur UPS, le module facture les droits et taxes à l’expéditeur conformément à l’Incoterm.
Nous enregistrons désormais la date initialement prévue pour les expéditions internes demandées et la production demandée. Cela permet de repérer les demandes en retard.
Boutique
La vente enregistre désormais l'URL de la commande correspondante dans la boutique en ligne.
Shopify
Nous prenons désormais en charge les conditions de paiement de Shopify . Lorsqu'une vente est assortie d'une modalité de paiement, celle-ci est toujours confirmée dans Tryton.
Les cartes-cadeaux sont désormais prises en charge par Shopify. Ainsi, lorsqu'une carte-cadeau est vendue sur Shopify, aucune carte-cadeau n'est créée dans Tryton. Et lorsque la carte-cadeau est utilisée sur Shopify, elle apparaît comme un paiement provenant de la passerelle gift_card.
Les actions provenant de Shopify sont désormais enregistrées dans la commande de vente.
Le mode de livraison « retrait en magasin » est désormais pris en charge pour les commandes Shopify. Lorsque l'envoi est emballé sur Tryton, il est marqué comme prêt pour le retrait sur Shopify.
Nouveaux modules
Chèque de paiement (Account Payment Check)
Le Module de chèque de paiement permet de gérer et d'imprimer des chèques comme moyens de paiement.
Compte de Stock - Accises UE (Account Stock EU Excise)
Le Module Stock Compte Accises UE sert à générer la déclaration des droits d'accises pour les pays européens.
Production d'éthanol (Production Ethanol)
Le Module de production d'éthanol calcule les gains ou les pertes de volume d'alcool au cours de la production.
Module Tâches de projet de vente (Sale Project Task)
Le Module Tâches de projet de vente ajoute la possibilité de créer des tâches lors de la vente de services. La réalisation des ventes est liée à l'avancement de ces tâches.
Module Stock d'éthanol (Stock Ethanol)
Le Module Stock d'éthanol permet de suivre les stocks d'alcool dans les entrepôts.
Modules supprimés
Les modules suivants ont été supprimés :
account_de_skr03account_esaccount_es_siigoogle_maps
Vous trouverez peut-être des alternatives publiées par la communauté.
Modifications pour l'administrateur système
Client
Web
La compilation du client Web ne nécessite plus Bower.
La session est désormais stockée sous forme de cookie. Cela empêche la fuite de la session en cas de problème de sécurité avec notre code JavaScript.
Le client Web utilise désormais des chemins relatifs pour effectuer les requêtes au serveur. Cela permet de servir le client Web à partir d'un sous-répertoire.
Serveur
L'authentification de base est désormais également prise en charge pour l'application utilisateur. Cela est utile lorsque l'utilisateur de l'application utilisateur ne peut pas prendre en charge l'authentification par porteur.
Documents entrants
Les modules Typless exigent désormais de définir tous les champs définis sur le service afin de générer un retour d'information complet, même pour les champs que Typless n'a pas reconnus.
Document électronique
Il est désormais possible de configurer un webhook pour Peppyrus. Cela permet de recevoir les factures PEPPOL dès leur arrivée dans la boîte de réception.
E-mails entrants
La fonctionnalité de gestion des e-mails entrants dispose désormais d'une action permettant de traiter les réponses vers les canaux de chat. Le contenu textuel situé au-dessus d'une ligne spécifique est ajouté en tant que message au canal correspondant.
Modifications pour les développeurs
Cette version supprime la prise en charge de Python 3.9 et ajoute Python 3.14.
Serveur
Il est désormais possible de filtrer les utilisateurs recevant une notification via une tâche planifiée à l'aide d'un domaine. Cela s'avère utile, par exemple, lorsque la notification ne concerne que les utilisateurs ayant accès à une entreprise spécifique.
Le moteur de rapports peut désormais utiliser MJML comme format de base et le convertir en HTML. Cela simplifie la création de modèles d'e-mails compatibles avec la plupart des clients de messagerie courants.
La méthode Field.sql_column reçoit désormais un dictionnaire tables et un objet Model en argument.
Le Field.sql_column peut désormais être redéfini par une méthode du Model nommée column_<nom du champ>(tables).
Cela élargit les possibilités pour des types de champs plus complexes.
Avec ces améliorations, nous ne pouvons pas prendre en charge les champs Function sans getter, mais uniquement les expressions SQL via column_<nom du champ>. Ces champs sont automatiquement consultables et triables sans qu'il soit nécessaire de définir les méthodes domain_<nom du champ> ni order_<nom du champ>.
Un champ last_modified a été ajouté à ModelSQL pour éviter de dupliquer le code write_date ou create_date.
Le champ fmany2one peut désormais être basé sur un champ Function.
Nous avons mis à jour le backend PostgreSQL pour utiliser Psycopg 3. Par défaut, Tryton utilise la liaison côté serveur, ce qui permet de supprimer la limitation de taille de la liste d'identifiants pouvant être transmise en utilisant un tableau pour les opérateurs in.
Ainsi, les outils reduce_ids et grouped_slice (sans taille) ont été dépréciés et Database.IN_MAX a été remplacé par backend.MAX_QUERY_PARAMS.
Les méthodes delete et delete_many ont été ajoutées à l'API FileStore, ce qui permet de supprimer les fichiers des champs Binary lorsqu'ils sont supprimés ou mis à jour.
Les états des boutons sont désormais vérifiés lors de l'exécution avec la vérification d'accès. Cela garantit qu'un client ne peut pas exécuter un bouton qui devrait être désactivé.
Une méthode notify_user a été ajoutée à ModelStorage pour faciliter la notification
d'un utilisateur.
Une clé contextuelle _log peut être utilisée pour forcer la journalisation d'événements même s'ils ne proviennent pas d'un utilisateur.
De nouvelles routes ont été ajoutées pour gérer la connexion et la déconnexion à l'aide d'un cookie.
Il est désormais possible d'inclure des sous-répertoires dans le fichier tryton.cfg. Cela s'avère utile lors du développement de modules volumineux afin de les diviser en sous-répertoires.
Un nouvel attribut dans les données XML permet de définir une valeur sous forme de chemin relatif à l'emplacement du fichier XML. Cette fonctionnalité fonctionne en combinaison avec les sous-répertoires pour éviter de répéter le nom du répertoire.
Le canal de discussion envoie désormais les nouveaux messages par e-mail aux abonnés qui se sont inscrits avec leur adresse e-mail.
Il est désormais possible de monter l'application WSGI sous un préfixe.
Les appels RPC ne sont plus préfixés par /rpc/.
Une API REST générique a été ajoutée en tant qu'application utilisateur.
Elle permet de rechercher, récupérer, mettre à jour et supprimer n'importe quel enregistrement d'un ModelStorage en respectant les droits d'accès de l'utilisateur, ainsi que de lancer n'importe quelle action RPC et de générer des rapports.
La méthode ModelStorage.__json__ définit les champs par défaut à inclure dans la réponse en fonction de l'utilisation, mais le client peut également demander explicitement les champs (avec la notation pointée).
Le contexte est transmis en tant que valeur de l'en-tête X-Tryton-Context encodée en JSON. La langue est sélectionnée à partir de l'en-tête Accept-Language du client. Et la recherche peut être paginée à l'aide de l'en-tête Range.
Naiad
Naiad est une nouvelle bibliothèque Python permettant d'accéder à l'API REST de Tryton.
Comptabilité
Nous avons supprimé la valeur par défaut pour le type de facture. Elle doit désormais être définie explicitement.
Un champ « factures d'origine » a été ajouté à la facture.
Le module de paiement Stripe utilise désormais la version 2025-09-30.clover de l'API.
Document électronique
Le modèle UBL filtre désormais les documents supplémentaires par type MIME.
Boutique en ligne
Shopify
Nous avons remplacé la bibliothèque ShopifyAPI, qui n'était plus maintenue, par la nouvelle shopifyapp.
