20111001 ======== EnableChild fields on the children ---------------------------------- Ha! hier noch ein subtiles fundamentales Problem, das z.B. im Detail eines Kursanbieters auftritt: hier stehen im Reiter "Allgemein" auch die :class:`lino.utils.mti.EnableChild`-Felder `is_courseprovider` und `is_employer`, die da aber nicht hingehören. Die kommen aus dem Detail von Organisation, die dürfen aber nur auf einer "reinen" Organisation angezeigt werden. Wenn dieses Feld auf einem Kursanbieter angezeigt wird, muss es wenigstens schreibgeschützt (und eingeschaltet) sein. Das Feld is_employer braucht nicht schreibgeschützt zu sein, aber die Setter-Funktionen (:func:`lino.utils.mti.insert_child` und :func:`lino.utils.mti.delete_child`) müssten dann berücksichtigen, dass sie auch von einem CourseProvider aus gerufen werden können. Was nicht einfach zu implementieren und eher unlogisch wäre. Eigentlich müssten beide Felder eher einfach nur deaktiviert sein, wenn das Detail nicht direkt auf Organisation ist. Genau, das geht: VirtualField hat eine neue Methode `is_enabled`, die von EnableChild überschrieben wird. Außerdem eine neue Warnung "Cannot show MTI child if checkbox is off.", wenn man auf den Link "zeigen" eines :class:`lino.utils.mti.EnableChild`-Feldes klickt, das abgeschaltet ist. Also z.B. wenn eine Organisation *kein* Kursanbieter ist (checkbox is off) und man trotzdem bei Kursanbieter auf "zeigen" klickt. Bisher öffnete er dann trotzdem ein Fenster und versuchte diese Organisation als Kursanbieter anzuzeigen (was dann logischerweise misslang). A CourseProvider cannot be parent for a JobProvider --------------------------------------------------- Wenn man versuchte, einen Kursanbieter direkt zu erstellen (nicht indem man auf einer bestehenden Organisation das Feld "Kursanbieter" ankreuzt), dann kam dieser Traceback auf dem Server:: Traceback (most recent call last): File "t:\hgwork\lino\lino\ui\extjs3\ext_store.py", line 656, in form2obj f.form2obj(request,instance,form_values,is_new) File "t:\hgwork\lino\lino\ui\extjs3\ext_store.py", line 344, in form2obj self.vf.set_value_in_object(request,obj,v) File "t:\hgwork\lino\lino\utils\mti.py", line 186, in set_value_in_object insert_child(obj,self.child_model) File "t:\hgwork\lino\lino\utils\mti.py", line 123, in insert_child obj.__class__.__name__,child_model.__name__)) Exception: A CourseProvider cannot be parent for a JobProvider Erklärung: disabled fields werden offenbar beim Submit mit übergeben, und Lino ruft dann die Setter-Funktion :func:`lino.utils.mti.delete_child` auf. Außerdem war da ein Bug in meiner `serializeForm`: schreibgeschützte Checkboxen wurden als *eingeschaltet* gepostet. Das kam daher, dass ExtJS für die HTML-Definition schreibgeschützter Checkboxen nicht mit `disabled`, sondern `readonly` verwendet. Hier die HTML-Definition der Checkbox:: Zum Vergleich die HTML-Definition eines schreibgeschützten Textfeldes:: Lösung war, dass ich in meiner `Ext.lib.Ajax.serializeForm` die Zeile :: if (!(type == 'submit' && hasSubmit)) { ersetze durch :: if (!(/radio|checkbox/i.test(type) && !element.readonly) && !(type == 'submit' && hasSubmit)) { Diese beiden Bugfixes kommen noch mit in die :lino:`/releases/2011/0930`. Noch ein seriöser Bug --------------------- Virtuelle Checkboxen funktionierten gestern noch immer nicht, und ich würde sogar sagen, dass da auch "schon immer" seriöse Bugs beim submitten von checkboxes waren. Das sage ich aber nur theoretisch, denn ich habe keine Erklärung, weshalb das nicht schon früher aufgefallen ist (das wäre eine Doktorarbeit wert, aber dazu habe ich momentan nicht die Muße). Jedenfalls deshalb noch ein Nachtrag von Checkins "20111002", und das Ganze kommt ebenfalls noch mit in die :lino:`/releases/2011/0930`. Noch kleine Bugs ---------------- Der Link "show" auf einer EnableChild funktionierte erstes überhaupt nicht, weil die Warnung "Cannot show MTI child if checkbox is off." noch nicht richtig testete. Und zweitens öffnet er jetzt das Detail-Fenster direkt, ohne ein neues Browserfenster zu öffnen. Checkin "20111002b" :mod:`lino.modlib.users` wurde noch gar nicht übersetzt. Behoben. Außerdem wurde Company an manchen Stellen noch durch "Firma" statt "Organisation" übersetzt. Der englische Name "Company" ist eigentlich irreführend, eigentlich müsste es auch in Englisch "Organization" heißen. Aber das ist so ein langes Wort... Checkin "20111002c" Die Reihenfolge der Felder type und event_type in den Notizen (deren Bedeutung intern ausgetauscht wurde) war noch nicht überall so, wie die Benutzer es gewohnt sind. Checkin "20111002d"