def insertarAncestro(self, kw): global inserciones inserciones = inserciones + 1 print "el numero de inserciones es :", inserciones if inserciones == 1: item = DBSession.query(Item).get(kw['id_item1']) id_item = item.id_item version_anterior = item.version version_nueva = int(item.version) + 1 linea_bases_item = item.linea_bases #Comprobamos que no se encuentre en una Linea Base if linea_bases_item != []: for linea_base_item in linea_bases_item: flash( _("No se puede agregar la relacion! El Item se encuentra en una Linea Base..." ), 'error') return #El Item cambia de version al agregar la relacion itemHistorial = ItemHistorial() itemHistorial.id_item = item.id_item itemHistorial.id_tipo_item = item.id_tipo_item itemHistorial.codigo = item.codigo itemHistorial.descripcion = item.descripcion itemHistorial.complejidad = item.complejidad itemHistorial.prioridad = item.prioridad itemHistorial.estado = "Desarrollo" itemHistorial.version = version_anterior itemHistorial.observacion = item.observacion itemHistorial.fecha_modificacion = item.fecha_modificacion item.version = version_nueva item.estado = "Desarrollo" DBSession.add(itemHistorial) DBSession.flush() #Consultamos los detalles que tiene el Item a ser editado y tambien #los atributos actuales de su Tipo de Item correspondiente detalles = DBSession.query(ItemDetalle).filter_by(id_item=id_item) atributos = DBSession.query(Atributo).filter_by( id_tipo_item=id_tipo_item) lista_id_atributo = [] if atributos != None: for atributo in atributos: lista_id_atributo.append(atributo.id_atributo) #Enviamos al historial los detalles del Item a ser editado if detalles != None: for detalle in detalles: if lista_id_atributo.count(detalle.id_atributo) >= 1: lista_id_atributo.remove(detalle.id_atributo) itemDetalleHistorial = ItemDetalleHistorial() itemDetalleHistorial.id_item = id_item itemDetalleHistorial.id_item_detalle = detalle.id_item_detalle itemDetalleHistorial.id_atributo = detalle.id_atributo itemDetalleHistorial.nombre_atributo = detalle.nombre_atributo itemDetalleHistorial.valor = detalle.valor itemDetalleHistorial.version = version_anterior DBSession.add(itemDetalleHistorial) DBSession.flush() #Cargamos a vacio los atributos que no contemplaban los detalles actuales if lista_id_atributo != None: for id_atributo in lista_id_atributo: atributo = DBSession.query(Atributo).get(id_atributo) itemDetalle = ItemDetalle() itemDetalle.id_item = id_item itemDetalle.id_atributo = atributo.id_atributo itemDetalle.nombre_atributo = atributo.nombre itemDetalle.valor = "" DBSession.add(itemDetalle) DBSession.flush() #Enviamos sus relaciones actuales al historial de relaciones hijos = DBSession.query(RelacionItem).filter_by(id_item1=id_item) antecesores = DBSession.query(RelacionItem).filter_by( id_item2=id_item) if hijos != None: for hijo in hijos: relacion_historial = RelacionHistorial() relacion_historial.tipo = hijo.tipo relacion_historial.id_item1 = hijo.id_item1 relacion_historial.id_item2 = hijo.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() if antecesores != None: for antecesor in antecesores: relacion_historial = RelacionHistorial() relacion_historial.tipo = antecesor.tipo relacion_historial.id_item1 = antecesor.id_item1 relacion_historial.id_item2 = antecesor.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() #Insertamos la nueva relacion relacion = RelacionItem() relacion.tipo = "Antecesor-Sucesor" relacion.id_item1 = kw['id_item1'] relacion.id_item2 = kw['id_item2'] DBSession.add(relacion) DBSession.flush() #Ponemos a revision todos los items afectados por el Item editado #Tambien colocamos a "Revision" las Lineas Bases correspondientes global itemsAfectados global listaRelaciones itemsAfectados = [] listaRelaciones = [] itemsAfectados.append(id_item) for item_afectado in itemsAfectados: self.buscarRelaciones(item_afectado) for item_afectado in itemsAfectados: item_cambio = DBSession.query(Item).get(item_afectado) item_cambio.estado = "Revision" linea_bases_item = item_cambio.linea_bases if linea_bases_item != None: for linea_base_item in linea_bases_item: if linea_base_item.estado == "Aprobado": id_linea_base = linea_base_item.id_linea_base linea_base = DBSession.query(LineaBase).get( id_linea_base) linea_base.estado = "Revision" fase = DBSession.query(Fase).get( linea_base.id_fase) if fase.relacion_estado_fase.nombre == "Finalizado": fase.id_estado_fase = '4' DBSession.flush() DBSession.flush() #Los archivos adjuntos del Item a ser editado se copian #para tener el registro de estos archivos con esa version de item archivos_item_editado = DBSession.query(ItemArchivo).filter_by( id_item=id_item).filter_by(version_item=version_anterior) if archivos_item_editado != None: for archivo in archivos_item_editado: nuevo_archivo = ItemArchivo() nuevo_archivo.id_item = archivo.id_item nuevo_archivo.version_item = version_anterior nuevo_archivo.nombre_archivo = archivo.nombre_archivo nuevo_archivo.contenido_archivo = archivo.contenido_archivo archivo.version_item = version_nueva DBSession.add(nuevo_archivo) DBSession.flush() transaction.commit() flash(_("Relacion insertada!"), 'ok') #Aqui comprobamos si todos los items de la fase actual tienen sucesores, en ese caso #el estado de la fase cambiamos a Finalizado id_tipo_item = kw['id_tipo_item'] id_fase = kw['id_fase'] fase_actual = DBSession.query(Fase).get(id_fase) #Obtenemos la fase anterior fase_anterior = DBSession.query(Fase).filter_by( numero_fase=fase_actual.numero_fase - 1).filter_by(id_proyecto=fase_actual.id_proyecto).first() fase = fase_anterior items_sin_sucesores = 0 if fase.relacion_estado_fase.nombre_estado == 'Con Lineas Bases' and fase_anterior != None: tipo_items = DBSession.query(TipoItem).filter_by( id_fase=fase.id_fase) itemsDeFaseActual = [] for tipo_item in tipo_items: itemsTipoItem = DBSession.query(Item).filter_by( id_tipo_item=tipo_item.id_tipo_item).filter_by( vivo=True).filter_by(estado='Aprobado') for itemTipoItem in itemsTipoItem: succs = DBSession.query(RelacionItem).filter_by( id_item1=itemTipoItem.id_item) sw = 0 for suc in succs: sw = 1 if sw == 0: items_sin_sucesores = items_sin_sucesores + 1 itemsDeFaseActual.append(itemTipoItem) contador_items_en_fase_actual = 0 for item in itemsDeFaseActual: contador_items_en_fase_actual = contador_items_en_fase_actual + 1 #Si contador_items_en_fase_actual es igual a items_con_sucesores entonces cumple la condicion if contador_items_en_fase_actual == contador_items_en_fase_actual - items_sin_sucesores: fase.id_estado_fase = '5'
def insertarAncestro(self, kw): global inserciones inserciones = inserciones + 1 print "el numero de inserciones es :", inserciones if inserciones == 1: item = DBSession.query(Item).get(kw['id_item1']) id_item = item.id_item version_anterior = item.version version_nueva = int(item.version) + 1 linea_bases_item = item.linea_bases #Comprobamos que no se encuentre en una Linea Base if linea_bases_item != []: for linea_base_item in linea_bases_item: flash(_("No se puede agregar la relacion! El Item se encuentra en una Linea Base..."), 'error') return #El Item cambia de version al agregar la relacion itemHistorial = ItemHistorial() itemHistorial.id_item = item.id_item itemHistorial.id_tipo_item = item.id_tipo_item itemHistorial.codigo = item.codigo itemHistorial.descripcion = item.descripcion itemHistorial.complejidad = item.complejidad itemHistorial.prioridad = item.prioridad itemHistorial.estado = "Desarrollo" itemHistorial.version = version_anterior itemHistorial.observacion = item.observacion itemHistorial.fecha_modificacion = item.fecha_modificacion item.version = version_nueva item.estado = "Desarrollo" DBSession.add(itemHistorial) DBSession.flush() #Consultamos los detalles que tiene el Item a ser editado y tambien #los atributos actuales de su Tipo de Item correspondiente detalles = DBSession.query(ItemDetalle).filter_by(id_item=id_item) atributos = DBSession.query(Atributo).filter_by(id_tipo_item=id_tipo_item) lista_id_atributo = [] if atributos != None: for atributo in atributos: lista_id_atributo.append(atributo.id_atributo) #Enviamos al historial los detalles del Item a ser editado if detalles != None: for detalle in detalles: if lista_id_atributo.count(detalle.id_atributo) >= 1: lista_id_atributo.remove(detalle.id_atributo) itemDetalleHistorial = ItemDetalleHistorial() itemDetalleHistorial.id_item = id_item itemDetalleHistorial.id_item_detalle = detalle.id_item_detalle itemDetalleHistorial.id_atributo = detalle.id_atributo itemDetalleHistorial.nombre_atributo = detalle.nombre_atributo itemDetalleHistorial.valor = detalle.valor itemDetalleHistorial.version = version_anterior DBSession.add(itemDetalleHistorial) DBSession.flush() #Cargamos a vacio los atributos que no contemplaban los detalles actuales if lista_id_atributo != None: for id_atributo in lista_id_atributo: atributo = DBSession.query(Atributo).get(id_atributo) itemDetalle = ItemDetalle() itemDetalle.id_item = id_item itemDetalle.id_atributo = atributo.id_atributo itemDetalle.nombre_atributo = atributo.nombre itemDetalle.valor = "" DBSession.add(itemDetalle) DBSession.flush() #Enviamos sus relaciones actuales al historial de relaciones hijos = DBSession.query(RelacionItem).filter_by(id_item1=id_item) antecesores = DBSession.query(RelacionItem).filter_by(id_item2=id_item) if hijos != None: for hijo in hijos: relacion_historial = RelacionHistorial() relacion_historial.tipo = hijo.tipo relacion_historial.id_item1 = hijo.id_item1 relacion_historial.id_item2 = hijo.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() if antecesores != None: for antecesor in antecesores: relacion_historial = RelacionHistorial() relacion_historial.tipo = antecesor.tipo relacion_historial.id_item1 = antecesor.id_item1 relacion_historial.id_item2 = antecesor.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() #Insertamos la nueva relacion relacion = RelacionItem() relacion.tipo = "Antecesor-Sucesor" relacion.id_item1 = kw['id_item1'] relacion.id_item2 = kw['id_item2'] DBSession.add(relacion) DBSession.flush() #Ponemos a revision todos los items afectados por el Item editado #Tambien colocamos a "Revision" las Lineas Bases correspondientes global itemsAfectados global listaRelaciones itemsAfectados = [] listaRelaciones = [] itemsAfectados.append(id_item) for item_afectado in itemsAfectados: self.buscarRelaciones(item_afectado) for item_afectado in itemsAfectados: item_cambio = DBSession.query(Item).get(item_afectado) item_cambio.estado = "Revision" linea_bases_item = item_cambio.linea_bases if linea_bases_item != None: for linea_base_item in linea_bases_item: if linea_base_item.estado == "Aprobado": id_linea_base = linea_base_item.id_linea_base linea_base = DBSession.query(LineaBase).get(id_linea_base) linea_base.estado = "Revision" fase = DBSession.query(Fase).get(linea_base.id_fase) if fase.relacion_estado_fase.nombre == "Finalizado": fase.id_estado_fase = '4' DBSession.flush() DBSession.flush() #Los archivos adjuntos del Item a ser editado se copian #para tener el registro de estos archivos con esa version de item archivos_item_editado = DBSession.query(ItemArchivo).filter_by(id_item=id_item).filter_by(version_item=version_anterior) if archivos_item_editado != None: for archivo in archivos_item_editado: nuevo_archivo = ItemArchivo() nuevo_archivo.id_item = archivo.id_item nuevo_archivo.version_item = version_anterior nuevo_archivo.nombre_archivo = archivo.nombre_archivo nuevo_archivo.contenido_archivo = archivo.contenido_archivo archivo.version_item = version_nueva DBSession.add(nuevo_archivo) DBSession.flush() transaction.commit() flash(_("Relacion insertada!"), 'ok') #Aqui comprobamos si todos los items de la fase actual tienen sucesores, en ese caso #el estado de la fase cambiamos a Finalizado id_tipo_item=kw['id_tipo_item'] id_fase=kw['id_fase'] fase_actual=DBSession.query(Fase).get(id_fase) #Obtenemos la fase anterior fase_anterior=DBSession.query(Fase).filter_by(numero_fase=fase_actual.numero_fase-1).filter_by(id_proyecto=fase_actual.id_proyecto).first() fase=fase_anterior items_sin_sucesores = 0 if fase.relacion_estado_fase.nombre_estado=='Con Lineas Bases' and fase_anterior != None: tipo_items=DBSession.query(TipoItem).filter_by(id_fase=fase.id_fase) itemsDeFaseActual = [] for tipo_item in tipo_items: itemsTipoItem = DBSession.query(Item).filter_by(id_tipo_item=tipo_item.id_tipo_item).filter_by(vivo=True).filter_by(estado='Aprobado') for itemTipoItem in itemsTipoItem: succs = DBSession.query(RelacionItem).filter_by(id_item1=itemTipoItem.id_item) sw=0 for suc in succs: sw=1 if sw==0: items_sin_sucesores = items_sin_sucesores + 1 itemsDeFaseActual.append(itemTipoItem) contador_items_en_fase_actual = 0 for item in itemsDeFaseActual: contador_items_en_fase_actual = contador_items_en_fase_actual + 1 #Si contador_items_en_fase_actual es igual a items_con_sucesores entonces cumple la condicion if contador_items_en_fase_actual == contador_items_en_fase_actual - items_sin_sucesores: fase.id_estado_fase = '5'
def insertarHijo(self, kw): newGrafo.__init__() global inserciones inserciones = inserciones + 1 print "el numero de inserciones es :", inserciones if inserciones == 1: self.buscarCiclos(kw['id_item1']) id_item1 = int(kw['id_item1']) id_item2 = int(kw['id_item2']) newGrafo.add_edge(id_item1, id_item2, False) hayciclo = newGrafo.walk(id_item1) print newGrafo print hayciclo if hayciclo: flash(_("No se puede insertar la relacion. Produce ciclos!"), 'warning') return else: item = DBSession.query(Item).get(kw['id_item1']) id_item = item.id_item version_anterior = item.version version_nueva = int(item.version) + 1 linea_bases_item = item.linea_bases #Comprobamos que no se encuentre en una Linea Base if linea_bases_item != []: for linea_base_item in linea_bases_item: flash( _("No se puede agregar la relacion! El Item se encuentra en una Linea Base..." ), 'error') return #El Item padre cambia de version al tener una nueva relacion itemHistorial = ItemHistorial() itemHistorial.id_item = item.id_item itemHistorial.id_tipo_item = item.id_tipo_item itemHistorial.codigo = item.codigo itemHistorial.descripcion = item.descripcion itemHistorial.complejidad = item.complejidad itemHistorial.prioridad = item.prioridad itemHistorial.estado = "Desarrollo" itemHistorial.version = version_anterior itemHistorial.observacion = item.observacion itemHistorial.fecha_modificacion = item.fecha_modificacion item.version = version_nueva item.estado = "Desarrollo" DBSession.add(itemHistorial) DBSession.flush() #Consultamos los detalles que tiene el Item a ser editado y tambien #los atributos actuales de su Tipo de Item correspondiente detalles = DBSession.query(ItemDetalle).filter_by( id_item=id_item) atributos = DBSession.query(Atributo).filter_by( id_tipo_item=id_tipo_item) lista_id_atributo = [] if atributos != None: for atributo in atributos: lista_id_atributo.append(atributo.id_atributo) #Enviamos al historial los detalles del Item a ser editado if detalles != None: for detalle in detalles: if lista_id_atributo.count(detalle.id_atributo) >= 1: lista_id_atributo.remove(detalle.id_atributo) itemDetalleHistorial = ItemDetalleHistorial() itemDetalleHistorial.id_item = id_item itemDetalleHistorial.id_item_detalle = detalle.id_item_detalle itemDetalleHistorial.id_atributo = detalle.id_atributo itemDetalleHistorial.nombre_atributo = detalle.nombre_atributo itemDetalleHistorial.valor = detalle.valor itemDetalleHistorial.version = version_anterior DBSession.add(itemDetalleHistorial) DBSession.flush() #Cargamos a vacio los atributos que no contemplaban los detalles actuales if lista_id_atributo != None: for id_atributo in lista_id_atributo: atributo = DBSession.query(Atributo).get(id_atributo) itemDetalle = ItemDetalle() itemDetalle.id_item = id_item itemDetalle.id_atributo = atributo.id_atributo itemDetalle.nombre_atributo = atributo.nombre itemDetalle.valor = "" DBSession.add(itemDetalle) DBSession.flush() #Enviamos sus relaciones actuales al historial de relaciones hijos = DBSession.query(RelacionItem).filter_by( id_item1=id_item) antecesores = DBSession.query(RelacionItem).filter_by( id_item2=id_item) if hijos != None: for hijo in hijos: relacion_historial = RelacionHistorial() relacion_historial.tipo = hijo.tipo relacion_historial.id_item1 = hijo.id_item1 relacion_historial.id_item2 = hijo.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() if antecesores != None: for antecesor in antecesores: relacion_historial = RelacionHistorial() relacion_historial.tipo = antecesor.tipo relacion_historial.id_item1 = antecesor.id_item1 relacion_historial.id_item2 = antecesor.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() #Insertamos la nueva relacion relacion = RelacionItem() relacion.tipo = "Padre-Hijo" relacion.id_item1 = kw['id_item1'] relacion.id_item2 = kw['id_item2'] DBSession.add(relacion) DBSession.flush() #Ponemos a revision todos los items afectados por el Item editado #Tambien colocamos a "Revision" las Lineas Bases correspondientes global itemsAfectados global listaRelaciones itemsAfectados = [] listaRelaciones = [] itemsAfectados.append(id_item) for item_afectado in itemsAfectados: self.buscarRelaciones(item_afectado) for item_afectado in itemsAfectados: item_cambio = DBSession.query(Item).get(item_afectado) item_cambio.estado = "Revision" linea_bases_item = item_cambio.linea_bases if linea_bases_item != None: for linea_base_item in linea_bases_item: if linea_base_item.estado == "Aprobado": id_linea_base = linea_base_item.id_linea_base linea_base = DBSession.query(LineaBase).get( id_linea_base) linea_base.estado = "Revision" fase = DBSession.query(Fase).get( linea_base.id_fase) if fase.relacion_estado_fase.nombre == "Finalizado": fase.id_estado_fase = '4' DBSession.flush() DBSession.flush() #Los archivos adjuntos del Item a ser editado se copian #para tener el registro de estos archivos con esa version de item archivos_item_editado = DBSession.query(ItemArchivo).filter_by( id_item=id_item).filter_by(version_item=version_anterior) if archivos_item_editado != None: for archivo in archivos_item_editado: nuevo_archivo = ItemArchivo() nuevo_archivo.id_item = archivo.id_item nuevo_archivo.version_item = version_anterior nuevo_archivo.nombre_archivo = archivo.nombre_archivo nuevo_archivo.contenido_archivo = archivo.contenido_archivo archivo.version_item = version_nueva DBSession.add(nuevo_archivo) DBSession.flush() transaction.commit() flash(_("Relacion insertada!"), 'ok')
def insertarHijo(self, kw): newGrafo.__init__() global inserciones inserciones = inserciones + 1 print "el numero de inserciones es :", inserciones if inserciones == 1: self.buscarCiclos(kw['id_item1']) id_item1 = int(kw['id_item1']) id_item2 = int(kw['id_item2']) newGrafo.add_edge(id_item1, id_item2, False) hayciclo = newGrafo.walk(id_item1) print newGrafo print hayciclo if hayciclo: flash(_("No se puede insertar la relacion. Produce ciclos!"), 'warning') return else: item = DBSession.query(Item).get(kw['id_item1']) id_item = item.id_item version_anterior = item.version version_nueva = int(item.version) + 1 linea_bases_item = item.linea_bases #Comprobamos que no se encuentre en una Linea Base if linea_bases_item != []: for linea_base_item in linea_bases_item: flash(_("No se puede agregar la relacion! El Item se encuentra en una Linea Base..."), 'error') return #El Item padre cambia de version al tener una nueva relacion itemHistorial = ItemHistorial() itemHistorial.id_item = item.id_item itemHistorial.id_tipo_item = item.id_tipo_item itemHistorial.codigo = item.codigo itemHistorial.descripcion = item.descripcion itemHistorial.complejidad = item.complejidad itemHistorial.prioridad = item.prioridad itemHistorial.estado = "Desarrollo" itemHistorial.version = version_anterior itemHistorial.observacion = item.observacion itemHistorial.fecha_modificacion = item.fecha_modificacion item.version = version_nueva item.estado = "Desarrollo" DBSession.add(itemHistorial) DBSession.flush() #Consultamos los detalles que tiene el Item a ser editado y tambien #los atributos actuales de su Tipo de Item correspondiente detalles = DBSession.query(ItemDetalle).filter_by(id_item=id_item) atributos = DBSession.query(Atributo).filter_by(id_tipo_item=id_tipo_item) lista_id_atributo = [] if atributos != None: for atributo in atributos: lista_id_atributo.append(atributo.id_atributo) #Enviamos al historial los detalles del Item a ser editado if detalles != None: for detalle in detalles: if lista_id_atributo.count(detalle.id_atributo) >= 1: lista_id_atributo.remove(detalle.id_atributo) itemDetalleHistorial = ItemDetalleHistorial() itemDetalleHistorial.id_item = id_item itemDetalleHistorial.id_item_detalle = detalle.id_item_detalle itemDetalleHistorial.id_atributo = detalle.id_atributo itemDetalleHistorial.nombre_atributo = detalle.nombre_atributo itemDetalleHistorial.valor = detalle.valor itemDetalleHistorial.version = version_anterior DBSession.add(itemDetalleHistorial) DBSession.flush() #Cargamos a vacio los atributos que no contemplaban los detalles actuales if lista_id_atributo != None: for id_atributo in lista_id_atributo: atributo = DBSession.query(Atributo).get(id_atributo) itemDetalle = ItemDetalle() itemDetalle.id_item = id_item itemDetalle.id_atributo = atributo.id_atributo itemDetalle.nombre_atributo = atributo.nombre itemDetalle.valor = "" DBSession.add(itemDetalle) DBSession.flush() #Enviamos sus relaciones actuales al historial de relaciones hijos = DBSession.query(RelacionItem).filter_by(id_item1=id_item) antecesores = DBSession.query(RelacionItem).filter_by(id_item2=id_item) if hijos != None: for hijo in hijos: relacion_historial = RelacionHistorial() relacion_historial.tipo = hijo.tipo relacion_historial.id_item1 = hijo.id_item1 relacion_historial.id_item2 = hijo.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() if antecesores != None: for antecesor in antecesores: relacion_historial = RelacionHistorial() relacion_historial.tipo = antecesor.tipo relacion_historial.id_item1 = antecesor.id_item1 relacion_historial.id_item2 = antecesor.id_item2 relacion_historial.version_modif = version_anterior DBSession.add(relacion_historial) DBSession.flush() #Insertamos la nueva relacion relacion = RelacionItem() relacion.tipo = "Padre-Hijo" relacion.id_item1 = kw['id_item1'] relacion.id_item2 = kw['id_item2'] DBSession.add(relacion) DBSession.flush() #Ponemos a revision todos los items afectados por el Item editado #Tambien colocamos a "Revision" las Lineas Bases correspondientes global itemsAfectados global listaRelaciones itemsAfectados = [] listaRelaciones = [] itemsAfectados.append(id_item) for item_afectado in itemsAfectados: self.buscarRelaciones(item_afectado) for item_afectado in itemsAfectados: item_cambio = DBSession.query(Item).get(item_afectado) item_cambio.estado = "Revision" linea_bases_item = item_cambio.linea_bases if linea_bases_item != None: for linea_base_item in linea_bases_item: if linea_base_item.estado == "Aprobado": id_linea_base = linea_base_item.id_linea_base linea_base = DBSession.query(LineaBase).get(id_linea_base) linea_base.estado = "Revision" fase = DBSession.query(Fase).get(linea_base.id_fase) if fase.relacion_estado_fase.nombre == "Finalizado": fase.id_estado_fase = '4' DBSession.flush() DBSession.flush() #Los archivos adjuntos del Item a ser editado se copian #para tener el registro de estos archivos con esa version de item archivos_item_editado = DBSession.query(ItemArchivo).filter_by(id_item=id_item).filter_by(version_item=version_anterior) if archivos_item_editado != None: for archivo in archivos_item_editado: nuevo_archivo = ItemArchivo() nuevo_archivo.id_item = archivo.id_item nuevo_archivo.version_item = version_anterior nuevo_archivo.nombre_archivo = archivo.nombre_archivo nuevo_archivo.contenido_archivo = archivo.contenido_archivo archivo.version_item = version_nueva DBSession.add(nuevo_archivo) DBSession.flush() transaction.commit() flash(_("Relacion insertada!"), 'ok')