Newsletter April 2018

Publicado: 2018-04-01 10:00:00+00:00 newsletter

To prepare the coming release 4.8, a lot of pending developments have been finalized before the development freeze. The release 4.8 is scheduled for 23rd April. Until there, we are requesting everyone to help us finding and fixing the remaining bugs. The translation process will start the 2nd April until 20th April at 20:00 CEST. You can contribute your translations on Pootle.


Erase Party

To help companies to be compliant with the right to erasure from the GDPR, a new wizard to erase a party has been developed. It erase personal information linked to the party like the name, addresses, contact mechanisms etc. It removes also those data from the history tables. But each module adds check to prevent erasure if pending documents for the party still exist.

Match against product category

All the matching criteria against product categories have been unified between all the modules. Any product category will match against itself or any parent category. This is the chosen behavior because it is the less astonishing.

Request depending on shipment method

The sale with the shipment method On Invoice Paid will create the purchase requests and/or drop shipments when the lines are fully paid. Before they were created directly on validation.

Sale reporting

The sale modules receive reports on aggregated data. The report engine allows to browse the Revenue and Number of sale per:

  • Customer
  • Product
  • Category
  • Country > Subdivision

Those data are over Period, Company and Warehouse. The reports also show a sparkline for the revenue trend which can be drilled down.

Purchase request quotation

The new module allows to manage requests for quotation to different suppliers. Each request will collect quotation information from the supplier. The preferred quotation will be used to create the purchase.

Improve reconciliation performance

The previous API to reconcile lines allowed only to create one reconciliation at a time. But as this can trigger the processing of the invoice for example, it can be a bottleneck if you are reconciling a lot of different lines like a statement can do. So the API has been improved in the most backward compatible way to allow to create many reconciliation at once.

Update chart of account

It happens that users need to customize the configuration of the chart of account that comes from a template. Until now, this would prevent any further update without loosing those customization. Now, the records that are synchronised with a template are read-only by default. A check box allows to edit the value and to remove the record from the update process.

Create second chart of account

Sometimes, user may create by mistake a second chart of account. There are very rare case when such creation is valid. As it is a complex task to correct such mistake, we added a warning when creating a second chart of account.

Spanish chart of account

The module, which was published for the first time in the last series 4.6, needs a deep cleaning. The last changes in the accounting modules raised concerns about choices made for this chart. So it was decided to temporary exclude the module from the release process and to not guarantee a migration path.

Import OFX statement

The new module account_statement_ofx implements the import of Open Financial Exchange statement.

Tax report on cash basis

The new module account_tax_cash allows to report taxes based on cash. A tax group to report on cash basis are defined on the Fiscal Year or Period. But they can also be defined on the invoices per supplier.

The implementation of this new module also improved existing modules. The tax lines are verified against modification on closed period. The registration of payment on the invoice is limited to the amount of the invoice.

New tax report definition

Until now, only one tax code was allowed per tax. This was too restrictive. For some country it was needed to create null children taxes to allow more complex reporting. Now, tax codes are no more defined on the tax but instead they contains a list of tax lines. Those lines can define the base or the amount of the tax. On the report, the lines of each tax code are summed per period.

Improve stock location browsing

When there is a very large number of location, the tree Locations Quantity become difficult to use. Especially if you are searching in which location a product is. So we added the option to open this view as a list, this way it is possible to search location by quantity of the product.

Inventory behavior for empty quantity

We found that there are two different expectation from users about the default behavior of the inventory when the quantity is not explicitly set. Some expect that the product quantity should be considered as 0. And others expect that the product quantity is not changed. So we added an option on the inventory to choose the behavior when an inventory line has no quantity.

Assignation in Supplier Shipment Return

Until now, the assignation process was not using children location but this did not work if the location was a view. So now, we assign using the children only if the location is a view.

Support same input and storage location

The supplier shipment support to receive the goods directly in the storage location. This way the invetory steps is skipped.

Create invoice for all sub-projects

Until now, only sub-projects having the same party were invoiced. With issue7096, an invoice for each different party will be created.

Fallback user for email notification

The email notification skip the recipients if the target field is empty. For example if a notification is defined on the Invoice with the Party as recipient and the Party has not an email address, then the invoice will not be sent. By adding a fallback recipients, the email is sent to specific user email which could be a secretary which will be in charge of sending it or a mailbox for a printer which will print it automatically etc.

Limit the expansion of tree

For now, it will no more be possible to expand a node that have too much records. This is needed to prevent to consume all the resources of the client. When such case happen, the client will switch to the form view where normally the children will be displayed in a list view.

Button registration

To ensure that all buttons may have their access rights configured. A new test has been added to ensure that all buttons are registered. We added also the string, help and confirm attributes to ir.model.button. So they can be shared between different views.

Expandable group widget

The group widget can be defined as expandable by adding the attribute expandable. If the value is 1, it starts expanded and if the value is 0, it starts unexpanded. Both clients support it.

Reset changes in pop-up

