def getHijos(self, idVersion): item = DBSession.query(VersionItem).\ filter(VersionItem.id_version_item==idVersion).one() hijos=[] try: itemPadre=DBSession.query(Padre).\ filter(Padre.id_version_item==int(idVersion)).\ one() if not self.impacto_graph.has_node(idVersion): self.impacto_graph.add_node(idVersion, [('label',item.item.nom_item + "\n" + str(item.peso))]) for hijo in itemPadre.hijos: if hijo.ultima_version=='S' and\ hijo.estado.nom_estado!='Eliminado': hijos.append(hijo) if not self.impacto_graph.has_node(hijo.id_version_item): self.impacto_graph.add_node(hijo.id_version_item, [('label',hijo.item.nom_item + "\n" + str(hijo.peso))]) if not self.impacto_graph.\ has_edge((idVersion,hijo.id_version_item)): self.impacto_graph.\ add_edge((idVersion,hijo.id_version_item), label='Hijo') except NoResultFound,e: existe=False
def delete(self, **kw): """ Funcion que borra un proyecto seleccionado""" dProject = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==kw['id']).one() fases = DBSession.query(Fase).\ filter(Fase.proyectoFase==dProject) for fase in fases.all(): users=DBSession.query(Usuario).\ filter(Usuario.fases.contains(fase)).all() for user in users: fase.usuarios.remove(user) rol_proyecto = DBSession.query(RolProyectoUsuario).\ filter(RolProyectoUsuario.proyecto==dProject) rol_proyecto.delete() rol_fase = DBSession.query(RolFaseUsuario).\ filter(RolFaseUsuario.fase.has(proyectoFase=dProject)) rol_fase.delete() fases.delete() DBSession.delete(dProject) redirect("adminProject")
def getAntecesores(self, idVersion): itemVersion = DBSession.query(VersionItem).\ filter(VersionItem.id_version_item == int(idVersion)).one() if not self.impacto_graph.has_node(idVersion): self.impacto_graph.add_node(idVersion, [('label',itemVersion.item.nom_item + "\n" + str(itemVersion.peso)), ('shape','box'),('rankdir','RL')]) antecesores=[] for antecesor in itemVersion.Antecesores: unItem = DBSession.query(VersionItem).\ filter(VersionItem.id_version_item==antecesor.id_version_item).one() if unItem.ultima_version=='S' and\ unItem.estado.nom_estado!='Eliminado': antecesores.append(unItem) if not self.impacto_graph.has_node(unItem.id_version_item): self.impacto_graph.add_node(unItem.id_version_item, [('label',unItem.item.nom_item + "\n" + str(unItem.peso)), ('shape','box'),('rankdir','RL')]) if not self.impacto_graph.\ has_edge((unItem.id_version_item,idVersion)): self.impacto_graph.\ add_edge((idVersion,unItem.id_version_item), label='Antecesor') return antecesores
def getSucesores(self, idVersion): sucesores=[] item = DBSession.query(VersionItem).\ filter(VersionItem.id_version_item == idVersion).one() try: yoAntecesor=DBSession.query(Antecesor).\ filter(Antecesor.id_version_item==int(idVersion)).one() if not self.impacto_graph.has_node(idVersion): self.impacto_graph.add_node(idVersion, [('label',item.item.nom_item + "\n" + str(item.peso)), ('shape','box'),('rankdir','LR')]) for sucesor in yoAntecesor.sucesores: if sucesor.ultima_version=='S' and\ sucesor.estado.nom_estado!='Eliminado': sucesores.append(sucesor) if not self.impacto_graph.\ has_node(sucesor.id_version_item): self.impacto_graph.add_node(sucesor.id_version_item, [('label',sucesor.item.nom_item + "\n" + str(sucesor.peso)), ('shape','box'),('rankdir','LR')]) if not self.impacto_graph.\ has_edge((idVersion,sucesor.id_version_item)): self.impacto_graph.add_edge((idVersion, sucesor.id_version_item), label='Sucesor') except NoResultFound,e: existe=False
def aprobar(self, **kw): print '***************************************************************************************************************' print 'entro aca' lineaBase_id = kw['idlineaBase'] nroLineaBaseAprobar = DBSession.query(NroLineaBase).\ filter(NroLineaBase.id_nro_lb == lineaBase_id).one() items = nroLineaBaseAprobar.item band = 1 if (items == []): band = 0 flash(_("ERROR!! NO SE PUEDE APROBAR UNA LINEA BASE SIN ITEMS")) redirect("/lineaBase/index?id_fase="+str(Globals.current_phase.id_fase)) else: estadoA = DBSession.query(Estado).filter(Estado.nom_estado == 'Aprobado').one() for itemEstado in nroLineaBaseAprobar.item: itemEstado.estado = estadoA Globals.current_phase.id_estado = estadoA.id_estado nroLineaBaseAprobar.id_estado = estadoA.id_estado DBSession.add(nroLineaBaseAprobar) DBSession.flush() flash(_("LA LINEA BASE HA SIDO APROBADA")) redirect("/lineaBase/index?id_fase="+str(Globals.current_phase.id_fase))
def startProject(self, **kw): """Funcion que cambia el estado de una fase No Inciada a Iniciada. Controla primero que las fases se hayan creado correctamente""" project = DBSession.query(Proyecto).filter(Proyecto.id_proyecto==int(kw['id'])).one() estado =DBSession.query(Estado).filter(Estado.nom_estado == 'Iniciado').one() #Controlar Orden de las fases FasesList = DBSession.query(Fase).\ filter(Fase.id_proyecto==project.id_proyecto).\ order_by(Fase.nro_fase).all() if len(FasesList) <= 0: flash(_("No se puede iniciar el Proyecto sin Fases"),'warning') redirect('adminProject') actual = FasesList[0].nro_fase if(actual != 1): flash(_("La Primera Fase debe tener el Orden: 1, Favor realize los cambios respectivos"),'warning') redirect('adminProject') for fase in FasesList: next = fase.nro_fase if next > actual+1: flash(_("Segun el orden de las Fases le falta crear una o mas fases" ". Favor Asegurese de que todas las fases esten en un orden correlativo"), 'warning') redirect('adminProject') else: actual = next project.estadoProyecto = estado redirect('adminProject')
def searchNoUsers(self, **kw): """Realiza la busqueda de usuarios que NO pertenecen al proyecto actual. Esta busqueda se utiliza para ASIGNAR usuarios al proyecto elegido""" word = '%'+kw['key']+'%' #Obtenemos los usuarios que tienen proyectos asignados #menos el actual project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==\ Globals.current_project.id_proyecto).one() list1 = DBSession.query(Usuario.id_usuario,Usuario.nom_usuario).\ filter(Usuario.groups.any(group_name='user')).\ filter(~Usuario.proyecto.contains(project)) #Obtenemos los usuarios del tipo user y los que no #tienen ningun proyecto asignado list2 = DBSession.query(Usuario.id_usuario,Usuario.nom_usuario).filter(Usuario.proyecto==None).\ filter(Usuario.groups.any(group_name='user')) user_list = list1.union(list2).order_by(Usuario.nom_usuario) user_list = user_list.filter(Usuario.nom_usuario.like(word)) return dict(usuarios=user_list)
def saveItem(self, **kw): unItem = Item() unItem.nom_item = kw["nomItem"] # aProject.des_proyecto = kw['descripcion'] DBSession.add(unItem) unaVersionItem = VersionItem() unaVersionItem.item = unItem unEstado = DBSession.query(Estado).filter_by(id_estado=1).one() unTipoItem = DBSession.query(TipoItem).filter_by(id_tipo_item=1).one() unUsuario = DBSession.query(Usuario).filter_by(id_usuario=1).one() unaVersionItem.estado = unEstado unaVersionItem.tipoItem = unTipoItem unaVersionItem.usuarioModifico = unUsuario unaVersionItem.fecha = "10/06/2011" unaVersionItem.observaciones = kw["observaciones"] # unaVersionItem.peso = kw['peso'] DBSession.add(unaVersionItem) for atributo in DBSession.query(Atributo).filter_by(tipoItem=unTipoItem): nuevoAtributoItem = AtributoItem() nuevoAtributoItem.atributo = atributo nuevoAtributoItem.versionItem = unaVersionItem nuevoAtributoItem.val_atributo = atributo.val_default DBSession.add(nuevoAtributoItem) flash(_("Se ha creado un nuevo Item: %s") % kw["itemName"], "info") redirect("adminItem")
def index(self,**kw): """Lista las fases de un proyecto seleccionado por el usuario. Parametros: id del proyecto Retorna: Lista de Fases del proyecto habilitadas para el usuario actual""" Globals.current_project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==int(kw['id_proyecto'])).one() user = DBSession.query(Usuario).\ filter(Usuario.login_name==\ request.identity['repoze.who.userid']).one() if has_rol_proyecto("Lider de Proyecto",int(kw['id_proyecto'])): fases_lista = DBSession.query(Fase).\ filter(Fase.id_proyecto == int(kw['id_proyecto'])).\ order_by(Fase.nro_fase) else: fases_lista = DBSession.query(Fase).\ filter(Fase.id_proyecto==int(kw['id_proyecto'])).\ filter(Fase.usuarios.contains(user)) if fases_lista.count() == 0: flash(_('No se han encontrado Fases'),'info') return dict(fases=fases_lista)
def save(self, userfile): forbidden_files = [".js", ".htm", ".html", ".mp3"] for forbidden_file in forbidden_files: if not hasattr(userfile,'filename'): redirect('file_upload?validate=error') elif userfile.filename.find(forbidden_file) != -1: return redirect("/") versionItem = DBSession.query(VersionItem).\ filter(VersionItem.id_version_item == Globals.\ current_item.id_version_item).one() filecontent = userfile.file.read() new_file = AtributoArchivo(filename=userfile.filename, filecontent=filecontent) DBSession.add(new_file) atributo = DBSession.query(AtributoItem).\ filter(AtributoItem.id_version_item==versionItem.id_version_item).\ filter(AtributoItem.id_atributo == Globals.current_atributo.id_atributo).one() atributo.atributoArchivo = new_file redirect("/item/atributosItem?id_version="+\ str(versionItem.id_version_item) + ";frompage=item")
def asignRolPhase(self, **kw): user = DBSession.query(Usuario).\ filter(Usuario.id_usuario==int(kw['id_usuario'])).one() tipo_rol = DBSession.query(TipoRol).\ filter(TipoRol.nom_tipo_rol=='De Proyecto').one() fase = DBSession.query(Fase).\ filter(Fase.id_fase == Globals.current_phase.id_fase).one() #Obtenemos todos los roles disponibles list1 = DBSession.query(Rol).\ filter(Rol.tipoRol == tipo_rol).all() #Obtenemos los roles de este usuario list2 = DBSession.query(RolFaseUsuario).\ filter(RolFaseUsuario.usuarios == user).\ filter(RolFaseUsuario.fase == fase).all() list=[] for rol in list1: encontrado=0 for element in list2: if rol.id_rol == element.roles.id_rol: encontrado=1 break if encontrado == 0: list.append(rol) return dict(roles = list, usuario=user)
def liderToProject(self, **kw): """Envia la lista de usuarios que pertenecen al proyecto elegido y pueden ser electos para ser lideres del proyecto""" project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==\ Globals.current_project.id_proyecto).one() lider_rol = DBSession.query(Rol).\ filter(Rol.nom_rol==u'Lider de Proyecto').one() #Obtenemos los usuarios del proyecto actual list1 = DBSession.query(Usuario.id_usuario,Usuario.nom_usuario).\ filter(Usuario.proyecto.contains(project)).all() #Obtenemos los usuarios que ya son Lideres del Proyecto actual list2 = DBSession.query(RolProyectoUsuario).\ filter(RolProyectoUsuario.proyecto==project).\ filter(RolProyectoUsuario.roles==lider_rol).all() list=[] for usr in list1: encontrado=0 for element in list2: if usr.id_usuario == element.usuarios.id_usuario: encontrado=1 break if encontrado == 0: list.append(usr) return dict(usuarios=list)
def delUserOfProject(self, **kw): """ Función que elimina la relacion del usuario pasado en el argumento con el proyecto actual""" usuario = DBSession.query(Usuario).\ filter(Usuario.id_usuario==int(kw['id_user'])).one() proyecto = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==Globals.current_project.id_proyecto).one() #Desvinculamos al usuario del proyecto actual proyecto.usuarios.remove(usuario) #Borramos todos sus roles de proyecto rol_proyecto = DBSession.query(RolProyectoUsuario).\ filter(RolProyectoUsuario.usuarios==usuario) rol_proyecto.delete() #Desvinculamos al usuario de todas las fases de este proyecto fases = DBSession.query(Fase).\ filter(Fase.proyectoFase==proyecto).\ filter(Fase.usuarios.contains(usuario)).all() for fase in fases: fase.usuarios.remove(usuario) #Borramos todos sus roles de fases rol_fases = DBSession.query(RolFaseUsuario).\ filter(RolFaseUsuario.usuarios==usuario) rol_fases.delete() redirect('quitUserOfProject')
def addTiposItem(self, **kw): fase = DBSession.query(Fase).\ filter(Fase.id_fase==Globals.current_phase.id_fase).one() list_tipos=DBSession.query(TipoItem).\ filter(TipoItem.fase==fase).all() return dict(tiposItem=list_tipos)
def index(self, **kw): Globals.current_rol = DBSession.query(Rol).\ filter(Rol.id_rol==int(kw['id_rol'])).one() permisos_lista = DBSession.query(Permisos).\ filter(Permisos.rol.contains(Globals.current_rol)) return dict(permisos = permisos_lista)
def usersRol(self, **kw): fase = DBSession.query(Fase).\ filter(Fase.id_fase==\ Globals.current_phase.id_fase).one() users = DBSession.query(Usuario).\ filter(Usuario.fases.contains(fase)).all() return dict(usuarios=users)
def saveUserToPhase(self, **kw): usuario = DBSession.query(Usuario).\ filter(Usuario.id_usuario==int(kw['id_user'])).one() fase = DBSession.query(Fase).\ filter(Fase.id_fase == Globals.current_phase.id_fase).one() fase.usuarios.append(usuario) redirect('asignUsers')
def quitUserOfProject(self, **kw): """Lista de usuarios para Desasignar del Proyecto Elegido""" #Obtenemos los usuarios del proyecto actual project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==\ Globals.current_project.id_proyecto).one() list = DBSession.query(Usuario.id_usuario,Usuario.nom_usuario).\ filter(Usuario.proyecto.contains(project)) return dict(usuarios=list)
def delPrivilegio(self, **kw): permiso=DBSession.query(Permisos).\ filter(Permisos.id_permiso==int(kw['id_permiso'])).one() privilegio=DBSession.query(Privilegios).\ filter(Privilegios.id_privilegio==\ int(kw['id_privilegio'])).one() permiso.privilegios.remove(privilegio) redirect('index?id_rol='+str(Globals.current_rol.id_rol))
def addPrivilegio(self, **kw): permiso = DBSession.query(Permisos).\ filter(Permisos.id_permiso==int(kw['id_permiso'])).one() opciones = DBSession.query(Privilegios.id_privilegio,\ Privilegios.nom_privilegio).\ filter(~Privilegios.permiso.contains(permiso)) tmpl_context.form = add_privilegios return dict(option_list=opciones, idPermiso=int(kw['id_permiso']))
def listUsersProject(self): """Envia al template la lista de usuarios que pertenecen al proyecto actual para mostrar una lista de estos""" #Obtenemos los usuarios del proyecto actual project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==\ Globals.current_project.id_proyecto).one() list = DBSession.query(Usuario.id_usuario,Usuario.nom_usuario).\ filter(Usuario.proyecto.contains(project)) return dict(usuarios=list)
def searchUsersOfPhase_list(self, **kw): word = '%'+kw['key']+'%' fase = DBSession.query(Fase).\ filter(Fase.id_fase==\ Globals.current_phase.id_fase).one() users = DBSession.query(Usuario).\ filter(Usuario.fases.contains(fase)).\ filter(Usuario.nom_usuario.like(word)).all() return dict(usuarios=users)
def appendPrivilegio(self, **kw): permiso = DBSession.query(Permisos).\ filter(Permisos.id_permiso==int(kw['id_permiso'])).\ one() if kw['privilegios'] != None: for id_privilegio in kw['privilegios']: privilegio = DBSession.query(Privilegios).\ filter(Privilegios.id_privilegio==\ int(id_privilegio)).one() permiso.privilegios.append(privilegio) redirect('index?id_rol='+str(Globals.current_rol.id_rol))
def savePhase(self, **kw): Phase = Fase() project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto == Globals.current_project.id_proyecto).one() estado =DBSession.query(Estado).\ filter(Estado.nom_estado == 'Inicial').one() Phase.proyectoFase = project Phase.estadoFase = estado Phase.nro_fase = kw['nroPhase'] Phase.nom_fase = kw['phaseName'] Phase.des_fase = kw['descripcion'] DBSession.add(Phase) flash(_("Se ha creado una nueva Fase: %s") %kw['phaseName'],'info') redirect("index?id_proyecto="+str(Globals.current_project.id_proyecto))
def saveUserToProject(self, **kw): """Funcion que se encarga de guardar en la base de datos la relacion del usuario seleccionado con el proyecto actual""" proyecto = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto == \ Globals.current_project.id_proyecto).one() usuario = DBSession.query(Usuario).\ filter(Usuario.id_usuario == int(kw['id_user'])).\ one() proyecto.usuarios.append(usuario) redirect('userToProject')
def listLideres(self, **kw): """ Pasa la lista de usuarios que poseen el rol de Lider de Proyecto en el Proyecto actual elegido""" lider_rol = DBSession.query(Rol).\ filter(Rol.nom_rol==u'Lider de Proyecto').one() list1 = DBSession.query(RolProyectoUsuario).\ filter(RolProyectoUsuario.roles==lider_rol).\ filter(RolProyectoUsuario.proyecto==Globals.current_project).all() list=[] for element in list1: list.append(element.usuarios) return dict(usuarios = list)
def search(self, **kw): """Realiza la busqueda de proyectos que pertenecen al usuario actualmente logueado""" word = '%'+kw['key']+'%' if is_type('admin'): projects = DBSession.query(Proyecto).\ filter(Proyecto.nom_proyecto.like(word)).\ order_by(Proyecto.nom_proyecto) else: projects = DBSession.query(Proyecto).\ filter(Proyecto.nom_proyecto.like(word)).\ filter(Proyecto.usuarios.any(login_name=request.identity['repoze.who.userid'])) return dict(proyectos=projects)
def searchUsers2(self, **kw): """Realiza la busqueda de usuarios que SI pertenecen al proyecto actual. Esta busqueda se utiliza para DESASIGNAR usuarios del proyecto elegido""" word = '%'+kw['key']+'%' #Obtenemos los usuarios del proyecto actual project = DBSession.query(Proyecto).\ filter(Proyecto.id_proyecto==\ Globals.current_project.id_proyecto).one() list = DBSession.query(Usuario.id_usuario,Usuario.nom_usuario).\ filter(Usuario.nom_usuario.like(word)).\ filter(Usuario.proyecto.contains(project)) return dict(usuarios=list)
def adminProject(self): """ Muestra todos los proyectos existentes al administrador del sistema o los proyectos del usuario que ha ingresado al sistema """ if is_type('admin'): projects = DBSession.query(Proyecto).order_by(Proyecto.nom_proyecto) else: user = DBSession.query(Usuario).\ filter(Usuario.login_name==request.identity['repoze.who.userid']).one() projects = DBSession.query(Proyecto).\ filter(Proyecto.usuarios.contains(user)).all() return dict(proyectos=projects)
def saveRolPhase(self, **kw): rol = DBSession.query(Rol).\ filter(Rol.id_rol == int(kw['id_rol'])).one() fase = DBSession.query(Fase).\ filter(Fase.id_fase == Globals.current_phase.id_fase).one() user = DBSession.query(Usuario).\ filter(Usuario.id_usuario==int(kw['id_usuario'])).one() rol_fase = RolFaseUsuario() rol_fase.roles = rol rol_fase.fase = fase rol_fase.usuarios = user redirect('asignRolPhase?id_usuario=' + str(user.id_usuario))