X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/cf4cf2f6b06c696ac67ea30c1b28d17dae4d392f..33ac7d6d267d9f25c76c2488b79ebd1794de996e:/sercom/subcontrollers/curso/grupo/__init__.py diff --git a/sercom/subcontrollers/curso/grupo/__init__.py b/sercom/subcontrollers/curso/grupo/__init__.py index dc16238..b76e9a4 100644 --- a/sercom/subcontrollers/curso/grupo/__init__.py +++ b/sercom/subcontrollers/curso/grupo/__init__.py @@ -12,6 +12,7 @@ from docutils.core import publish_parts 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 * @@ -143,29 +144,11 @@ 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 */ @@ -194,6 +177,10 @@ ajaxadmin = u""" 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() { @@ -208,11 +195,6 @@ ajaxadmin = u""" 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() { @@ -231,17 +213,14 @@ ajaxadmin = u""" 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) } @@ -262,8 +241,31 @@ ajaxadmin = u""" 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): @@ -271,7 +273,7 @@ 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)) @@ -487,7 +489,7 @@ class GrupoController(controllers.Controller, identity.SecureResource): 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: @@ -513,7 +515,7 @@ class GrupoController(controllers.Controller, identity.SecureResource): 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: @@ -537,7 +539,7 @@ class GrupoController(controllers.Controller, identity.SecureResource): 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