Until now, when changes on a record from a pop-up window were cancelled, the client reset it using the stored value from the server or delete it if it was not yet stored. Now, the clients will restore the record to the state it had before opening the pop-up.

Stability in rendering of web client

We have pushed many small improvements to sao, the web client, which fixes small jump of elements of the page:

Better keyboard navigation

The buttons of widget are now skipped from tab navigation in sao, the web client. The actions of those buttons are available via keyboard shortcuts.

Position and count on web client

The web client receives finally the label that positions the selected record in the list and shows the number of record in the list.

Editable list view

The management of editable list/tree has been completely reworked. Now the full row become editable on the first click. The focus is kept on the line if it is not valid. The edition is stopped when the user click outside the view.


More modules have been reviewed for tooltips:

Deactivated records

The clients shows next to the search input a toggle button for all model that can be deactivated. This allows the user to make search against deactivated records and to now that such functionality exists.

Simplified API for session management

The previous API was based on the ORM methods. This makes unnecessary more complicated to implement alternative session manager. So we created a simplified API agnostic to the ORM: new, remove, check and reset.

Exclude constraint

We have added the support for *EXCLUDE* constraints. An EXCLUDE constraint is a kind of extension to the UNIQUE constraint which can be applied on a subset of the rows and on expression instead of only columns. For more information, please read the EXCLUDE documentation of PostgreSQL.

This new constraint has been implemented on party category name to ensure that top level (parent IS NULL) names are also unique.

It has also replaced the unique email of web user to only applies to the active user.

Conditional class registration

It is now possible for a module to register class only if a specified sets of modules is activated. This replace the silent skip that existed previously. Existing modules that were using this silent skip must be updated to use the depends keyword otherwise they will fail.

Conditional field in XML

Sometimes a module depends optionally on another but it may need to fill in the XML record a field that is defined on the optional module. We added a depends keyword on the field which makes it ignored if the list of modules is not activated.

Deactivation of records

A new mixin has been added to add logical suppression to a Model. But also we ensure that the client is aware that the model is deactivatable. All the modules have been updated to use this new mixin.

Consistent context usage in proteus

Since the introduction of context management in proteus, the client library, the context management was taken from different places in an inconsistent way. We changed the library to always use the context and configuration at the time the instance was created. Some testing scenario may need some adjustment as they could rely on the previous behavior.

Bug fixes & Improvements

  • issue7183: It ensures that the legal notice and description of the taxes are correctly translated using the party language.
  • issue7163: It fixes the evaluation on the client sides for domain like [('lines', '=', None)] when lines is empty.
  • issue7164: The web client was wrongly sending deleted or removed lines for on_change calls.
  • issue7171: The module sale_subscription was not adding the Subscriptions to the Replace Party wizard.
  • issue7142: It adds missing modification check of the move when a line is created.
  • issue6560: The deposit business logic has been moved from the wizard to the invoice model to ease usage from the code.
  • issue3516: Improve the update of dunning level by removing write call from a loop.
  • issue7072: It rationalize and unify how context is built in the clients.
  • issue6833: The quantities are correctly synchronized between the supplier and customer moves of the drop shipments.
  • issue7078: We added a domain on the account children to ensure to have a consistent behaviour with the constraint from the parent.
  • issue7153: Now, get_reconcile_lines_for_amount returns actually the best combination of the lines.
  • issue7205: Clear cache of all ModelSingleton records as they are all the same but just the id change.
  • issue7175: It removes the silent failure option in the TableHandler.
  • issue7176: We added to sao, the web client, the same date and date-time widgets shortcuts as for tryton, the desktop client.
  • issue7143: The wizard runtime context is added to the wizard context.
  • issue6947: The sum list feature has been implemented to sao, the web client.
  • issue7201: It prevents float precision error after the division by factor.
  • issue5925: We upgraded sao, the web client, to use use the major version 3 of jQuery.
  • issue7172: The email for web user is only required for active user.
  • issue7238: The field description (aka label) is used as record name when available.
  • issue7117: The name of the context model is added to the context itself.
  • issue7241: The toolbar of read-only richtext widget is now correctly disabled.
  • issue7222: The asset lines are read-only as they are managed by the workflow.
  • issue6747: Income statement opens the general ledger.
  • issue7240: It fixes the time in the evaluation of PYSON.DateTime on sao.
  • issue7203: It applies the tax rule on standalone invoice line.
  • issue7249: A new test ensures that depends on _parent_ contains also the relation.
  • issue7248: Manage modal closing for Form and Wizard.
  • issue7262: A relate is used instead of a wizard to open the product cost history. So the window title will be more accurate.
  • issue7148: Disable button when clicked to prevent multiple execution.
  • issue7148: Create record with a synchronous call to avoid multiple creation.
  • issue7253: Extend the no stock move check from Product Template to the Product.
  • issue7263: Fix DATE_TRUNC custom implementation for SQLite.
  • issue7250: Add BC47 transformer and use it for toLocaleString and lang attribute.
  • issue7287: A deep copy of the context is done before processing the RPC. This prevent side effect when the call must be repeated due to database operational error.
  • issue7267: The French chart of account has the proper kind for the stock accounts.

