The development of Tryton is back on the road after the release of the 4.8 series. Here are the major changes of this last month.
The maturity date represents information which has no impact on the accounting but on business only. So it is more flexible to allow to edit it.
When the cost method is on order and the invoice method is on shipment, the shipment cost is only invoiced when a shipment is done. Before there was an issue with this configuration.
Following similar changes for customer and supplier shipments, the customer return shipments support also to use the same input and storage location. In such case, on reception the shipment is directly marked as done.
The web client sao now supports URLs.
This allows users to communicate information by sharing URLs.
The syntax is quite similar to the one of the desktop client since the
'index.html
' has been removed but uses a
URL-hash instead of the full path due to the single page design.
The URL is updated to correspond to the active tab. The hash part can be
changed by the user (using copy/paste) to open the corresponding tab. This
allows to navigate back in the history of the browser.
The client parses the URL hash on login and launches the corresponding action.
The sessions are now stored in the localStorage of the browser. This means that the session per server and database can be shared between tabs and survive a reload of the page.
We have improved the navigation bar to provide more spaces to the tab list. We use an icon for the logout instead of a longer text. Now the favorites menu is a drop down of the global search. The toggle menu and Tryton brand are merged. Also it is now possible to toggle the menu for any size of the screen.
It is now possible to open the target record in a new
tab instead of a popup by pressing the
CTRL
key when clicking on the "open" button. This gives access to the
actions, relates and reports for this record like the right-click on desktop
client does.
Since we have the web client sao, the need of a Windows executable without installation is very low. More over it required administration rights to be run. So we have decided to stop publishing it in future versions.
On windows, the installer required to uninstall previous version before allowing to install a new one. In order to simplify the process, now it asks to uninstall the previous version of the same series. In silent mode, this is done automatically without any required intervention of the user which ease automatic deployment.
The export CSV window has been improved by moving the predefined exports under the buttons that manage them. This way the view is easier to understand and the predefined list is not the default focused widget (which created inconsistent selection state).
Draft documents, that are sent to customer, have not yet a date. For example a sale quotation does not have the sale date filled but the document should have at least the date when it was printed to define when starts the validity of the quotation. So we changed the templates to print the current date if no date is yet filled.
The new method Field.sql_cast(expression)
provides the database specific
cast of the field values in SQL
expressions.
For the evaluation of the child_of and parent_of domain operator, we used recursive ORM loops (or Modified Preorder Tree Traversal when available). Now all supported databases support the recursive common table expression (CTE), so we could use it as default implementation. Regarding performance recursive CTE is not better than MPTT but still avoid many round-trip compared to the recursive ORM loop.
We added a new Mixin as core feature. It provides all the needed features to manage record names in a tree structure and to check against loops. All the modules having such design have been updated to benefit from this generic implementation that is fully tested.
The Tryton server works on multiple database names (one way to support multi-company). But in shared environment, the list of database names can be very large and can leak information. For that, we added a new feature which allows to filter the list of database names per host name.
Until now, almost all reports were using English as fallback language because
the call to set_lang
required a language code and it was easier to hard-code
'en' than retrieving the default language of the database.
Now the set_lang
method allow as argument None
or an instance of ir.lang
.
When the value is None
, it uses the default language of the
database. This is a more consistent
behavior with the rest of the application. We have updated all the reports to
use this new feature.
The depends on methods was limited to only on_change
or on_change_with
methods. But it showed some limitations when trying the share common code
between different on_change/_with
methods. So we extended and generalized the
behavior. Now we can define dependencies on any
methods and use the @fields.depends
decorator on any method.