Tryton Release 5.8

We are proud to announce the 5.8 release of Tryton.
This release provides many bug fixes and some significant improvements. Among other changes you will find big general performance improvements, a new theme for the web client and support for web shops.
You can give it a try on the demo server, use the docker image or download it here .
As usual the migration from previous series is fully supported. Some manual operation may be required, see Migration from 5.6 to 5.8.

Here is a list of the most noticeable changes:

Changes for the User

Sending a report by email from the client has been completely reworked. We no longer rely on the local email client but now the emails are sent by the server on behalf of the user.
It is also possible to setup predefined templates including: the subject, the body, the recipients and the attached reports.

The clients can now display, next to a value, the symbol from its unit of measure or its currency. This helps lighten the user interface and avoid confusion. All of Tryton’s forms and lists have been update to use this new feature in the appropriate places.
When using a list view that uses this feature you can still search for a particular unit or currency.
Sale lines and totals showing symbol

The administrator can share a user’s existing search bookmark with all the users. In this case the shared bookmarks will only be editable by the administrators.
This is useful if you want to setup a common search query that is often performed by many users.

The clients update the state of the delete button, and whether records can be edited, based on the dynamic access rules defined in the record rules. This of course compliments the existing rules based on access groups.

The clients place copied records at the same position as newly created records. This means that the clients inspect the order applied to the list and deduce the correct place for the new record.


The check boxes on editable list views can’t be checked/unchecked without first selecting the row.

The report name, proposed by the client when they are saved, now contains the name of the records on which it was based.

The CSV export now formats the duration values. It uses the same locale format as the client, or when the locale option is not activated, it uses the total number of seconds.

It is now possible to import a duration value from a CSV file.

When a view for a model is opened without a name (e.g. using an URL), the client will use the default model name as its title (instead of nothing).

The default colors for graphs and calendars can be configured on the client side.

The URL, provided on the export CSV dialog, now includes the current context.

Web Client

The web client now comes with a default Tryton theme (instead of the default Bootstrap theme) based on Bootswatch Paper. The theme can be deactivated or replaced on installation.

If a user opens multiple browser tabs, all connected to the same server, any changes to the preferences are kept per tab and survive a page reload. This allows the user to change companies on one tab, and if they reload the other tab it will stay linked to the original company.

The totals shown at the bottom of a list are now always visible even if the list is longer than the screen.


Tryton now puts the field name in the input name attribute. This helps the browser suggest smarter auto-completion.

CSV exports are now always encoded in UTF-8. This is because browsers do not provide a standard way to use a different encoding format.

PYSON expressions can now be written using the .get, .in_ and .contains methods as in the desktop client.

Tryton now uses a new library for the date time picker which improves where the popup gets positioned.


It is now possible to open any general ledger accounts that require a party. This shows a breakdown of the balances of the account per party.

The tax rule lines now have a start and end date which are used as criteria to determine when they are applied. This is useful, for example, for companies that need to start applying VAT for other European countries (because their turnover has reached the appropriate threshold).

Each invoice line can now define a specific tax date. This can be used when a credit note is posted that applies to a previous period during which, for example, the tax rate was different. Now the credit note will have the same tax calculation without the need to change the accounting date of the invoice.

The reconciliation wizard now keeps you on the same account/party after each reconciliation if there are still more lines to reconcile.

We’ve added some fields on payment groups to show aggregate information like the amount and the amount succeeded etc.

It is now possible to delete or detach a source from a Stripe customer. This is useful if you know that a specific source can no longer be trusted.

We can now limit the application of a landed cost to only moves of a shipment that are in a specific category of product or that are for a set of defined products. This is useful when the landed cost is due only for a part of the shipment.

We have a rule engine that automatically fills in the analytic accounts on accounting move lines. But sometimes the rule engine is not properly configured or new cases get added. So, we’ve added a button on the lines with missing analytic accounts to reapply the rules after they have been fixed.

There is a new option available when creating a credit note for an invoice. This option allows you to keep, or clear out, the commission agent so the commission gets reimbursed when required.

The unit price of the stock moves are now automatically updated based on the posted invoice lines that they are linked to. This ensures, for example, correct reporting of price changes between the receipt of stock and it being invoiced.


We’ve added an option to deactivate a payment journal. This is useful when the company stops working with a specific payment provider.