Foundation Budget 2018

Publicado: 2018-03-15 12:00:00+00:00 budget foundation

Budget for 2018

The Foundation has decided to publish a budget for 2018. This is the result of requests from the community will to know what are the plans of the Foundation. Of course as the revenue of the Foundation relies only on donation, we can not guarantee that every things will be realized. Indeed we have ordered the points by priority. Each point will be activated once we have we reach its donation level.

We will like to thank everyone who donated to the foundation. Here are the donations from past years. Thanks to previous year donations, we started the redesing of the website. The first proposal is now available.

Budget points

  • 500€: Infrastructure (rental and maintenance of servers).
  • 750€: Miscellaneous management fees.
  • 1300€: Buy a new mac mini for better MacOS support.
  • 5300€: Organization of first hackathon by inviting key developers for a week-end.
  • 10000€: Organization of a documentation writing hackathon by inviting key developers and end-users for a week-end.

You can help the Foundation by making a donation. We will apreciate to get enought donations before the next tryton release, scheduled for 23th of April, in order to buy a new mac mini so we can improve the MacOS support.

Newsletter March 2018

Publicado: 2018-03-01 10:00:00+00:00 newsletter

We can see by the number of improvements and issues solved this month that the release 4.8 is approaching quickly,

Ice melting

Icon on tab

Sao, the web client, received the support of icon on tab of the forms. Meanwhile on the desktop client, the same icon on tab has been moved on the left of the label.

Stock quantity per template

The stock quantity was only computed per product because it is the column stored in the stock move. But it may be useful for some cases to compute the stock quantity per template. Indeed products from the same template share the same default unit of measure so their quantities can be summed. So issue7068 added on the products_by_location method the possibility to group by product columns like the template, but also a relate action from the template which show quantity per locations.

Spell checking

The spell checking is now activated on the web client. The spell checking can be activated on any text widget by adding the spell attribute with a PYSON expression that returns the language code.

More protections against flooding

A malicious hacker could flood the LoginAttempt table by sending failing request for different logins. Even if the size of the record is limited and the records are purged frequently. So the server limits the number of attempt also per IP network. The size of the network can be configured for each version (IPv4 and IPv6). This are only the last level of protection, it is still recommended to use a proxy and to set up IDS.

The web_user implement also the same protection.

Reset password

The administrator can now reset the password of the user with a simple click. The server will generate a random reset password which is available for 1 day by default and send it by email to the user. This reset password is only valid until the user has set a new password. It is also possible to reset this way the admin password using the trytond-admin command line tool.

Add cache when checking XML record

Tryton prevents by default to modify records that are part of the setup (which are created by XML file in the modules). This requires to make a query on the ModelData table on each modification or deletion. But usually only a few models have such records, so we could put in memory the list of models that should be checked. So this allows to skip the query for most of the models and thus save some queries.

Add depends on Button

Buttons can be defined with PYSON expressions for the invisible or readonly attributes. Some times, the developer wants to be sure that the field used in the PYSON expressions are read by the client. So a depends attributes have been added which ensure that the listed fields will be included in all the view where the button is displayed.

Remove deprecated feature on GTK+-3

As the desktop client development has switched to GTK+-3. A cleaning of deprecated features has started:

Database connection leak

The PostgreSQL backend uses a pool of connections for performance. During a load test, we has detected a leak of connections from this pool. Some code were not protected by a try/finally to ensure to put always put back the connection used.

A generic contact mechanism retrieval

Similar to the design of the addresses which can be flagged for invoice or delivery usage, the contact mechanism receive the same feature. So the code may now request a contact mechanism of a type and for a specific usage. For example, it is possible now to define which email address of a party should be used to send the invoices. The modules notification_email has been updated to use this method.

FEC export prior to closing fiscal year

It is often requested to be able to export the FEC on a non-closed fiscal year. So the issue5306 make it possible such export. In this case, the generated file will not have an official name as it is still a draft.


More modules have been reviewed for tooltips:

Bug fixes & Improvements

  • issue7085: The unittest for fields have been refactored to follow the best practice: Arrange, Act, Assert.
  • issue7041: The email notification module was putting in the email header the list of blind carbon copied emails.
  • issue7057: The import zip script from the country module is now Python3 compatible.
  • issue7071: Since few releases the date format from the user language was not correctly set and so the client was falling back to the system format. This is now fixed and a common method is used everywhere to ensure coherence.
  • issue7076: All ComboBox has been reviewed to ensure to disable 'scroll-event' and prevent 'move-active' when read-only.
  • issue7087: It prevents to get the same session keys when creating many session with one call. In practice, such call does not exist in standard modules.
  • issue7101: The Promotion registration was missing from the issue6827, this is now fixed. So now the shipment cost is really the unit price when computing the promotion.
  • issue7107: The shipping reference and label were kept when copying packages. But as those values come from the carrier, they should be reset.
  • issue7064: It enforces the consistency for the unit of measure between the display digits and the rounding factor.
  • issue7079: It ensures that all modules requested have been activated by the testing tools. The silent failure was often the source of time lost when writing tests.
  • issue7097: It fixes the string formatting of TrytonException under Python3.
  • issue7092: It improves the performance of Party.address_get by relying on the ORM cache instead of doing a search query. So successive calls to the method will no more perform a query to the database.
  • issue7118: With this change, trytond will not more try to delete translations when a record is deleted if it has not at least one translatable field.
  • issue7104: The shipment cost is improved to not be computed when no goods is shipped. But also in case of return sale, the original shipment cost is not re-computed.
  • issue7112: It prevents to set time converter with a value of zero because the clients do not support such configuration.
  • issue2939: We have closed a pretty old feature request which prevents to close a period if there are still running asset lines.
  • issue6931: The inventory should not remove line for inactive products as there could still be some quantity left in the location.
  • issue7011: The consignment create also invoice line when product are consumed at the production or from the production locations.
  • issue7083: The idempotency key for Stripe payment is always filled. Before it was only set if the checkout process was used.
  • issue7110: The context has a new optional key _request which contains some informations like the remote address, the HTTP host etc. Those values are correctly setup if the server run behind a proxy which set the X-Forwarded headers.
  • issue7022: The invoice lines from backorder are now correctly linked to right stock moves.
  • issue6987: The party required option is hidden for non deferral accounts because they do not support this feature.
  • issue7094: Fix the exception management in the desktop client following the refactoring from issue6907.
  • issue7120: In some cases, the SQLite backend did not create the columns with the right types.
  • issue5182: The usage of chardet to detect the encoding of HTML in the rich text widget was never fully reliable. Now we try common standard encoding and fallback to ASCII.
  • issue7106: The default search on party will now also search on contact mechanism.
  • issue7141: The API of Product.products_by_location and StockMixin._get_quantity have been changed. They no more accept a product_ids argument by only a grouping_filter. The two options were overlapping and creating errors when misused.
  • issue7159, issue7160 and issue7161: They fix the computation of price when the quantity is negative (aka return).

Newsletter February 2018

Publicado: 2018-02-01 10:00:00+00:00 newsletter

The is the second monthly news for Tryton. The developers have not been idle during the month of January.

A steaming lake with a sunset behind

XML Style

The XML style guideline has been updated to remove the constraint of 80 columns. It appeared that this rule did not produce good readable file. Instead we accept to have the opening tag on a single line or one attribute per line.


A new back-end trytond-gis has been added to support geographic types. It works with PostGIS for now but contribution is welcome to add others like SpatiaLite. The tryton ORM support the fields: GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON and GEOMETRYCOLLECTION; and the operators = and !=. Of course it is possible to write SQL queries that use other geometric operators thanks to the extensibility of python-sql.

Modify Header Wizard

On document like sale, purchase or invoice, there are often constraint that prevent to modify the header once a line has been filled. For example, on the sale it is not allowed to change the currency when there are lines. This is because the unit price computed on the lines depend on the currency selected. But in some cases, the user may really want to change those header fields because he wants to correct a mistake. Now it is possible to edit the header fields thanks to the Modify Header Wizard which takes care of recompute the lines according to the changes.

Sale with modify wizard running

Post Clearing Moves

A cron task has been added that will post automatically the clearing moves after a delay. The delay is configured on the payment journal.

Stripe Payment

If the customer disputes the payment, a dispute status will be update on the Tryton payment. When the dispute is closed, the payment is updated according if the company win or lose. Some missing charge events has been added. In particular, the refund event which may update the payment amount when it is partial.

New Version Notification

The desktop client has a new option to check if new version for the same series has been published. It takes care of the build for Windows and MacOS.

Register Mixin

A new mechanism has been introduced by issue4735 which allows to extend with the same Mixin all the existing pool objects that are subclasses of a target. A usage example is to extend the Report.convert method of all existing reports to add support for another engine.

Docker Image with libreoffice

Tryton is able to convert the Open Document generated files by the report engine into any format supported by LibreOffice. The default Docker image does not have the requirements for such conversion because it almost triple the size of the image. But now with issue7054, we will publish also images with the suffix -office which contains all the requirements.

Add mnemonic to label of fields

The desktop client had already mnemonic for all button. But with issue2312, they are also added to all field labels. This allow to jumb quickly to any visible field by pressing ALT + <the underlined key>.

Tryton form with mnemonic

Keyword for button

The current form buttons are automatically added to the toolbar under the action menu for fast access. Now with issue7067, the developer can define under which toolbar menu the button will be put. The available options are action, relate or print.

MySQL backend removed

We have decided to remove the MySQL backend from the core of Tryton. The back-end was not tested on our continuous integration server and so it has many failures like not supporting Python3. The current code has been move to its own repository. This module will not be part of the release process until some volunteer make it green on the test server.

