from sercom.subcontrollers import validate as val
from sercom.model import Curso, AlumnoInscripto, Docente, DocenteInscripto, Grupo, Alumno, Miembro
from sqlobject import *
+from sqlobject.dberrors import *
from sercom.widgets import *
class GrupoForm(W.TableForm):
class Fields(W.WidgetsList):
- cursoID = W.HiddenField()
+ cursoID = W.HiddenField(validator=V.Int)
nombre = W.TextField(label=_(u'Nombre'), validator=V.UnicodeString(not_empty=True,strip=True))
responsable = CustomTextField(label=_(u'Responsable'), validator=V.UnicodeString(), attrs=dict(size='8'))
miembros = AjaxMultiSelect(label=_(u'Miembros'), validator=V.Int(), on_add="alumnos_agregar_a_la_lista")
- tutores = W.MultipleSelectField(label=_(u'Tutores'), validator=V.Int())
+ tutores = W.MultipleSelectField(label=_(u'Tutores'), validator=V.Int)
fields = Fields()
javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');"), W.JSSource(ajax)]
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 */
MochiKit.DOM.getElement('form_listaGrupoB').disabled = disabled;
MochiKit.DOM.getElement('form_grupos_to').disabled = disabled;
MochiKit.DOM.getElement('form_grupos_from').disabled = disabled;
+ MochiKit.DOM.getElement('form_tutoresA').disabled = true;
+ MochiKit.DOM.getElement('form_tutoresB').disabled = true;
+ MochiKit.DOM.getElement('form_responsableA').disabled = true;
+ MochiKit.DOM.getElement('form_responsableB').disabled = true;
}
function onListaAChange() {
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() {
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 makeOption(option) {
+ return OPTION({"value": option.value}, option.text);
+ }
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)
}
label = alumnos[i].label;
MochiKit.DOM.appendChildNodes(lista, OPTION({"value":id}, label))
}
+ ActualizarResponsables();
}
+ function ActualizarResponsables()
+ {
+ replaceChildNodes('form_responsableA', '');
+ replaceChildNodes('form_responsableB', '');
+ appendChildNodes('form_responsableA', map(makeOption, $('form_grupos_from').options));
+ appendChildNodes('form_responsableB', map(makeOption, $('form_grupos_to').options));
+
+ if (getElement('form_grupos_from').options.length == 0) {
+ getElement('form_tutoresA').disabled = true;
+ getElement('form_responsableA').disabled = true;
+ } else {
+ getElement('form_tutoresA').disabled = false;
+ getElement('form_responsableA').disabled = false;
+ }
+ if (getElement('form_grupos_to').options.length == 0) {
+ getElement('form_tutoresB').disabled = true;
+ getElement('form_responsableB').disabled = true;
+ } else {
+ getElement('form_tutoresB').disabled = false;
+ getElement('form_responsableB').disabled = false;
+ }
+ }
"""
class GrupoAdminForm(W.TableForm):
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))
+ grupos = AjaxDosListasSelect(label=_(u'Grupos'),title_from=u"Grupo A", size=8, move_signal="ActualizarResponsables();", 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))
raise redirect(tg.url('/curso/list'))
@expose(template='kid:%s.templates.list' % __name__)
+ @validate(validators=dict(curso=V.Int))
@paginate('records')
- def list(self, cursoID):
+ def list(self, curso):
"""List records in model"""
- r = cls.select(cls.q.cursoID == cursoID)
- return dict(records=r, name=name, namepl=namepl, cursoID=int(cursoID))
+ r = cls.selectBy(cursoID=curso)
+ return dict(records=r, name=name, namepl=namepl, cursoID=curso)
@expose(template='kid:%s.templates.new' % __name__)
- def new(self, cursoID, **kw):
+ @validate(validators=dict(curso=V.Int))
+ def new(self, curso, **kw):
"""Create new records in model"""
- form.fields[0].attrs['value'] = cursoID
- options = dict(tutores=get_docentes_inscriptos(cursoID))
- return dict(name=name, namepl=namepl, cursoID=int(cursoID), form=form, options=options, values=kw)
+ kw['cursoID'] = curso # FIXME esto está roto porque los widgets son stateless
+ options = dict(tutores=get_docentes_inscriptos(curso))
+ return dict(name=name, namepl=namepl, form=form, options=options, values=kw)
@validate(form=form)
@error_handler(new)
flash(_(u'Error A %s.' % e))
raise redirect(url('/curso/grupo/list' % int(cursoID)))
# seteo el reponsable del grupo
- if int(responsableA) != 0:
+ if responsableA and int(responsableA) != 0:
grupoA.responsable = AlumnoInscripto.get(int(responsableA))
for t in tutoresA:
nuevosMiembros.append(AlumnoInscripto.get(int(m)))
nuevosTutores = []
for t in tutoresB:
- nuevosTutores.append(Docente.get(t))
+ nuevosTutores.append(DocenteInscripto.get(t))
#Creo el nuevo grupo
Grupo(miembros = nuevosMiembros, tutores = nuevosTutores, cursoID=cursoID, nombre='NuevoGrupo'+str(cursoID))
else:
flash(_(u'Error B %s.' % e))
raise redirect(url('/curso/grupo/list/%d' % int(cursoID)))
# seteo el reponsable del grupo
- if int(responsableB) != 0:
+ if responsableB and int(responsableB) != 0:
grupoB.responsable = AlumnoInscripto.get(int(responsableB))
#Elimino el grupo si quedo vacio