We are proud to announce the 8.2 release of Tryton.
This release provides many bug fixes, performance improvements and some fine tuning.
You can give it a try on the demo server, use the docker image or download it here.
As usual upgrading from previous series is fully supported.
Here is a list of the most noticeable changes:
Changes for the User
Client
When deleting or removing multiple rows from a list widget, a popup is displayed to confirm the selection that will be deleted or removed.
And when clicking on delete or remove from a list widget with no row selected, a search popup is raised to search and select the rows to delete or remove.
When selecting multiple rows for editing from a One2Many widget, the edition popup loops over each record. This is a faster and more reliable way to perform a mass edition.
The login services can now display an icon to represent the service provider. This makes it easier for users to select the right services.
The Binary widget supports filtering the file selection per file extension and mime type.
And when the field has no file name defined, the widget will use the record name as a fallback file name when the content is downloaded.
It is now possible to mark as read a set of notifications.
Accounting
The “Open Journal” menu entry has been replaced by the “Lines” menu entry which uses a journal and period header as default values.
This new menu entry also provides a new way to search for accounting lines.
We now use the maturity date before the effective date to calculate the reconciliation date.
The wizard to create dunning allows limiting the creation to a selection of companies.
The wizard to create direct debits allows limiting the creation to a selection of companies.
When posting an invoice, the system will check the validity of the European tax identifiers used.
A relate is now available from the period and the fiscal year to open the related invoices.
This is useful when you need to collect all the invoices done in a period, for example to send to an external accountant.
The SEPA payment module now includes the flavors pain.001.001.09 and pain.008.001.08.
A generic CSV format has been added to import statements. You can configure the format to map columns to the Tryton fields.
It is common that banks provide only a custom CSV format for the statements.
It is now possible to create tax rules based on organizations.
This is useful for example to create a single rule that applies to all European countries.
E-document
PEPPOL
We added a configurable processing delay on each PEPPOL service.
This prevents sending the newly posted invoice directly and allows some time for the user to correct any mistakes.
UN/CEFACT
Tryton can now parse the UN/CEFACT invoice to create a supplier invoice.
This will be useful to implement French e-invoicing.
Party
The wizard to check VAT numbers with the VIES service has been replaced by an automatic background task.
Once a number has been validated, it is considered valid for a configurable period before being re-validated.
When entering a contact mechanism, the system will try to guess the type.
Product
The products can now be added or removed directly from the category form.
Production
A tolerance can now be configured on each BoM. It raises warnings when the input or output quantities deviate from the calculated quantities from the BoM. It also detects additional or missing products.
Purchase
Tryton now calculates the actual average lead time of each product supplier over the last year.
This is useful to update the configured lead time or to find poor suppliers.
Sales
It is now possible to configure sales to create customer shipments only in draft (instead of waiting).
This is useful when the workflow requires a manual validation of the shipment before being processed.
The wizard to create invoices and consumptions of subscriptions allows limiting the creation to a selection of companies.
A stock lot can now be set on the sale line from a POS.
This is useful for businesses that require tracking the lot sold to customers.
Stock
Tryton now warns when an inventory modifies the quantities or costs too much.
The variations are now displayed with a visual hint when they are close to the tolerance.
A scheduled task has been added to create stock periods automatically using a configured interval. And another task closes them after a configured delay.
This removes the need to manually close stock periods, which is important for performance.
Web Shop
A scheduled task has been added to cancel abandoned sales after a configured delay per web shop.
This prevents the list of draft sales from increasing too much.
New Modules
Account Invoice Factur-X
The Account Invoice Factur-X Module allows to generate invoices in Factur-X format.
Document Incoming OCR Eagle Doc
The Document Incoming OCR Eagle Doc Module provides integration with Eagle Doc services.
Project Disbursement
The Project Disbursement Module provides support for paying and invoicing disbursements per project.
Stock Conversion
The Stock Conversion Module transforms one product into another with ease.
Changes for the System Administrator
Server
The “Administration” group has been replaced by an “Administrator” flag on the user.
This ensures that an administrator always has access to everything even if a resource access is restricted to a group (which was not the “Administration” group).
The trytond-admin command can now manage any user. This means that it can create a new user, activate or deactivate, promote as administrator or demote from administrator, set the email or password and send a reset password email.
The unfinished queued tasks are now retried automatically by a scheduled task.
A timer is now attached to every RPC request with a timeout defined. It ensures that the request does not last longer by raising a TimeOutException.
The webhooks must be updated to include the /r/ prefix inherited from the new Router.
We have kept the former routes for backward compatibility.
Accounting
The Stripe API has been updated to the version 2026-09-30.endive.
Stock
The DPD Shipment Service API has been updated to version 4.5.
Changes for the Developer
Server
The readonly attribute and states are now enforced on the server-side when checking the access rights of the user.
The fields have a new editable states which completes the existing readonly but it is not enforced, only used for UI purposes.
We added BulkBuffer for creation, deletion, save or any function on ModelStorage.
The BulkBuffers are context managers that are flushed when reaching a defined size by calling a function with the current content.
This is useful when looping on a large set of records to limit the memory consumption.
Ex:
# records are saved every 2000 records
with Model.bulk_save() as save:
for record in records:
record.amount += 10
save.push(record)
A new router type of object is now supported in the Pool.
A Router exposes entrypoints but as it is registered in the Pool it can be extended by other modules.
The entrypoint of a Router is only registered for the database for which the origin module is activated.
A route has been added for the custom.js and custom.css files of sao. It chains a list of files that can be extended by any module.
The ORM is now using a BrowseList instead of a simple list of instances. The BrowseList allows keeping the cache and prefetching aligned with its content when it is mutated, for example by .sort().
It is now possible to define the filename extension of Binary fields.
And it is also possible to set filters on the binary and image widgets.
The database connection cursor now supports row factories like dict_row, namedtuple_row and scalar_row. They change the default tuple type of fetched records.
Thanks to the row factory, the cursor_dict has been removed.
It is now possible to configure Mixins to apply to the Database and TableHandler of the backend.
This feature is now used for the GIS backend.
We added support for AGE to the SQLite backend.
The DBTestCase is now public and can be reused by modules. It is useful to create test cases based on a module but without the generic tests from ModuleTestCase.
The XML record tag now supports a search attribute. The value is a domain used to search for existing records and reuse them when the id is not yet known.
This is useful for example to create a country record which may have been already created.
The convert module gains an import_xml function which can be used to import XML files into the database (like the file declared in the module).
It can be useful for tests that need to have such records created.
The email validation tools now have a check deliverability option.
The URLAccessor can now accept a request parameter to use instead of the Transaction.context.
The ResourceAccessMixin gains two new fields last_user and last_modification.
Proteus the scripting client
When configured with trytond (on the server host), it allows controlling access checks with the _check_access contextual keyword.
Company
The companies and employees are now in the user context.
This is useful to write domains that restrict a selection to only allowed companies or employees.
