]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/subcontrollers/grupo_admin/__init__.py
admin grupo fix
[software/sercom.git] / sercom / subcontrollers / grupo_admin / __init__.py
index b431e848ad24af6be0dc53526a44c4f3d40010d4..d387877af27666a46bd110862ff9785dcf5150a1 100644 (file)
@@ -12,8 +12,11 @@ from docutils.core import publish_parts
 from sercom.subcontrollers import validate as val
 from sercom.model import Curso, AlumnoInscripto, Docente, Grupo, Alumno, Miembro
 from sqlobject import *
 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 *
 from sercom.widgets import *
+import logging
+
+log = logging.getLogger('sercom.tester')
 
 #}}}
 """ Administrador de grupos, mezclar, juntar, dividir"""
 
 #}}}
 """ Administrador de grupos, mezclar, juntar, dividir"""
@@ -167,7 +170,7 @@ ajax = u"""
 
     function cargarGrupo(grupoid, lista) {
         //url = "/grupo/get_inscripto?cursoid="+cursoid+'&padron='+padron
 
     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)
     }
 
         result.addCallbacks(partial(cargarLista, lista), err)
     }
 
@@ -197,7 +200,7 @@ class GrupoAdminForm(W.TableForm):
     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))
     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))
         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))
@@ -250,7 +253,7 @@ class GrupoAdminController(controllers.Controller, identity.SecureResource):
     def update(self, cursoid, **kw):
         """Save or create record to model"""
 
     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', [])
         grupoAId = kw['listaGrupoA']
         grupoBId = kw['listaGrupoB']
         miembrosA = kw.get('grupos_from', [])
@@ -260,25 +263,49 @@ class GrupoAdminController(controllers.Controller, identity.SecureResource):
         tutoresA = kw.get('tutoresA', [])
         tutoresB = kw.get('tutoresB', [])
 
         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))
         """ 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)
 
         """ 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))
 
         # 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:
 
         #Elimino el grupo si quedo vacio
         if len(miembrosA) == 0:
@@ -300,23 +327,41 @@ class GrupoAdminController(controllers.Controller, identity.SecureResource):
             Grupo(miembros = nuevosMiembros, tutores = nuevosTutores, cursoID=cursoid, nombre='NuevoGrupo'+str(cursoid))
         else:
             grupoBorig = validate_get(int(grupoBId))
             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)
             #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:
             # 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.'))
 
 
         flash(_(u'Los grupos fueron actualizado.'))