X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/435b160c7f45d1aa993e2f933fd0343543a1b512..a1ede0802304893bf9c77a83084b3c90906c3068:/sercom/subcontrollers/grupo_admin/__init__.py diff --git a/sercom/subcontrollers/grupo_admin/__init__.py b/sercom/subcontrollers/grupo_admin/__init__.py index b431e84..d387877 100644 --- a/sercom/subcontrollers/grupo_admin/__init__.py +++ b/sercom/subcontrollers/grupo_admin/__init__.py @@ -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 sqlobject.dberrors import * from sercom.widgets import * +import logging + +log = logging.getLogger('sercom.tester') #}}} """ Administrador de grupos, mezclar, juntar, dividir""" @@ -167,7 +170,7 @@ ajax = u""" 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) } @@ -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)) - 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)) @@ -250,7 +253,7 @@ class GrupoAdminController(controllers.Controller, identity.SecureResource): 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', []) @@ -260,25 +263,49 @@ class GrupoAdminController(controllers.Controller, identity.SecureResource): 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: @@ -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)) + 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.'))