This is the 2020 change log for The lino-book package. General information about how to read and maintain this document in Documenting changes.


lino.utils.diag.Analyzer.get_complexity_factors() no longer yields the number of user_roles. Because I realized that this number is meaningless for discussing the commercial complexity of an application.


lino.core.site.Site.setup_quicklinks() no longer searches and executes a global function setup_quicklinks() in each plugin, but calls the new plugin method lino.core.plugin.Plugin.get_quicklinks(). The Model.get_simple_parameters method may now return an iterator (or a list or a tuple) of fields names.


Fixed two issues in lino_xl.lib.calview for #3769: "Week navigation causes calendar to mess up weeks" and "slave title says 'None in Week 50 / 2019 (09 December)'"

Released to PyPI : lino 20.8.2 and Lino Extensions Library 20.8.2.


Fixed #3766 ('NoneType' object has no attribute 'get_layout_handle' when trying to edit any combobox field in the lino.modlib.users.MySettings form.


Released to PyPI : lino 20.8.1.


The duplicate action is again visible for every user, not only for experts (users having lino.core.roles.Expert)

Adapted lino.sphinxcontrib.help_texts_extractor to a change in Sphinx that caused the help_text.py files to not get updated any more: the sphinx.addnodes.desc_signature node now stores the name of the described object now in the "ids" attribute instead of "names". I didn't understand every detail but it seems to work again.


Fix some issues using the recently released version 3.1 of Django (e.g. ImportError: cannot import name 'FieldDoesNotExist')


Fix #3745 (Lino says "partner: cannot be null" when trying to create a person).

Released to PyPI : lino_xl 20.8.1,


Released to PyPI : lino_welfare 20.8.0 and lino_weleup 20.8.0.


Released to PyPI : lino_presto 20.8.0.


Released to PyPI : lino 20.8.0, lino_xl 20.8.0, lino_avanti 20.8.0

Released to PyPI : lino_openui5 20.8.0


Auto-fill ref field using custom rule : The ref field of a client in Lino Avanti ("Legacy file number") can now automatically find the next available reference number. The current solution is hard-coded and just enough to satisfy the customer's requirement. Not yet sure whether it makes sense to generalize this feature.


