:date: 2017-01-23 ======================== Monday, January 23, 2017 ======================== A new Lino application is born ;-) It's name is :ref:`avanti`. I had been working on it since Thursday and now published it: - Website http://avanti.lino-framework.org - New GitHub project https://github.com/lino-framework/avanti :ref:`avanti` caused some changes to existing projects: - I moved :class:`CivilStates` and :class:`ResidenceTypes` from :mod:`lino_welfare.modlib.pcsw` to :mod:`lino_xl.lib.beid`. (The biggest challenge there is to not lose the translations). - New method :meth:`lino.core.plugin.Plugin.on_site_init` used by :class:`lino_xl.lib.beid.Plugin` to instantiate its :attr:`holder_model `. - :mod:`lino_xl.lib.notes` now supports being used without contacts. - Fixed a bug in :meth:`lino.core.site.Site.is_abstract_model` which caused it to fail on plugins without their own Plugin class definition. - I moved ``lino_cosi.lib.courses`` to :mod:`lino_xl.lib.courses`, and this plugin now works when `contacts` is not installed. - :class:`lino_xl.lib.countries.mixins.AddressLocation` now inherits from :class:`lino.utils.addressable.Addressable` - We now have two mixins :class:`lino.mixins.Contactable` and :class:`lino.mixins.Phonable`. :class:`lino.modlib.users.models.User` now inherits from the latter. - One user type can now have more than one role. This makes it easier to define the user types of an application. This required a backwards-incompatible API change: code of the following style must get adapted. Before:: if isinstance(p.role, OfficeUser): After:: if p.has_required_roles([OfficeUser]): - In :class:`lino.core.roles.UserRole` I renamed :meth:`has_required_roles` to :meth:`satisfies_requirement `. - :mod:`lino_xl.lib.excerpts` no longer needs :mod:`lino_xl.lib.outbox` (AFAIK nobody uses the outbox module). - I renamed ``lino_welfare.modlib.courses`` to :mod:`lino_welfare.modlib.xcourses`. - I removed usage of `past.builtins` after stumbling once more over :ticket:`1296`. The problem is still there, but I documented its workaround. - `cv.LanguageKnowledgesByPerson` now has a summary view. This change will have influence in :ref:`welfare` (and I guess that they will like it). - I wrote :mod:`lino_avanti.lib.courses`, but currently it isn't used... and maybe I'll throw it away. Such things happen constantly in this phase of a project. While I am programming things, I am in email contact with Johanna, asking her questions for analyzing their need. Some changes in today's commits are rather side effects: - I fixed some broken links to the source of Sphinx pages (:file:`docs/.templates/layout.html`) in several projects. - New page :ref:`dev.overview` because :ref:`tonis` asked "What is :mod:`lino_xl`?" during a hangout on Saturday. Some specs about Avanti: - Ansprechpartner ÖSHZ and Soziale Kontakte könnten als "Klientenkontakte" gemacht werden. - Kursanbieter und Lehrer : in einer ersten Version werde ich lediglich in :menuselection:`Konfiguration --> Kalender --> Räume` die Kursanbieter als *Räume* erfassen. - Die **Lehrer** (Kursleiter) werden momentan als Benutzer erfasst. Für Lino ist eigentlich nicht wichtig, wer den Kurs tatsächlich gibt, sondern wer sich um das Erfassen der Anwesenheiten kümmert. - the calendar module is needed for registering the presences at courses - they use tickets, bot not clocking En passant I fixed two tickets for :ref:`voga`: :ticket:`1417` and :ticket:`1419`. For the former (:ticket:`1417`) I did a change which will also require changes in :ref:`welfare`: - I removed the virtual column `info` because it was functionally redundant with :meth:`get_overview_elems`. And the second ticket revealed a bug which had been living for a long time in :mod:`lino.modlib.extjs.ext_renderer`. At first I suspected the cause somewhere in :meth:`setup_quicklink`, that's why I optimized the API for :meth:`lino.core.site.Site.setup_quicklink` (it is called with a `user` parameter and no longer with the action request. This is in preparation for :ticket:`1420`. The actual culprit was :meth:`window_action_button `. It had the following signature:: def window_action_button( self, ar, ba, status={}, label=None, title=None, **kw): and then it passed the `status` dict to :meth:`action_call` which modified that dict! It's a well-known pitfall: you may not modify the dict specified as default value in a signature because your modification will modify the default value itself. The result was a magic behaviour because my quicklink was generated correctly only once during the first request after a server reload, and for all remaining calls it had a `{ record_id: -999998 }` value. The :ref:`welfare` test suite is still broken, I am going to repair it tomorrow.