X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/blobdiff_plain/141102b1edb8db866a745e6bd82250f552dd789a..d7e08265c7bc2b3d7d7da51a08838675087a761d:/sercom/model.py?ds=sidebyside diff --git a/sercom/model.py b/sercom/model.py index c775d24..7b36029 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -61,6 +61,8 @@ SQLExpression.__hash__ = lambda self: hash(str(self)) instancia_tarea_t = table.instancia_tarea +enunciado_tarea_t = table.enunciado_tarea + dependencia_t = table.dependencia #}}} @@ -136,7 +138,6 @@ class Usuario(InheritableSQLObject, ByObject): #{{{ observaciones = UnicodeCol(default=None) activo = BoolCol(notNone=True, default=True) # Joins - grupos = RelatedJoin('Grupo') roles = RelatedJoin('Rol') def _get_user_name(self): # para identity @@ -278,6 +279,40 @@ class Enunciado(SQLObject, ByObject): #{{{ def add_caso_de_prueba(self, nombre, **opts): return CasoDePrueba(enunciadoID=self.id, nombre=nombre, **opts) + def _get_tareas(self): + self.__tareas = tuple(Tarea.select( + AND( + Tarea.q.id == enunciado_tarea_t.tarea_id, + Enunciado.q.id == enunciado_tarea_t.enunciado_id, + Enunciado.q.id == self.id + ), + clauseTables=(enunciado_tarea_t, Enunciado.sqlmeta.table), + orderBy=enunciado_tarea_t.orden, + )) + return self.__tareas + + def _set_tareas(self, tareas): + orden = {} + for i, t in enumerate(tareas): + orden[t.id] = i + new = frozenset([t.id for t in tareas]) + old = frozenset([t.id for t in self.tareas]) + tareas = dict([(t.id, t) for t in tareas]) + for tid in old - new: # eliminadas + self._connection.query(str(Delete(enunciado_tarea_t, where=AND( + enunciado_tarea_t.enunciado_id == self.id, + enunciado_tarea_t.tarea_id == tid)))) + for tid in new - old: # creadas + self._connection.query(str(Insert(enunciado_tarea_t, values=dict( + enunciado_id=self.id, tarea_id=tid, orden=orden[tid] + )))) + for tid in new & old: # actualizados + self._connection.query(str(Update(enunciado_tarea_t, + values=dict(orden=orden[tid]), where=AND( + enunciado_tarea_t.enunciado_id == self.id, + enunciado_tarea_t.tarea_id == tid, + )))) + def __repr__(self): return 'Enunciado(id=%s, autor=%s, nombre=%s, descripcion=%s, ' \ 'creado=%s)' \ @@ -358,7 +393,8 @@ class InstanciaDeEntrega(SQLObject, ByObject): #{{{ self.__tareas = tuple(Tarea.select( AND( Tarea.q.id == instancia_tarea_t.tarea_id, - InstanciaDeEntrega.q.id == instancia_tarea_t.instancia_id + InstanciaDeEntrega.q.id == instancia_tarea_t.instancia_id, + InstanciaDeEntrega.q.id == self.id, ), clauseTables=(instancia_tarea_t, InstanciaDeEntrega.sqlmeta.table), orderBy=instancia_tarea_t.orden,