Tryton Release 7.6

We are proud to announce the 7.6 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

We added a new menu entry on the list to reset the column widths to their original size.

A new widget has been added on the form to pick a color.

A simple chat widget has been added on the sidebar in beta.
It allows to chat in live between users on specific document.

When saving a CSV export, the option to ignore the search limit is now stored also on the server.

Web

It is now possible to resize the column widths (like on the desktop client).

Accounting

As creating payment term is not always easy, we provide now by default the most common payment terms like “Net 30 days”, “Net 30 days End of Month” etc.

The legacy numbering of account move based on journal has been removed and the Post Number field has been renamed to Number.
Also the numbering of account move is using now a strict sequence to guarantee any missing number.

The sign of the amount of account and analytic budgets has been inverted to be the same as the income statements.

The Spanish AEAT reports is not using a start and end periods instead of a list which may not be continus.

Depending on the payment method, it is no more always needed to group payments to process them. For example, Stripe and Braintree payments do not create a payment group as they are managed individually.

It is now possible to download all the SEPA message at once.

When entering manually, the statement is using its start date to compute the start balance instead of balance of the last statement. This is useful if for some reasons, you are not entering the statements in the chronological order.

We added a new report displaying each statement journal with its latest date and balance.

It is now possible to order by preferences the bank account of a party. Currently Tryton always pick the first one by default.

Sale

We manage now the expiration of quotation. A validity duration can be configured for the quotations. It is not possible to confirm a quotation with a sale date after the expiration date. When a quotation reaches its expiration without being confirmed, it will be automatically cancelled.

It is now possible to open a list of all the products from a sale order. This is useful for example to verify the available quantities at once.

A new action has been added to the complaint to create automatically a coupon number from a promotion. It is a common practice to answer to customer complaint by giving them such coupon. This feature prevents to give the access right to create coupon to the user managing the complaints.

The actual quantity of the sale line is now used when processing a complaint instead of the ordered quantity.

We added on the sale the original amount and total before any promotion was applied. This is useful if you want to show those amount to the customer.

We added a menu entry to open all the coupon numbers of promotion. This eases the management when you have a lot of coupon numbers.

Now if a secondary unit is defined on the product customer, then it is filled automatically on the sale line.

Purchase

A date has been added to the purchase orders to store when the quotation will expire. This improves the following of quotations before they expire.

Now if a secondary unit is defined on the product supplier, then it is filled automatically on the purchase line.

Stock

We display the quantity of product when searching for a location; product or lot from a stock move.

The internal shipment gains a packed state when it is between two warehouses. This way we support also to create packages and shipping labels for such shipment.
We also compute the measurements for the internal shipments as needed for some carrier.

The location place is now displayed on inventory line to help finding the products in the location.

Company

It is now possible to define which tax identifier to use for a company per country and/or organization. For example a Belgian company with a Belgian VAT may have a French VAT number when doing business in France.

Country

Tryton can now search subdivision by their shorted code. This provides a better user experience as the full subdivision codes are often prefixed with the country code that the user usually do no type.

Incoterm

We do not require anymore the Incoterm for sale between European countries.

Notification

It is now allowed to set a fallback user on notification without a field set. So the user is always notified.

Party

We support now to enter structured address (with entries for the street name, building number, post box etc), then such address will be formatted following its country. We include in standard the format of 222 countries.

We notify the user if he is about to create a contact mechanism that already exists.

We added new tax identifiers such as the Brazilian Company Identifier, the Canadian Business Number and the Croatian Identification Number.

Web Shop

On Shopify, we archive products that are removed from the shop instead of deleting them. This way if they are added back, we do not loose any customization done in Shopify admin.
In the same way, we do not update the product description if it is empty so they can be fully managed in Shopify admin.

Changes for the System Administrator

Web User

We allow users of the *Party Administrator" group to edit web users.

Changes for the Developer

Server

To follow the official supported Python version, the support of Python 3.13 has been added and support of Python 3.8 has been removed.

We lock now records at the transaction start like for the table.

We include a DecimalNull in the tools that behaves like the SQL NULL by with Decimal.

We introduce a chat backend as beta.

Transaction.check_warnings is now a dictionary used to delete warnings all at once at the end of the transaction.

The target model of a field is now stored in ir.model.field.

The ModelStorage has been reworked to add dedicate hooks that replace and simplify in many cases the need to extend the create, write and delete methods. There is now:

  • preprocess_values: to prepare the values before create or write
  • on_modification : to trigger processes when some records and fields have been modified
  • check_modification: to verify if a modification is permitted
  • on_write: to set methods to be called once the records have been modified
  • on_delete: to set methods to be called once the records have been deleted

And there is now a ModelStorage.compute_fields method used to store new values for computed fields.
All those changes allowed to remove almost all the extension of the CWD reducing the complexity and improve the performance.

The select timeout for the cache channels is now configurable.

The series of trytond is now stored in the database. This allows the server to prevent to use by mistake a database from a different series.

The wizard state views are now filled with the default values. This removes the need to use getattr with a default value.

As passlib does not support Python 3.13, it has been replaced by pwdlib.

It is now possible to limit the size of the RPC arguments. All the standard RPC methods have been reviewed to add such limitation when it makes sense.

The field_names argument is now optional when calling Model.default_get.

The XML data are now always synchronized with the database. So the ModelStorage.check_xml_record method has been removed.

When searching on Char and Text, the None values are converted as empty string which is the expected behavior by users.

It is now allowed to return instances as default values instead of id. The server will convert them automatically into ids for the client.

The metadata columns are now added automatically to the query of the ModelSQL.table_query.

The Report.header_key receive now also the data on which the report is executed. This permits to group records based on data from a wizard for example.

The integer part of the digits attribute is now also validated by the server.

We added the support for DATE_TRUNC and EXTRACT from INTERVAL to the SQLite backend.

Tryton now supports up to 4 translations depending on the plural setup of the language.

The methods msg_gettext and msg_ngettext are now available in the report context.

Tryton set the Decimal precision of the default context from the TRYTOND_DECIMAL_PREC environment variable.

We replaced the use of docstring of Model by a __string__ attribute filled with a default value based on the __name__ value. This allow to run the server with the level 2 of optimization of Python.
The name field of ir.model has been renamed into string and model into name and the field_description of ir.model.field into string.

Proteus

We added an helper function launch_action which allow to launch an action on a lits of records using its XML ID. This ease writing scenario to test those actions.

Client

A new type has been added color for the icon and image.

Accounting

A company argument has been added to method to check the credit limit to be explicit for which company is the amount it checked instead of relying on the contextual value.

The description field on payment has been renamed into reference to follow the Tryton naming convention and reflect the actual usage.

The Stripe checkout is now using the Payment Element.

Party

The name field of address has been rename to building_name.

The co_rut tax identifier has been replaced by co_nit.

Sale

We have added a scheduled task to confirm sales based on payment. This is to strengthen the process in case the payment is succeeded and the sale can not yet be confirmed.

We removed the name field on the promotion coupon.

5 Likes