This month we kept refining existing features to improve the user experience, smooth workflows and empower users.
Contents:
Changes for the User
The subject of the marketing automation and notification emails can now be rendered using the value of the record. This way the subject can be more specific which increases the chances of it being opened.
We added a view that can be opened from the product that shows the incoming and outgoing stock moves by warehouse. Each move has cumulative quantity fields which help the user adjust their plans in order to avoid shortages.
The German federal ministry of finance announced on June 30 a cut in value-added-tax rates from 19% to 16% for the standard rate and from 7% to 5% for the reduced rate. As the tax cut is temporary, lasting from July 1 until December 31, we introduced new tax definitions into the account_de_skr03
module for the periods before, during and after the cut.
All the wizard messages have been reviewed and normalized. Now they use proper icons and all the unnecessary exclamation marks have been removed.
The default color for the graphs is now managed by the client instead of the server. So the client can be customized to use a color which fits nicely with the theme.
The party module has been updated to use the latest version of python-stdnum and so includes more tax identifiers for countries like Andorra, Guatemala, Japan, Moldova, New Zealand, Peru, Paraguay, Uruguay, Venezuela and South Africa.
If you are missing a standard identifier, we’d like to remind you that the best way to get it in Tryton, it is to contribute it to python-stdnum.
We keep the last average cost price for FIFO products when the quantity in stock is below zero.
We automatically remove any carriage returns from the fields in the FEC export as they are not allowed.
Any closed accounts are no longer shown when opening the details of the balance sheet.
The clients place copied records at the same position as newly created records. This means that the clients inspect the order applied to the list and deduce the correct place for the new record.
The stock move assignation wizards have been reworked and merged into a single wizard. This now provides four options if all the moves cannot be assigned: “Cancel” to restore the the moves to their initial state, “Wait” to leave the moves partially assigned, “Ignore” to set the quantity to 0 for non assigned moves and “Force” to force the assignation of all moves.
You no longer need to set analytic accounts on the move that balances the non-deferral account when closing the fiscal year.
The reconciliation wizard now keeps you on the same account/party after each reconciliation if there are still more lines to reconcile.
Changes for the Developer
We require the cost price to be filled in for all outgoing and incoming moves now. It was already filled in automatically by the code but this is now enforced to ensure the developer doesn’t forget it.
We also require a unit price for drop shipment and customer return moves.
We’ve added model
, record
and records
attributes to the wizards these are filled in using values from the active context. This simplifies and normalizes writing wizards.
Tryton also checks that the user has read access to the records before executing the wizard.
We have added a test to ensure it is possible to try and assign a move with unsaved values. This behavior is interesting because it allows you to set the value on the move as an assignation parameter while keeping the original values unchanged for the remaining quantities.
In order to minimize the data sent to the client, we now send only explicitly declared fields from actions instead of just excluding some. This is because we have found, over time, when a new field is added to the actions, we often forget to exclude it if it is not needed by the clients.
A common pattern used in Tryton to create grouped records is to use a list of tuples composed of key-value pairs. In order to use the itertools.groupby
we need to sort the list. But sometimes it includes None
values and in Python 3 it is not possible to order lists containing None
. So we’ve added a tool sortable_values
which takes care of this by providing a key function which can be used to order the list of values that may contain None
.
It is now possible to define a keyword action that applies to any model. This is useful when creating a generic action which uses the active_model
value.
We added an option to sendmail to raise an exception if it fails. With this it is possible to tie a transaction’s success to the sending of an email.
To the tools we’ve added a function to escape wildcards from strings.
It is now possible to define default values on routes. This can be used, for example, to set a default database on a simple route.
The session reset now uses an autocommit transaction which avoids an annoying concurrency error.
We’ve added an option to run cron just once. With this option trytond-cron
runs the pending tasks and stops. This is useful if you want to use an existing scheduler like the UNIX cron or the kubernetes CronJob to reduce the permanent load of a running service.
We’ve converted Invoice.update_taxes
into a dualmethod
. This method is often used when creating a single invoice so this simplifies the code.