]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/model.py
Mejorar listado de alumnos.
[software/sercom.git] / sercom / model.py
index 480e19d59cb36361490a4fbf87b8f35e0c531919..a8670824a4577d9e5a78aa09865217329ee131c0 100644 (file)
@@ -312,8 +312,8 @@ class TareaPrueba(Tarea): #{{{
     # Joins
     comandos    = MultipleJoin('ComandoPrueba', joinColumn='tarea_id')
 
     # Joins
     comandos    = MultipleJoin('ComandoPrueba', joinColumn='tarea_id')
 
-    def add_comando(self, orden, **kw):
-        return ComandoPrueba(tarea=self, orden=orden, comando='', **kw)
+    def add_comando(self, orden, comando='', **kw):
+        return ComandoPrueba(tarea=self, orden=orden, comando=comando, **kw)
 
     def remove_comando(self, orden):
         ComandoPrueba.pk.get(self.id, orden).destroySelf()
 
     def remove_comando(self, orden):
         ComandoPrueba.pk.get(self.id, orden).destroySelf()
@@ -345,6 +345,7 @@ class Comando(InheritableSQLObject): #{{{
     max_locks_memoria   = IntCol(default=None)
     terminar_si_falla   = BoolCol(notNone=True, default=True)
     rechazar_si_falla   = BoolCol(notNone=True, default=True)
     max_locks_memoria   = IntCol(default=None)
     terminar_si_falla   = BoolCol(notNone=True, default=True)
     rechazar_si_falla   = BoolCol(notNone=True, default=True)
+    publico             = BoolCol(notNone=True, default=True)
     archivos_entrada    = BLOBCol(default=None) # ZIP con archivos de entrada
                                                 # __stdin__ es caso especial
                                                 # Si un caso de prueba tiene
     archivos_entrada    = BLOBCol(default=None) # ZIP con archivos de entrada
                                                 # __stdin__ es caso especial
                                                 # Si un caso de prueba tiene
@@ -429,9 +430,7 @@ class Enunciado(SQLObject): #{{{
     descripcion     = UnicodeCol(length=255, default=None)
     autor           = ForeignKey('Docente', cascade='null')
     creado          = DateTimeCol(notNone=True, default=DateTimeCol.now)
     descripcion     = UnicodeCol(length=255, default=None)
     autor           = ForeignKey('Docente', cascade='null')
     creado          = DateTimeCol(notNone=True, default=DateTimeCol.now)
-    archivo         = BLOBCol(default=None)
-    archivo_name    = UnicodeCol(length=255, default=None)
-    archivo_type    = UnicodeCol(length=255, default=None)
+    archivos        = BLOBCol(default=None)
     # Joins
     ejercicios      = MultipleJoin('Ejercicio')
     casos_de_prueba = MultipleJoin('CasoDePrueba')
     # Joins
     ejercicios      = MultipleJoin('Ejercicio')
     casos_de_prueba = MultipleJoin('CasoDePrueba')
@@ -523,7 +522,8 @@ class InstanciaDeEntrega(SQLObject): #{{{
     # Campos
     inicio          = DateTimeCol(notNone=True)
     fin             = DateTimeCol(notNone=True)
     # Campos
     inicio          = DateTimeCol(notNone=True)
     fin             = DateTimeCol(notNone=True)
-    procesada       = BoolCol(notNone=True, default=False)
+    inicio_proceso  = DateTimeCol(default=None)
+    fin_proceso     = DateTimeCol(default=None)
     observaciones   = UnicodeCol(default=None)
     activo          = BoolCol(notNone=True, default=True)
     # Joins
     observaciones   = UnicodeCol(default=None)
     activo          = BoolCol(notNone=True, default=True)
     # Joins
@@ -532,9 +532,10 @@ class InstanciaDeEntrega(SQLObject): #{{{
 
     def __repr__(self):
         return 'InstanciaDeEntrega(id=%s, numero=%s, inicio=%s, fin=%s, ' \
 
     def __repr__(self):
         return 'InstanciaDeEntrega(id=%s, numero=%s, inicio=%s, fin=%s, ' \
-            'procesada=%s, observaciones=%s, activo=%s)' \
+            'inicio_proceso=%s, fin_proceso=%s, observaciones=%s, activo=%s)' \
                 % (self.id, self.numero, self.inicio, self.fin,
                 % (self.id, self.numero, self.inicio, self.fin,
-                    self.procesada, self.observaciones, self.activo)
+                    self.inicio_proceso, self.fin_proceso, self.observaciones,
+                    self.activo)
 
     def shortrepr(self):
         return self.numero
 
     def shortrepr(self):
         return self.numero