Bug fixes & Improvements

  • issue7035: The MacOS X build since the switch to brew contained optimized code for the build machine. Now the build uses non-optimized options.
  • issue6946: The TimeDelta field uses now also the context of the Group of records to format its values. This also applies to the sum on list view.
  • issue7063: It enforces the consistency for the currency between the display digits and the rounding factor.
  • issue7058: The name attribute of the tag image can now be a field. In this case, it will display the icon from the value of the field.
  • issue6400: The currency module receives the tooltips as defined in this task.

Newsletter January 2018

Publicado: 2018-01-05 10:00:00+00:00 newsletter

As new year resolution, we plan to make a monthly post about what happened in the Tryton project.

A lake covered by snow


The annual Tryton Unconference 2017 took place from the 7th to 10th December at Liège. It started with 2 days of talks and finished with 2 days of code sprint. We also celebrated the 10th anniversary of the project with some drinks and cakes. For those who could not attend, the talks have been registered and the video and slides are available here (note: a technical issue prevented to correctly record the sound the first day but it is still watchable). Some pictures of the events have also been published.

Drop GTK+-2

The desktop client is supporting since one year both version of GTK+ 2 and 3. It is now time to have only GTK+-3 and thus be able to use new features of this version. The build environment for Windows and Mac has been updated to produce builds with the new version of the library.

New Release Process

A discussion started at the #TUL2017 to have longer term release for Tryton. A new process has been discussed which has a majority of positive feedback. So the series ending by 0 (like 5.0) will be supported for 5 years and the others for 1 year. We will keep the rate of one release every 6 month. The new schema will start with the series 5.0 which will be released the 1st October 2018.

Python 3

At the #TUL2017, we discussed about when to drop the support for Python 2 for which upstream support ends in 2020. So we must ensure to stop supporting Python 2 for any series that should still be supported in 2020. The result is that 5.0 will be the first release with only Python 3 support for the server side and also for the desktop client.

Order Line Description

The description of order lines (sale, purchase, invoice etc.) are no more filled automatically. This prevent to duplicate the content from the product form to each lines. But also simplify and speedup the creation of a line from the code. Moreover the product supplier information can be stored on the purchase line. This information can be used on the purchase line instead of the product information. It allows to search per supplier references and to display on the report as description for the line, the reference of the product from the supplier.

Promotion Coupon

This new module allows to create coupon that are used to apply a promotion on the sale. The coupon can be configured to be usable only a specific number of times globally or per party.

PYSON Domain Validation

For PYSON domain, the ORM have the simple strategy to validate records to group them per evaluated domain and then make a search per domain. But it is not optimal when evaluated domains are likely to be unique per record because this generate a search per record. A new case has been added to handle this which searches by grouping multiple domains at once and thus reduce the number of queries.

Dialog Size

Until now, dialog were created with a smaller size than the parent window. But it had the disadvantage to create quickly too small dialog windows. So this behaviour has been changed to use always the same size as the parent.

Query for currency rate

The Tryton design for currency rate is a table with the rate and a date from which the rate applies until another row is added for the currency with a later date. A new method has been added Currency.currency_rate_sql which returns a SQL query that produces for each currency the rate, start_date and end_date. This is useful to get a currency rate in a larger SQL query. This method uses the window functions if available on the database back-end to produce optimized query.

Standalone Lines Workflow

Tryton allows to work with standalone lines instead of pre-generated document to follow the grouping method of external sources. But this requires to have enough origin information to select them. So to improve the workflow the supplier stock moves show the purchase order and the invoice lines show their origin.

Reconcile from Statement

Some users have the workflow to reconcile the lines of the statement they just validated. For this we added a button on statement to launch the reconciliation wizard for the generated account move lines.

Bug fixes & Improvements

  • issue5233: The web client format the numeric values with the user locale but also use an input of type 'number' for editing. This allow to have the right virtual keyboard on mobile.
  • issue6875: The autocompletion was not shown when the user changed existing value in an editable list.
  • issue6978: The inventory lines is now read-only until date and location are filled.
  • issue6132: The user is warned if he tries to confirm a purchase order for a different warehouse than the warehouse of the purchase request.
  • issue7009: Catch all exceptions when evaluating value on pyson widget.
  • issue6934: Search and order translated fields using derivative language.
  • issue6915: Show in reconciliation receivable/payable with negative/positive balance
  • issue7005: Remove definition of rules on user. The group should be the only place where access rights are assigned to the user.
  • issue7014: Use a date instead of a boolean for reconciled field on invoice.
  • issue7013: Use canonical JSON form for Dict value.
  • issue7016: Add relate from drop shipment to sale and purchase.
  • issue7031: Fix missing party name on invoice report on series 4.6.

New Service Company

The company m-ds has joined the [list of companies providing services](/services.html) on Tryton.

Ongoing Works

Wesite Redesign

The Foundation has launch the process of redesigning the website as we reached the financial goal. A company has been hired to make this design but we are looking for your inputs.

New Version Notification

The work has started to provide to the desktop client notification for bug-fix releases. It is important because the desktop client is the only part of the Tryton suite for which the update needs to be managed by the user. And we often see users not updating it and reporting issues which have already been fixed.

