20110701

Über DateTimeFields

DateTimeField und TimeField wurden an verschiedenen Stellen noch nicht korrekt verarbeitet, z.B. in ext_store, dpy,…)

Das Ext.ux.form.DateTime-Feld von Jozef Sakáloš funktioniert schön. Aber heute habe ich gemerkt, dass ich es bis auf weiteres nicht brauchen werde, weil ich gar keine bearbeitbaren Timestamps (DateTimeField) habe. Da finde ich es eleganter, nicht editierbare Timestamps wie die von lino.mixins.CreatedModified als einfache Ext.form.DisplayField anzuzeigen.

Falls aber doch irgendwann mal jemand ein editierbares DateTimeField definieren sollte, müsste das theoretisch auch funktionieren und als Ext.ux.form.DateTime gerendert werden.

Zu bemerken auch, dass lino.Lino.time_format_strftime ja keine Sekunden anzeigt. Momentan kann ich mir nicht vorstellen, dass mal jemand Uhrzeiten mit einer größeren Genauigkeit als Minuten eingeben will. Timestamps werden deshalb bis auf weiteres nicht unter Verwendung der lokaliserten date/time-Formate sondern hardkodiert im ISO-Format angezeigt (YYYY-MM-DD hh:mm:ss).

Checkboxen abschalten

Upps, gerade sehe ich, dass man Checkboxen momentan (auch in /releases/2011/0615) nicht abschalten konnte. Behoben.

Checkin 20110701

Standardfilter

Inaktive Personen nicht anzeigen in Kontakte ‣ Personen und Auswahllisten.

Ein allgemeiner Filter ist ja leicht zu machen, einfach Persons.filter`auf `dict(is_active=True) setzen. Aber

  • Wenn ein zuvor sichtbarer Record durch die Änderung verschwindet, kommt nach dem Save momentan eine endlose Schleife von “Save changes to current record?”
  • wie mache ich es, dass der Benutzer die inaktiven Leute bei Bedarf dann doch sehen kann? Indem ich eine GridConfig dafür erstelle? das wäre nicht ganz korrekt, denn das sollte eher eine Option in allen Gridconfigs sein…
  • Auch zeigt er momentan nicht mehr das Detail solcher versteckten Personen an, wenn ich von einem bestehenden ForeignKey darauf klicke.

Die endlose Schleife von “Save changes to current record?” kam daher:

if (rec.navinfo && rec.navinfo.recno == 0) {
    /*
      recno 0 means "the requested pk exists but is not contained in the requested queryset".
      This can happen e.g. after search_change on a detail.
    */
    //~ this_.goto_record_id(rec.navinfo.first);
    this_.load_record_id(rec.navinfo.first);

Der einzige Unterschied zwischen goto_record_id und load_record_id ist, dass ersterer nachfragt, ob gespeichert werden soll. Und nach einem submit success wird die Form nicht automatisch auf clean zurück gesetzt. In diesem Sonderfall soll er das nie nachprüfen.

Um die beiden anderen Probleme zu lösen, habe ich das neue Attribut lino.reports.Report.default_params gemacht. Für die Auswahllisten funktioniert das jetzt schon. Aber für die Befehle des Hauptmenüs muss ich mir noch was einfallen lassen. Das Menü arbeitet ja dann mit get_request_url und müsste wenn schon das “is_active=true” in der URL mit angeben. Hmm… Das System ist übrigens sowieso auch ziemlich aufwendig.

Checkin 20110701b

Report.default_params wieder raus

Abends vor dem Einschlafen kam mir die Lösung: Report.default_params war Quatsch, stattdessen mach ich einen eigenen Report und ein neues Optionales Attribut _lino_choices_report in den Modellen. Größtes Problem war noch, dass ich für Report.label unbedingt den verbose_name des Modells wiederverwerten wollte.

Checkin 20110701c