def arbol (self, id_item): """ Permite visualizar las relaciones de un item dado. """ nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") if id_item is not None: id_item=int(id_item) item=Item.get_item_by_id(id_item) items = Item.get_item_activados() Relaciones.matriz_relaciones(id_item) values = dict(id_item=item.id_item, nombre_item=item.nombre_item, codigo_item=item.codigo_item, nombre_tipo_item=item.nombre_tipo_item ) return dict(pagina='imagen.html',values=values,nom_proyecto=nom_proyecto ,nom_fase=nom_fase)
def get_sucesores(self,id_item): """ Obtiene los sucesores del item enviado como parámetro. """ relaciones = DBSession.query(Relaciones).all() lista =[] hijos =[] if id_item is not None: id_item=int(id_item) for rel in relaciones: for padre in rel.padres: if (padre.estado_oculto=="Activo"): if padre.id_item == id_item: lista.append(rel.id_item_hijo) hijos.append (Item.get_item_by_id(rel.id_item_hijo) ) break while len(lista)>0: mis_hijos=Relaciones.get_mis_id_hijos(lista[0]) del lista[0] for hijo in mis_hijos: if hijo not in lista: item=Item.get_item_by_id(int(hijo)) if (padre.estado_oculto=="Activo"): lista.append(hijo) hijos.append (item) return hijos
def get_padres_habilitados(self,orden): """ Obtiene los items habilitados. """ if orden is not None: orden=int(orden) padres=Item.get_item_activados() #cambiar esta funcion y solo traer lo que no forman ciclos padres.remove(Item.get_master()) fases_habilitadas=[] fases_habilitadas.append(orden) fases_habilitadas.append(orden-1) aux=[] for padre in padres: c=int(padre.orden) if c not in fases_habilitadas: aux.append(padre) elif (padre.estado_oculto!="Activo"): padres.remove(padre) for a in aux: padres.remove(a) return padres
def post_recuperar_item(self, id_item, nombre_item, codigo_item, nombre_tipo_item, estado, complejidad, **kw): if id_item is not None: id_item=int(id_item) if complejidad is not None: complejidad=int(complejidad) item = Item.version_actual(id_item) item.estado_oculto="Desactivado" version= item.version+1 DBSession.flush() item2 = Item.get_item_by_id(id_item) item3 = Item (nombre_item=item2.nombre_item, codigo_item=item2.codigo_item, id_tipo_item=item2.id_tipo_item, orden=item2.orden, complejidad=item2.complejidad, estado = item2.estado, fase=item2.fase, proyecto=item2.proyecto, creado_por =item2.creado_por, fecha_creacion = item2.fecha_creacion , version =version , estado_oculto="Activo", lb_parcial=item2.lb_parcial,lb_general=item2.lb_general) DBSession.add(item3) DBSession.flush() adjuntos=Adjunto.get_adjuntos_by_item(item.id_item) for adjun in adjuntos: adjun.estado_oculto=item.estado_oculto DBSession.flush() mayor =Item.get_ultimo_id() adjuntos=Adjunto.get_adjuntos_by_item(item2.id_item) for adjun in adjuntos: adj2 = Adjunto(id_item=mayor,archivo=adjun.archivo, nombre_archivo=adjun.nombre_archivo, version=item3.version, estado_oculto=item3.estado_oculto ) DBSession.add(adj2) DBSession.flush() flash("item recuperado!") redirect('/item/item')
def impacto (self, id_item): """ Permite visualizar un reporte de impacto. """ nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") if id_item is not None: id_item=int(id_item) item=Item.get_item_by_id(id_item) items = Relaciones.get_sucesores(id_item) impacto=item.complejidad for it in items: if (it.estado_oculto=="Activo"): impacto+=it.complejidad values = dict(id_item=item.id_item, nombre_item=item.nombre_item, codigo_item=item.codigo_item, nombre_tipo_item=item.nombre_tipo_item, impacto=impacto ) return dict(pagina='impacto.html',values=values,nom_proyecto=nom_proyecto ,nom_fase=nom_fase)
def seleccionar_fase(self,id_fase,start=0,end=5,indice=None,texto="",*kw,**args): """ Selecciona una fase de un proyecto. """ if id_fase is not None: id_fase=int(id_fase) nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") proy_act=int (Variables.get_valor_by_nombre("proyecto_actual")) Variables.set_valor_by_nombre("fase_actual",id_fase) fase=Fase.get_fase_by_id(id_fase) Variables.set_valor_by_nombre("nombre_fase_actual",fase.nombre_fase) nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") #items = Item.get_item_proy_fase( proy_act, id_fase) #id_fase=int(Variables.get_valor_by_nombre("fase_actual")) #items = Item.get_item_activados_by_fase(id_fase) paginado = 5 if start <> 0: end=int(start.split('=')[1]) #obtiene el fin de pagina start=int(start.split('&')[0]) #obtiene el inicio de pagina #print start,end #total = len(Privilegios.get_privilegios()) pagina_actual = ((start % end) / paginado) + 1 if ((start % end) % paginado) <> 0: pagina_actual = pagina_actual + 1 if indice <> None and texto <> "": items = Item.get_item_activados_by_fase_por_filtro(id_fase,indice,texto) total = len(privilegios) else: items = Item.get_item_activados_by_fase_por_pagina(id_fase,start,end) total = len(Item.get_item_activados_by_fase(id_fase)) lista = ['nombre','descripcion'] param = "/fase/seleccionar_fase?id_fase=%s" % id_fase items = Item.get_item_activados_by_fase(id_fase) return dict(pagina="menu_item",items=items,nom_proyecto=nom_proyecto ,nom_fase=nom_fase,paginado=paginado,inicio=start, fin=end,pagina_actual=pagina_actual,total=total, param=param,lista=lista)
def post_revivir_item(self, id_item, nombre_item , codigo_item, nombre_tipo_item, estado, complejidad, **kw): item = Item.get_item_by_id(id_item) item.estado_oculto="Activo" DBSession.add(item) DBSession.flush() flash("item Revivido!") redirect('/item/item')
def matriz_relaciones(self,id_item): """ Obtiene una matriz de la relaciones. """ if id_item is not None: id_item=int(id_item) antecesores=Relaciones.get_antecesores(id_item) sucesores=Relaciones.get_sucesores(id_item) item=Item.get_item_by_id(id_item) relacionados=[] usados=[] n = len(antecesores)+len(sucesores)+1 for antecesor in antecesores: if antecesor not in relacionados: if (antecesor.estado_oculto=="Activo"): relacionados.append(antecesor) usados.append(antecesor.nombre_item) if item not in relacionados: relacionados.append(item) usados.append(item.nombre_item) for sucesor in sucesores: if sucesor not in relacionados: if (sucesor.estado_oculto=="Activo"): relacionados.append(sucesor) usados.append(sucesor.nombre_item) #Graph creation gr = graph() # Add nodes and edges for item in usados: gr.add_nodes([item]) # Add relation and edges for item in relacionados: padres= Relaciones.get_mis_padres(item.id_item) if len(padres)>0: for padre in padres: gr.add_edge((item.nombre_item, padre.nombre_item)) else: #remover nodo print("hola") # Draw as PNG dot = write(gr) gvv = gv.readstring(dot) gv.layout(gvv,'dot') gv.render(gvv,'png','/home/hermann/saip2011/saip2011/public/images/arbol.png')
def listar_item_eliminados(self): """Lista de item """ nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") id_fase=int(Variables.get_valor_by_nombre("fase_actual")) items = Item.get_item_eliminados_by_fase(id_fase) return dict(pagina="listar_item eliminados",items=items, nom_proyecto=nom_proyecto,nom_fase=nom_fase)
def listar_item_activos (self): nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") id_fase=int(Variables.get_valor_by_nombre("fase_actual")) items = Item.get_item_activados_by_fase(id_fase) ids=0 for i in items: ids=i.id_item return dict(pagina="listar_item",items=items,nom_proyecto=nom_proyecto ,nom_fase=nom_fase)
def historial (self, id_item): nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") if id_item is not None: id_item=int(id_item) id_fase=int(Variables.get_valor_by_nombre("fase_actual")) items = Item.get_historial(id_item) return dict(pagina="historial",items=items,nom_proyecto=nom_proyecto ,nom_fase=nom_fase)
def post_delete_item(self, id_item, nombre_item, codigo_item, nombre_tipo_item, estado, complejidad, **kw): if id_item is not None: id_item=int(id_item) item = Item.get_item_by_id(id_item) item.estado_oculto="Eliminado" DBSession.flush() flash("item eliminado!") redirect('/item/item')
def ver_mis_hijos (self, id_item): nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") if id_item is not None: id_item=int(id_item) id_fase=int(Variables.get_valor_by_nombre("fase_actual")) hijos = Relaciones.get_mis_id_hijos(id_item) items=[] for hijo in hijos: h=Item.get_item_by_id(int(hijo)) if (h.estado_oculto=="Activo"): items.append(h) return dict(pagina='ver_mis_hijos.html',items=items,nom_proyecto=nom_proyecto ,nom_fase=nom_fase)
def recuperar_item(self,id_item, *args, **kw): nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") if id_item is not None: id_item=int(id_item) item = Item.get_item_by_id(id_item) values = dict(id_item=item.id_item, nombre_item=item.nombre_item, codigo_item=item.codigo_item, nombre_tipo_item=item.nombre_tipo_item, estado=item.estado, complejidad=item.complejidad, ) return dict(pagina="recuperar_item",values=values, nom_proyecto=nom_proyecto,nom_fase=nom_fase)
def descargar(self, id_adjunto): directorio = "/home/hermann/Descargas" adj = Adjunto.get_adjunto_by_id(id_adjunto) var=binascii.b2a_base64(adj.archivo) archivo=base64.b64decode(var) filenameDest=directorio +"/"+str(adj.nombre_archivo) dirdescargavalido=self.validardir(directorio) # se crea el archivo y se procede a copiar el contendido del archivo if (dirdescargavalido): try: file = open(filenameDest, 'wb') # crea el archivo destino except: return "No se pudo crear el archivo" if not archivo: return file.write(archivo) #se cierra la conexion y el archivo file.close( ) redirect('/item/item') else: nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") item=Item.get_item_by_id(int(adj.id_item)) values = dict(id_item=item.id_item, nombre_item=item.nombre_item, nombre_tipo_item=item.nombre_tipo_item ) return dict(pagina="listar_mis_adjuntos",adjuntos=adjuntos, nom_proyecto=nom_proyecto,nom_fase=nom_fase, values=values)
def ver_adjuntos(self,id_item): """Lista """ nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") if id_item is not None: id_item=int(id_item) item=Item.get_item_by_id(id_item) values = dict(id_item=item.id_item, nombre_item=item.nombre_item, nombre_tipo_item=item.nombre_tipo_item ) adjuntos=Adjunto.get_adjuntos_by_item(id_item) return dict(pagina="listar_mis_adjuntos",adjuntos=adjuntos, nom_proyecto=nom_proyecto,nom_fase=nom_fase, values=values)
def agregar_item(self, *args, **kw): nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") id_fase=int(Variables.get_valor_by_nombre("fase_actual")) fase = Fase.get_fase_by_id(id_fase) orden=str(fase.orden) padres=Relaciones.get_padres_habilitados(fase.orden) master=[] if (fase.orden ==1): master.append(Item.get_master().id_item) else: master.append(0) tipos_items=fase.tipos_items return dict(pagina="agregar_item",values=kw, tipos_items=tipos_items ,nom_proyecto=nom_proyecto,nom_fase=nom_fase,padres=padres, master=master,orden=orden)
def editar_item(self,id_item,*args, **kw): nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") id_fase=int (Variables.get_valor_by_nombre("fase_actual") ) if id_item is not None: id_item=int(id_item) id_fase=int(Variables.get_valor_by_nombre("fase_actual")) item = Item.get_item_by_id(id_item) fase = Fase.get_fase_by_id(id_fase) orden=str(fase.orden) padres=Relaciones.get_padres_habilitados(fase.orden) hijos=Relaciones.get_sucesores(id_item) master=[] if (fase.orden ==1): master.append(Item.get_master().id_item) else: master.append(0) for hijo in hijos: #evita que yo o algun sucesor sea mi nuevo padre if hijo in padres: padres.remove(hijo) for padre in padres: if padre.id_item == id_item: padres.remove(padre) tipos_items=fase.tipos_items lista=[] lista.append(item.id_tipo_item ) values = dict(id_item=item.id_item, nombre_item=item.nombre_item, nombre_tipo_item=item.nombre_tipo_item, codigo_item=item.codigo_item, estado=item.estado, complejidad=item.complejidad, ) adjuntos=Adjunto.get_adjuntos_by_item(item.id_item) adjuntados=[] for adj in adjuntos: var = dict(id_adjunto=adj.id_adjunto, nombre_archivo=adj.nombre_archivo) adjuntados.append(var) padres2=[] padr=Relaciones.get_mis_padres(id_item) for pad in padr: padres2.append(pad.id_item) campos= Campos.get_campos_by_item(id_item) return dict(pagina="editar_item",values=values,adjuntados=adjuntados, nom_proyecto=nom_proyecto,nom_fase=nom_fase, lista=lista,tipos_items=tipos_items,padres=padres, padres2=padres2,master=master,orden=orden,campos=campos)
def put_item(self, id_item, nombre_item, nombre_tipo_item, complejidad, id_campos,nombre_campo,tipo_campo,dato, padres,asmSelect0,adjunto=None,adjuntados=None): if id_item is not None: id_item=int(id_item) item = Item.get_item_by_id(id_item) items= Item.get_nombres_items() items.remove(item.nombre_item) if nombre_item not in items: if id_campos is not None: if not isinstance(id_campos, list): id_campos = [id_campos] if nombre_campo is not None: if not isinstance(nombre_campo, list): nombre_campo = [nombre_campo] if tipo_campo is not None: if not isinstance(tipo_campo, list): tipo_campo = [tipo_campo] if dato is not None: if not isinstance(dato, list): dato = [dato] if complejidad is not None: complejidad=int(complejidad) if adjuntados is not None: if not isinstance(adjuntados, list): adjuntados = [adjuntados] if len(adjuntados)<1: adjuntados =[] if adjunto is not None: if not isinstance(adjunto, list): adjunto = [adjunto] if padres is not None: if not isinstance(padres, list): padres = [padres] padres = [DBSession.query(Item).get(padre) for padre in padres] item.estado_oculto="Desactivado" DBSession.flush() version=item.version+1 item2 = Item (nombre_item=nombre_item , codigo_item=item.codigo_item , id_tipo_item=item.id_tipo_item , complejidad=complejidad, estado = item.estado , orden=item.orden, fase=int(Variables.get_valor_by_nombre ("fase_actual")), proyecto=int(Variables.get_valor_by_nombre ("proyecto_actual")), creado_por=Variables.get_valor_by_nombre ("usuario_actual"), fecha_creacion = time.ctime() , version =version ,estado_oculto="Activo", lb_parcial=item.lb_parcial,lb_general=item.lb_general) DBSession.add(item2) DBSession.flush() indice=0 id_item=Item.get_ultimo_id() for c in id_campos: if len(c)>0: camp =Campos(id_item=id_item, nombre_campo=nombre_campo[indice], tipo_campo=tipo_campo[indice], dato=dato[indice]) DBSession.add(camp) indice+=1 mayor =Item.get_ultimo_id() relacion = Relaciones (id_item_hijo=mayor,padres=padres) if adjunto is not None: for adj in adjunto: if len(str(adj))==0: break if len(adj.filename)==0: break data = adj.file.read() encode=base64.b64encode(data) var=binascii.a2b_base64(encode) adj = Adjunto (id_item=mayor, archivo=var, nombre_archivo=adj.filename,version=item2.version, estado_oculto=item2.estado_oculto) DBSession.add(adj) DBSession.flush() adjuntos=Adjunto.get_adjuntos_by_item(item.id_item) for adjun in adjuntos: if adjuntados is not None: if adjun.nombre_archivo in adjuntados: adj2 = Adjunto(id_item=mayor,archivo=adjun.archivo, nombre_archivo=adjun.nombre_archivo, version=item2.version, estado_oculto=item2.estado_oculto ) DBSession.add(adj2) DBSession.flush() adjun.estado_oculto=item.estado_oculto DBSession.flush() flash("Item Modificado!") redirect('/item/item') else: nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") padres=Item.get_item_activados() #cambiar esta funcion y solo traer lo que no forman ciclos id_fase=int(Variables.get_valor_by_nombre("fase_actual")) fase = Fase.get_fase_by_id(id_fase) tipos_items=fase.tipos_items lista=[] lista.append(item.nombre_tipo_item ) item = DBSession.query(Item).get(id_item) values = dict(id_item=id_item, nombre_item=nombre_item, codigo_item=item.codigo_item, complejidad=complejidad, ) adjuntos=Adjunto.get_adjuntos_by_item(item.id_item) adjuntados=[] for adj in adjuntos: var = dict(id_adjunto=adj.id_adjunto, nombre_archivo=adj.nombre_archivo) adjuntados.append(var) padres2=[] padr=Relaciones.get_mis_padres(id_item) for pad in padr: padres2.append(pad.id_item) flash("EL NOMBRE DEL ITEM YA ESXISTE!") return dict(pagina="editar_item",values=values,adjuntados=adjuntados, nom_proyecto=nom_proyecto,nom_fase=nom_fase, lista=lista,tipos_items=tipos_items,padres=padres, padres2=padres2)
def post_item(self, nombre_item, complejidad, adjunto, id_tipo_item, asmSelect0,padres=None): items= Item.get_nombres_items() if nombre_item not in items: if id_tipo_item is not None: id_tipo_item = int(id_tipo_item) if complejidad is not None: complejidad=int(complejidad) if adjunto is not None: if not isinstance(adjunto, list): adjunto = [adjunto] if padres is not None: if not isinstance(padres, list): padres = [padres] padres = [DBSession.query(Item).get(padre) for padre in padres] #---------------------------------------- tipo_item =Tipo_Item.get_tipo_item_by_id(id_tipo_item) pre_codigo=tipo_item.codigo_tipo_item proy_act=int (Variables.get_valor_by_nombre("proyecto_actual")) fas_act=int (Variables.get_valor_by_nombre("fase_actual")) fase=Fase.get_fase_by_id(fas_act) codigo_item=Item.crear_codigo(id_tipo_item, pre_codigo,proy_act,fas_act) item = Item (nombre_item=nombre_item, codigo_item=codigo_item, id_tipo_item=id_tipo_item, complejidad=complejidad, estado = "nuevo", fase=fas_act,proyecto=proy_act,orden=fase.orden, creado_por=Variables.get_valor_by_nombre("usuario_actual"), fecha_creacion = time.ctime(), version =1 , estado_oculto="Activo",lb_parcial=0,lb_general=0 ) DBSession.add(item) DBSession.flush() #---------------------------------------- for padre in padres: if padre.nombre_item == "master": padres.remove(padre) mayor =int(Item.get_ultimo_id()) relacion = Relaciones (id_item_hijo=mayor,padres=padres) #---------------------------------------- id_item2=Item.get_ultimo_id() tipos_campos=Tipo_Campos.get_campos_by_tipo_item(id_tipo_item) for tipo in tipos_campos: camp =Campos(id_item=id_item2, nombre_campo=tipo.nombre_campo, tipo_campo= tipo.valor_campo) DBSession.add(camp) DBSession.flush() #---------------------------------------- if adjunto is not None: for adj in adjunto: if len(str(adj))==0: break if len(adj.filename)==0: break data = adj.file.read() encode=base64.b64encode(data) var=binascii.a2b_base64(encode) adj = Adjunto (id_item=mayor, archivo=var, nombre_archivo=adj.filename, version =item.version , estado_oculto=item.estado_oculto) DBSession.add(adj) DBSession.flush() flash("Item Agregado!") redirect('/item/item') else: nom_fase=Variables.get_valor_by_nombre("nombre_fase_actual") nom_proyecto=Variables.get_valor_by_nombre("nombre_proyecto_actual") id_fase=int(Variables.get_valor_by_nombre("fase_actual")) padres=Item.get_item_activados() #cambiar esta funcion y solo traer lo que no forman ciclos fase = Fase.get_fase_by_id(id_fase) tipos_items=fase.tipos_items values = dict(nombre_item=nombre_item, id_tipo_item=id_tipo_item, complejidad=complejidad, ) flash("Nombre de Item ya existente!") return dict(pagina="agregar_item",values=values, tipos_items=tipos_items,nom_proyecto=nom_proyecto, nom_fase=nom_fase,padres=padres)