We are proud to announce the 6.6 release of Tryton.
This release provides many bug fixes, performance improvements and some fine tuning. What is also significant is the addition of 10 new modules and support for the Ukrainian language.
You can give it a try on the demo server, use the docker image or download it here.
As usual migration from previous series is fully supported. No manual operations are needed to migrate from 6.4 to 6.6.
Here is a list of the most noticeable changes:
Changes for the User
The validation error messages have been improved to include the record name and the value causing the problem to make it easier for the user to solve the issue.
Saved CSV exports now have an option to include a header row or not.
We added a wizard which allows move lines to be delegated to another party. This is useful when a debt is transferred to someone else or when correcting mistakes.
When a delegation like this is done for an invoice move, the new party is stored as an alternative payee on the invoice. It is also possible to define the alternative payee before posting the invoice.
The statement lines now require a party to be set for any accounts that require a party. This gives direct feedback to the user instead of later raising an error popup.
Now, before posting a landed cost or a shipment cost, we show the user how the cost will be allocated. This helps prevent mistakes. Once posted it’s still possible to see the allocation.
It is now possible to create a commission manually. This is useful to record commissions that are calculated by another system.
The commissions can now be included (or not) in the stock margin report thanks to the contextual checkbox.
We’ve added country organizations, this is used to store a list of countries are currently in a organization. By default we create and setup major economic organizations like the European Union, the North American Free Trade Agreement, and Southern Common Market etc.
We’ve also added the UN M49 regions which group countries based on their geographical location. This is useful for reporting.
We now display the transport mode on the carrier list.
It is now possible for a party to unsubscribe from a scenario. This will prevent any new records (like sales) linked to the party from starting a new activity for the scenario.
The number of subscribed emails per list is now calculated. This is often interesting information, and can indicate the popularity of a mailing list.
The contact mechanisms can now be linked to an address. This is useful to record, for example, that a phone number is at a specific place.
The relationships between parties now have start and end dates. When the current date is no longer between the start and end date of the relationship, the relationship is automatically inactive.
We added reporting for purchases. It shows information such as the quantity, amount of expense and the trend. The reports can be grouped by supplier or product.
The sale reporting can now use the new regions to group sales.
Sales now support the collection of goods from the warehouse. This is done by simply using the warehouse address as the shipment address.
We now store which employee has processed the major states of a complaint. This is useful for auditing when something has gone wrong.
The subscriptions now have a revision number that increases each time the subscription is modified by going back to the draft state. All the modifications are also historized.
The sales opportunity now uses the default payment term for the customer if they have one.
The subscription services are now displayed on the product form. This makes it easier and faster to create a new service.
It is now possible to cancel a move that is done, if the stock period is not yet closed (but only by code). This allows shipments, that are cancelled in the middle of the workflow (for example after picking), to cancel the intermediary moves (and, for example, leave the outgoing location empty).
Outgoing shipments support pickup at the warehouse, if the address is the warehouse address.
It is now possible to reset packed customer shipments. This is useful when a user discovers a mistake just before shipping.
We no longer check that there are no consumable products in a location that is being deactivated. Only goods are checked.
If a user has set a stock lot on the supplier moves of a drop shipment, we copy the lot to the customer moves.
We added support for the preferred notification method for the DPD carrier.
We now use, by default, the contact mechanism linked to the shipping address for all the shipping services.
The Account Consolidation Module allows consolidated accounting reports for multiple companies.
Account Statement SEPA
The Carrier Carriage Module extends carrier support by adding carriers before and after the main carrier.
The Marketing Campaign Module helps to collect data about marketing campaigns.
Purchase Blanket Agreement
The Purchase Blanket Agreement Module manages long-term contracts with suppliers when purchasing a specific quantity of product using multiple orders over a period of time.
Sale Blanket Agreement
The Sale Blanket Agreement Module manages long-term contracts with customers when selling a specific quantity of product using multiple orders over a period of time.
Sale Product Recommendation
The Sale Product Recommendation Module provides facilities to implement product recommendations during a sale.
Sale Product Recommendation Association Rule
The Sale Product Recommendation Association Rule Module implements product recommendations based on association rule learning from previous sales.
Sale Promotion Coupon Payment
The Sale Promotion Coupon Payment Module includes the matching parties from the payments to count coupon usage per party.
Changes for the System Administrator
Modules can now register URLs as authentication services. The clients display these at login so the user choose between them. The only restriction is to be web based.
It is now possible to define which SQL method must be used for unaccent and similarity. This is useful to use an immutable unaccent method which can be used to build indexes.
The scheduler now uses the server timezone (instead of UTC) to work out when to run. This makes it easier to plan tasks to run during the office night.
For performance reasons the server now resets the user sessions less often. This makes session expiration slightly less precise.
Some browsers are now using a random name as the origin for requests from web extensions. The server now considers all of them as having a
We’ve added command line completion to all the Tryton’s scripts. For this to work argcomplete must be installed.
The server now enforces certificate validation when connecting to an SMTP server.
The web client now checks that it is of the same series number as the server (in the same way that the desktop client does). This helps earlier detection of a wrong installation.
LDAP authentication now supports STARTTLS connections.
It also enforces validation of the certificate.
Changes for the Developer
We’ve added the method
Reference fields which returns the SQL statement to extract the
id integer from a reference column. This ensures the same syntax is always used so it can also be used to build an index.
ModelSQL now uses a declarative syntax to define indexes. The database update process ensures the creation, updating or deletion of indexes based on the declaration.
The index engine chooses the best type of index to use depending on the definition and features available in the backend database.
The ORM defines, by default, indexes that are useful for common operations.
Field.select has been removed.
It is now possible to define values in a wizard state view that do not trigger on_change calls. This is useful when the wizard must display an existing record (like the modification header on sale and purchase).
Char fields now have a
strip option which automatically strips leading and trailing whitespace from the value. This option is activated by default.
We now strip only one wildcard when testing for fulltext search. This allows the user to double the wildcard when they want to have a non-fulltext search.
If no longer enforces exactly the same type for both branches.
We now allow
PYSON for the
size attribute of fields to be
None like the non-
We use a singleton for
TableHandler to speed up the database update process as we only need to fetch the table definition once.
An Account Types amount now supports a date range in the context.
The chart of accounts, analytic accounts and taxes now use a context model like the other reports.
When the payment service supports it, we mark parties as identical if they used the same payment means. This is useful to prevent people from using the same coupon with different accounts.
We now calculate the unicode flag for countries and subdivisions.
We manage dereferenced names in the tax identifier clause of Party.
We now use a
MultiValue field for the product lead time. This will allow it to be customized by company, for example. And we removed the
CompanyValueMixin from the default lead time as the lead time field does not normally depend on the company.
We removed the unused address on complaints.
The sales opportunity reporting has been refactored to follow the same design as the sales reporting.
Coupons can now count the usage for multiple parties. This takes advantage of the identical party feature of payments.
The synchronization between moves on a drop shipment has been improved which allows the stock lot to be synchronized.
The transit location can now only be used on internal shipments between different warehouses.
We removed the default currency on stock moves. This was error prone for any users who had to manually enter moves.
It is now possible to group by date the result of products by location. This useful because it is now used to calculate the quantity for each day of a period using a single query.
The service types for UPS have been updated.
We now store the cost of a shipment in the carrier’s currency.
The reset password emails now display the delay instead of a date and time in UTC. This is easier for the user to understand.
We now use the fulfillment order instead of the deprecated fulfillment.