Support for geographic objects

An external backend with support of geographic fields is under review. It will support only PostGIS in a first time but maybe SpatiaLite will be added in the future. The backend adds all the standard geometry type of columns and supports the operator = and != in the domain. More operations can be added by using python-sql.

Live streaming for the Tryton Unconference 2017

Publicado: 2017-11-23 12:00:00+00:00 TUL2017

The Tryton Unconference 2017 is only two weeks away. Registration is still open. But for those who can not make it, we will broadcast a live streaming on our Youtube channel.

The first day, 7th December 2017, is dedicated to business oriented talks.

The second day, 8th December 2017, is focused on developer talks.

Informations and registration are available at If you have question about the organisation, please contact the foundation at

And don't forget to spread the word! #TUL2017

Foundation board renewal 2017

Publicado: 2017-11-15 09:00:00+00:00 foundation

The 2017 foundation board renewal process has finished. We are happy to anounce that the new board is composed by:

  • Axel Braun from Germany
  • Jonathan Levy from the United States of America
  • Korbinian Preisler from Germany
  • Nicolas Évrard from Belgium
  • Pedro Luciano Rossi from Argentina
  • Sebastián Marró from Argentina
  • Sergi Almacellas Abellana from Spain

Congratulations to Nicolas Évrard as he became the second president of the Tryton foundation board.

We nearly reached the website redesign goal of our budget for 2017. You can help to make it happen by making a donation.

Tryton on Docker

Publicado: 2017-11-13 09:00:00+00:00 docker

In order to easy the adoption of Tryton, we are publishing Docker images images on the Docker hub for all series starting from 4.4.


They contain the server, the web client and all modules of the series. They are periodically updated and tagged per series. They work with the postgres images as default storage back-end.

The usage is pretty simple:

$ docker run --name postgres -e POSTGRES_DB=tryton -d postgres
$ docker run --link postgres:postgres -it tryton/tryton trytond-admin -d tryton --all
$ docker run --name tryton -p 8000:8000 --link postgres:postgres -d tryton/tryton

Then you can connect using: http://localhost:8000/

New Tryton release 4.6

Publicado: 2017-10-30 18:00:00+00:00 release

We are proud to announce the 4.6 release of Tryton.

This release is enhanced by the addition of 9 new modules covering many different topics. There has been also an effort in improving the graphical user interface and the user experience by fixing many small details. It is also good to note the inclusion of the Spanish charts of accounts which required some improvements in the standard accounting modules. Of course it includes many bug fixes and performance improvements.

As usual the migration from previous series is fully supported. Some manual operation may be required, see migration from 4.4 to 4.6.

Major changes for the user

  • In addition to the user name, company and currency in the title of the clients, we have added the profile or the login details. This way, the user can find faster the right windows.

  • The order of the toolbar has been reworked to have a more logical order and grouping. The same logical has been applied also on the toolbars of the widgets.

    Tryton toolbar order
  • On previous version, the headers of the column were always centered. Now they use the same alignment as the content following the best practice. Texts columns aligned on left and numerical columns on right. Also to improve the discoverability, editable lists have a grid design instead of just stripped row. This allows the user to know directly if it is editable.

  • Similar to the redesign of the button on relation field in the release 4.2, this release improves the design of the Binary and Image widget. Only the available buttons are shown instead of being disabled. But also before having the option to upload a new file, the previous file must be cleared. This prevents confusion to some users.

    Sao non-editable list Sao editable list


  • Under GTK+-3, a default theme has been added for read-only, required and invalid entries.
  • Also under GTK+-3, it is possible to add in the configuration folder a file theme.css which will be loaded as user theme. We have added Tryton's specific selectors: .readonly, .required, .invalid and .window.profile-<name>. The last one is useful to setup a different style to the windows depending of the profile.


  • The web client has now the same keyboard shortcuts as the desktop client. You can see them with ctrl+h. This make is simple to use without mouse.


  • A new wizard has been added to renew the fiscal year. It takes the previous fiscal year and some other parameters to create the new fiscal year automatically. The sequences can be reset automatically and the same number of periods are created.

    Sao renew fiscal year
  • On some countries, it is required to add a legal notice when some taxes are applied. This legal notice can now be configured on the tax to be included automatically and so avoid mistakes or oversights.

  • The tax rule system is the way Tryton configure the taxes to apply on an invoice for a party. This works by replacing the default tax by the one defined on the matching rule. Now it is possible to configure the rule to keep the default tax and add the rule one. It is needed to support tax mechanism from some countries like the equivalence surcharge for Spanish VAT.

  • The tax description which appear on the invoice is now translatable.

  • The payable and receivable accounts on party are no more required. This prevented the creation of parties when no default values was setup even if the values were not needed. Now, a message will be raised only when the value is needed for a particular operation.

  • It is now possible to search the amounts of the general legder. It is useful for example to get only the accounts with a balance.

  • The general ledger and the income statement can be computed for a range of date in addition to the sets of periods.

  • The configuration wizard allows to configure default receivable and payable accounts for categories and products.


