def crear_relacion(self, item_1, item_2, nueva_version): """ Crea una relación entre dos ítems. @param item_1: Item antecesor/padre de la relación a ser creada. @type item_1: L{Item} @param item_2: Item sucesor/hijo de la relación a ser creada. @type item_2: L{Item} @return: True si la relación se creó exitosamente, False en caso contrario. @rtype: Bool """ r = Relacion() r.id = "RE-" + item_1.id + "-" + unicode(item_1.version) + "+" + \ item_2.id + "-" + unicode(item_2.version) r.item_1 = item_1 r.item_2 = item_2 a = forma_ciclo(r.item_1) DBSession.add(r) if a: if nueva_version == r.item_1: DBSession.delete(r.item_2) DBSession.delete(r) return False else: return True
def unir(self, **kw): """ Permite realizar la unión entre dos o más líneas base de manera que formen una sola. """ id_proyecto = self.id_fase.split("-")[1] if TienePermiso("unir lineas base", id_proyecto=id_proyecto, id_fase=self.id_fase).is_met(request.environ): if "seleccionados" in kw: lb = LineaBase() lb.descripcion = kw["descripcion"] ids_lineas_base = DBSession.query(LineaBase.id) \ .filter(LineaBase.id_fase == self.id_fase) \ .all() proximo_id_linea_base = proximo_id(ids_lineas_base) lb.id = proximo_id_linea_base lb.fase = DBSession.query(Fase) \ .filter(Fase.id == self.id_fase).one() lb.cerrado = False lb.consistente = False DBSession.add(lb) consistente = True for lb_seleccionada in kw["seleccionados"]: items = DBSession.query(Item).filter( Item.id_linea_base == lb_seleccionada).all() a_eliminar = DBSession.query(LineaBase) \ .filter(LineaBase.id == lb_seleccionada).one() DBSession.delete(a_eliminar) for item in items: item.linea_base = DBSession.query(LineaBase) \ .filter(LineaBase.id == lb.id).one() consistencia_lb(lb) DBSession.add(lb) redirect('./') lineas_base = DBSession.query(LineaBase.id) \ .filter(LineaBase.id_fase == self.id_fase) \ .filter(LineaBase.cerrado == False).all() d = dict(model="Linea Base", accion="./") d["lineas_base"] = lineas_base d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", u"error") redirect('./')
def _do_get_provider_count_and_objs(self, buscado="", **kw): """ Se utiliza para listar las líneas base que cumplan ciertas condiciones y ciertos permisos. """ if TieneAlgunPermiso(tipo="Fase", recurso="Linea Base", id_fase=self.id_fase): lineas_base = DBSession.query(LineaBase).filter( LineaBase.descripcion.contains(self.buscado)).filter( LineaBase.id_fase == self.id_fase).all() for lb in reversed(lineas_base): if not lb.items: lineas_base.remove(lb) DBSession.delete(lb) else: lineas_base = list() return len(lineas_base), lineas_base
def _do_get_provider_count_and_objs(self, buscado="", **kw): """ Se utiliza para listar las líneas base que cumplan ciertas condiciones y ciertos permisos. """ if TieneAlgunPermiso(tipo="Fase", recurso="Linea Base", id_fase=self.id_fase): lineas_base = ( DBSession.query(LineaBase) .filter(LineaBase.descripcion.contains(self.buscado)) .filter(LineaBase.id_fase == self.id_fase) .all() ) for lb in reversed(lineas_base): if not lb.items: lineas_base.remove(lb) DBSession.delete(lb) else: lineas_base = list() return len(lineas_base), lineas_base
def unir(self, **kw): """ Permite realizar la unión entre dos o más líneas base de manera que formen una sola. """ id_proyecto = self.id_fase.split("-")[1] if TienePermiso("unir lineas base", id_proyecto=id_proyecto, id_fase=self.id_fase).is_met(request.environ): if "seleccionados" in kw: lb = LineaBase() lb.descripcion = kw["descripcion"] ids_lineas_base = DBSession.query(LineaBase.id).filter(LineaBase.id_fase == self.id_fase).all() proximo_id_linea_base = proximo_id(ids_lineas_base) lb.id = proximo_id_linea_base lb.fase = DBSession.query(Fase).filter(Fase.id == self.id_fase).one() lb.cerrado = False lb.consistente = False DBSession.add(lb) consistente = True for lb_seleccionada in kw["seleccionados"]: items = DBSession.query(Item).filter(Item.id_linea_base == lb_seleccionada).all() a_eliminar = DBSession.query(LineaBase).filter(LineaBase.id == lb_seleccionada).one() DBSession.delete(a_eliminar) for item in items: item.linea_base = DBSession.query(LineaBase).filter(LineaBase.id == lb.id).one() consistencia_lb(lb) DBSession.add(lb) redirect("./") lineas_base = ( DBSession.query(LineaBase.id) .filter(LineaBase.id_fase == self.id_fase) .filter(LineaBase.cerrado == False) .all() ) d = dict(model="Linea Base", accion="./") d["lineas_base"] = lineas_base d["direccion_anterior"] = "./" return d else: flash(u"El usuario no cuenta con los permisos necesarios", u"error") redirect("./")
def post(self, **kw): """Registra la nueva relación creada.""" r = Relacion() item_2 = DBSession.query(Item).filter(Item.id == self.id_item) \ .filter(Item.version == self.version_item).one() item_1 = DBSession.query(Item).filter(Item.id == kw["item_2"]) \ .order_by(desc(Item.version)).first() r.id = "RE-" + item_1.id + "-" + unicode(item_1.version) + "+" + \ item_2.id + "-" + unicode(item_2.version + 1) r.item_1 = item_1 r.item_2 = self.crear_version(item_2) if forma_ciclo(r.item_1): flash(u"No se puede crear la relación", u"error") DBSession.delete(r.item_2) DBSession.delete(r) raise redirect('./') else: DBSession.add(r) flash("Creacion realizada de forma exitosa") raise redirect('./../../' + r.item_2.id + '-' + \ unicode(r.item_2.version) + '/' + 'relaciones/')
def put(self, *args, **kw): """ Registra los cambios realizados a un proyecto. """ id_proyecto = args[0] proyecto_modificado = DBSession.query(Proyecto).filter(Proyecto.id == \ id_proyecto).one() pks = self.provider.get_primary_fields(self.model) for i, pk in enumerate(pks): if pk not in kw and i < len(args): kw[pk] = args[i] usuario = None if kw['lider']: id_lider = kw['lider'] viejo_lider_proyecto_tupla = DBSession.query(Proyecto.id_lider). \ filter(Proyecto.id == id_proyecto).one() if viejo_lider_proyecto_tupla: viejo_lider_proyecto_id = viejo_lider_proyecto_tupla.id_lider ficha = DBSession.query(Ficha).filter(Ficha.id_proyecto == \ id_proyecto).filter(Ficha.id_usuario == \ viejo_lider_proyecto_id).filter(Ficha.id_rol == u'RL2') \ .scalar() if ficha: usuario = DBSession.query(Usuario).filter(Usuario.id == \ id_lider).one() ids_fichas = DBSession.query(Ficha.id).filter(Ficha. \ id_usuario == id_lider).all() if ids_fichas: proximo_id_ficha = proximo_id(ids_fichas) else: proximo_id_ficha = "FI1-" + id_lider ficha.id = proximo_id_ficha ficha.usuario = usuario DBSession.add(ficha) else: ids_fichas = DBSession.query(Ficha.id).filter(Ficha.\ id_usuario == id_lider).all() rol = DBSession.query(Rol).filter(Rol.id == u'RL2').one() proyecto = DBSession.query(Proyecto).filter(Proyecto.id \ == id_proyecto).one() usuario = DBSession.query(Usuario).filter(Usuario.id == \ id_lider).one() fi = Ficha() fi.usuario = usuario fi.rol = rol fi.proyecto = proyecto if ids_fichas: proximo_id_ficha = proximo_id(ids_fichas) else: proximo_id_ficha = "FI1-" + id_lider fi.id = proximo_id_ficha DBSession.add(fi) else: viejo_lider_proyecto_tupla = DBSession.query(Proyecto.id_lider). \ filter(Proyecto.id == id_proyecto).one() if viejo_lider_proyecto_tupla: viejo_lider_proyecto_id = viejo_lider_proyecto_tupla.id_lider ficha_lider_a_eliminar = DBSession.query(Ficha).filter \ (Ficha.id_proyecto == id_proyecto). \ filter(Ficha.id_usuario == \ viejo_lider_proyecto_id).filter \ (Ficha.id_rol == u'RL2').scalar() DBSession.delete(ficha_lider_a_eliminar) proyecto_modificado.lider = usuario proyecto_modificado.nombre = kw["nombre"] proyecto_modificado.descripcion = kw["descripcion"] if "nro_fases" in kw: proyecto_modificado.nro_fases = kw["nro_fases"] redirect('../')