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 beforecreate
orwrite
on_modification
: to trigger processes when some records and fields have been modifiedcheck_modification
: to verify if a modification is permittedon_write
: to set methods to be called once the records have been modifiedon_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.