We added the lower tax rates for period between 2020-07-01 and 2020-12-31 in the German chart of accounts.

The EC Sales list, Spanish VAT list and Spanish EC Operation list are now always reported in the company currency.

The credit notes are now reported on the modification tax code for the Spanish chart of accounts. It also contains a tax group for purchased services.

The French chart of accounts gains a purchase tax for services from outside the European Union. The base amount for services sold inside and outside Europe are now reported respectively in code 0206 and code 0033.

Tryton now supports cancelling a posted landed cost. It is useful if mistakes are detected after posting.
We’ve also added a relate from the supplier shipment to open the landed cost applied to it.

Tryton no longer forces you to set analytic accounts on the adjustment move that balances the non-deferral accounts at the end of the fiscal year.

The selection of the commission agent on a sale can now be based on the employee that fills out the order.

We’ve added party identifier validation for more countries: Andorra, Guatemala, Japan, Moldavia, New Zealand, Peru, Paraguay, Uruguay, Venezuela and South Africa.


On release 5.4 we added the option to set the product code using a sequence. On version 5.6 we split the code between a prefix (on the product) and a suffix (on the variant). To complete the feature we also added the option to set the prefix of the product using a sequence.


Now is possible to define a production picking and output location on the warehouse. The picking location will be used as source of the production inputs and the output location will be used as destination of the produced locations. This allows companies to have special locations for the products related to productions.

The waste locations of the warehouse can also be used to indicate that some of the produced products are broken and can not be stored in the warehouse.

A scheduled task has been added to automatically reschedule past productions.

Now when a production does not use an input product, the cost of the output product is kept as-is. This is so a blank operation has no effect on the global cost of the product.

We’ve noticed that the User Experience, when starting and stopping production works, was a little bit complicated because you needed to create new cycles or find the currently active one. To help fix this we added Start and Stop buttons on the works. This simplifies the workflow by automatically creating and stopping the active cycle. These buttons can also be used as a timer to calculate the time spent on a production.


When a product is returned, we use the cost price attributed to it when it was delivered to account for its return. This ensures that the operation has no effect on the global cost price of the product.

An optional shipping date has been added to the sale order. This allows the sale’s shipment to be postponed to on or after this date.

Until now a promotion was only applied if the price of all of the lines was reduced. But now it is always applied on every line for which the price is reduced.


A new picking step has been added to the customer shipment workflow. This step is used to update the outgoing moves based on the inventory moves. This simplifies the packing step especially when lots or packages are used.

A scheduled task has been added to automatically reschedule past shipments.

It is now possible to throw away damaged and defective products straight from a delivery to a lost and found location. Instead of having to do a separate internal shipment after the delivery has been received.

From the locations or warehouse quantity view, it is now possible to open a view that displays the lots contained in the location or warehouse along with their quantities.


The default locations for a product can now be defined on the product instead of the variant.

The available waste locations (lost and found) are now defined per warehouse.

We added a warning when the user tries to do a move in the future.

For large inventory lists, we added a relate that opens the lines in a separate view where searching and ordering can be done.

We developed a simplified view for the moves displayed on the shipment.

On the product form we added a relate that opens the list of stock moves associated with the product.
We also added a similar action to the product quantities by warehouse view.

The wizard to create inventories for a set of locations now has the options to empty quantities and complete lines.


The title of marketing email can now use a Genshi expression based on the record. So the email subject can contain the document number for example.


It is now possible to consult the logs of the email notifications directly from the document that generates it. A relate entry has been added to each potential source that opens this log view.

The email subject can now be customized to replace the name of the report on which the email is based.

New Modules

Sale Discount

We’ve added a new module to manage discounts on sales. This module adds two new fields: discount amount and discount percentage. Both fields can be used to calculate the final price for the customer based on the product’s list price.

Account Payment Braintree

This new module adds support for using Braintree as a payment processor. It is similar to the existing Stripe module but the main advantage is that Braintree supports Paypal which is an popular payment method for e-commerce.

Stock Assign Manual

Sometimes the picking workflow of a company may be complex and so it can not rely on an automatic assignation. This module adds a wizard on shipments and production that allows you to decide from which precise location to pick products.

Web Shop

This new module provides the ability to store the configuration and setup data for an online web shop including things like the products sold per web shop, the currency and language used etc.

Vue Storefront

This module provides the back-end used to integrate with Vue Storefront, an open-source front-end for e-commerce.


