.. include:: /../docs/shared/include/defs.rst
.. _lino.changes.2019:

====================
Changes 2019 in Lino
====================

.. contents::
  :local:

2019-04-11
==========
Released Lino 19.4.0 to PyPI.

2019-04-10
==========

Fixed a bug in :mod:`lino.utils.quantities` which caused ``1*Duration("0:15")``
to print ``0.250000000000000000`` instead of ``0:15``.

2019-04-09
==========

In :meth:`lino.core.site.Site.setup_menu` we now differentiate between the "technical"
plugin order and the order "visible to the end user".  The end user wants
to see menu entries of explicitly installed plugins before those of
automatically installed plugins.

Lino now supports **choicelist items without a value**. When no value is
specified, the :attr:`value <lino.core.choicelists.Choice.value>` (the sequence
number) is set automatically when it is added to the choicelist.  Such choices
should not be stored to the database, otherwise they are like normal
choicelists. :class:`lino_xl.lib.vat.VatRules` is the first usage example.

Lino now supports unbound data checkers. If
:attr:`lino.modlib.checkdata.Checker.model` is `None`, the checker is
unbound, i.e. the problem messages will not be bound to a particular
database object.

Fixed a bug in :manage:`diag` : the plugins were listed in a random
arbitrary order.

:attr:`lino.core.plugin.Plugin.needed_by` is now the immediate parent, not the
top-level parent. The loop to the top is now done only in
:meth:`lino.core.plugin.Plugin.get_menu_group`.



2019-04-03
==========

Fixed :ticket:`2937` (Cannot add Duration and time).
Updated the documentation about the :mod:`lino.utils.quantities` module.

2019-03-29
==========

:mod:`lino.utils.choosers` now accepts choosers on char fields 
without a display method.
Lino catches edge case of bad extjs code generation. Ticket #2916

2019-03-28
==========

Added ``ar`` param for :func:`lino.modlib.notify.ChangeNotifier.get_change_observers`.
After creating record add elem to :attr:`ar.selected_rows`.

It is now possible to define a choices method for a
:class:`lino.core.choicelists.ChoiceListField`.

2019-03-21
==========

Added optional ``_ar`` keyword param to :func:`@dd.chooser
<lino.utils.choosers.chooser>` methods, to be able to access current user and
actor info.  Used by the chooser for :attr:`lino_noi.lib.tickets.Ticket.site`

2019-03-20
==========

Fixed notification order on dashboard. 
Added .dashboard-item class to divs in the dashboard. 
Made mark_all_seen action of MyMessages render in dashboard, and not require post-run refresh.

2019-03-19
==========

Disabled force refresh on update feature when running Lino on Pycharm.
Fixed minor bug when submitting new ticket from dashboard in extjs3

Restore DEL key on the grid.

Released Lino 19.3.1 to PyPI.

2019-03-18
==========

Added two new methods
:meth:`lino.core.site.Site.get_plugin_configs` and
:meth:`lino.core.plugin.Plugin.get_required_plugins`.
Feature used by :mod:`lino_xl.lib.vat`.


2019-03-15
==========

Release Lino 19.3.0

2019-03-15
==========

Fixed file upload dialog not closing correctly. 

2019-03-14
==========

Added ensure_csrf_cookie decorator to all entry point views in extjs.

2019-03-13
==========

Added `mobile_server_url` attr to SITE, for use in sending notification emails. 
Have MailRenderer generate urls using `actor.model.get_default_table().__name__` rather than `actor.model.__name__`
Means that the url will always point to an actor rather than a model which need to be redirected to an actor. 

2019-03-12
==========

Add a new method :meth:`Actor.get_actions_hotkeys` to enable hotkeys binding to actions on table.This method should
return a list of hotkeys.

2019-03-08
==========

Added alert_eval_js responce option, which is a js string that is evaluated 
after the alert dialog is closed.

Added Version checking, so that the server alerts the browser when it's running 
an old version of lino. 

2019-03-06
==========

Added CSS classnames to insert, detail, form and actionForm Panel for use in 
e2e testing.
Also for classnames for confirmation dialogs and main-menu, and action panel 
ok + cancel buttons.

