20101018

Heute feiern wir meinen Namenspatron, den Heiligen Lukas.

Ich bin weiter mit dem neuen Feature dran, das ich “Report-Panels” nennen könnte. Es geht darum, dass ein Slave-Report in einem Detail-Fenster nicht unbedingt nur als Grid dargestellt werden soll, sondern dass manchmal stattdessen eine zusammenfassende konfigurierbares HTML-Fragment nützlicher ist. Erstes konkretes Anwendungsbeispiel ist LinksByOwner, also die “Links pro Person”, die im DSBE dazu benutzn werden, um externe (eingescannte) Dokumente zu verwalten.

14 Uhr: Hurra, es funktioniert! LinksByOwner kann ich jetzt sowohl als Kolonne einer Grid oder als Element in einem Detail verwenden, und in beiden Fällen wird eine Liste der Links im Stil <a href="<URL>"><lnk.name></a><br>... angezeigt. Und zwar ohne, dass ich im Modell oder im Report des Masters (also hier Person) etwas sagen muss. Einfach weil links.LinksByOwner.slave_as_grid auf False steht.

Das Layout-Problem docs/tickets/1 “funktioniert” leider auch bei HtmlBoxen. Also im Detail einer Person muss man im Notizen-Tab zunächst auf den Permalink klicken, damit die Seite (diesmal richtig) neu geladen wird.

Ein paar interne Änderungen waren noch nötig. Zum Beispiel lino.ui.extjs.ext_ui.elem2rec() und Co krigen jetzt als ersten Parameter einen ReportRequest und nicht mehr nur einen Django-Request. (ReportRequest und/oder ViewReportRequest sind sowieso vielleicht ein Fall für Django-Middleware, aber das kommt in die /todo).

Wohin will man eigentlich, wenn man auf so einen Link klickt? Im Fall von links.LinksByOwner möchte man ja auf die angewiesene externe Seite springen. Aber das Standardverhalten ist, dass man auf die Detail-Seite kommt. Das wird in lino.reports.Report.summary_row() definiert.

Die Methode Person.language_knowledge ist jetzt nicht mehr nötig, stattdessen definieren wir lino.projects.dsbe.models.LanguageKnowledge.__unicode__()

N.B.: lino.projects.dsbe.models.LanguageKnowledgesByPerson.slave_as_grid muss nicht auf False stehen, weil wir diesen Report in der Detail-Ansicht ja als Grid haben wollen. Das tolle Neue ist: wenn ein Report in Report.column_names genannt wird, dann erscheint automatisch dieser summary lino.reports.Report.slave_as_summary_meth()

In der Demo-Datenbank waren zwei Personen “Luc Saffre”. Behoben.

Die Demo-fixture für dsbe legte noch Integer-Werte für LanguageKnowledges an. Jetzt ruft dpyserializer auch django.db.Model.full_clean() auf, um so etwas in Zukunft zu vermeiden. Dabei kamen gleich noch ein paar weitere kleine Bugs dieser Art zu Tage. links.Link.url ist jetzt mit verify_exists=False. Ich wusste nicht, dass das par défaut eingeschaltet ist. Denn sonst ist initdb deutlich langsamer, wenn die Validierung eingeschaltet ist.

18 Uhr. Check-In wegen Feierabend. Ich bin zufrieden, obgleich ich das Gefühl habe, mit einem siebenköpfigen Drachen zu kämpfen, dessen Köpfe schneller nachwachsen als man sie abschlagen kann….