This module extends the Vue Storefront integration to support Stripe payments.


The attendance module allows you to track the entry and exit time of employees. With this information Tryton generates an attendance report where you can see the total duration the employee spent working at the company and the full detail of entries and exits. If the timesheet module is activated, the report also includes the total duration from the employee’s timesheets for the day.

Marketing Email

This module provides the features needed to manage mailing list subscriptions from your website.
It can also send emails to all subscribed addresses on a list and provide statistics about the emails and what links have been opened.

Changes for the System Administrator

Tryton stores some parameters from the configuration when the database is initialized. These are parameters that cannot be changed later (e.g. the number of digits for the internal prices). Now Tryton will ensure that the configuration value is still the same as the one stored in the database. This prevents the use of a database that contains the wrong configuration.

We’ve added a scheduled task that cleans out any old queued tasks. By default it removes any tasks that finished at least 30 days ago.

We’ve added an option to run trytond-cron only once. This is useful when you want to delegate the cron wake-up to an external tool like Unix cron or Kubernetes CronJob to avoid running an extra service.

We removed the password_sms authentication method because now authentication method can be composed. So you can replace it by password+sms.

Changes for the Developer

Records are now stored internally using a custom class instead of a generic dictionary. This has reduced memory usage for records by between 30% and 40%. We have also improved the average access time for field values by around 15% by using a shorter execution path.

We added an option to sendmail to ensure that emails are correctly sent, if there is a problem sending an email it now raises an exception.

The Wizard now has the attributes model, record and records which are cached and simplify the code. An additional advantage is that this also ensures that developer will not make mistakes like using the wrong model to instantiate the ids.

It is now possible to define a keyword action that applies to all models.

You can now define default values for an application route. This is useful, for example, to create an API without the database name in the path.

The authentication methods can be combined which allows multi-factor authentication to be setup without needing any development, just configuration.

The server no longer writes to records of xxx2Many fields that are already present. This is useful because the clients always request these operations because they do not know the state of the targets.

The fields.depends now also supports the python property attributes.


We removed support for Python 3.5 (which is no longer maintained).

Tryton now checks and enforces read access on the records used to execute a wizard.

The PYSON statement can now compare date and date time values.

We added the format_datetime method to Reports to allow the date time to be formatted according to the language of the report.

We now allow the number of digits to be overridden when calling the methods Lang.currency and Report.format_currency. This is useful when displaying internal prices which often have a higher precision than the official currency.

It is now possible to limit which data is loaded from the XML files depending on whether a specific language is translatable or not. This is used, for example, to only load the minimal chart of accounts for the active languages.

Now when Tryton automatically registers a missing report, it will also apply any mixins that are registered.

The parsed report templates are now kept in memory for faster access. This also avoids unnecessary writes to a temporary directory.

We now support the Genshi MsgDirective. This may improve the quality of translations.

We renamed all the “cancel” and “canceled” states to “cancelled” in all the modules.

We added some new tools: sortable_values, cached_property, escape_wildcard and sql_pairing.


It is possible to define a tax date property on the taxable lines.

We now allow payments to go back to processing. This is useful when synchronizing the payments with an external provider because it avoids using the failed state just to update the amount.


We’ve added a domain on the invoice’s journal.

We now link the Spanish “recargo” tax to its related VAT tax. This is used for reporting.

The method Invoice.update_taxes has become a dualmethod (so it can be called from an instance or a class).

We now support the Stripe webhook used when payment intents are cancelled.


We have unified the assignation wizard. Now productions use the same wizard as shipments.


The shipment cost calculation has been refactored to allow it to be calculated without needing to create a new line.


We have factorized out the cost calculation for the cost price of the moves. This ensures the same mechanism is used everywhere.

Now the grouping values, used to assign a move, are set to the assigned move. For example, if you customize Tryton to use the lot for grouping, it will automatically set the lot found on the move.

We have unified the assignation wizard. Now all the shipments use the same wizard.

It is now possible to override the warehouse of the user with the value from the context.

We’ve added the missing access rules to the view “Product Quantities by Warehouse”.

We now ensure the cost price is filled in for some moves using a required state. This allows you to detect coding mistakes faster and ensure data integrity.


The web user can now be attached to a list of secondary parties allowing them to act as any of these parties.


A post was split to a new topic: How to replace web client theme

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