20130228

Lino und der neue Präsident (Fortsetzung)

Noch kleine technische Überraschungen: Die Standardwerte der Felder signer1 und signer2 sollten in der SiteConfig gespeichert sein. Diese Felder haben die gleichen Auswahllisten-Methoden (chooser) wie die, die für die Verträge gelten. Also wollen wir das nicht doppelt schreiben, sondern wiederverwertbar machen. Die kleinen Unterschiede (blank, null, default) sind ja dank dd.update_field kein Problem. Klarer Fall für ein Mixin: lino_welfare.modlib.isip.models.Signers.

Jetzt muss die ui.SiteConfig aber in lino.Lino.override_modlib_models stehen und wir machen unsere eigene lino_welfare.modlib.pcsw.models.SiteConfig mit diesem Mixin:

class SiteConfig(ui.SiteConfig,isip.Signers):
    pass

Hier musste ich einige Aufrufe von dd.inject_field, die bisher direkt die Klasse SiteConfig angaben, ändern nach “ui.SiteConfig”. Hat was mit Djangos model cache loading order zu tun: dd.inject_field funktioniert natürlich nicht, wenn die Unterklasse des abstrakten Modells schon geladen ist. Für gut sollte Lino dann eine Fehlermeldung machen, aber ich habe noch nicht erkannt, wie ich das kontrollieren kann. En attendat Fausregel: immer einfach die Modellnamen als string angeben statt das Klassenobjekt.

Miscellaneous

  • lino_welfare.modlib.cbss.tx25 : Added handler for RetirementCertificates.
  • Fixed a UnicodeEncodeError caused by wrongly calling lino.ui.Lino.site_header() in certain appy.pod document templates.

TODO:

  • contacts.QuickTest fails when called for a Lino-Welfare site.