Example #1
0
 def crear_version(self, it):
     """ Crea una nueva version del ítem al cual se añade el archivo.
     """
     nueva_version = Item()
     nueva_version.id = it.id
     nueva_version.codigo = it.codigo
     nueva_version.version = it.version + 1
     nueva_version.nombre = it.nombre
     nueva_version.descripcion = it.descripcion
     nueva_version.estado = it.estado
     nueva_version.observaciones = it.observaciones
     nueva_version.prioridad = it.prioridad
     nueva_version.complejidad = it.complejidad
     nueva_version.borrado = it.borrado
     nueva_version.anexo = it.anexo
     nueva_version.tipo_item = it.tipo_item
     nueva_version.linea_base = it.linea_base
     nueva_version.archivos = it.archivos
     for relacion in relaciones_a_actualizadas(it.relaciones_a):
         aux = relacion.id.split("+")
         r = Relacion()
         r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \
                 unicode(nueva_version.version) + "+" +aux[1]
         r.item_1 = nueva_version
         r.item_2 = relacion.item_2
     for relacion in relaciones_b_actualizadas(it.relaciones_b):
         r = Relacion()
         aux = relacion.id.split("+")
         r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + "-" + \
                 unicode(nueva_version.version)
         r.item_1 = relacion.item_1
         r.item_2 = nueva_version
     return nueva_version
Example #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        
Example #3
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
Example #4
0
 def crear_version(self, it):
     """ Crea una nueva version del ítem al cual se añade el archivo.
     """
     nueva_version = Item()
     nueva_version.id = it.id
     nueva_version.codigo = it.codigo
     nueva_version.version = it.version + 1
     nueva_version.nombre = it.nombre
     nueva_version.descripcion = it.descripcion
     nueva_version.estado = it.estado
     nueva_version.observaciones = it.observaciones
     nueva_version.prioridad = it.prioridad
     nueva_version.complejidad = it.complejidad
     nueva_version.borrado = it.borrado
     nueva_version.anexo = it.anexo
     nueva_version.tipo_item = it.tipo_item
     nueva_version.linea_base = it.linea_base
     nueva_version.archivos = it.archivos
     for relacion in relaciones_a_actualizadas(it.relaciones_a):
         aux = relacion.id.split("+")
         r = Relacion()
         r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \
                 unicode(nueva_version.version) + "+" +aux[1] 
         r.item_1 = nueva_version
         r.item_2 = relacion.item_2
     for relacion in relaciones_b_actualizadas(it.relaciones_b):
         r = Relacion()
         aux = relacion.id.split("+")
         r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + "-" + \
                 unicode(nueva_version.version)
         r.item_1 = relacion.item_1
         r.item_2 = nueva_version
     return nueva_version
Example #5
0
    def crear_version(self, it, borrado=None, item_borrado=None):
        """
        Crea una nueva versión de un ítem dado. Permite también borrar
        una relación de esta nueva versión si se especifica.

        @param it: Item a partir del cual se creará una nueva versión.
        @type it: L{Item}
        @param borrado: Relación a eliminar.
        @type borrado: L{Relacion}
        """
        nueva_version = Item()
        nueva_version.id = it.id
        nueva_version.codigo = it.codigo
        nueva_version.version = it.version + 1
        nueva_version.nombre = it.nombre
        nueva_version.descripcion = it.descripcion
        nueva_version.estado = it.estado
        nueva_version.observaciones = it.observaciones
        nueva_version.prioridad = it.prioridad
        nueva_version.complejidad = it.complejidad
        nueva_version.anexo = it.anexo
        nueva_version.revisiones = it.revisiones
        nueva_version.tipo_item = it.tipo_item
        nueva_version.archivos = it.archivos
        if item_borrado:
            nueva_version.borrado = True
            nueva_version.linea_base = None
        else:
            nueva_version.linea_base = it.linea_base
            nueva_version.borrado = it.borrado
            for relacion in it.relaciones_a:
                if not relacion == borrado:
                    aux = relacion.id.split("+")
                    r = Relacion()
                    r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \
                        unicode(nueva_version.version) + "+" +aux[1]
                    r.item_1 = nueva_version
                    r.item_2 = relacion.item_2
            for relacion in it.relaciones_b:
                if not relacion == borrado:
                    r = Relacion()
                    aux = relacion.id.split("+")
                    r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \
                        "-" + unicode(nueva_version.version)
                    r.item_1 = relacion.item_1
                    r.item_2 = nueva_version
        return nueva_version
