Tryton Release 6.8

Picture carousel of Tryton views

We are very proud to announce the 6.8 release of Tryton.
In this release there are many bug fixes, behaviour and performance improvements and plenty of other small enhancements. There are also three new modules.
You can give Tryton a try on the demo server, use the docker image or download it. The client is also now available as a Linux Flatpak.

As usual migration from previous series is fully supported. The Migration from 6.6 to 6.8 lists any manual operations that may be required.

After the release of series 6.8, support for series 6.4 will soon come to an end.

Here is a list of the most noticeable features:

Changes for the User

Sales and Purchase

A new shipment state Partially Shipped has been added for Sales and Purchases to indicate that there are already partial shipments.

Partially states in sales and purchase

For sale and purchase lines without a product, we now get the taxes from the default accounts in the account configuration.

For products that are marked as supply on sale, it is now possible to configure the system so that purchases are only generated if there is not enough stock available in the warehouse.

We notify users when they configure a product that is to be supplied on sale but which also has a purchase order point configured.

Accounting, Invoicing and Payment

We now support deposits in a different currency based on the amount of the secondary currency as we do for invoice payments. For the deposit we limit the recall to only accounts with the same currency and we use the amount in the second currency, when needed, to compute the deposit amount to use.

When opening invoices related to a party the list now shows the pending and paid invoices.

It is now possible to define whether the full supplier’s invoice should be generated, or just the invoice lines. This makes it easier to get the invoices to match the format used by the supplier.

The invoice state shown on Sales and Purchases now indicates whether the related invoices are pending, awaiting payment or partially paid.

The receivable/payable lines now have a column with the cumulative balance. This helps you see the evolution of the customer/supplier debt.

We now display the general ledger information like debit, credit and balance on the account form. This is useful when you are browsing account moves and you want to quickly check that information.


The payment groups now have a window domain to easily filter which are pending and which are already processed.

Mandates linked to inactive accounts are no longer considered as valid for sepa payments. Also, when deactivating an account its linked account numbers are also deactivated.

A warning is raised when cancelling an account move related to an invoice, because the invoice will be marked as paid and not cancelled.

On the move line form we show the payment amount and the payments. Because it can be useful to get an understanding how the payment amount is computed.

The general ledger lines now support both reconcile and unreconcile.

The account move template keywords are now checked to ensure they are valid when they are created, to ensure the template works when it is used.

The party is no longer considered to be part of the the record name when searching for invoices.

Now the pay-button is hidden on invoices without payment method.

An option to cancel a move with a reversal move has been added. So, when checked, Tryton will post the move with the debit and credit swapped over, instead of posting negative debits and credits.

Direct debit payments are no longer created for blocked receivable lines.

Rounding errors for multiple taxes applied to the same line, are now allocated between each tax line to provide a more accurate result.

For consistency we renamed the field “Name” on account reconciliation to “Number” as it is generated from a sequence.

Stock, Production and Shipment

Now it is possible to have non salable and non purchasable products on return shipments.

When creating order points, the user’s warehouse is now used by default.

The moves that make up a shipment are now shown in a specific order.

When trying to assign shipments or productions, all the documents that can be fully assigned are now assigned instead of it being all or nothing.

The lot number is no longer copied when a lot is duplicated which has a sequence configured. This means that the new lot gets the next number in the sequence.

We’ve added a link to open the stock lots from the product form. This is useful if, for example, you want to create the lots for an asset.

The stock lot can now be deactivated. This simplifies lot management by removing lots that are no longer used.

We’ve added the party and the description from the invoice to the invoice line list. This is useful to select the right invoice lines when filling in a landed cost or a shipment cost form.

Parties and CRM

We’ve added links from party to its purchase and sales lines in addition to the purchases and sales. Also all those links show the number of pending and done records.

Now Tryton notifies the user when they are registering a party identifier that is already in use with another party. This helps prevent duplicate parties from being created.

The stock moves and invoice lines linked to a sale or purchase line are now displayed on their form. This is useful to understand the status of an order.

Tryton now supports setting a price for a carrier cost that is based on weight even if the products have no weight.

A carrier is now required to quote a sale that has a shipment cost set. This avoids an incoherent setup which then misses quoting the carrier cost.

Reference Data

We’ve added a new category of unit of measure for energy with some common units like the Joule and Kilowatt-hour.
And we removed the non-standard “Work day” unit because its value depends on the company’s working practices.

The country organizations can now be used as criteria for tariff codes and duty rates.
We now show all the criteria for the tariff codes on the product form.

User Interface

We now use a circle border for avatar images of individuals and a square border for groups like companies.

List of parties with rounded avatar

Party form with rounded avatar

The translate popup has been reworked to be clearer. It uses now a toggle button to start editing the translation for a language and uses a label to indicate a translation is fuzzy.


We changed the boolean operators in the search box from and and or to & and |. This means the searches are independent of the language and we do not need to have a way of escaping them.

The clients no longer select the first record of each list by default.

