Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
2025¶
This is the 2025 change log for Lino. Learn how to read and maintain this document in Documenting changes.
2025-03-31¶
The lino.modlib.linod.Runnable
mixin has a new database field
lino.modlib.linod.Runnable.requested_at
and a new action to cancel a
manual request to run a job. Manual run requests are now handled a bit
differently.
The lino.utils.format_date
module has a new function for formatting
timestamps: lino.utils.format_date.ftf()
. See
Formatting timestamps.
2025-03-25¶
Added a new plugin setting lino.modlib.weasyprint.page_background_image
used to customize the pdf of an invoice.
2025-03-25¶
New feature “Quick-fix data checkers”. We use it in Lino Prima on
Group
and Certificate
where the combobutton with three
actions (“Check for problems”, “Fix them” and “Show the messages”) feels like
overkill, we prefer Lino to fix any problems instantly with a single button
click. The current implementation isn’t documented because it’s not finished and
might change significantly. But it works for us so far: When a model has a class
attribute quickfix_checkdata_label
, which is assumed to hold a
translatable string, then Lino adds a single button that runs all checkers with
fix=True, and the string is used as the label for this single button.
Side-effect: CheckerAction
no longer requires a model at instantiation.
2025-03-23¶
The slave panels AuthoritiesTaken
and AuthoritiesGiven
now
have an optimized details_of_master_template
“Authorities taken by
Username” and “Authorities given by Username”
2025-03-22¶
I removed pm buildsite
again, and pm buildcache
now also runs
collectstatic
.
2025-03-21¶
The methods mark_virgin()
and check_virgin()
have been moved from
lino.core.site.Site
to a separate module lino.utils.dbhash
because these things are never needed on a production site. I wrote a
documentation page that explains the topic: The lino.utils.dbhash module.
2025-03-20¶
pm buildsite
no longer calls install
nor makehelp
. It
does exactly what buildcache
does, plus an option -c
to also
run collectstatic
, and it defines -b or –batch as aliases for
–noinput. The advantage is that after an upgrade you can type pm buildsite
-bc
and then focus on other things rather than waiting for pm buildsite
to
finish and then typing pm collectstatic --noinput
.
New plugin setting lino_xl.lib.peppol.onboarding_date
.
2025-03-20¶
Optimized the behaviour of lino.modlib.extjs.views.ApiElement.get()
when
the specified primary key isn’t visible in this table. Renamed request
to create_request
, on Actor
and on BoundAction
.
2025-03-17¶
Added color “Teal” to lino.modlib.system.DisplayColors
.
The pull.sh
script now asks for confirmation before starting.
New command pm buildsite
.
Move lino.utils.fieldutils.fields_help()
out of lino.api.doctest
into a new module
lino.utils.fieldutils
.
2025-03-14¶
The lino_xl.lib.tim2lino
plugin now supports updating a live Lino
database from TIM legacy data. Until now the migration was a single-jump
operation.
The Voucher
model now has its own field Voucher.fiscal_year
,
which is automatically set to the year
of the
Voucher.accounting_period
. This makes things easier when querying the
database and when importing vouchers from external sources.
The methods Site.mark_virgin()
, Site.check_virgin()
and
Site.get_dbhash()
have been optimized and moved from SITE.kernel
to SITE
.
2025-03-12¶
It is now possible to disable all the actions of the workflow_buttons field by
adding “workflow_buttons” into the set returned by disabled_fields()
. This
optimization was originally added for #5976 where I thought that Lino
should no longer permit to change the workflow state of a calendar guest when
the calendar entry is in a fixed state (“took place”) or or “suggested” (has not
yet been user-modified). But I found a less intrusive solution: calendar entries
are now considered “user edited” not only if their state says so but also when
their guests_modified
flag is set. So the new feature isn’t used
anywhere right now.
Renamed lino_xl.lib.ibanity
to lino_xl.lib.peppol
.
2025-03-06¶
The lino_xl.lib.accounting
plugin now defines an
lino.modlib.uploads.Shortcuts
source_document
, which is used by
lino_xl.lib.peppol
when it finds an embedded pdf file in an inbound
Peppol document.
As a side effect we optimized the rendering of upload shortcut fields.
2025-03-05¶
The lino_xl.lib.peppol
plugin gets ready for the integration phase. The
tables Inbox
, Archive
, Outbox
and Sent
are
now in the menu. It has a quick link to the system task that
starts the synchronization. The linod
daemon now runs as the user
specified by lino.modlib.linod.daemon_user
instead of anonymously.
Internal optimization: lino.core.kernel.Kernel.run_action()
no longer
treats ValidationError and IntegrityError with a traceback.
2025-03-01¶
The method BuildMethod.before_printable_build()
has been replaced by
BuildMethod.must_build_printable()
is is now expected to return a boolean.
The filename_root()
method was renamed to
get_printable_target_stem()
. The get_target_name()
method was
removed, we now call self.get_target_file().name
or
self.get_target_file().path
lino.utils.media.MediaFile
is now
implemented differently and has a path
attribute instead of a
name
property.
After upgrading a production server you should test whether editable print actions still work.
2025-02-27¶
Advancing with #5670 (Support e-invoices using PEPPOL): The values of
the individual choices of lino_xl.lib.products.DeliveryUnits
are now
the codes that are allowed in the unitCode
attribute of a InvoicedQuantity
element. Added a new attribute lino_xl.lib.vat.VatRegime.reverse_charge
,
which is True for the VAT regimes intracom
and
cocontractor
. This is currently used only by
vat.VatItemBase.get_peppol_vat_category()
. When migrating your database,
you can specify a lino.core.ChoiceList.old2new
for DeliveryUnits
by adding the following line to your
restore.py
file:
settings.SITE.models.products.DeliveryUnits.old2new = {"10": "HUR", "20": "XPP", "30". "KGM", "40": "XBX"}
2025-02-24¶
Advancing with #5670 (Support e-invoices using PEPPOL).
lino_xl.lib.contacts.Partner.is_outbound
2025-02-12¶
Fixed #5924 (Menu “My invoicing plan” fails)”. Optimize choosers for
FollowUpRule.invoice_generator
and Task.procedure
(which is
defined as lino.modlib.linod.Runnable.procedure
.)
Plan.invoicing_task
may now be empty. Optimize
lino.modlib.users.UserPlan
and lino.modlib.linod.Runnable
.
Fine-tune error reporting during ApiElement.get()
.
2025-02-10¶
Fixed #5917 (Clicking on the img rendered by file memo command doesn’t
show the image). The demo data in Lino Noi now includes screenshots in ticket
descriptions in order to reproduce and verify this bug. New context manager
ar.override_attrs
.
2025-02-09¶
Reviewed lino.utils.soup.truncate_comment()
and updated
Truncating HTML texts to fix #5916.
2025-02-05¶
The lino_xl.lib.peppol
plugin is growing. New option no_auto
for data checkers.
lino_xl.lib.peppol.SupplierChecker
sets this to True because we do
not want this checker to run automatically during checkdata
. It should
run only when called manually because it requires Ibanity credentials,
which are not available e.g. on GitLab.
2025-02-01¶
Started working on the new plugin lino_xl.lib.peppol
. Work in progress.
2025-01-27¶
Fixed #5881 (Lino lets me add items to a registered invoice). Added a
new lino.core.model.Model.disable_create()
used to disable creating rows
on a model in a given action request even when permission has been
given.
2025-01-24¶
New setting users.demo_password
so that the password of users on a
demo site is no longer a hard-coded “1234”.
2025-01-23¶
The lino_xl.lib.tim2lino
plugin was re-activated and the
lino.utils.dbfreader
module migrated to Python 3.
The button, which is used to show or hide the parameter panel of a
table, is now in the upper right corner and no longer in the toolbar.