@@ -631,7 +632,16 @@ class Grupo(Entregador): #{{{
     def add_miembro(self, alumno, **kw):
         if isinstance(alumno, AlumnoInscripto):
             alumno = alumno.id
     def add_miembro(self, alumno, **kw):
         if isinstance(alumno, AlumnoInscripto):
             alumno = alumno.id
-        return Miembro(grupo=self, alumnoID=alumno, **kw)
+        # FIXME acá habría que sacarle la unicidad a Miembro.pk para que
+        # un alumno pueda ser miembro varias veces del mismo grupo, de
+        # manera de tener la historia completa, pero hay que tener cuidad
+        # y arreglar todos los lugares donde se asume esa unicidad
+        try:
+            m = Miembro.selectBy(grupo=self, alumnoID=alumno).getOne()
+            m.baja = None # si ya existía, le sacamos la fecha de baja
+            return m
+        except SQLObjectNotFound: # creo uno nuevo
+            return Miembro(grupo=self, alumnoID=alumno, **kw)
 
     def remove_miembro(self, alumno):
         if isinstance(alumno, AlumnoInscripto):
 
     def remove_miembro(self, alumno):
         if isinstance(alumno, AlumnoInscripto):
@@ -642,7 +652,13 @@ class Grupo(Entregador): #{{{
     def add_tutor(self, docente, **kw):
         if isinstance(docente, DocenteInscripto):
             docente = docente.id
     def add_tutor(self, docente, **kw):
         if isinstance(docente, DocenteInscripto):
             docente = docente.id
-        return Tutor(grupo=self, docenteID=docente, **kw)
+        # FIXME ídem add_miembro()
+        try:
+            t = Tutor.selectBy(grupo=self, docenteID=alumno).getOne()
+            t.baja = None # si ya existía, le sacamos la fecha de baja
+            return t
+        except SQLObjectNotFound: # creo uno nuevo
+            return Tutor(grupo=self, docenteID=docente, **kw)
 
     def remove_tutor(self, docente):
         if isinstance(docente, DocenteInscripto):
 
     def remove_tutor(self, docente):
         if isinstance(docente, DocenteInscripto):
@@ -741,7 +757,7 @@ class Miembro(SQLObject): #{{{
 
 class Ejecucion(InheritableSQLObject): #{{{
     # Campos
 
 class Ejecucion(InheritableSQLObject): #{{{
     # Campos
-    inicio          = DateTimeCol(notNone=True, default=DateTimeCol.now)
+    inicio          = DateTimeCol(default=None)
     fin             = DateTimeCol(default=None)
     exito           = IntCol(default=None)
     observaciones   = UnicodeCol(notNone=True, default=u'')
     fin             = DateTimeCol(default=None)
     exito           = IntCol(default=None)
     observaciones   = UnicodeCol(notNone=True, default=u'')
@@ -782,6 +798,10 @@ class Entrega(Ejecucion): #{{{
         # FIXME self.id, caso_de_prueba
         Prueba.pk.get(self.id, caso_de_prueba).destroySelf()
 
         # FIXME self.id, caso_de_prueba
         Prueba.pk.get(self.id, caso_de_prueba).destroySelf()
 
+    def make_correccion(self, corrector, **kw):
+        return Correccion(instancia=self.instancia, entregador=self.entregador,
+            entrega=self, corrector=corrector, **kw)
+
     def __repr__(self):
         return super(Entrega, self).__repr__('instancia=%s, entregador=%s, '
             'fecha=%s' % (self.instancia.shortrepr(), srepr(self.entregador),
     def __repr__(self):
         return super(Entrega, self).__repr__('instancia=%s, entregador=%s, '
             'fecha=%s' % (self.instancia.shortrepr(), srepr(self.entregador),
@@ -799,7 +819,7 @@ class Correccion(SQLObject): #{{{
     pk              = DatabaseIndex(instancia, entregador, unique=True)
     # Campos
     entrega         = ForeignKey('Entrega', notNone=True, cascade=False)
     pk              = DatabaseIndex(instancia, entregador, unique=True)
     # Campos
     entrega         = ForeignKey('Entrega', notNone=True, cascade=False)
-    corrector       = ForeignKey('DocenteInscripto', default=None, cascade='null')
+    corrector       = ForeignKey('DocenteInscripto', notNone=True, cascade=False)
     asignado        = DateTimeCol(notNone=True, default=DateTimeCol.now)
     corregido       = DateTimeCol(default=None)
     nota            = DecimalCol(size=3, precision=1, default=None)
     asignado        = DateTimeCol(notNone=True, default=DateTimeCol.now)
     corregido       = DateTimeCol(default=None)
     nota            = DecimalCol(size=3, precision=1, default=None)