from sercom.subcontrollers import validate as val
from sercom.model import Curso, AlumnoInscripto, Docente, Grupo, Alumno, Miembro
from sqlobject import *
-
+from sqlobject.dberrors import *
from sercom.widgets import *
+import logging
+
+log = logging.getLogger('sercom.tester')
#}}}
""" Administrador de grupos, mezclar, juntar, dividir"""
function cargarGrupo(grupoid, lista) {
//url = "/grupo/get_inscripto?cursoid="+cursoid+'&padron='+padron
- var result = loadJSONDoc('/grupo/get_alumnos?grupoid='+id);
+ var result = loadJSONDoc('/curso/grupo/get_alumnos?grupoid='+id);
result.addCallbacks(partial(cargarLista, lista), err)
}
class Fields(W.WidgetsList):
listaGrupoA = W.SingleSelectField(label=_(u'Grupo A'), options = get_gruposA, attrs = dict(onChange='onListaAChange()'), validator = V.Int(not_empty=True))
listaGrupoB = W.SingleSelectField(label=_(u'Grupo B'), options = get_gruposB, attrs = dict(onChange='onListaBChange()'), validator = V.Int(not_empty=True))
- grupos = AjaxDosListasSelect(label=_(u'Grupos'),title_from="Grupo A", title_to="Grupo B", validator=V.Int(not_empty=True))
+ grupos = AjaxDosListasSelect(label=_(u'Grupos'),title_from="Grupo A", size=8, title_to="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'), options = get_docentes, validator = V.Int(not_empty=True))
def update(self, cursoid, **kw):
"""Save or create record to model"""
- print kw
+ log.debug(kw)
grupoAId = kw['listaGrupoA']
grupoBId = kw['listaGrupoB']
miembrosA = kw.get('grupos_from', [])
tutoresA = kw.get('tutoresA', [])
tutoresB = kw.get('tutoresB', [])
+ # por las dudas de que no sea una lista
+ if not isinstance(miembrosA, list):
+ miembrosA = [miembrosA]
+ if not isinstance(miembrosB, list):
+ miembrosB = [miembrosB]
+ if not isinstance(tutoresA, list):
+ tutoresA = [tutoresA]
+ if not isinstance(tutoresB, list):
+ tutoresB = [tutoresB]
+
+
""" levanto los grupos originales """
grupoAorig = validate_get(int(grupoAId))
-
+ log.debug(miembrosA)
+ log.debug(Miembro.selectBy(grupo=grupoAorig, baja=None))
""" Si el grupo A quedo vacio deberia eliminarlo (primero
genero los otros para que no elimine los alumnos)"""
for mA in Miembro.selectBy(grupo=grupoAorig, baja=None):
if str(mA.alumno.id) not in miembrosA:
grupoAorig.remove_miembro(mA.alumno.id)
- for a in miembrosA:
- try:
- grupoA = Grupo.get(grupoAId)
- grupoA.add_miembro(a)
- except:
- continue
+ try:
+ grupoA = validate_get(grupoAId)
+ for a in miembrosA:
+ try:
+ grupoA.add_miembro(a, baja=None)
+ except DuplicateEntryError:
+ continue
+ except Exception, e:
+ log.debug(e)
+ flash(_(u'Error A %s.' % e))
+ raise redirect('/grupo/list')
# seteo el reponsable del grupo
if int(responsableA) != 0:
grupoA.responsable = AlumnoInscripto.get(int(responsableA))
+ for t in tutoresA:
+ try:
+ grupoA.add_tutor(int(t))
+ except:
+ #TODO ver por que no anda el duplicate error, por ahora cacheo silencioso
+ pass
+
#Elimino el grupo si quedo vacio
if len(miembrosA) == 0:
Grupo(miembros = nuevosMiembros, tutores = nuevosTutores, cursoID=cursoid, nombre='NuevoGrupo'+str(cursoid))
else:
grupoBorig = validate_get(int(grupoBId))
+ log.debug(miembrosB)
+ b = list(Miembro.selectBy(grupo=grupoBorig, baja=None))
+ log.debug(b)
#borro todos y los vuelvo a agregar
for mB in Miembro.selectBy(grupo=grupoBorig, baja=None):
if str(mB.alumno.id) not in miembrosB:
grupoBorig.remove_miembro(mB.alumno.id)
- for b in miembrosB:
- try:
- grupoB = Grupo.get(grupoBId)
- grupoB.add_miembro(b)
- except:
- continue
+ try:
+ grupoB = validate_get(grupoBId)
+ for b in miembrosB:
+ try:
+ grupoB.add_miembro(b, baja=None)
+ except DuplicateEntryError:
+ continue
+ except Exception, e:
+ log.debug(e)
+ flash(_(u'Error B %s.' % e))
+ raise redirect('/grupo/list')
# seteo el reponsable del grupo
if int(responsableB) != 0:
grupoB.responsable = AlumnoInscripto.get(int(responsableB))
#Elimino el grupo si quedo vacio
if len(miembrosB) == 0:
- validate_del(grupoBId)
+ try:
+ validate_del(grupoBId)
+ except:
+ pass
+
+ for t in tutoresB:
+ try:
+ grupoB.add_tutor(int(t))
+ except:
+ #TODO ver por que no anda el duplicate error, por ahora cahceo silencioso
+ pass
flash(_(u'Los grupos fueron actualizado.'))