form = GrupoForm()
+def get_gruposA(cursoID):
+ return [(0, u'---')] + [(g.id, g.shortrepr()) for g in Grupo.select(Grupo.q.cursoID==cursoID)]
+
+def get_gruposB(cursoID):
+ return [(0, u'Nuevo Grupo')] + [(g.id, g.shortrepr()) for g in Grupo.select(Grupo.q.cursoID==cursoID)]
+
+ajaxadmin = u"""
+ function alumnos_agregar_a_la_lista(texto, lista)
+ {
+ t = MochiKit.DOM.getElement(texto);
+
+ url = "/alumno/get_alumno?padron="+t.value;
+ t.value = "";
+ return url;
+ }
+
+ function err (err)
+ {
+ alert("The metadata for MochiKit.Async could not be fetched :(");
+ }
+
+ function procesar(result)
+ {
+ l = MochiKit.DOM.getElement('form_responsable_info');
+ if (result.error)
+ l.innerHTML = result.msg;
+ else
+ l.innerHTML = result.msg.value;
+ }
+
+ function doSubmit()
+ {
+ /* TODO : Validar datos y evitar el submit si no esta completo */
+
+ /* Selecciono todos los miembros si no, no llegan al controllere*/
+ l = MochiKit.DOM.getElement('form_grupos_to');
+ for (i=0; i<l.options.length; i++) {
+ l.options[i].selected = true;
+ }
+ /* Selecciono todos los miembros si no, no llegan al controllere*/
+ l = MochiKit.DOM.getElement('form_grupos_from');
+ for (i=0; i<l.options.length; i++) {
+ l.options[i].selected = true;
+ }
+
+ return true; // Dejo hacer el submit
+ }
+
+ function initWidgets(disabled) {
+ if ( disabled ) {
+ MochiKit.DOM.getElement('form_listaGrupoA').selectedIndex = 0;
+ }
+ MochiKit.DOM.getElement('form_listaGrupoB').selectedIndex = 0;
+ MochiKit.DOM.getElement('form_grupos_to').options.length = 0;
+ MochiKit.DOM.getElement('form_grupos_from').options.length = 0;
+ MochiKit.DOM.getElement('form_listaGrupoB').disabled = disabled;
+ MochiKit.DOM.getElement('form_grupos_to').disabled = disabled;
+ MochiKit.DOM.getElement('form_grupos_from').disabled = disabled;
+ }
+
+ function onListaAChange() {
+ lista = MochiKit.DOM.getElement('form_listaGrupoA');
+ if ( lista.selectedIndex != '0' ) {
+ initWidgets(false);
+ } else {
+ initWidgets(true);
+ return;
+ }
+ // carga el grupo en el multiple select
+ grupoA = MochiKit.DOM.getElement('form_grupos_from');
+ id = lista.options[lista.selectedIndex].value
+ cargarGrupo(id, grupoA);
+ //carga la lista para seleccionar un responsable
+ responsableA = MochiKit.DOM.getElement('form_responsableA');
+ responsableA.options.length = 0;
+ MochiKit.DOM.appendChildNodes(responsableA, OPTION({"value":0}, "---"));
+ cargarGrupo(id, responsableA);
+ }
+
+ function onListaBChange() {
+ lista = MochiKit.DOM.getElement('form_listaGrupoB');
+ listaA = MochiKit.DOM.getElement('form_listaGrupoA');
+ MochiKit.DOM.getElement('form_grupos_to').options.length = 0;
+ if ( lista.selectedIndex == 0 ) {
+ return;
+ }
+ if ( lista.selectedIndex != '0' ) {
+ if ( lista.selectedIndex == listaA.selectedIndex ) {
+ window.alert('Debe seleccionar 2 grupos distintos');
+ MochiKit.DOM.getElement('form_grupos_to').options.length = 0;
+ return;
+ }
+ grupoB = MochiKit.DOM.getElement('form_grupos_to');
+ id = lista.options[lista.selectedIndex].value
+ cargarGrupo(id, grupoB);
+
+ //carga la lista para seleccionar un responsable
+ responsableB = MochiKit.DOM.getElement('form_responsableB');
+ responsableB.options.length = 0;
+ MochiKit.DOM.appendChildNodes(responsableB, OPTION({"value":0}, "---"));
+ cargarGrupo(id, responsableB);
+ }
+ }
+
+ function cargarGrupo(grupoid, lista) {
+ //url = "/grupo/get_inscripto?cursoid="+cursoid+'&padron='+padron
+ var result = loadJSONDoc('/curso/grupo/get_alumnos?grupoid='+id);
+ result.addCallbacks(partial(cargarLista, lista), err)
+ }
+
+ function err (err)
+ {
+ alert("The metadata for MochiKit.Async could not be fetched :(");
+ }
+
+ function cargarLista(lista, result) {
+ var alumnos = result.msg;
+ if (result.error) {
+ window.alert(result.msg);
+ return;
+ }
+ for (i in alumnos) {
+ id = alumnos[i].id;
+ label = alumnos[i].label;
+ MochiKit.DOM.appendChildNodes(lista, OPTION({"value":id}, label))
+ }
+ }
+
+"""
+
+class GrupoAdminForm(W.TableForm):
+ class Fields(W.WidgetsList):
+ cursoID = W.HiddenField()
+ listaGrupoA = W.SingleSelectField(label=_(u'Grupo A'), attrs = dict(onChange='onListaAChange()'), validator = V.Int(not_empty=True))
+ listaGrupoB = W.SingleSelectField(label=_(u'Grupo B'), attrs = dict(onChange='onListaBChange()'), validator = V.Int(not_empty=True))
+ grupos = AjaxDosListasSelect(label=_(u'Grupos'),title_from=u"Grupo A", size=8, title_to=u"Grupo B", validator=V.Int(not_empty=True))
+ responsableA = W.SingleSelectField(label=_(u'Responsable A'), validator = V.Int())
+ responsableB = W.SingleSelectField(label=_(u'Responsable B'), validator = V.Int())
+ tutoresA = W.MultipleSelectField(label=_(u'Tutores A'), validator = V.Int(not_empty=True))
+ tutoresB = W.MultipleSelectField(label=_(u'Tutores B'), validator = V.Int(not_empty=True))
+
+ fields = Fields()
+ javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('listaGrupoA');"), W.JSSource(ajaxadmin)]
+ form_attrs = dict(onsubmit='return doSubmit();')
+
+formadmin = GrupoAdminForm()
+
#}}}
#{{{ Controlador
integrantes = []
integrantes.append(msg)
return dict(msg=integrantes, error=error)
+
+ @expose(template='kid:%s.templates.admin' % __name__)
+ def admin(self, cursoID, **kw):
+ """Create new records in model"""
+ options = dict(
+ listaGrupoA=get_gruposA(cursoID),
+ listaGrupoB=get_gruposB(cursoID),
+ tutoresA=get_docentes_inscriptos(cursoID),
+ tutoresB=get_docentes_inscriptos(cursoID),
+ )
+ return dict(name=name, namepl=namepl, options=options, form=formadmin, values=kw, cursoID=int(cursoID))
#}}}