Friday, May 27, 2016

Presence sheet (HTML)

Two days ago Alexa told me that she had asked their system administrator whether he can convert a pdf file into an Excel file. And not just some pdf file, but a Presence sheet generated by Lino! So I wrote a second weasy build method: WeasyHtmlBuildMethod and told her to copy the output into LibreOffice or Excel. Her reaction: “Super!”

User teams

During the last days I have been meditating on one of the last challenges for ticket #897: how to implement their “departments” (Abteilungen) in Lino Psico. This morning I finally had the enlightment. Which is also a surprisingly simple solution for #856:

We just use the fact that a username can be empty (in recent Lino versions). You cannot log in as such a “user”, but (if it has a profile and if you have an Authority for it), then you can act as such a user. Users like Anne-Sopie then have two records in the User table, one without username, but linking to the same partner and having a different profile. Yes, if their email address changes, we need to update two fields (but not that Anne-Sophie can have different email addresses depending on her “role”). I think this is a perfect solution for #856 (but we can start to use it only after their next deployment).

In Lino Psico we will then introduce the notion of “teams”, They (SPZ Eupen) will have two teams: “Eupen” and “Sankt Vith”. Every user, every partner, every invoice and every time-tracking session (clocking.Session) will point to a team. The verbose_name of the Team model will be changed to “Department” (German Abteilung).

But that’s not all. User teams will also be useful e.g. in Lino Noi.

The common things for all user teams is in the new lino_xl.lib.teams plugin.

And then we now have lino_tera.lib.teams which extends lino_xl.lib.teams as described above. I started to write functional specs in Teams.

In Lino Care we will maybe (not yet sure, it depends on how this project evolves) have lino_noi.lib.teams which injects a team pointer to tickets. This would possibly be a better model for what we currently call the tickets.Site. The difference between a team and a site of a ticket would be that the team would virtually split one database over several organizations (but still leaving common data, e.g. users of one team can receive invitations to work on tickets for other teams if they have the competence).

First public demo of Lino and ExtJS 6

From today on, Hamza’s work on Lino’s support for ExtJS 6 is publicly visible. I configured one of our public demo sites so that it uses Lino’s new ExtJS 6 interface. Go and try it out yourself:

I also wrote instructions to ExtJS 6 front end how to to this on your own site.

Of course it is not yet perfect. Because migrating a beast like Lino from ExtJS 3 to 6 was really not easy at all. We worked more than 200 hours on this project, most of the work was done by Hamza. Well done!


Oops, the first public demo above broke the other online demo sites. There was a name clash on the static files from ExtJS6 had overwritten those of ExtJS3. I renamed lino_extjs6.extjs to lino_extjs6.extjs6 because I think that the app_label must be different if you want to serve them both on a same server. Actually it was maybe not the app_label but the static urls for extjs6/Ext.ux.form.DateTime.js and extjs6/lino.css. Now they are both “extjs6”.

Another problem: Lino Psico did not translate “Features” because it did not have lino_noi.lib.noi installed. But lino_noi.lib.noi also acted as the customized readonly bootstrap3 user interface. TODO: check whether one of the projects in Lino Noi (probably bs3) can go away.