Newsletter July 2020

Development has reached cruising speed.
A major improvement has landed which reduces memory usage on the server by between 30% and 40% and increases its speed by around 15%.

Contents:

Changes for the User

The web client keeps the context on reloads even if the user preferences were changed in another tab. So this means that you can open one tab for each company and if you reload one of them by mistake, it stays logged in to the same company.

We have a rule engine that automatically fills in the analytic accounts on accounting move lines. But sometimes the rule engine is not properly configured or new cases get added. So, we’ve added a button on the lines with missing analytic accounts to reapply the rules after they have been fixed.

An optional shipping date has been added to the sale order. It allows the shipment to be postponed to on or after this date.

An employee criteria has been added to the selection of the commission agent. The employee used is the one who does the quotation for the sale. This, for example, allows rules to be created that provide commission to the employees that generate the sales.

The products and variants are now ordered using code and name by default.

We’ve added some fields on payment group to show aggregate information like the amount and the amount succeeded etc.

Until now a promotion was only applied if the price of all of the lines was reduced. But now it is always applied on every line for which the price is reduced.

It is now possible to credit an invoice without keeping the agent. Companies may not want to request reimbursement of commission that has already been given.

The stock moves unit price is now automatically updated based on the posted invoices when it is done. This helps keep a more accurate cost price calculation and ensures better reporting.

The taxes of the German chart of account have been updated to follow the new rates between the 1st July 2020 and the 31st December 2020. The patch should be applicable on previous series if you need it.

Changes for the System Administrator

We added the inherited name or type to the view record name. This makes it easier to select the correct view when creating an extension from the administration interface.

Changes for the Developer

The name of “cancelled” state has been unified across the whole application.

The scripts written using Proteus now also support the TRYTOND_DATABASE_URI environment variable the same way as the trytond commands.

Records are now stored internally using a custom class instead of a generic dictionary. This has reduced memory usage for records by between 30% and 40%. We have also improved the average access time for field values by around 15% by using a shorter execution path.

The hash method used with records has been improved to reduce collisions between unsaved records. This speeds up the calls to ModelStorage.save when used with new records.

We now provide a cached_property decorator in the tools. By default it is the new decorator from the Python stdlib with a fallback to the Werkzeug version.

Tryton will not write to existing targets when re-adding them on xxx2Many fields. This is an operation that the clients always sent when the field was modified because they didn’t know if the records were existing targets. This change prevents access errors from being raised when the operation is not allowed.

The Python evaluation of domain with a None value now always returns None. This implements the same behavior as the SQL evaluation.

We’ve added a parameter to the Stripe payment so they can be charged on-session. This is useful when implementing a checkout form using the sale payments.
We now support the webhook payment_intent.cancel event. This is useful if you give your customers the option to cancel their payment intents.

4 Likes