Thursday, August 3, 2017

Lino Tera Session 1

I worked on #1995:


  • Wenn ich versuche, das Journal EKR auszudrucken, kommt “Bitte warten” (und auf dem Server ein traceback ImportError: No module named ‘unohelper’)

  • MWSt-Erklärung : Ihr habt eine “Déclaration spéciale”, die hat andere Felder als die normale MWSt-Erklärung.

  • MWSt-Erklärung : du musst unterscheiden können zwischen Dienstleistungen und Waren

  • MWSt-Erklärung : man sieht die Zahlen nicht immer sofort sondern muss manchmal zuerst Refresh klicken

  • ZKBC fehlt im Menü

  • In “Berichte” habe ich zweimal “Saldenliste Lieferanten” und keinmal Saldenliste Kunden”.

  • Datenimport : wenn ich auf einen Haushalt gehe, kann ich nicht die Aktivitäten pro Haushalt sehen. Statt wie bisher zwei Felder “Klient” und “Haushalt” pro Aktivität haben wir dort jetzt ein einziges Feld Partner. Anders als bei Lino Voga bezahlen in Lino Tera nicht die Teilnehmer sondern der Partner einer Aktivität. Der Partner einer Aktivität ist derjenige, um den es geht. Normalerweise ist das auch derjenige, der bezahlt (es sei denn der Partner hat eine Fakturationsadresse). Es könnte auch Aktivitäten ohne Partner geben (bei denen jeder Teilnehmer bezahlt), und der Partner kann z.B. eine Organisation sein.


  • When I set the VAT regime of an invoice to intracom and then start adding items in lino_xl.lib.vat.ItemsByInvoice, then Lino still uses the VAT rule for normal because the upper part has not been saved. Lino should ask to submit the detail form before allowing to edit any cell of a slave grid.

  • Zahlungsziel : [u”Invalid value for this field (invalid literal for int() with base 10: ‘27/02/2017’).”] kommt wenn ich Ctrl-S in einem Datumsfeld eingebe.

  • When I create a new Journal, the main menu gets updated only after a server restart. Because the menu is cached somewhere.

  • Datenimport : z.B. Kötters-Kalpers steht 2x als Haushalt

The remaining TODO are lesse urgent. I did a deploy to their production site and some testing, then invited Lydia to a next field visit.

New API feature

It is now possible to specify the detail_layout of an actor as a string in the form 'foos.FooDetail'. Or more abstractly if the detail_layout is (1) a string and (2) that string contains a dot (‘.’) and no newlines, then Lino now takes this as the name of the class to be used. If it is a string with at least one newline (or, special case, no newline but also no dot) then we have our old rule that it is taken as the main of a default DetailLayout.

For example:

class Courses(dd.Table):
    detail_layout = 'courses.CourseDetail'

This new feature was necessary because otherwise it could become very tricky to override the detail layout in an extended plugin. Until now you had to define a new class and to assign an instance of that class to every actor which uses it. But e.g. in we have a lot of subclasses of the Courses actor.


  • The default value for default_vat_regime is now "normal" and no longer "private".

  • I am still fiddling with the different sorting orders of lino_xl.lib.ledger.Movements table. The challenge here is that the order is important when testing the output in a doctest. But get_wanted_movements() does not yield the movements in a constant order because it uses a dict to group them.

  • I explored some error messages from and travis. Posted an issue on RTF.

On Travis I had “There are known rendering problems with Cairo …” and wanted to search for this in Jane. But Jane didn’t know. I then used find-grep in my blog and found Thursday, April 6, 2017. Yes of course, Jane does’t read my developer blog. And it still seems that I won’t get used to writing comments in Jane instead writing my blog. To be meditated. Jane should read my blog and store it in the database. But how? One idea is that Jane could read my blog’s RSS feed. Another idea is that Jane would herself use Sphinx to read the source files of my blog.

I updated the Sphinx in my developer machine from 1.6.2 to 1.6.3 to reproduce and remove a deprecation warning.

Foster mothers

I thought to give #1994 to Tonis, but while reproducing the problem to describe it I saw the explanation and fixed it:

  • go eupen and runserver

  • log in as robin

  • Contacts ‣ Clients

  • double-click on Bernd Brecht. Activate the “Human Links” tab.

  • create a household as married couple with Charlotte Collard

  • In that household (households.SiblingsByPerson) add a third row with person Erwin Emontspool as child.

  • Click Refresh on the master record (Bernd Brecht). Lino says (in humanlinks.LinksByHuman) correctly that “Bernd is Father of Erwin EMONTSPOOL (22 years)”.

  • Now go to Charlotte. Lino says that “Charlotte is Foster mother of Erwin EMONTSPOOL (22 years)”. This is wrong. Charlotte should be mother, not foster mother.

The bug was in lino_xl.lib.humanlinks.Link.check_autocreate().

Closing the detail window after deleting a database object

I investigated on #1997 but did not yet find a solution.

  • go to lino_book.projects.adg, invoke runserver an log in as robin

  • Select Contacts ‣ Clients and find client Aátif Abdoo.

  • Double-click and activate the Family tab.

  • Note the following text in MembersByPerson panel:

    ABDOO Aátif (177) is ☐ Head of household in Aátif & Ahláám Abdoo-Aboud (Legal cohabitation)

  • Click on the “Aátif & Ahláám Abdoo-Aboud (Legal cohabitation)” link to open the detil window of that household.

  • Delete the household (which will also delete all memberships in cascade) .

  • Instead of closing the detail window after having deleted the household, Lino now displays another unrelated household. That’s the problem.

More background: In linoweb.js there is a message for this case which says “No more records to display. Detail window has been closed.” but obviously the condition is not being detected here. This function is being called in after_delete() when there is no navinfo available. But the link (generated by lino.core.renderer.JsRenderer.goto_instance()) is“ext-comp-1180”,{ “record_id”: 186 }) and does not contain the information that we want to suppress navigation. I guess that this info must get added there as an additional status attribute. Wooa… that’s for when we finished migrating to ExtJS 6.

Lino Tera Session 2

After speaking with Lydia I continued working on #1995.

  • I found and fixed the bug in lino_xl.lib.tim2lino.spzloader which probably caused duplicate households in their database.

  • There were still some minor (but difficult to find) bugs in the VAT declaration which lead to wrong numbers. Now it looks correct. I updated bevats : Simplified Belgian VAT declarations and added more tests.

Both items are to be tested tonight on their server.