Example #6
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/')
Example #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/')
Example #8
0
    def crear_version(self, it, borrado = None, item_borrado = None):
        """
        Crea una nueva versión de un ítem dado. Permite también borrar
        una relación de esta nueva versión si se especifica.

        @param it: Item a partir del cual se creará una nueva versión.
        @type it: L{Item}
        @param borrado: Relación a eliminar.
        @type borrado: L{Relacion}
        """
        nueva_version = Item()
        nueva_version.id = it.id
        nueva_version.codigo = it.codigo
        nueva_version.version = it.version + 1
        nueva_version.nombre = it.nombre
        nueva_version.descripcion = it.descripcion
        nueva_version.estado = it.estado
        nueva_version.observaciones = it.observaciones
        nueva_version.prioridad = it.prioridad
        nueva_version.complejidad = it.complejidad
        nueva_version.anexo = it.anexo
        nueva_version.revisiones = it.revisiones
        nueva_version.tipo_item = it.tipo_item
        nueva_version.archivos = it.archivos
        if item_borrado:        
            nueva_version.borrado = True
            nueva_version.linea_base = None
        else:
            nueva_version.linea_base = it.linea_base
            nueva_version.borrado = it.borrado 
            for relacion in it.relaciones_a:
                if not relacion == borrado:
                    aux = relacion.id.split("+")
                    r = Relacion()
                    r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \
                        unicode(nueva_version.version) + "+" +aux[1] 
                    r.item_1 = nueva_version
                    r.item_2 = relacion.item_2
            for relacion in it.relaciones_b:
                if not relacion == borrado:
                    r = Relacion()
                    aux = relacion.id.split("+")
                    r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \
                        "-" + unicode(nueva_version.version)
                    r.item_1 = relacion.item_1
                    r.item_2 = nueva_version
        return nueva_version
Example #9
0
    def put(self, *args, **kw):
        """ Registra los cambios realizados a un ítem. """
        nombre_caract = DBSession.query(Caracteristica.nombre) \
                .filter(Caracteristica.id_tipo_item == kw['tipo_item']).all()      
        anexo = dict()
        for nom_car in nombre_caract:
            anexo[nom_car.nombre] = kw[nom_car.nombre]
        anexo = json.dumps(anexo)

        clave_primaria = args[0]
        pk_version = unicode(clave_primaria.split("-")[4])
        pk_id = unicode(clave_primaria.split("-")[0] + "-" + \
                clave_primaria.split("-")[1] + "-" + \
                clave_primaria.split("-")[2] + "-" + \
                clave_primaria.split("-")[3])
        clave = {}
        clave[0] = pk_id
        clave[1] = pk_version        
        it = DBSession.query(Item).filter(Item.id == pk_id).filter( \
                Item.version == pk_version).scalar()
        pks = self.provider.get_primary_fields(self.model)
        for i, pk in enumerate(pks):
            if pk not in kw and i < len(clave):
                kw[pk] = clave[i]
        band = 0
        nueva_version = Item()
        nueva_version.id = it.id
        nueva_version.codigo = it.codigo
        nueva_version.version = int(pk_version) + 1
        nueva_version.nombre = it.nombre
        nueva_version.descripcion = it.descripcion
        nueva_version.estado = u"En desarrollo"
        nueva_version.observaciones = it.observaciones
        nueva_version.prioridad = it.prioridad
        nueva_version.complejidad = it.complejidad
        nueva_version.borrado = it.borrado
        nueva_version.anexo = it.anexo
        if not it.descripcion == kw['descripcion']:
            band = 1
            nueva_version.descripcion = kw['descripcion']
        if not it.nombre == kw['nombre']:
            band = 1
            nueva_version.nombre = kw['nombre']
        if not it.observaciones == kw['observaciones']:
            band = 1
            nueva_version.observaciones = kw['observaciones']
        if not it.prioridad == int(kw['prioridad']):
            band = 1
            nueva_version.prioridad = kw['prioridad']
        if not it.complejidad == int(kw['complejidad']):
            band = 1
            nueva_version.complejidad = kw['complejidad']
        if not it.anexo == anexo:
            band = 1
            nueva_version.anexo = anexo
        
        if band:
            nueva_version.tipo_item = it.tipo_item
            nueva_version.linea_base = it.linea_base
            nueva_version.archivos = it.archivos
            nueva_version.revisiones = it.revisiones
            for relacion in relaciones_a_actualizadas(it.relaciones_a):
                aux = relacion.id.split("+")
                r = Relacion()
                r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \
                        unicode(nueva_version.version) + "+" +aux[1] 
                r.item_1 = nueva_version
                r.item_2 = relacion.item_2
            for relacion in relaciones_b_actualizadas(it.relaciones_b):
                r = Relacion()
                aux = relacion.id.split("+")
                r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \
                        "-" + unicode(nueva_version.version)
                r.item_1 = relacion.item_1
                r.item_2 = nueva_version
            DBSession.add(nueva_version)
            r_act = relaciones_a_actualizadas(it.relaciones_a)
            listaux = [r.item_2 for r in r_act]
            ids_items_direc_relacionados_1 = DBSession.query( \
                    Relacion.id_item_2, Relacion.version_item_2) \
                    .filter(Relacion.id_item_1 == pk_id) \
                    .filter(Relacion.version_item_1 == pk_version).all()
            for tupla_id_item_version in (ids_items_direc_relacionados_1):
                id_item = tupla_id_item_version[0]
                version_item = tupla_id_item_version[1]                
                item_revision =  DBSession.query(Item) \
                                .filter(Item.id == id_item) \
                                .filter(Item.version == version_item).one()
                if item_revision in listaux:
                    r = Revision()
                    ids_revisiones = DBSession.query(Revision.id) \
                                .filter(Revision.id_item == id_item).all()
                    if ids_revisiones:
                        proximo_id_revision = proximo_id(ids_revisiones)
                    else:
                        proximo_id_revision = "RV1-" + id_item
                    r.id = proximo_id_revision
                    r.item = item_revision
                    
                    r.descripcion = "Modificacion del item relacionado '\
                                    'directamente: " + pk_id
                    DBSession.add(r)

        else:       
            self.provider.update(self.model, params=kw)        
        redirect('../')
