20120517

Ha, das war lustig! lino.ui.extjs3.ext_ui.ExtUI.build_site_cache() generiert die lino*.js-Dateien jetzt korrekt so, dass unnötige Elemente gar nicht erst drin stehen.

Und gestern schrieb ich ja:

It would be theoretically more “logical” to also use lino.core.actors.Actor.get_permission() for deciding whether a menu command should be created or not. Lino doesn’t currently do this because it feels more “sane” to do these decicions in the setup_XXX_menu functions.

Aber jetzt wo auch das Menü schon einmalig beim Server-Start generiert werden kann statt bei jedem request (tut es zwar noch nicht, aber das ist jetzt möglich), revidiere ich meine gestrige Meinung. Habe z.B. begonnen, dass der Demo-Benutzer Caroline die Quicklinks “Meine Klienten”, “Meine VSE” und “Meine Art-60-7-Konventionen” nicht mehr sieht. Die lino_caroline_*.js sind dadurch schon von 2 auf 1,5 MB geschrumpft.

Bevor ich jetzt noch die Test-Suite aufräume, mach ich ein Checkin: Checkin 7ab4496fb3d9.

Für die Test-Suite gibt es noch ein Detail zu beachten: Lokale Fixtures dürfen zum Testen eigentlich nicht geladen werden. Wie könnte ich das automatisch abstellen? Momentan sehe ich noch keine Lösung. En addendant gilt: falls lokale fixtures existieren sollte man das Verzeichnis kurzfristig umbenennen oder sonstwie deaktivieren, wenn man manage.py test startet.

Folgende Demo-Benutzer sollten in lino.apps.pcsw existieren:

  • Der bisherige Benutzer “user” kommt raus.
  • root : Experte für alle Module
  • luc : profile=’root’
  • melanie : Manager integ
  • hubert : Einfacher Benutzer integ
  • alicia : profile=’hubert’
  • caroline : Einfacher Benutzer newcomers
  • kerstin : Einfacher Benutzer debts

Oder anders:

  • lino.modlib.users.fixtures.demo macht die Benutzer root und luc
  • lino.modlib.newcomers.fixtures.demo macht den Benutzer caroline
  • lino.modlib.debts.fixtures.demo macht den Benutzer kerstin
  • lino.apps.pcsw.fixtures.demo macht die Benutzer melanie , hubert und alicia.

Das ist gut. Benutzer kerstin, root und luc sehen einen Reiter “Budgets” im Detail einer Person, die anderen nicht.

Jetzt haben wir noch ein “kleines” Problem: der Reiter “Verträge” enthält zwei GridPanels, die nur für integ-Benutzer sichtbar sind, also nicht z.B. für kerstin. Und somit ist dieser Reiter bei kerstin jetzt leer. Er sollte aber nicht nur leer sein, sondern ganz verschwinden. Und zwar automatisch. Ein Container, der nichts Sichtbares enthält, soll ebenfalls unsichtbar werden. Provisorische Lösung: lino.ui.extjs3.ext_elems.Panel.get_view_permission() macht einen Vorschau-Loop durch seine Elemente. Wenn kein einziges sichtbar ist, wird auch das Panel selbst unsichtbar. Das ist ein bischen Ressourcenverschwendung, aber immerhin nur beim Generieren der lino*.js. Cool. Funktioniert sogar.

Optimaler wäre wahrscheinlich, dass (1) ext_store aus dem UI rauskommt und (2) die LayoutHandles und TableHandles gar nicht mehr aufbewahrt werden, sondern pro Benutzerprofil instanziert und nach dem Generieren weggeworfen werden: die sind nämlich gar nicht nötig während des laufenden Betriebs. Zu überprüfen. Nicht so dringend.

Auch der Reiter “Stellenanfragen” (der lediglich lino.modlib.jobs.models.CandidaturesByPerson enthält) ist bei Kerstin jetzt verschwunden. Einfach nur, indem ich lino.modlib.jobs.models.Candidatures jetzt von lino.apps.pcsw.models.IntegTable erben lasse.

Dann noch etwas, das mir zwischendurch auffiel: lino.modlib.debts.models.Actor braucht ein Feld partner, damit man bei der manuellen Eingabe der Akteure eines Budgets zunächst eine Person auswählen kann. Was noch fehlt, ist eine Möglichkeit, um in der (normalerweise leeren) Auswahlliste für Actor.sub_budget dann ein leeres Budget erstellen zu können.

Unter lino.modlib.debts.models.BudgetDetail habe ich mal ein paar Screenshots platziert.

Checkin 54bbbb071079.

Abends kam mir dann noch die spontane Erkenntnis, dass unsere geniale, super-flexible Struktur mit den verschachtelbaren Budgets für die Benutzer zumindest momentan noch nicht gut ist. Die Leute sind gewohnt, die Beträge der Aktoren in zwei Kolonnen nebeneinander zu haben. Und zwar auch schon bei der Eingabe. Ich glaube nicht, dass die sich mit der momentanen Methode anfreunden werden.

Also die Version von heute nachmittag in die lino.sandbox rein und die neue Idee ausprobiert. Und nach nur anderthalb Stunden funktioniert es! Oder zumindest fast: Am Ausdruck und der Zusammenfassung muss ich noch was spielen. Aber jetzt gehe ich erstmal schlafen.

Checkin 10c18c5721f3.