2019-03-04
==========

Make it possible to the actions_hotkeys of a panel to set the 'shift' options.

2019-02-22
==========

Uploading files under Python 3 caused a server error :message:`Exception Value:
a bytes-like object is required, not 'str'` (:ticket:`2845`).

Released Lino 19.2.1.

Fixed a bug in which caused a UnicodeEncodeError in
:ref:`lino.specs.export_excel` on `Travis
<https://travis-ci.org/lino-framework/book/jobs/497045894#L4665>`__ and
possibly in other situations as well.

Released Lino 19.2.2.


2019-02-17
==========

Have the renderer return a js string that when eval'd reloads the dashboard,
rather than a hard-coded string.

2019-02-14
==========

Make the field's label following FileField visible :ticket:`2830`.

2019-02-12
==========

Translations for :ticket:`2834`.

2019-02-11
==========

Added a button "Close and save window" (:ticket:`2816`)


2019-02-09
==========

Released Lino 19.2.0 to PyPI.

Added two columns volume library_file in UploadsByController


2019-02-08
==========

.. currentmodule:: lino.modlib.uploads

The :mod:`lino.modlib.uploads` plugin has been extended to support
:ticket:`2826`. Until now an :class:`Upload` could represent either an uploaded
file (the original meaning) or just an entry representing some external
document to be monitored by its author, without any uploaded file. With
:ticket:`2826` we add a third possibility a "library file", i.e. a file that
has been stored on some volume using some other method than uploading.

Concretely:

- Added a new model :class:`Volume`

- Added two fields :attr:`volume` and :attr:`library_file` to the
  :class:`Upload` model.

- The insert_layout of :class:`UploadsByControler` does *not* include the
  :attr:`volume`, but instead the controller (owner) decides which volume is to
  be used.

  IOW a new method :meth:`UploadController.get_uploads_volume`.  The field
  should be hidden or at least readonly when the owner says that there is no
  volume.



2019-02-05
==========

Fixed :ticket:`2822` (Cannot create new user 'NoneType' object has no attribute 'full_value_from_object')

Fixed ActionFormPanel logic to use action.html_method.

Changed sign_in action to use POST as html_method.

2019-02-02
==========

Field values for actons with paramiers no long need to be an array with a key of 'fv'.
They now can be included in the root of the data object with the field name as the key. 

2019-01-28
==========

We fixed the :ticket:`2782` (Dashboard in Jane is slower than before).
Store has a new attribute `_disabled_fields_storefield`.

2019-01-24
==========

Changed the verbose name for :class:`lino.modlib.printing.BuildMethods` from
"Build method" to "Print method".


2019-01-22
==========

:mod:`lino.sphinxcontrib.help_text_extractor` caused a Sphinx warning
:message:`RemovedInSphinx20Warning: app.info() is now deprecated. Use
sphinx.util.logging instead.` (fixed)

Added intersphinx_urls, srcref_url and doc_trees settings to the main module so
that other doctrees can link to the docs.

2019-01-16
==========
I fixed :ticket:`2785` (Django 2.1.5 under Py3 restore.py fails saying
disable_constraint_checking).
For the test :class:`lino.utils.djangotest.RestoreTestCase`, we need to make
sure that foreign_keys is set to OFF before we actually start the restore.

2019-01-10
==========

I fixed :ticket:`2784` (Some actions are duplicated).  The show action of
:class:`lino_welfare.modlib.integ.ActivityReport` was duplicated in
:attr:`Actor._actions_list` but nobody ever complained because it was not
visible. But since I wrote a test case in :ref:`welfare.specs.integ` which
verifies that the ticket is fixed, I must now do a release on PyPI to get the
test suite on :ref:`travis` passing again.

2019-01-07
==========

We released Lino 19.1.2

Immediately after the release we discovered a bug in Lino 19.1.2 which caused a
missing |insert| button in a critical place in Tera.  So we did a quick bugfix
release 19.1.3.

2019-01-04
==========
We released Lino 19.1.0

New :class:`lino.core.fields.TableRow`.

The message "Form fields may not be submitted with invalid values" says now
"Please check all fields of this form before submitting."
(:xfile:`linoweb.js`)