Example #10
0
    def put(self, *args, **kw):
        """ Registra los cambios realizados a un ítem. """
        nombre_caract = DBSession.query(Caracteristica.nombre) \
                .filter(Caracteristica.id_tipo_item == kw['tipo_item']).all()
        anexo = dict()
        for nom_car in nombre_caract:
            anexo[nom_car.nombre] = kw[nom_car.nombre]
        anexo = json.dumps(anexo)

        clave_primaria = args[0]
        pk_version = unicode(clave_primaria.split("-")[4])
        pk_id = unicode(clave_primaria.split("-")[0] + "-" + \
                clave_primaria.split("-")[1] + "-" + \
                clave_primaria.split("-")[2] + "-" + \
                clave_primaria.split("-")[3])
        clave = {}
        clave[0] = pk_id
        clave[1] = pk_version
        it = DBSession.query(Item).filter(Item.id == pk_id).filter( \
                Item.version == pk_version).scalar()
        pks = self.provider.get_primary_fields(self.model)
        for i, pk in enumerate(pks):
            if pk not in kw and i < len(clave):
                kw[pk] = clave[i]
        band = 0
        nueva_version = Item()
        nueva_version.id = it.id
        nueva_version.codigo = it.codigo
        nueva_version.version = int(pk_version) + 1
        nueva_version.nombre = it.nombre
        nueva_version.descripcion = it.descripcion
        nueva_version.estado = u"En desarrollo"
        nueva_version.observaciones = it.observaciones
        nueva_version.prioridad = it.prioridad
        nueva_version.complejidad = it.complejidad
        nueva_version.borrado = it.borrado
        nueva_version.anexo = it.anexo
        if not it.descripcion == kw['descripcion']:
            band = 1
            nueva_version.descripcion = kw['descripcion']
        if not it.nombre == kw['nombre']:
            band = 1
            nueva_version.nombre = kw['nombre']
        if not it.observaciones == kw['observaciones']:
            band = 1
            nueva_version.observaciones = kw['observaciones']
        if not it.prioridad == int(kw['prioridad']):
            band = 1
            nueva_version.prioridad = kw['prioridad']
        if not it.complejidad == int(kw['complejidad']):
            band = 1
            nueva_version.complejidad = kw['complejidad']
        if not it.anexo == anexo:
            band = 1
            nueva_version.anexo = anexo

        if band:
            nueva_version.tipo_item = it.tipo_item
            nueva_version.linea_base = it.linea_base
            nueva_version.archivos = it.archivos
            nueva_version.revisiones = it.revisiones
            for relacion in relaciones_a_actualizadas(it.relaciones_a):
                aux = relacion.id.split("+")
                r = Relacion()
                r.id = "-".join(aux[0].split("-")[0:-1]) + "-" + \
                        unicode(nueva_version.version) + "+" +aux[1]
                r.item_1 = nueva_version
                r.item_2 = relacion.item_2
            for relacion in relaciones_b_actualizadas(it.relaciones_b):
                r = Relacion()
                aux = relacion.id.split("+")
                r.id = aux[0] + "+" + "-".join(aux[1].split("-")[0:-1]) + \
                        "-" + unicode(nueva_version.version)
                r.item_1 = relacion.item_1
                r.item_2 = nueva_version
            DBSession.add(nueva_version)
            r_act = relaciones_a_actualizadas(it.relaciones_a)
            listaux = [r.item_2 for r in r_act]
            ids_items_direc_relacionados_1 = DBSession.query( \
                    Relacion.id_item_2, Relacion.version_item_2) \
                    .filter(Relacion.id_item_1 == pk_id) \
                    .filter(Relacion.version_item_1 == pk_version).all()
            for tupla_id_item_version in (ids_items_direc_relacionados_1):
                id_item = tupla_id_item_version[0]
                version_item = tupla_id_item_version[1]
                item_revision =  DBSession.query(Item) \
                                .filter(Item.id == id_item) \
                                .filter(Item.version == version_item).one()
                if item_revision in listaux:
                    r = Revision()
                    ids_revisiones = DBSession.query(Revision.id) \
                                .filter(Revision.id_item == id_item).all()
                    if ids_revisiones:
                        proximo_id_revision = proximo_id(ids_revisiones)
                    else:
                        proximo_id_revision = "RV1-" + id_item
                    r.id = proximo_id_revision
                    r.item = item_revision

                    r.descripcion = "Modificacion del item relacionado '\
                                    'directamente: " + pk_id
                    DBSession.add(r)

        else:
            self.provider.update(self.model, params=kw)
        redirect('../')