The default size of the desktop client has been increased.

The sale, purchase, commission and stock report records can now be searched by name.

The xxx2Many widgets now display the number of selected records. This helps prevent mistakes when managing a large list of records.

The error message, shown when trying to modify a record protected by XML declaration, has been improved to include the name and type of the record and optionally the field.

New Modules

A new module to account for stock in Europe has been added. For now, this module lets you generate the instrastat declaration for several countries.

We added a new module to parse statements with MT940 format.

Import MT940

The new quality module enables quality to be controlled by configuring control points and inspecting against these when certain operations are performed.

Changes for the System Administrator

To get a full picture of what changes have happened to a record the basic create/write logs for the record are often not detailed enough. We’ve implemented an intermediary log system which records:

  • writes and deletes done directly by users
  • button presses that perform an operation
  • wizard state changes that may modify data in the database
  • workflow transitions to a new state

The currency symbol is no longer required. The currency code will be used when no symbol is set for the currency.

The size of each cache can now be fine tuned using entries in the configuration file. So you no longer need to develop a new module to change the cache size for a particular usage.

The weekly and monthly timesheet reports now also have access rules. The supervisor now has access to the timesheet reports for the employees he supervises.

The production now automatically creates stock lots for output products that require one and that have a sequence configured.

Changes for Implementers and Developers

The getter-method of function fields and on_change_with-methods now allow a model instance to be returned, instead of the id of a model instance.

We now support Python 3.11 and at the same time have removed support for Python 3.7.
Python 3.7 is only supported until June, which is not long after this release, so by doing this we keep running tests on the same number of different Python versions.

The FiscalYear and Period find methods have been improved. They now cache the result to avoid redundant database queries, and always raise an exception when no fiscal year, or period, is found.

The domain method is now supported on all field types. Up until now, this method was not implemented for some relation fields.

The calls to copy are now grouped together when assigning stock moves. This can, in some cases, make the process of assigning moves up to 10 times faster.

The dimensions on package and package types have been unified.

The server now includes the tools to generate barcodes and QR codes.
The product module makes use of a method that generates the barcode for a corresponding product identifier.

We’ve added two methods on the Field. searchable which returns True if the field can be used in a domain expression and sortable if the field can be used in an order expression.

The list-form view now has abilities to do validation, pre-validation and automatic saving when the selected record changes. This mimics the behaviour of the editable list.
Also the selections are now restored on list-form view.

New types of exceptions have been introduced: RPCReturnException and ButtonActionException. They are used to launch an action from a button using an exception (which rolls back the transaction started by the button).
This is useful if, for example, you need to launch a wizard before executing a transition.

The behavior of the purchase_invoice_line_standalone module has been modified. Previously, upon activation, it did not generate an invoice. However, with the introduction of a new feature that allows the user to decide whether the full supplier’s invoice should be generated, or just the invoice lines, the default setting for all parties is now set to generate invoices.
If your requirement aligns with the module’s previous behavior, which did not generate an invoice upon activation, it may be necessary for you to manually override this setting. To do so, set default_purchase_invoice_line_standalone to True.


It’s now easy to extend the context keys that the caches must ignore.

For the calendar view, it is possible to scroll to a time, by default, by including the calendar_scroll_time key in the context. This is only supported by the web client for now.

Tryton will now warn when foreign relation records must be saved implicitly. This is to enforce a design pattern which groups together saving for performance.

Tryton no longer validates the domain for empty fields. This simplifies domain definitions for fields that are not required, as they do not need to care about the case when a field is empty. As side effect the clients don’t enforce the uniqueness of values in non-required fields.

The client now considers a domain that uses the in clause with a single value to be a unique value.

The target_search attribute of Many2One fields has been removed in favor of an automatic decision based on the number of rows in the target table.

The ORM now uses the EXIST operator instead of IN to search on One2Many fields when the target table has many rows.

Any needed tables are now locked at the beginning of the transaction. This guarantees that the latest values are read from the table. This is managed automatically by restarting the transaction if a table lock is requested during the execution of the code.

We added support for different types of borders on images and icons (but only for the web client).

The warehouse locations are now stored on the shipments at the point the are created. This ensures that the domain based on them stays valid during the whole life of the shipment.

The cookiecutter template is now included in the monorepo. This allows it to be versioned by series.

New exceptions have been added to stop the transaction but still return a result. This result can be an action for the client to launch.

To speed-up loading a list of records, the clients can now retrieve, in the read call, the string to display for selection fields.

We now use the “match pattern” to find accounting journals. This allows for more customization in the way a journal is selected.

The RPC calls to retrieve the list of selections for a field are now cached by the client for 1 day if they are based on a class method.

We’ve added an identifier_get method to the Product model that retrieves the first identifier that matches any of the identifier types passed.

The tariff codes now use the standard ir.calendar.month instead of a custom selection.

Authors: @dave @pokoli @udono


This topic was automatically closed after 30 days. New replies are no longer allowed.