20120914 ======== Diverse Änderungen Endspurt "Coachings und Contacts". Vor allem an der Demo-Fixture habe ich einiges geschwitzt. Coaching stories. Rendering tables to plain text ------------------------------ New method :meth:`lino.core.tables.TableRequest.to_rst`. Here is a usage example: .. literalinclude:: 0914.py The result is:: INFO Starting Lino... INFO Analyzing models... INFO Lino Site 'DSBE@armand' started. Languages: de, fr, en. 260 actors. INFO Using Lino/Welfare 0.1.0, Lino 1.5.0, Django 1.5.dev17942, python-dateutil 1.5, Cheetah 2.4.4, OdfPy ODFPY/0.9.4, docutils 0.7, suds 0.4.1, PyYaml 3.08, Appy 0.8.0 (2011/12/15 22:41), Python 2.7.1. =============== ===== ========= ========= ======= ======= =============== =============== ===== Begleiter 1 Bilan Formation Recherche Travail Standby Komplette Akten Aktive Klienten Total =============== ===== ========= ========= ======= ======= =============== =============== ===== Hubert Huppertz 1 1 1 Mélanie Mélard 1 1 1 Root User 1 1 1 Total 0 3 0 0 0 0 3 3 =============== ===== ========= ========= ======= ======= =============== =============== ===== Where the table is rendered as follows: =============== ===== ========= ========= ======= ======= =============== =============== ===== Begleiter 1 Bilan Formation Recherche Travail Standby Komplette Akten Aktive Klienten Total =============== ===== ========= ========= ======= ======= =============== =============== ===== Hubert Huppertz 1 1 1 Mélanie Mélard 1 1 1 Root User 1 1 1 Total 0 3 0 0 0 0 3 3 =============== ===== ========= ========= ======= ======= =============== =============== ===== Miscellaneous ------------- - More changes in how ActionRequest.__init__() handles parameter values. - add_detail_tab() Mausefalle ---------- Ich wollte die CoachingsByUser sichtbar machen. Ist doch einfach:: site.modules.users.Users.add_detail_panel('coaching',""" pcsw.CoachingsByUser """,_("Coaching")) Dachte ich zumindest. Richtig wäre gewesen:: site.modules.users.Users.add_detail_tab('coaching',""" pcsw.CoachingsByUser """) Und weil das einzige Symptom folgender Traceback war:: LayoutHandle for UserDetail on users.Users has no attribute 'coaching' (layout.main is 'general cal newcomers.CompetencesByUser') ... habe ich zwei Stunden lang an allen möglichen Ecken gesucht, bevor ich die tatsächliche Erklärung hatte. Ein Layout-Bug weniger ---------------------- Lino.VBorderPanel.onBodyResize hatte einen Bug:: ... this.items.each(function(item){ ... availableHeight -= item.getHeight(); Das produzierte machmal einen JS-Fehler in der Console. Weil noch nicht alle Kinder gerendert waren. Folge war, dass dass z.B. der zweite Reiter (Kalender) vom UserDetail nicht beim ersten Mal korrekt war. Jetzt geht es besser:: ... this.items.each(function(item){ ... if (item.rendered) availableHeight -= item.getHeight(); UsersWithClients ---------------- In UsersWithClients, bei Alicia in Kolonne "Bilan" steht eine 6. Also Alicia hat angeblich sech Bilan-Kunden. Die 6 ist ein ```` mit folgendem `href`:: javascript:Lino.pcsw.MyClientsByGroup.default_action.run({ "param_values": { "only_coached_on": "14.09.2012", "group": "Bilan", "client_stateHidden": null, "show_deprecated": false, "groupHidden": 1, "client_state": null }, "base_params": { "mt": 79, "mk": 1, "su": 8 } }) Wenn ich drauf klicke, zeigt er aber nur 2 Klienten an. Der Perma-Link dieser Liste lautet:: http://127.0.0.1:8000/api/pcsw/MyClientsByGroup?mt=79&mk=1&su=8&pv=14.09.2012&pv=&pv=1&pv=false Erklärung war: ich musste distinct() benutzen, weil der Filter von z.B. `only_coached_by` jetzt einen outer join produziert:: def only_coached_by(qs,user): return qs.filter(pcsw_coaching_set_by_project__user=user).distinct() Das folgende Skript hat mir geholfen, das zu verstehen: .. literalinclude:: 0914b.py