X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/46d8c9d3b2ec0b949dd5075a1d7c2b2a6b8f869d..1d6e1a049f23248c84dc99d5ffa64f914b0c2a6b:/sercom/subcontrollers/curso/__init__.py?ds=sidebyside diff --git a/sercom/subcontrollers/curso/__init__.py b/sercom/subcontrollers/curso/__init__.py index 35e9952..b9ce585 100644 --- a/sercom/subcontrollers/curso/__init__.py +++ b/sercom/subcontrollers/curso/__init__.py @@ -10,11 +10,15 @@ from turbogears import identity from turbogears import paginate from docutils.core import publish_parts from sercom.subcontrollers import validate as val -from sercom.model import Curso, Ejercicio, Alumno, Docente, Grupo, DocenteInscripto +from sercom.model import Curso, Correccion, Ejercicio, Alumno, Docente, Grupo, DocenteInscripto, Rol from curso_alumno import * from sqlobject import * from sqlobject.dberrors import * from sercom.widgets import * +from alumno import AlumnoInscriptoController +from grupo import GrupoController +from ejercicio import EjercicioController +from docente import DocenteInscriptoController #}}} #{{{ Configuración @@ -102,17 +106,8 @@ def validate_del(id): return val.validate_del(cls, name, id) #}}} -def get_ejercicios(): - return [(fk1.id, fk1.shortrepr()) for fk1 in Ejercicio.select()] - def get_docentes(): - return [(fk1.id, fk1.shortrepr()) for fk1 in Docente.select()] - -def get_alumnos(): - return [(fk1.id, fk1.shortrepr()) for fk1 in Alumno.select()] - -def get_grupos(): - return [(fk1.id, fk1.shortrepr()) for fk1 in Grupo.select()] + return [(fk1.id, fk1.shortrepr()) for fk1 in Docente.selectBy(activo=True)] #{{{ Formulario @@ -127,8 +122,8 @@ class CursoForm(W.TableForm): numero = W.TextField(label=_(u'Numero'), help_text=_(u'Requerido'), validator=V.Number(min=1, max=2, strip=True)) - descripcion = W.TextArea(name='descripcion', label=_(u'Descripcion'), - help_text=_(u'Descripcion.'), + descripcion = W.TextField(label=_(u'Descripción'), + help_text=_(u'Descripción.'), validator=V.UnicodeString(not_empty=False, strip=True)) #docentes = W.MultipleSelectField(name="docentes", @@ -168,6 +163,10 @@ class CursoController(controllers.Controller, identity.SecureResource): """Basic model admin interface""" require = identity.has_permission('admin') curso_alumno = CursoAlumnoController() + alumno = AlumnoInscriptoController() + grupo = GrupoController() + ejercicio = EjercicioController() + docente = DocenteInscriptoController() @expose() def default(self, tg_errors=None): @@ -182,7 +181,7 @@ class CursoController(controllers.Controller, identity.SecureResource): @paginate('records') def list(self): """List records in model""" - r = cls.select() + r = cls.select().orderBy((-cls.q.anio, -cls.q.cuatrimestre, cls.q.numero)) return dict(records=r, name=name, namepl=namepl) @expose() @@ -225,20 +224,10 @@ class CursoController(controllers.Controller, identity.SecureResource): def edit(self, id, **kw): """Edit record in model""" r = validate_get(id) - class EmptyClass: - pass - values = EmptyClass() - values.id = r.id - values.anio = r.anio - values.numero = r.numero - values.cuatrimestre = r.cuatrimestre - values.cursoID = r.id - values.descripcion = r.descripcion # cargo la lista con los docentes asignados al curso - values.docentes_to = [{"id":d.docente.id, "label":d.docente.shortrepr()} for d in DocenteInscripto.selectBy(curso=r.id)] - values.alumnos_inscriptos = [{"id":a.alumno.id, "label":a.alumno.shortrepr()} for a in AlumnoInscripto.selectBy(curso=r.id)] - - return dict(name=name, namepl=namepl, record=values, form=form) + r.docentes_to = [{"id":d.docente.id, "label":d.docente.shortrepr().replace("'", "\\'")} for d in r.docentes] + r.alumnos_inscriptos = [{"id":a.alumno.id, "label":a.alumno.shortrepr().replace("'", "\\'")} for a in r.alumnos] + return dict(name=name, namepl=namepl, record=r, form=form) @validate(form=form) @error_handler(edit) @@ -313,13 +302,13 @@ class CursoController(controllers.Controller, identity.SecureResource): if row == []: continue try: - u = Alumno(row[0], nombre=row[1]) + u = Alumno(row[0], nombre=row[1], roles=[Rol.by_nombre('alumno')]) except: u = Alumno.byPadron(row[0]) try: u.email = row[2] u.telefono = row[3] - u.contrasenia = row[0] + u.password = row[0] u.activo = True curso.add_alumno(u) ok.append(row) @@ -327,5 +316,104 @@ class CursoController(controllers.Controller, identity.SecureResource): row.append(str(e)) fail.append(row) return dict(ok=ok, fail=fail) + + @expose(template='kid:%s.templates.notas' % __name__) + def notas(self, cursoid): + r = validate_get(cursoid) + # Armo las columnas del listado + cols = ["Padron", "Nombre", "Grupo"] + # Ejercicios + for ej in r.ejercicios: + for ins in ej.instancias: + print "E"+str(ej.numero)+str(ins.numero) + cols.append("E"+str(ej.numero)+str(ins.numero)) + cols.append("EA") + cols.append("NP") + cols.append("NF") + cols.append("NL") + + rows = [] + for i in r.alumnos: + col = {} + col["Padron"] = i.alumno.padron + col["Nombre"] = i.alumno.nombre + miembro = Grupo.selectByAlumno(i.alumno) + if miembro.count() > 0: + col["Grupo"] = miembro[0].grupo.shortrepr() + else: + col["Grupo"] = "" + correctas = 0 + for ej in r.ejercicios: + for ins in ej.instancias: + if ej.grupal: + # Busco la correccion del grupo + g = Grupo.selectByAlumno(i.alumno).getOne() + c = Correccion.selectBy(instancia=ins, entregador=g.grupo) + else: + # Busco la correccion del alumno + c = Correccion.selectBy(instancia=ins, entregador=i) + if c.count() > 0: + col["E"+str(ej.numero)+str(ins.numero)] = c[0].nota + if c[0].nota >= 4: + correctas += 1 + else: + col["E"+str(ej.numero)+str(ins.numero)] = "" + col["EA"] = correctas + col["NP"] = i.nota_practica + col["NF"] = i.nota_final + col["NL"] = i.nota_libreta + rows.append(col) + return dict(curso=r, rows=rows, cols=cols) + + @expose() + def notascsv(self, cursoid): + r = validate_get(cursoid) + # Armo las columnas del listado + cols = ["Padron", "Nombre", "Grupo"] + # Ejercicios + for ej in r.ejercicios: + for ins in ej.instancias: + print "E"+str(ej.numero)+str(ins.numero) + cols.append("E"+str(ej.numero)+str(ins.numero)) + cols.append("EA") + cols.append("NP") + cols.append("NF") + cols.append("NL") + + rows = [] + for i in r.alumnos: + col = [] + col.append(i.alumno.padron) + col.append(i.alumno.nombre) + miembro = Grupo.selectByAlumno(i.alumno) + if miembro.count() > 0: + col.append(miembro[0].grupo.shortrepr()) + else: + col.append("") + correctas = 0 + for ej in r.ejercicios: + for ins in ej.instancias: + if ej.grupal: + # Busco la correccion del grupo + g = Grupo.selectByAlumno(i.alumno).getOne() + c = Correccion.selectBy(instancia=ins, entregador=g.grupo) + else: + # Busco la correccion del alumno + c = Correccion.selectBy(instancia=ins, entregador=i) + if c.count() > 0: + col.append(str(c[0].nota)) + if c[0].nota > 4: + correctas += 1 + else: + col.append("") + col.append(str(correctas)) + col.append(str(i.nota_practica)) + col.append(str(i.nota_final)) + col.append(str(i.nota_libreta)) + rows.append(col) + s = ",".join(cols) + "\n" + for i in rows: + s = s + ",".join(i) + "\n" + return s #}}}