Here are the latest improvements in preparation for the upcoming 6.2 release.
Changes for the User
The sale module currently provides reporting that displays relevant data grouped by products, categories etc. We now also have a general report that is not grouped but just displays totals.
The user will be warned if they try to post an invoice with a date in the future.
The web client now has a button to fold/unfold the selected records of a tree.
The Product Image Attribute Module adds attributes to product images.
Changes for the System Administrator
The errors that are raised during non-interactive operations (like scheduled tasks or queued jobs) are now listed in the administration entry. These error can be processed by a user, and once solved the task or the job is submitted again.
trytond-stat command displays the node name on which the process is running. This is useful when the directory that contains the stat socket is shared between multiple machines.
Changes for the Developer
ModelStorage class now has a
count() method that returns an estimate of the number of records stored. It uses caching and random invalidation to minimize the cost.
We now use
str instead of
repr when constructing the warning keys. This allows the same key to be constructed using proteus.
remove_forbidden_chars has been added to the tools as it is used by many modules.
ModelSQL.search method optimizes some queries by using a
UNION of sub-queries when clauses contain straight columns of the table and columns of a joined table. In these cases the database can use indexes.
The context can normally only be modified with the
Transaction.set_context context manager. In order to enforce this behavior, the context is now an
The title of emails generated from a report no longer contain the name of the record from which the report is generated.
The value of the
Dict field is an
ImmutableDict but the values must also be immutable. So we now use a tuple instead of list.
The server now uses the
bigdecimal type from
For performance reasons we use
__slots__ for the classes registered in the
Pool. But as this can be broken when one class does not define it we added a generic test which ensures that all the classes in the Pool have
When proteus is configured to use
XML-RPC, it authenticates on each request. This is slow as we are using a slow hashing method for security and to protect against brute-force attacks. Now proteus can be configured to use a session with
We unified the way we set email
From headers. Tryton now sets the
On-Behalf-Of headers when needed.