Fixed two exceptions caused by a calendar entry with an auto_type but no owner (which is a checkdata problem because this case doesn't occur theoretically). The checkdata message "Has auto_type but no owner." is now fixable, it fixes the problem by setting the auto_type to None in that case.

Released Lino Extensions Library to PyPI.


Release to PyPI : lino 20.7.3 (just removed three dependencies, no functional changes)

Release to PyPI : lino 20.7.4, atelier, getlino, xl, avanti, tera, presto (several subtle changes, see blog)


Released to PyPI : welfare, weleup and welcht

Fixed two bugs: #3715 ("IndexError: list index out of range" after deleting from detail window) and #3714 (After saying No to Apply beid changes to client? Lino seems to apply them nevertheless.)

Released to PyPI : Lino and XL

Released to PyPI : avanti (should fix a failure in getlino test suite: Exception: Problem installing fixture '/home/lino/lino/lino_local/avanti1/env/repositories/xl/lino_xl/lib/uploads/fixtures/demo2.py': 'nathalie' : no such user)


Several bug fixes.

Released the following packages to PyPI: The lino package 20.7.1, Lino Extensions Library 20.7.2, Lino Tera 20.7.0, OpenUI5 front end 20.7.0.


Optimization for #3695: Upload.needed is now also included in the insert window.

Released XL 20.7.1 to PyPi.


Reactivated the weasyprint/top-right.jpg feature


Released to PyPI (all with version 20.7.0) : Lino, XL, Avanti.


Added a new method lino.core.requests.BaseRequest.clear_cached_status().

Fixed a bug in AnswersByResponse that caused remarks to always be stored next to the first question of a poll. Fixed a bug that made it impossible to edit the "My remark" field in AnswersByResponseEditor.


When LINO_CACHE_ROOT is set (e.g. on Travis CI), Lino forgot to add the site configuration directory to its list of config dirs. Another problem was that these "non-local site config dirs" (for example lino_book.projects.apc when run on travis) must come before the plugin config dirs.


Last changes in lino_xl.lib.uploads: MyExpiringUploads is now a dashboard item. Two new settings Plugin.expiring_start and Plugin.expiring_end.


Lino has a new admin command passwd.

Six releases to PyPI (all with version 20.6.0) : Lino, XL, Lino Presto, Lino Amici, Lino Avanti and React front end.



Added a new database field lino_xl.lib.beid.BeIdHolder.nationality_text. (#3681)


The item_vat option (whether we want to include VAT in the price of the items of an invoice) no longer depends on the VAT regime but is configurable as a new plugin attribute lino_xl.lib.vat.Plugin.item_vat

Released lino, xl and cosi to PyPI.


Changes in the lino_xl.lib.products.PriceRule model) require a database migration: Field event_type has been renamed to lino_xl.lib.products.PriceRule.selector. Field fee has been renamed to lino_xl.lib.products.PriceRule.product.


Fixed #3637 (can only concatenate str (not "__proxy__") to str).

WebIndexTestCase now (1) runs on the populated demo data (and no longer on an empty database created by the django test runner) (2) checks several variants of test_urls (3) tests them for each user (unless lino.core.site.Site.user_model is None)


Released Lino 20.5.1 and XL 20.4.2. With several internal optimizations that caused the test suites of book, presto, amici and welfare to fail.


Lino no longer allows several transitions for a same target state. Every state of a workflow can have at most one "transition" action for entering this state. This change imposes more discipline for application developers when designing a workflow definition. It has the advantage that you can now access the transition of a given state in order to change its configuration. For example Lino Presto uses this to change the lino_xl.lib.cal.MarkEventTookPlace transition. Added a new attribute lino.core.workflows.State.transition and a new exception "Tried to add another transition to <state name>". The lino_book.projects.workflows demo project is an example of an application that had to be adapted to this new limitation.


Added a new observable date range lino.mixins.periods.Weekly.

Released Lino 20.4.1 and XL 20.4.2.


Released to PyPI : lino lino-xl

Fix ImportError: cannot import name 'ZERO_DURATION' from 'lino.utils.quantities'


The has_open_movements choice to the observed_events parameter field of the lino_xl.lib.contacts.Partners table didn't work and was not tested. Fixed it and added test coverage in ledger: General accounting.


New method lino.core.tablerequest.TableRequest.gen_insert_button() is a generalized and no longer hackerish implementation of the hackerish solution used in the calview monthly view until now.

When the label of a table is None, the ExtJS front-end now suppresses the header of the grid panel (including the "open in own window" button). This is used by the slave tables in the detail layouts of the calendar views. But note that you cannot simply set label = None on the actor because that default value is overridden by the model's verbose_name_plural. So to get an actor without label you be more explicit and say:

def get_actor_label(cls):
    return None


Released to PyPI : react


New feature: every voucher model can now define its own workflow rules. This change required the workflow state field of vouchers to move from the Voucher model to the implementing MTI child models. This requires manual changes in the restore.py file when migrating existing data.


Released to PyPI : lino 20.1.1 and xl 20.1.4 (because amici, presto etc are failing on travis).


show_complexity_factors() no longer counts actions with no_params_window.


Fixed a bug that caused lino.core.choicelists.ChoiceList.preferred_width to be 4 for all choicelists. Wrote a new doctest utility lino.api.doctest.show_choicelists() so that application maintainers can easily cover these in their specs. Usage example is The apc demo project.


Released to PyPI : lino 20.1.0 and xl 20.1.3

Don't use get_head_lines for notify (Lino 26c8a9c11)

Fixed #3470 (Lino sets wrong booking direction in suggested bank statement item) and #3471 (Deleting a voucher item does not refresh the grid).

ItemsByVoucher now uses default display_mode for financial vouchers.

Fixed #3473 (eevat declaration doesn't generate movements). Added an exception "SumDeclarationField may not be payable" to avoid the pitfall.


Released lino-book 20.1.1 to make it installable via pip.

Changed the designation "Uploads" to "Upload files".


New plugin lino.modlib.publisher.

Changes in lino.modlib.notify.


Changes in lino_xl.lib.ledger and lino_xl.lib.vat. Fix booking direction of returnable VAT.

Done #3459 (Move calendar view from "cal" to a separate plugin lino_xl.lib.calview). One consequence for data migration: DailyPlannerRow has moved from cal to calview


The ShowInsert action now has a more specific help text.

lino_xl.lib.ledger.JournalsOverview has now display_mode "summary".

Released Lino Extensions Library 20.1.2.

More bugfixes in lino_xl.lib.eevat and lino_xl.lib.vat.


Released Lino Care 20.1.0 and The lino-book package 20.1.0 just to get the Travis CI builds green. Released Lino Extensions Library 20.1.1 for Lino Così.

More bugfixes in lino_xl.lib.eevat : Sales invoices to lino_xl.lib.eevat.VatRegimes.outside weren't handled correctly.


Released to PyPI : lino-react 20.1.0, lino-amici 20.1.0, XL 20.1.0