20120623 ======== MailableType: Pro Terminart und Notizart kann man jetzt angeben: - welche Vorlage zum Generieren des Body der Mail genommen wird. - ob der Ausdruck der Notiz als Attachment hinzugefügt wird oder nicht. Activated severe test on isip.Contract. This causes some contracts to not get into the new version. Changed :mod:`lino.utils.dumpy` so that when "Abandoning with %d unsaved instances" it prints the pk of all objects until now it printed the detailed content of the first object for each type of error message. Dann doch noch eine Änderung, die nicht angefragt war: ich habe die Kursanfragen auf Workflows umgestellt. CourseRequestStates statt CourseEnding Dabei kam noch ein Bug zum Vorschein: Workflow-Buttons funktionierten nur, wenn die Grid bereits in einem eigenen Fenster geöffnet wurde. Beim Eintragen/Austragen von Kursanfragen ist das meistens nicht der Fall. Hier ist der momentane Code:: Lino.courses.CandidatesByCourse.detail_action_window = null; Lino.courses.CandidatesByCourse.detail_action = function(mainConfig,status) { if(!mainConfig) mainConfig = {}; if (Lino.courses.CandidatesByCourse.detail_action_window == null) { mainConfig.is_main_window = true; Lino.courses.CandidatesByCourse.detail_action_window = new Lino.Window({ main_item: new Lino.courses.CandidatesByCourse.detail_actionPanel(mainConfig) }); } Lino.open_window(Lino.courses.CandidatesByCourse.detail_action_window,status); }; Der muss ersetzt werden durch etwas im Stil:: Lino.courses.CandidatesByCourse.detail_action = Lino.window_action(Lino.courses.CandidatesByCourse.detail_actionPanel) Mit folgender neuer Library-Klasse:: Lino.WindowAction = function() { window: null, mainItemClass: null, constructor : function(mainItemClass) { this.mainItemClass = mainItemClass; } get_window : function(mainConfig) { if(!mainConfig) mainConfig = {}; if (this.window == null) { mainConfig.is_main_window = true; this.window = new Lino.Window({ main_item: new this.mainItem(mainConfig) }); } return this.window; }, run : function(mainConfig,status) { Lino.open_window(this.get_window(mainConfig),status); } }; Die Wirklichkeit war dann mal wieder doch noch ganz anders als dieser erste Entwurf. `Lino.WindowAction` ist zwar vielleicht insgesamt eine Verbesserung des generierten JS-Codes, aber erwies sich als völlig belanglos für unser Problem. Das Problem war viel verzwickter. Ein Slave-Panel ist ja nun mal nicht das entsprechende Panel im eigenen Fenster. Erstens kennt es nicht die Parameter mt und mk. Und dann ist es nicht das Panel, das refresht werden muss. Mein Zugriff auf den globalen Namen des Panels kam ja eigentlich nur daher, dass der Button mit einem href="javascript:..." implementiert ist, und dieser Code kennt das Panel nicht, in dem das Element steht. Deshalb gibt es jetzt den neuen Parameter `requesting_panel`.