This is a new module that aims to implement common accounting requirements in Europe. The first common feature added is the EC sales list.


A new module registers two default charts of account and taxes for Spain:

  • Plan General Contable Español 2008
  • Plan Contable para PYMES 2008


  • The tax identifier of the party invoiced is stored on the invoice. By default it is the first tax identifier of the party that is chosen but it can be changed. This is useful for tax reporting and when a party has many tax identifiers.
  • The Belgian chart of accounts has been adapted to configure the taxes for the EC sales list.


  • The clearing of payments only worked when paying a specific line. Now it can also work if an account is defined instead of a line. The common case is when you register a deposit for which you have no line but still want to register it once the payment is succeeded.

  • The manage of payment with Stripe received many improvements:

    • The user can now create manually Stripe payments. Usage showed that it may be needed and there was indeed no technical reason to prevent.
    • It is possible to select the specific Source of the Customer.
    • It is now possible to enter an existing Customer by filling its ID.
    • Tryton supports now the two steps payment flows. It is just checkbox to uncheck to activate on this flow. The amount can be changed between the authorisation and the capture and the capture is just triggered by a button.


  • When a statement is cancelled, if the generated move lines were reconciled, they are now automatically unreconciled. This ease the task of correcting a statement as it is no more a task to do for the user.


This new module adds the automatic import of CODA file as statement. The CODA format is a standard from the Belgian Financial Sector Federation which is supported by most of the Belgian banks.


This new module allows to define for a dunning procedure level to send an email to the party. The template of the email can be different at each level. The action of sending an email is logged into the system.


  • It is possible to restrict a location to have only one level of children. This allows to apply some techniques to improve the performance of the stock quantity computation and to support chaotic storage which requires to have a huge number of locations.
  • In addition to the wizard to split stock move, there is now a wizard to split a shipment. It asks for the moves to be sent to the new shipment. This is useful if the default order can be too big for the carrier.
  • There is a warning raised when a incoming or outgoing move is done without an origin. Until now, it was raised once for each move but with this release only one global warning is raised for all moves.
  • For the perpetual stock accounting, Tryton supports now the reversed drop shipment.
  • In order to register past move, the effective date of move can be set manually by the user.
  • In version 3.6, we added a new state 'staging' on move. But the constraint, that allows to delete only 'draft' or 'cancel' move, was not updated to allow also 'staging'. This is now corrected with this release.
  • A check has been added in order to prevent the deactivation of a location if there are still products in it. This way the conservation of products is respected.


This new module allows to manage consignment stock from supplier in the company warehouse and at the customer warehouse. The corresponding invoices are created automatically when products are used from such location.


This new module allows to define some storage location as movable. They can be moved by an internal shipment. This can be used for example to manage palettes.


  • The Drag and Drop has been activated on the project and work views.


  • The backorder of supplier are no more planned. Before they were planned at the same date as the initial order. But indeed as the supplier has failed once, the best assumption is to not know when he will fulfill it.
  • The confirmed purchases are now automatically processed thanks to a cron task.


  • The backorder for customer are planned for today. Before they were planned at the original shipping date. But this date may be already in the past so it is better to try to fulfill it as soon as possible.
  • The confirmed sales are now automatically processed thanks to a cron task.
  • It is now possible to define a default invoice grouping and the default shipment grouping method for new party.
  • When the shipment cost is invoiced on order, it is now invoiced only when at least one shipment is done.
  • Consumable products are not checked anymore when the quantity check is activated on sale.


This new module allows to register payments on sale before the creation of any invoice. When the payments for full amount of the sale are authorized, the sale is automatically confirmed. For example, this module is used to manage payment from a e-commerce website.


This new module adds under and over shipment tolerance on the sale. If the quantity of a sale line is under shipped but inside the tolerance percentage, then the line will be considered as fully shipped and no back-order will be created. If the quantity of a sale line is over shipped more than the tolerance percentage, then a warning is raised.



This new module adds the generic feature to send email to parties or users of document based on trigger conditions. The email can embed as attachment any report of the document. A common usage for this module is to send automatically the invoice to the customer when it is posted.

