Beispiel #1
0
    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
Beispiel #2
0
    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        
Beispiel #3
0
    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('./')
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
    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("./")
Beispiel #7
0
    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/')
Beispiel #8
0
    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/')
Beispiel #9
0
    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('../')
Beispiel #10
0
    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('../')