Major changes for the developer

  • The server supports to have a JSON as column type instead of TEXT column. To active it, it just require to alter the column type after the database creation. This is useful if you plan to use JSON functions or operators on the column.
  • The SQLite backend receive the alter_type and alter_size feature. This is implemented by recreating the table with the right types and inserting the old tuples.
  • The report engine, thanks to last version of Relatorio, supports Flat OpenDocument. This is useful for development as the file can be easily inspected and reviewed. But of course as it is a format not wildly supported, the result is still a standard OpenDocument.
  • Report template can now be defined as working on a single record only. This means that when it is requested for a list of records, it generate a zip file which contains each report in a separated file. This is useful for report like invoice which must be archived as unique document.
  • A new method on get_email in allows to retrieve an email instance with the template rendered for a record. The email can be multilingual and if the template is in HTML a plain text is generated automatically.
  • The extension for plain text is now txt. This is better for guessing mimetype using the extension.
  • To improve the security the session randomness has been increased to 32 bytes.
  • The server enforces natively the size of the requests to avoid deny. The unauthenticated requests are limited to 2MB and the authenticated ones are limited to 2GB. Of course those values are configurable. Until now it was recommended to use a reverse proxy for this protection.
  • The WSGI application support more configurations (TRYTOND_LOGGING_CONFIG and TRYTOND_DATABASE_NAMES) from environment variables.
  • The changes in sequence management of the new PostgreSQL 10 showed that we should move the queries about sequence to the back-end to provide an API independent of the back-end.
  • Just like we have a descriptor on Selection field to retrieved the translated value, there is now a descriptor for the Reference field.
  • To be able to use the cache on our new drone for continuous integration, the tests infrastructure support the cache for remote PostgreSQL.
  • The XML loader was missing the possibility to evaluate datetime values.
  • Some methods can not be called with duplicated ids. But often the developer does not think about testing this requirement. In order to prevent this category of issues, all RPC calls are checked against unique ids. Also the ModelView.button and Workflow.transition have an assert against duplicate ids to detect wrong call at development stage but without having performance impact on production.
  • In order to support testing external back-end, they can register through entry points specific tests to the standard sets of tests.
  • A new generic test has been added to check that methods for Function fields are well defined on the Model.
  • The trytond-admin command has a new option --install-dependencies which allow to automatically install the missing dependencies when updating the database.
  • When updating module list, trytond-admin will also delete missing modules not activated.
  • The URI for SMTP supports two new parameters localhost_name and timeout.
  • The ModelView removes automatically empty pages from notebook.
  • The root user can behave as any company or employee.
  • The model and record name of Reference fields can be exported.
  • The sequence field can be set on proteus ModelList by using the new method 'set_sequence'.
  • As Python 3.3 has reach it end of life, we do not support it anymore, but we support the new Python 3.6.


  • The method Move.query_get, which generate the SQL clause from the context, handles now the from_date and to_date as date range.
  • The default value of the move line has been greatly simplified. This removes potential bugs due to the complexity. And most of the features are better managed with the template move.
  • The deposit amount on party now shows a positive amount when the party has deposit.
  • All the function fields based on the MissingFunction have been replaced by Python properties. The problem with MissingFunction was that it may be triggered for the wrong record because of the pre-computation design of Tryton. The property ensure to raise error only for the needed record.


  • The tax sequence is now used as default values for the invoice taxes sequence.


  • An origin field has ben added to the payment. This allows to link payment to specific model like the sale in the module sale_payment.
  • The support for Stripe webhooks has been added. Some events are handled by default: charge.succeeded, charge.failed, source.chargeable, source.failed and source.canceled but more can be added easily in custom module.


  • A generic wizard which is the common basis to import statement from a file has been added. It is already used by the account_statement_coda.
  • To allow to import statement line with partial data, a new model has been added. The origin shares most of the fields with the statement line but with minimal constraint. The origin serves as basis to create lines. It shows the amount still pending to convert into line.


  • The commission plan does not match any more line for empty product.


  • The service products are enforced to have only the fixed cost method.
  • The cost price has been moved from template to product. This allows a finer grain computation and still compute an average cost for the template.


  • The performance of the average cost price computation has been greatly improved. The new algorithm minimize the number of save and take advantage of the replacement of Property by MultiValue from the previous release.
  • The constraint that enforce move location to be child of the locations of the shipment has been relaxed to apply only shipment states on which the move can be corrected.


  • In order to easily customize the address to print on the purchase, a python property report_address has been added on purchase.
  • The required constraint on the origin of a request has been dropped. It follows the doctrine that Tryton has only constraint that are programmatically needed because it eases the customization.


  • In order to easily customize the address to print on the sale, a python property report_address has been added on sale.
  • The sale price can also be computed by the price list even if no customer is defined.
  • The shipment cost price is rounded using the precision of the field it is stored on instead of the currency.


  • As done in trytond, the web user session randomness has been increased to 32 bytes.
  • The email used to login is managed as case insensitive. This is the most common and expected behavior.

Tryton Unconference Liège 2017

Publicado: 2017-09-08 16:00:00+00:00 TUL2017

From the 7th to 10th of December, the annual Tryton Unconference will come back to its birthplace: Liège. The conference happens later than usual to occur during the 10th anniversary of the first commit.

This will be the seventh edition. Users, developers and interested people will have the opportunity to discover or talk about Tryton.

The two first days will be the proper unconference. A first part will be dedicated to business oriented talks and a second part focused on developer talks. Talks can be submitted at

A Code sprint will be organised the 9th and 10th in the coworking space of LeanSquare.

Informations and registration are available at

If you want to request a talk on a specific topic, you can send your request to the Tryton mailing list. If you have question about the organisation, please contact the foundation at

And don't forget to spread the word! #TUL2017