Beispiel #1
0
 def post_delete(self, *args, **kw):
     """This is the code that actually deletes the record"""
     pks = self.provider.get_primary_fields(self.model)
     d = {}
     for i, arg in enumerate(args):
         d[pks[i]] = arg
         
     """extraer el idFase para poder retornar en el estado anterior """
     idfase= DBSession.query(Item.idFase).filter_by(id=d['id']).first()
     """------------------------------------------------------------"""
     
     """Se crea objeto y cambia de estado """
     itemeDelete=DBSession.query(Item).filter_by(id=d['id']).first()
     itemeDelete.estado="borrado"
     itemeDelete.ultimaversion=0
     
     DBSession.add(itemeDelete)
     
     """---------Se borra las relaciones del Item Borrado--------------"""
     
     relaciones= DBSession.query(RelacionItem).filter((RelacionItem.idItem1==d['id']) | (RelacionItem.idItem2==d['id'])).all()
     
     longitud=len(relaciones)
     
     for x in range(longitud):
         DBSession.delete(relaciones[x])
     
     """---------------------------------------------------------------"""
     
     #self.provider.delete(self.model, d)
     
     #self.provider.delete(self.model, d)
     
     #redirect('./' + '../' * (len(pks) - 1))
     raise redirect('/item/?fid='+str(idfase[0]))
Beispiel #2
0
Datei: rol.py Projekt: mbaez/SAP
	def put(self, args={}, **kw):
		"""
		Evento invocado luego de un evento post en el form de editar
		ecargado de persistir las modificaciones de las instancias.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""
		del kw['sprox_id']
		rol = DBSession.query(Rol).get(int(kw['rol_id']))
		rol.nombre = kw['nombre']
		rol.codigo = kw['codigo']
		rol.descripcion = kw['descripcion']
		rol.is_template = kw['is_template']
		rol.permisos = []

		for permiso_id in kw['permisos'] :
			rol.permisos.append(DBSession.query(Permiso).get(permiso_id))

		DBSession.merge(rol)
		flash("El rol '"+rol.nombre+"' ha sido modificado correctamente.")
		redirect("/administracion/rol/get_all")
Beispiel #3
0
    def post_delete(self, *args, **kw):
        """This is the code that actually deletes the record"""
        pks = self.provider.get_primary_fields(self.model)
        d = {}
        for i, arg in enumerate(args):
            d[pks[i]] = arg
        """extraer el idFase para poder retornar en el estado anterior """
        idfase = DBSession.query(Item.idFase).filter_by(id=d['id']).first()
        """------------------------------------------------------------"""
        """Se crea objeto y cambia de estado """
        itemeDelete = DBSession.query(Item).filter_by(id=d['id']).first()
        itemeDelete.estado = "borrado"
        itemeDelete.ultimaversion = 0

        DBSession.add(itemeDelete)
        """---------Se borra las relaciones del Item Borrado--------------"""

        relaciones = DBSession.query(
            RelacionItem).filter((RelacionItem.idItem1 == d['id'])
                                 | (RelacionItem.idItem2 == d['id'])).all()

        longitud = len(relaciones)

        for x in range(longitud):
            DBSession.delete(relaciones[x])
        """---------------------------------------------------------------"""

        #self.provider.delete(self.model, d)

        #self.provider.delete(self.model, d)

        #redirect('./' + '../' * (len(pks) - 1))
        raise redirect('/item/?fid=' + str(idfase[0]))
Beispiel #4
0
    def _do_get_provider_count_and_objs(self ,**kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        
        if len(kw) > 0:
            """Se extrae el id del usuario quien inicio sesion"""
            idUsuario= [x for x in DBSession.query(User.user_id).filter_by(user_name=request.identity['repoze.who.userid'])]

            """Se extrae los id de las fases en la cual el usuario tiene permiso """
            idsfases=[x for x in DBSession.query(ProyFaseUsuario.idFase).filter_by(idProyecto=kw['pid'] , iduser=idUsuario[0]).distinct()]
            
            fases=[]
            longitud=len(idsfases)
            
            
            if len(kw) > 1:
                for y in range(longitud):
                    visualizar=DBSession.query(self.__entity__).filter((Fase.id==idsfases[y])  & (Fase.nombre.ilike('%'+str(kw['buscar'])+'%'))).first()
                    if visualizar != None:
                        fases.append(visualizar)
            else:
                for y in range(longitud):
                    fases.append(DBSession.query(self.__entity__).filter_by(id=idsfases[y]).first())
            objs=fases
            
        else:
            objs = DBSession.query(self.__entity__).all()
        count = len(objs)
        self.__count__ = count
        return count, objs    
Beispiel #5
0
Datei: util.py Projekt: mbaez/SAP
	def faseGraphConstructor(self, idfase):
		#lista de items para el grafo
		items = DBSession.query(Item).filter(Item.fase==idfase).all()
		itemsId = []

		"""
		Todos los items de la fase forman parte del grafo (item = nodo)
		"grafo" es un grafo dirigido que representa las relaciones padre-hijo
		en una fase.
		"""
		grafo = digraph()
		for item in items:
			grafo.add_nodes([item.id_item])

		"""
		Se busca en la tabla RelacionItem todas las relaciones de padre-hijo
		que contengan a los items de la fase
		"""
		#guardar los ids de los items
		for item in items:
			itemsId = itemsId + [item.id_item]

		relaciones = DBSession.query(RelacionItem).\
						filter(RelacionItem.relacion_parentesco==1).\
						filter(RelacionItem.id_item_actual.in_(itemsId)).\
						filter(RelacionItem.id_item_relacionado.in_(itemsId)).\
						all()

		#Se añaden las aristas entre los items relacionados
		for relacion in relaciones:
			grafo.add_edge((relacion.id_item_actual, relacion.id_item_relacionado))

		return grafo
Beispiel #6
0
Datei: util.py Projekt: mbaez/SAP
	def gen_cod (self, id_fase, id_tipo):
		#traer la fase
		fase_actual = DBSession.query(Fase).get(id_fase)

		#se consulta por el numero de la fase actual dentro del proyecto
		nro_fase = 1 + len(DBSession.query(Fase).\
						filter(Fase.proyecto==fase_actual.proyecto).\
						filter(Fase.id_fase<fase_actual.id_fase).\
						all())

		#cantidad de items + 1 es el nro de item del nuevo item
		#dentro del proyecto actual
		nro_item = 1 + len(DBSession.query(Item).\
								filter(Item.fase==fase_actual.id_fase).\
								all())

		#obtener el tipo de item al cual corresponde el item, el codigo
		#de este es utilizado como prefijo del codigo del item
		tipo = DBSession.query(TipoItem).get(id_tipo)
		prefijo = tipo.codigo

		#se concatenan los resultados
		item_codigo = prefijo + str(nro_fase) + str(nro_item)

		return item_codigo
Beispiel #7
0
 def view(self, fileid):
     iid = DBSession.query(Adjuntos.idItem).filter_by(id=fileid).first()
     log.debug("iidssss: %s" % iid)
     try:
         userfile = DBSession.query(Adjuntos).filter_by(id=fileid).one()
     except:
         redirect("../../adjuntos/new/adjuntos/new")
     content_types = {
         'display': {},
         'download': {
             '.pdf': 'application/pdf',
             '.zip': 'application/zip',
             '.rar': 'application/x-rar-compressed',
             '.png': 'image/jpeg',
             '.jpeg': 'image/jpeg',
             '.jpg': 'image/jpeg',
             '.gif': 'image/jpeg',
             '.txt': 'text/plain'
         }
     }
     for file_type in content_types['display']:
         if userfile.filename.endswith(file_type):
             response.headers["Content-Type"] = content_types['display'][
                 file_type]
     for file_type in content_types['download']:
         if userfile.filename.endswith(file_type):
             response.headers["Content-Type"] = content_types['download'][
                 file_type]
             response.headers[
                 "Content-Disposition"] = 'attachment; filename="' + userfile.filename + '"'
     if userfile.filename.find(".") == -1:
         response.headers["Content-Type"] = "text/plain"
     return userfile.filecontent
Beispiel #8
0
	def borrarRelacion(self, item1, item2, idfase, **kw):

		if not self.puede_borrar(item1, item2, idfase):
			flash ("No se peude borrar la relacion! deja huerfanos", 'warning')
			redirect("/miproyecto/fase/relacion/list/"+idfase)

		#auditar items y aumentar su version
		item_1 = DBSession.query(Item).get(item1)
		item_2 = DBSession.query(Item).get(item2)

		item_util.audit_item(item_1)
		item_util.audit_item(item_2)

		item_1.version += 1
		item_2.version += 1

		item_1.estado = 3
		item_2.estado = 3

		DBSession.add(item_1)
		DBSession.add(item_2)

		DBSession.delete(DBSession.query(RelacionItem).\
					filter(RelacionItem.id_item_actual==item1).\
					filter(RelacionItem.id_item_relacionado==item2).\
					one())

		#marcar en revision los relacionados
		fase = DBSession.query(Fase).get(item_1.fase)
		grafo = item_util.proyectGraphConstructor(fase.proyecto)
		item_util.marcar_en_revision(grafo, item_1.id_item)
		item_util.marcar_en_revision(grafo, item_2.id_item)

		flash("Se ha eliminado la relacion: "+item1+" <--> "+item2)
		redirect("/miproyecto/fase/relacion/list/"+idfase)
Beispiel #9
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        #objs = DBSession.query(self.__entity__).filter_by(idFase=1).all()

        log.debug('pruebaRevivir: %s' % kw)

        if len(kw) > 0:

            if len(kw) > 1:
                objs = DBSession.query(self.__entity__).filter(
                    (Item.idFase == kw['fid']) & (Item.estado == "borrado")
                    & (Item.nombre.ilike('%' + str(kw['buscar']) +
                                         '%'))).all()
            else:
                objs = DBSession.query(self.__entity__).filter_by(
                    idFase=kw['fid'], estado="borrado").all()
            #objs = DBSession.query(self.__entity__).filter((Item.nrohistorial==kw['hid'])& (Item.ultimaversion==0) & (Item.nombre.ilike('%'+str(kw['buscar'])+'%'))).all()
            #objs = DBSession.query(self.__entity__).all()
        else:
            objs = DBSession.query(self.__entity__).all()

        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #10
0
    def put(self, *args, **kw):
        """update"""
        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]

        idproyec = DBSession.query(
            Fase.idproyec).filter_by(id=kw['id']).first()
        if kw['nombre'] == None:
            flash("Una fase debe tener un nombre", "error")
            redirect('/fase/' + kw['id'] + '/edit')

        nombreduplicado = DBSession.query(
            Fase.nombre).filter((Fase.idproyec == idproyec)
                                & (Fase.id != kw['id'])
                                & (Fase.nombre == kw['nombre'])).first()

        if nombreduplicado != None:
            flash("Ya existe una fase con el mismo nombre", "error")
            redirect('/fase/' + kw['id'] + '/edit')

        self.provider.update(self.model, params=kw)
        idProy = DBSession.query(Fase.idproyec).filter_by(id=kw['id']).first()

        redirect('../?pid=' + str(idProy[0]))
Beispiel #11
0
    def post(self, *args, **kw):
        ids = kw['items']
        longitud = len(ids)

        items = DBSession.query(Item).filter_by(idFase=kw['idFase'],
                                                ultimaversion=1).all()

        if (longitud > 0):
            fase = DBSession.query(Fase).filter_by(id=kw['idFase']).first()

            if longitud == len(items):
                fase.estado = 'lineaBaseTotal'
            else:
                fase.estado = 'lineaBaseParcial'

            lineabase = self.provider.create(self.model, params=kw)

            for indice in range(longitud):
                item = DBSession.query(Item).filter_by(id=ids[indice]).first()
                item.idLineaBase = lineabase.id

            raise redirect('./?fid=' + kw['idFase'])
        else:
            flash("No ha seleccionado ningun item", "error")
            raise redirect('./new/?fid=' + kw['idFase'])
Beispiel #12
0
	def put(self, args={}, **kw):
		"""
		Evento invocado luego de un evento post en el form de editar
		ecargado de persistir las modificaciones de las instancias.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""
		#Se obtiene de la base de datos el proyecto modifcado
		proyecto = DBSession.query(Proyecto).get(int(kw['id_proyecto']))
		#Se actualizan unicamente los campos actualizables
		proyecto.nombre=kw['nombre']
		proyecto.nro_fases = kw['nro_fases']
		proyecto.descripcion = kw['descripcion']

		#asignar lider
		proyecto.lider = DBSession.query(Usuario).get(kw['lider'])
		util.asignar_lider(proyecto)

		DBSession.merge(proyecto)
		flash("El proyecto ha sido '" +proyecto.nombre+ "' modificado correctamente.")
		redirect("/administracion/proyecto/list")
Beispiel #13
0
    def __actions__(self, obj):
        """Override this function to define how action links should be displayed for the given record."""
        primary_fields = self.__provider__.get_primary_fields(self.__entity__)
        pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
        #if has_permission('manage'):############

        proyecto = DBSession.query(Fase.idproyec).filter_by(id=pklist).first()
        estado = DBSession.query(
            Proyecto.estado).filter_by(id=proyecto).first()
        faseanterior = DBSession.query(Fase).filter(
            (Fase.idproyec == proyecto) & (Fase.id < pklist)).order_by(
                Fase.id).all()
        longitud = len(faseanterior)

        if str(estado[0]).__eq__("iniciado"):
            if longitud > 0:

                if (faseanterior[longitud - 1].estado == 'inicial') | (
                        faseanterior[longitud - 1].estado == 'desarrollo'):
                    value = '<div></div>'
                else:
                    value = '<div><a class="loginlogout" href="/item/?fid='+pklist+ '">Items</a><br/>'\
                        '<a class="loginlogout" href="/revivir/?fid='+pklist+ '">RevivirItem</a><br/>'\
                        '<a class="loginlogout" href="/lineabase/?fid='+pklist+ '">LineaBase</a></div>'
            else:
                value = '<div><a class="loginlogout" href="/item/?fid='+pklist+ '">Items</a><br/>'\
                    '<a class="loginlogout" href="/revivir/?fid='+pklist+ '">RevivirItem</a><br/>'\
                    '<a class="loginlogout" href="/lineabase/?fid='+pklist+ '">LineaBase</a></div>'
        else:
            value = '<div><a class="loginlogout" href="/item/?fid='+pklist+ '">Items</a><br/>'\
                '<a class="loginlogout" href="/lineabase/?fid='+pklist+ '">LineaBase</a></div>'

        return value
Beispiel #14
0
	def new(self, idtipo, args={}, **kw):
		"""
		Encargado de cargar el widget para crear nuevas instancias,
		solo tienen acceso aquellos usuarios que posean el premiso de crear

		@type  idtipo : Integer
		@param idtipo : Identificador del Atributo del item.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		@rtype  : Diccionario
		@return : El diccionario que sera utilizado en el template.

		"""

		tmpl_context.widget = new_atributo_form
		self.params['modelname'] = "Atributos del Tipo de Item"
		self.params['idtipo'] = idtipo
		self.params['tipo_item'] = DBSession.query(TipoItem).get(idtipo)
		self.params['current_name'] = self.params['tipo_item'].nombre
		id_fase = self.params['tipo_item'].fase
		self.params['fase'] = DBSession.query(Fase).get(id_fase)
		self.params['idfase'] = id_fase
		self.params['header_file'] = 'tipo_item'
		self.params['cancelar_url'] = '/miproyecto/fase/tipo_item/atributos/list/'+str(idtipo)
		return dict(value=kw, params=self.params)
Beispiel #15
0
Datei: fase.py Projekt: mbaez/SAP
	def get_all(self, idfase, **kw):
		"""Lista todos los items de la fase"""

		has_permiso = session_util.authorize_fase('ver_fase', idfase)
		if ( has_permiso == None) :
			flash("No posee permisos sobre la fase #"+str(idfase),'error')
			redirect('/miproyecto/fase/error')


		tmpl_context.widget = item_table
		items = DBSession.query(Item).filter(Item.fase==idfase).all()
		value = item_filler.get_value(items)

		permiso_editar = fase_util.check_fase_permiso(idfase, 'editar_fase')
		permiso_anadir = fase_util.check_fase_permiso(idfase, 'administrar_participantes')

		self.params['title'] = 'Titulo'
		self.params['permiso_editar'] = permiso_editar
		self.params['permiso_anadir'] = permiso_anadir
		self.params['modelname'] = 'Items'
		self.params['header_file'] = 'fase'
		self.params['permiso'] = 'crear_item'
		self.params['idfase'] = idfase
		self.params['fase'] = DBSession.query(Fase).get(idfase)
		self.params['new_url'] = '/miproyecto/fase/item/'+idfase+'/new/'
		self.params['label'] = 'Agregar Atributo'
		self.params['usuarios'] = usuario_util.get_usuarios_by_fase(idfase)

		return dict(value=value, params = self.params)
Beispiel #16
0
Datei: util.py Projekt: mbaez/SAP
	def asociar_usuario_fase(self, usuario_id, fase_id):
		"""
		Asocia los permisos de un usuario con una fase, asi los usuarios que posean
		el rol estaran asociados a la fase.

		@type  usuario_id  : String
		@param usuario_id : Codigo del rol

		@type  fase_id   : Integer
		@param fase_id   : Identificador de la fase

		@rtype  : Rol
		@return : El rol que es aplicado a la fase.
		"""

		fase = DBSession.query(Fase).get(fase_id)
		#Se obtienen los permisos del template
		permisos_rol = self.distinct(DBSession.query(Permiso).\
						filter(RolPermisoProyecto.permiso_id == Permiso.permiso_id).\
						filter(RolPermisoProyecto.proyecto_id == fase.proyecto)
						)

		#Se se asocian el rol con la fase
		for permiso in permisos_rol:

			rpu = UsuarioPermisoFase()

			rpu.fase_id = fase_id
			rpu.usuario_id = usuario_id
			rpu.permiso_id = permiso.permiso_id
			#Asocia el rol con los permisos y la fase
			DBSession.add(rpu)
Beispiel #17
0
	def importar_este_tipo(self, idtipo, idfase):
		"""
		Se obtiene de la BD el tipo de item y sus atributos
		"""
		tipo = DBSession.query(TipoItem).get(idtipo)
		atributos = DBSession.query(AtributoTipoItem).\
						filter(AtributoTipoItem.tipo_item==tipo.id_tipo_item)
		"""
		Se settean los valores de la copia
		El nuevo tipo de item (copia_tipo )pertenecera a esta fase ahora
		"""
		copia_tipo = TipoItem()
		copia_tipo.nombre = tipo.nombre
		copia_tipo.descripcion = tipo.descripcion
		copia_tipo.fase = idfase
		copia_tipo.codigo = tipo.codigo
		'''
		Se settean los valores para cada copia_atributo
		'''
		for atributo in atributos:
			copia_atributo = AtributoTipoItem()
			copia_atributo.nombre = atributo.nombre
			copia_atributo.tipo_id = atributo.tipo_id
			copia_tipo.atributos.append(copia_atributo)

		DBSession.add(copia_tipo)
		flash("El tipo de item "+str(tipo.nombre)+
										" pertenece ahora a esta fase")
		redirect("/miproyecto/fase/tipo_item/importar/"+str(idfase))
Beispiel #18
0
Datei: util.py Projekt: mbaez/SAP
	def proyectGraphConstructor(self, idproyecto):
		fases = DBSession.query(Fase).filter(Fase.proyecto==idproyecto).all()
		grafo = digraph()
		items = []
		itemsId = []

		#se "obtienen los items de cada fase
		for fase in fases:
			items = items + list(DBSession.query(Item).filter(Item.fase==fase.id_fase))

		for item in items:
			grafo.add_nodes([item.id_item])

		#guardar los ids de los items
		for item in items:
			itemsId = itemsId + [item.id_item]
 		"""
		Se busca en la tabla RelacionItem todas las relaciones
		que contengan a los items del proyecto
		"""
		relaciones = DBSession.query(RelacionItem).\
						filter((RelacionItem.id_item_actual).in_(itemsId)).\
						all()

		#Se añaden las aristas entre los items relacionados
		for relacion in relaciones:
			grafo.add_edge((relacion.id_item_actual,relacion.id_item_relacionado))


		return grafo
Beispiel #19
0
    def post(self, *args, **kw):
        """extrae el numhistorial ordenado sin repetir, para luego tomar el mayor valor y asi 
        poder asignarle un numhistorial mayor
        """
        num = [
            x for x in (DBSession.query(Item.nrohistorial).order_by(
                Item.nrohistorial.desc()).distinct())
        ]
        """Por cada Item creado, aumenta el nrohistorial en una unidad """

        if num != None and len(num) > 0:
            kw['nrohistorial'] = int(num[0][0]) + 1
        else:
            kw['nrohistorial'] = 1

        fase = DBSession.query(Fase).filter_by(id=kw['idFase']).first()

        if str(fase.estado).__eq__('inicial'):
            fase.estado = 'desarrollo'
        elif str(fase.estado).__eq__('lineaBaseTotal'):
            fase.estado = 'lineaBaseParcial'

        #self.provider.create(self.model, params=kw)

        raise redirect('./?fid=' + kw['idFase'])
Beispiel #20
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        #objs = DBSession.query(self.__entity__).filter_by(idFase=1).all()
        
        if len(kw) > 0:
            if len(kw) > 1:
                #objs = DBSession.query(self.__entity__).filter((Fase.idproyec==kw['pid']) & (Fase.nombre.ilike('%'+str(kw['buscar'])+'%'))).all()

                if kw['buscar']=="":
                    objs = DBSession.query(self.__entity__).filter_by(nrohistorial=kw['hid'], ultimaversion=0).all()
                else:
                    objs = DBSession.query(self.__entity__).filter((Item.nrohistorial==kw['hid'])& (Item.ultimaversion==0) & (Item.version ==kw['buscar'])).all()
                

            else:
                
                objs = DBSession.query(self.__entity__).filter_by(nrohistorial=kw['hid'], ultimaversion=0).all()
        else:
            
            objs = DBSession.query(self.__entity__).all()

        count = len(objs)
        self.__count__ = count
        return count, objs    
Beispiel #21
0
    def put(self, *args, **kw):
        """update"""
        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]

        idTipoDeItem = DBSession.query(
            Campos.idTipoDeItem).filter_by(id=kw['id']).first()

        if kw['nombre'] == None:
            flash("El nuevo Atributo debe tener un nombre", "error")
            redirect('../' + kw['id'] + '/edit')

        nombreduplicado = DBSession.query(
            Campos.nombre).filter((Campos.idTipoDeItem == idTipoDeItem)
                                  & (Campos.id != kw['id'])
                                  & (Campos.nombre == kw['nombre'])).first()

        if nombreduplicado != None:
            flash("Ya existe un Atributo con el mismo nombre", "error")
            redirect('../' + kw['id'] + '/edit')

        self.provider.update(self.model, params=kw)
        idtipo = DBSession.query(
            Campos.idTipoDeItem).filter_by(id=kw[pk]).first()

        redirect('../?tid=' + str(idtipo[0]))
Beispiel #22
0
	def get_usuarios_by_fase(self, id, permiso_name='ver_fase'):
		"""
		Obtiene una lista de los usuarios que poseen el permiso especificado sobre
		un proyecto.

		@type  id  : Integer
		@param id  : Identificador de la fase

		@type  permiso_name : String
		@param permiso_name : Nombre del permiso

		@rtype  : Usuario []
		@return : Lista de usuarios que poseen el permiso sobre la fase
		"""
		usuarios = DBSession.query(Usuario).\
					filter(UsuarioPermisoFase.usuario_id == Usuario.usuario_id).\
					filter(UsuarioPermisoFase.fase_id == id).\
					filter(UsuarioPermisoFase.permiso_id == Permiso.permiso_id).\
					filter(Permiso.nombre == permiso_name).all()
		#Si el usuairo es lider del proyecto se saltan los controles
		user = checker.get_current_user()
		fase = DBSession.query(Fase).get(id)
		rol = self.get_rol_by_codigo('lider_' + str(fase.proyecto))

		if self.usuario_has_rol(user.usuario_id, rol ):
			usuarios.append(user)

		return self.distinct(usuarios)
Beispiel #23
0
 def __actions__(self, obj):
     """Override this function to define how action links should be displayed for the given record."""
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     #if has_permission('manage'):############
     proyecto = DBSession.query(Fase.idproyec).filter_by(id = pklist).first()
     estado = DBSession.query(Proyecto.estado).filter_by(id = proyecto).first()
     value='<div></div>'
     
     if str(estado[0]).__eq__("nuevo"):
         value = '<div><div><a class="edit_link" href="'+pklist+'/edit" style="text-decoration:none">edit</a></div>'\
         '<div><form method="POST" action="'+pklist+'" class="button-to">'\
         '<input type="hidden" name="_method" value="DELETE" />'\
         '<input class="delete-button" onclick="return confirm(\'Are you sure?\');" value="delete" type="submit" '\
         'style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0;"/>'\
         '</form>'\
         '</div>''</div>'
         
     elif str(estado[0]).__eq__("iniciado"):
         value = '<div><div><a class="edit_link" href="'+pklist+'/edit" style="text-decoration:none">edit</a>'\
         '<div><a class="loginlogout" href="/tipodeitem/?fid='+pklist+ '">TiposItem</a></div><br/>'\
         '<div><a class="loginlogout" href="/importartipodeitem/new/?fid='+pklist+ '">ImportarTipoItem</a></div><br/>'\
         '</div></div>'
     
     return value
Beispiel #24
0
 def __actions__(self, obj):
     """Override this function to define how action links should be displayed for the given record."""
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     #if has_permission('manage'):############
     
     proyecto = DBSession.query(Fase.idproyec).filter_by(id = pklist).first()
     estado = DBSession.query(Proyecto.estado).filter_by(id = proyecto).first()
     faseanterior = DBSession.query(Fase).filter((Fase.idproyec == proyecto) & (Fase.id < pklist)).order_by(Fase.id).all()
     longitud = len(faseanterior)
     
     if str(estado[0]).__eq__("iniciado"):
         if longitud > 0:
             
             if (faseanterior[longitud-1].estado == 'inicial') | (faseanterior[longitud-1].estado == 'desarrollo'):
                 value = '<div></div>'
             else:
                 value = '<div><a class="loginlogout" href="/item/?fid='+pklist+ '">Items</a><br/>'\
                     '<a class="loginlogout" href="/revivir/?fid='+pklist+ '">RevivirItem</a><br/>'\
                     '<a class="loginlogout" href="/lineabase/?fid='+pklist+ '">LineaBase</a></div>'
         else:
             value = '<div><a class="loginlogout" href="/item/?fid='+pklist+ '">Items</a><br/>'\
                 '<a class="loginlogout" href="/revivir/?fid='+pklist+ '">RevivirItem</a><br/>'\
                 '<a class="loginlogout" href="/lineabase/?fid='+pklist+ '">LineaBase</a></div>'
     else:
         value = '<div><a class="loginlogout" href="/item/?fid='+pklist+ '">Items</a><br/>'\
             '<a class="loginlogout" href="/lineabase/?fid='+pklist+ '">LineaBase</a></div>'
     
     return value
Beispiel #25
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        #objs = DBSession.query(self.__entity__).filter_by(idFase=1).all()

        if len(kw) > 0:
            if len(kw) > 1:
                #objs = DBSession.query(self.__entity__).filter((Fase.idproyec==kw['pid']) & (Fase.nombre.ilike('%'+str(kw['buscar'])+'%'))).all()

                if kw['buscar'] == "":
                    objs = DBSession.query(self.__entity__).filter_by(
                        nrohistorial=kw['hid'], ultimaversion=0).all()
                else:
                    objs = DBSession.query(self.__entity__).filter(
                        (Item.nrohistorial == kw['hid'])
                        & (Item.ultimaversion == 0)
                        & (Item.version == kw['buscar'])).all()

            else:

                objs = DBSession.query(self.__entity__).filter_by(
                    nrohistorial=kw['hid'], ultimaversion=0).all()
        else:

            objs = DBSession.query(self.__entity__).all()

        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #26
0
	def put(self, id, **kw):
		"""
		Evento invocado luego de un evento post en el form de editar
		encargado de persistir las modificaciones de las instancias.

		@type  id : Integer
		@param id : Identificador del Detalle del item.

		@type  kw : Hash
		@param kw : Keywords

		"""
		detalle =  DBSession.query(DetalleItem).get(id)
		detalle.valor = kw['valor']
		detalle.observacion = kw ['observacion']

		DBSession.merge(detalle)
		DBSession.flush()

		item = DBSession.query(Item).get(detalle.id_item)

		item_util.audit_item(item)
		item.version += 1
		DBSession.merge(item)

		flash("El item atributo ha sido modificado correctamente.")
		redirect('/miproyecto/fase/item/poner_en_revision/'+str(detalle.id_item))
Beispiel #27
0
    def new(self,lid=None ,*args, **kw):

        tmpl_context.widget = self.new_form
   
        
        if len(kw)<2:
            """-----obtiene el idFase de la en el que esta la linea base------- """

            fid=DBSession.query(LineaBase.idFase).filter_by(id=lid).first()
            log.debug("fidddd= %s" %fid)   
            """-----------------------------------------------------------------"""
             
            emfaseactual= [x for x in DBSession.query(Item.id, Item.nombre).filter_by(idFase=fid,idLineaBase=None).all()]
            return dict(value={'lineabase':lid}, model=self.model.__name__,items_options=itemfaseactual)
            
            
            """Este else es como el Post.Como,al guardar no se va al Post,vuelve al new, entonces se le creo este "else" """
        else:
            
            kw2=dict()
            kw2['id']=kw['items']
            kw2['idLineaBase']=kw['lineabase']
            self.provider.update(self.model, params=kw2)
            
            raise redirect('../' +'../itemlineabase/?lid='+ kw['lineabase'])
Beispiel #28
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        #objs = DBSession.query(self.__entity__).filter_by(idFase=1).all()

        if len(kw) > 0:
            objs = DBSession.query(
                self.__entity__).filter((RelacionItem.idItem1 == kw['iid']) | (
                    RelacionItem.idItem2 == kw['iid'])).all()
            listarelaciones = DBSession.query(
                self.__entity__).filter((RelacionItem.idItem1 == kw['iid']) | (
                    RelacionItem.idItem2 == kw['iid'])).all()

            for x in range(len(listarelaciones)):
                item1 = DBSession.query(Item).filter_by(
                    id=listarelaciones[x].idItem1).first()
                item2 = DBSession.query(Item).filter_by(
                    id=listarelaciones[x].idItem2).first()

                if (int(item1.ultimaversion) != 1) | (int(item2.ultimaversion)
                                                      != 1):
                    objs.remove(listarelaciones[x])
        else:
            objs = DBSession.query(self.__entity__).all()

        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #29
0
 def put(self, *args, **kw):
     """update"""
     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]
     
     idTipoDeItem=DBSession.query(Campos.idTipoDeItem).filter_by(id=kw['id']).first()
     
     
     
     if kw['nombre']==None:
         flash("El nuevo Atributo debe tener un nombre" , "error")
         redirect('../'+ kw['id'] +'/edit')
     
     
     nombreduplicado=DBSession.query(Campos.nombre).filter((Campos.idTipoDeItem==idTipoDeItem) &(Campos.id != kw['id']) &(Campos.nombre==kw['nombre'])).first()
     
     if nombreduplicado != None :
         flash("Ya existe un Atributo con el mismo nombre" , "error")
         redirect('../'+ kw['id'] +'/edit')
         
         
     self.provider.update(self.model, params=kw)
     idtipo=DBSession.query(Campos.idTipoDeItem).filter_by(id=kw[pk]).first()
     
     redirect('../?tid=' + str(idtipo[0]))
Beispiel #30
0
    def new(self, lid=None, *args, **kw):

        tmpl_context.widget = self.new_form

        if len(kw) < 2:
            """-----obtiene el idFase de la en el que esta la linea base------- """

            fid = DBSession.query(LineaBase.idFase).filter_by(id=lid).first()
            log.debug("fidddd= %s" % fid)
            """-----------------------------------------------------------------"""

            emfaseactual = [
                x for x in DBSession.query(Item.id, Item.nombre).filter_by(
                    idFase=fid, idLineaBase=None).all()
            ]
            return dict(value={'lineabase': lid},
                        model=self.model.__name__,
                        items_options=itemfaseactual)
            """Este else es como el Post.Como,al guardar no se va al Post,vuelve al new, entonces se le creo este "else" """
        else:

            kw2 = dict()
            kw2['id'] = kw['items']
            kw2['idLineaBase'] = kw['lineabase']
            self.provider.update(self.model, params=kw2)

            raise redirect('../' + '../itemlineabase/?lid=' + kw['lineabase'])
Beispiel #31
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        
        

        idUsuario= [x for x in DBSession.query(User.user_id).filter_by(user_name=request.identity['repoze.who.userid'])]
        
        idProy=[x for x in DBSession.query(ProyFaseUsuario.idProyecto).filter_by(iduser=idUsuario[0]).distinct()] 
        proyectos=[]
        
        longitud=len(idProy)
        for y in range(longitud):
            proyectos.append(DBSession.query(self.__entity__).filter_by(id = idProy[y]).one())

        
        if len(kw) > 0:
            
            for y in range(longitud):
                proyectos.append(DBSession.query(self.__entity__).filter((Proyecto.id == idProy[y]) & (Proyecto.nombre.ilike('%'+str(kw['buscar'])+'%'))).one())
            
            objs =proyectos 
            
        else:
            objs = proyectos
        
        
                
        
        
        count = len(objs)
        self.__count__ = count
        return count, objs    
Beispiel #32
0
Datei: item.py Projekt: mbaez/SAP
	def poner_en_revision(self, id_item):

		item = DBSession.query(Item).get(id_item)
		fase = DBSession.query(Fase).get(item.fase)
		grafo = item_util.proyectGraphConstructor(fase.proyecto)

		item_util.marcar_en_revision(grafo, item.id_item)

		flash("El item " +str(item.nombre)+ " fue puesto en revision.", 'warning')
		redirect('/miproyecto/fase/item/ver/'+str(item.id_item))
Beispiel #33
0
    def new(self,pid=None ,*args, **kw):
        """Display a page to show a new record."""
        tmpl_context.widget = self.new_form
        
        fases = [x for x in DBSession.query(Fase.id, Fase.nombre).filter_by(idproyec=pid)]
        usuarios = [x for x in (DBSession.query(User.user_id, User.user_name))]
        usuarios.remove(usuarios[0])
        #permisos= [x for x in (DBSession.query(Permission. permission_id ,Permission. permission_name))]

        return dict(value={'idProyecto':pid}, model=self.model.__name__, fases_options=fases, usuarios_options=usuarios)
Beispiel #34
0
    def new(self, tid=None, *args, **kw):
        """Display a page to show a new record."""

        fid = DBSession.query(TipoDeItem.idFase).filter_by(id=tid).first()

        comlejidadoptions = [
            (1, "Muy Baja (1)"),
            (2, "Baja (2)"),
            (3, "Media (3)"),
            (4, "Alta (4)"),
            (5, "Muy Alta (5)"),
        ]

        campos = [
            TextField("nombre", label_text="Nombre", disabled=True),
            Spacer(),
            HiddenField("idFase", label_text="idFase"),
            HiddenField("version", label_text="version"),
            HiddenField("estado", label_text="estado"),
            SingleSelectField("complejidad", options=comlejidadoptions, label_text="complejidad"),
            Spacer(),
            HiddenField("nrohistorial", label_text="nrohistorial"),
            HiddenField("idTipoDeItem", label_text="idTipoDeItem"),
        ]

        camponombre = DBSession.query(Campos.tipoDeDato, Campos.nombre, Campos.id).filter_by(idTipoDeItem=tid).all()

        for ct in camponombre:
            # log.debug(ct[1])
            if str(ct[0]).__eq__("date"):
                campo1 = CalendarDatePicker(str(ct[2]), label_text=ct[1] + " (" + ct[0] + ")", date_format="%d/%m/%Y")
            else:
                campo1 = TextField(str(ct[2]), label_text=ct[1] + " (" + ct[0] + ")")

            campos.append(campo1)
            campos.append(Spacer())

        # self.new_form = TableForm('tf', fields=campos, submit_text='Guardar')
        # tmpl_context.widget = self.new_form

        tmpl_context.widget = TableForm("create_table_form", fields=campos, submit_text="Guardar")

        """El tipo de Item elegido es extraido para  asignar su nombre al item"""
        tipo_item_elegido = DBSession.query(TipoDeItem).filter_by(id=tid).first()

        nrogenerado = tipo_item_elegido.nrogeneracion + 1

        if int(nrogenerado) < 10:
            nombreitem = tipo_item_elegido.nombre + "-00" + str(nrogenerado)
        elif int(nrogenerado) < 100:
            nombreitem = tipo_item_elegido.nombre + "-0" + str(nrogenerado)
        else:
            nombreitem = tipo_item_elegido.nombre + "-" + str(nrogenerado)

        return dict(value={"idTipoDeItem": tid, "idFase": fid, "nombre": nombreitem}, model=self.model.__name__)
Beispiel #35
0
 def new(self,iid=None ,*args, **kw):
     
     """Se obtiene el id del tipo de item elegido para el item"""
     idtipo=DBSession.query(Item.idTipoDeItem).filter_by(id=iid).first()
     
     atributos= [x for x in (DBSession.query(Campos.nombre, Campos.nombre).filter_by(idTipoDeItem=idtipo))]
     
     
     
     tmpl_context.widget = self.new_form
     return dict(value={'iditem':iid}, model=self.model.__name__, atributos_options=atributos)
Beispiel #36
0
	def revertir_item (self, historial_item):
		"""
		Dada una entidad HistorialItem que representa una version
		anterior del item en si se obtiene de la tabla las entradas de
		esa version para que el item recupere los valores de esa version
		"""
		#debe ser una version posterior a la actual
		item = DBSession.query(Item).get(historial_item.id_item)
		version = int(item.version) + 1

		item = Item()
		item.id_item = historial_item.id_item
		item.nombre = historial_item.nombre
		item.codigo = historial_item.codigo
 		item.estado = 3#historial_item.estado
		item.tipo_item = historial_item.tipo_item
		item.fase = historial_item.fase
		item.version = version
		item.prioridad = historial_item.prioridad
		item.complejidad = historial_item.complejidad
		item.descripcion = historial_item.descripcion
		item.observacion = historial_item.observacion
		item.linea_base = historial_item.linea_base

		#recuperar los detalles
		historial_detalles = DBSession.query(HistorialDetalleItem).\
			filter(HistorialDetalleItem.id_item==historial_item.id_item).\
			all()

		for hist_detalle in historial_detalles:
			detalle = DetalleItem()
			detalle.id_item_detalle = hist_detalle.id_detalle
			detalle.id_item = hist_detalle.id_item
			detalle.adjunto = hist_detalle.adjunto
			detalle.observacion = hist_detalle.observacion
			detalle.valor = hist_detalle.valor
			item.detalles.append(detalle)

		#recuperar los relaciones
		historial_relaciones = DBSession.query(HistorialRelacion).\
			filter((HistorialRelacion.id_item_1 or
			HistorialRelacion.id_item_2) == item.id_item).\
			all()

		for hist_relacion in historial_relaciones:
			relacion = RelacionItem()
			if(DBSession.query(Item).get(hist_relacion.id_item_1)!=None and
				DBSession.query(Item).get(hist_relacion.id_item_2)!=None):
				relacion.id_item_actual = hist_relacion.id_item_1
				relacion.id_item_relacionado = hist_relacion.id_item_2
				relacion.relacion_parentesco = hist_relacion.id_tipo_relacion
				DBSession.merge(relacion)

		DBSession.merge(item)
Beispiel #37
0
Datei: item.py Projekt: mbaez/SAP
	def impacto(self, id_item,**kw):
		item = DBSession.query(Item).get(id_item)
		fase = DBSession.query(Fase).get(item.fase)
		grafo = item_util.proyectGraphConstructor(fase.proyecto)
		nodos = []
		impacto, nodos = item_util.calcular_impacto(grafo, item.id_item)
		item_util.dibujar_grafo(nodos, item, impacto)
		self.params['cantidad'] = len(nodos)
		self.params['impacto'] = impacto
		self.params['item'] = item
		return dict(params = self.params)
Beispiel #38
0
	def post_delete(self, id_proyecto, **kw):
		fases = DBSession.query(Fase).filter(Fase.proyecto == id_proyecto).all()
		if(len(fases) == 0):
			DBSession.delete(DBSession.query(RolPermisoProyecto).\
					  filter(RolPermisoProyecto.proyecto_id == id_proyecto))
			DBSession.delete(DBSession.query(Proyecto).get(id_proyecto))
			flash("El proyecto ha sido "+ id_proyecto +" eliminado correctamente.")

		else:
			flash("El proyecto no puede ser eliminado porque ya tiene fases", "error")

		redirect("/administracion/proyecto/")
Beispiel #39
0
Datei: util.py Projekt: mbaez/SAP
	def revivir_item (self, historial_item):
		"""
		Restaura el item a su ultima version sin sus relaciones
		"""
		item = Item()
		item.id_item = historial_item.id_item
		item.nombre = historial_item.nombre
		item.codigo = historial_item.codigo
		#el estado del item es en desarrollo al revivir
		item.estado_actual = estado_item_util.get_by_codigo('Revision')
		item.tipo_item = historial_item.tipo_item
		item.fase = historial_item.fase
		item.version = historial_item.version
		item.prioridad = historial_item.prioridad
		item.complejidad = historial_item.complejidad
		item.descripcion = historial_item.descripcion
		item.observacion = historial_item.observacion
		item.linea_base = None

		#se vacian los detalles
		item.detalles = []
		atributo_mapper = {}
		#Se obtienen los atributos actuales del tipo de item al que pertenece
		tipo_item = DBSession.query(TipoItem).get(historial_item.tipo_item)

		for atributo in tipo_item.atributos:
			detalle = DetalleItem()
			detalle.id_item = historial_item.id_item
			detalle.id_atributo_tipo_item = atributo.id_atributo_tipo_item
			detalle.adjunto = None
			detalle.valor = None

			atributo_mapper[atributo.id_atributo_tipo_item] = len(item.detalles)

			item.detalles.append(detalle)

		#recuperar los detalles
		historial_detalles = DBSession.query(HistorialDetalleItem).\
			filter(HistorialDetalleItem.id_item==historial_item.id_item).\
			all()

		#Se setean los valores a los atributos ya existentes
		for hist_detalle in historial_detalles:
			#Se obtiene el indice correspondiente al atributo del tipo de item
			index = atributo_mapper[hist_detalle.id_atributo_tipo_item]

			item.detalles[index].adjunto = hist_detalle.adjunto
			item.detalles[index].valor = hist_detalle.valor

		DBSession.merge(item)
Beispiel #40
0
 def _do_get_provider_count_and_objs(self ,**kw):
     limit = kw.get('limit', None)
     offset = kw.get('offset', None)
     order_by = kw.get('order_by', None)
     desc = kw.get('desc', False)
     
     if len(kw) > 0:
         objs = DBSession.query(self.__entity__).filter_by(idTipoDeItem=kw['tid']).all()
     else:
         #objs = DBSession.query(self.__entity__).filter_by(idproyec=kw[result['pid']]).all()
         objs = DBSession.query(self.__entity__).all()
     count = len(objs)
     self.__count__ = count
     return count, objs 
Beispiel #41
0
	def post(self, idfase, args={},**kw):
		"""
		Evento invocado luego de un evento post en el form de crear
		ecargado de persistir las nuevas instancias.

		@type  idfase : Integer
		@param idfase : Identificador de la fase.

		@type  args : Hash
		@param args : Argumentos de template

		@type  kw : Hash
		@param kw : Keywords

		"""
		del kw['sprox_id']
		"""
		se crea la nueva relacion y se le asignan los valores de los combos
		"""
		if kw['item_1'] != None and kw['item_2'] != None:
			relacion = RelacionItem()
			relacion.id_item_actual = kw['item_1']
			relacion.id_item_relacionado = kw['item_2']
			relacion.relacion_parentesco = 2

			DBSession.merge(relacion)

			#auditar items y aumentar su version
			item1 = DBSession.query(Item).get(kw['item_1'])
			item2 = DBSession.query(Item).get(kw['item_2'])

			item_util.audit_item(item1)
			item_util.audit_item(item2)

			item1.version += 1
			item2.version += 1

			DBSession.add(item1)
			DBSession.add(item2)

			#marcar en revision los relacionados
			fase = DBSession.query(Fase).get(item1.fase)
			grafo = item_util.proyectGraphConstructor(fase.proyecto)
			item_util.marcar_en_revision(grafo, item1.id_item)

			flash("La relacion se ha creado correctamente")
			redirect("/miproyecto/fase/relacion/list/"+idfase)

		flash("No se puede crear la relacion", 'warning')
		redirect("/miproyecto/fase/relacion/"+idfase+"/new/")
Beispiel #42
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)

        if len(kw) > 0:
            objs = DBSession.query(
                self.__entity__).filter_by(idTipoDeItem=kw['tid']).all()
        else:
            #objs = DBSession.query(self.__entity__).filter_by(idproyec=kw[result['pid']]).all()
            objs = DBSession.query(self.__entity__).all()
        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #43
0
    def aprobaritem(self, **kw):
        item = DBSession.query(Item).filter_by(id=kw['iid']).first()
        item.estado = 'aprobado'
        fid = DBSession.query(Item.idFase,
                              Item.nombre).filter_by(id=kw['iid']).first()

        if item.idLineaBase != None:
            listaitem = DBSession.query(Item).filter_by(
                idLineaBase=item.idLineaBase, ultimaversion=1).all()
            longitud = len(listaitem)
            contadoraprob = 0
            modificado = False

            for x in range(longitud):
                #Verificar si todos los item de la linea base estan aprobados
                if str(listaitem[x].estado).__eq__('aprobado'):
                    contadoraprob = contadoraprob + 1
                #Verificar si existe por lo menos un item en estado modificado
                elif str(listaitem[x].estado).__eq__('modificado'):
                    modificado = True

            #Entra si todos los item de la linea base estan aprobados
            if contadoraprob == longitud:
                lineabase = DBSession.query(LineaBase).filter_by(
                    id=item.idLineaBase).first()
                lineabase.estado = 'cerrada'

                cantItemLB = DBSession.query(Item).filter_by(
                    idLineaBase=lineabase.id, ultimaversion=1).all()
                cantItemFase = DBSession.query(Item).filter_by(
                    idFase=fid[0], ultimaversion=1).all()

                fase = DBSession.query(Fase).filter_by(id=fid[0]).first()

                if len(cantItemLB) == len(cantItemFase):
                    fase.estado = 'lineaBaseTotal'
                    flash("El item \"" +str(fid[1]) +"\" fue aprobado, "\
                      "la linea base \"" + lineabase.nombre + "\" fue cerrada y "\
                      "la fase \""+fase.nombre+"\" paso al estado de \"Linea Base Total\"")
                    redirect('/item/?fid=' + str(fid[0]))
                else:
                    fase.estado = 'lineaBaseParcial'
                    flash("El item \"" +str(fid[1]) +"\" fue aprobado, "\
                      "la linea base \"" + lineabase.nombre + "\" fue cerrada y "\
                      "la fase \""+fase.nombre+"\" paso al estado de \"Linea Base Parcial\"")
                    redirect('/item/?fid=' + str(fid[0]))

            #Entra si no existem item modificados en la linea base"""
            elif not modificado:
                lineabase = DBSession.query(LineaBase).filter_by(
                    id=item.idLineaBase).first()
                lineabase.estado = 'comprometida'
                flash("El item \"" +str(fid[1]) +"\" fue aprobado y "\
                      "la linea base \"" + lineabase.nombre + "\" ahora esta comprometida")
                redirect('/item/?fid=' + str(fid[0]))

        flash("El item \"" + str(fid[1]) + "\" fue aprobado")
        redirect('/item/?fid=' + str(fid[0]))
Beispiel #44
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)
        #objs = DBSession.query(self.__entity__).filter_by(idFase=1).all()

        if len(kw) > 0:
            objs = DBSession.query(
                self.__entity__).filter_by(iditem=kw['iid']).all()
        else:
            objs = DBSession.query(self.__entity__).all()

        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #45
0
class LineaBaseForm(TableForm):

    #action = 'CrearLineaBase'

    #genre_options = [x for x in (DBSession.query(Group).filter_by(group_name="lider").one()).users]
    item_options = [x for x in (DBSession.query(Item.id, Item.nombre))]

    fields = [
        TextField('nombre', label_text='Nombre'),
        TextField('idFase', label_text='idFase'),
        Spacer(),
        #TextField('idItem', label_text='idItem'),
        MultipleSelectField('idItem', options=item_options,
                            label_text='Items'),
        #SingleSelectField('idItem', options=item_options),
        Spacer(),
        TextField('estado', label_text='estado'),
        Spacer(),
        CalendarDatePicker('fechaCreacion', date_format='%d-%m-%y'),
        Spacer(),

        #SingleSelectField('liderProyecto', options=genre_options),
        #TextField('liderProyecto', label_text='Lider de Proyecto')
    ]
    submit_text = 'Crear LineaBase'
Beispiel #46
0
    def dibujar(self, *args):
        """Dibuja un grafo dirigido a partir de una matriz de relaciones
        y una matriz de nodos"""

        relaciones = args[0]
        nodosporfase = args[1]
        itemraiz = args[2]

        g = self.grafo_de_relaciones(relaciones)

        for fase in nodosporfase:
            subg = pydot.Subgraph('', rank='same')
            nombreFase = DBSession.query(
                Fase.nombre).filter_by(id=fase[0].idFase).first()
            subg.add_node(pydot.Node(nombreFase[0],label=nombreFase[0],\
                                    color='white'))

            for nodo in fase:
                if nodo == itemraiz:
                    subg.add_node(pydot.Node(nodo.id,\
                            label=str(nodo.nombre)+"\nPeso: "+str(nodo.complejidad),\
                            color='PaleGreen3', style='filled'))
                else:
                    subg.add_node(pydot.Node(nodo.id,\
                           label=str(nodo.nombre)+"\nPeso: "+str(nodo.complejidad),\
                           color='NavajoWhite1', style='filled'))

            g.add_subgraph(subg)

        g.write_png('sap/public/images/example2_graph.png')
Beispiel #47
0
    def calcularimpacto(self, **kw):
        """ids[] es un vector en el cual se guardaran los 'id' """
        ids = []
        itemraiz = DBSession.query(Item).filter_by(id=kw['iid']).first()
        ids.append(itemraiz)
        impacto = 0
        relacionesTotal = []

        self.recorrerArbolAtras(ids, itemraiz, relacionesTotal)
        self.recorrerArbolAdelante(ids, itemraiz, relacionesTotal)

        for item in ids:
            complejidad = int(item.complejidad)
            impacto = impacto + complejidad

        nodosporfase = []

        while len(ids) != 0:
            aux = []

            for item in ids:
                if ids[0].idFase == item.idFase:
                    aux.append(item)

            for item in aux:
                ids.remove(item)

            nodosporfase.append(aux)

        self.dibujar(relacionesTotal, nodosporfase, itemraiz)

        flash("El impacto de modificar el item \"" + itemraiz.nombre +
              "\" es: " + str(impacto))
        #redirect('/item/?fid='+str(fid[0]))
        return dict(link={'url': '/item/?fid=' + str(itemraiz.idFase)})
Beispiel #48
0
    def __actions__(self, obj):
        """Override this function to define how action links should be displayed for the given record."""
        primary_fields = self.__provider__.get_primary_fields(self.__entity__)
        pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))

        iteminstancia = DBSession.query(
            Item.id).filter_by(idTipoDeItem=pklist).all()
        cantidadinstancia = len(iteminstancia)
        #log.debug('iteminstancia: %s' %iteminstancia)

        if cantidadinstancia > 0:
            value = '<div><a class="edit_link" href="'+pklist+'/edit" style="text-decoration:none">edit</a>'\
            '<div><a class="loginlogout" href="/campos/?tid='+pklist+'">AtributosEspecificos</a></div><br/></div>'

        else:
            value = '<div><div><a class="edit_link" href="'+pklist+'/edit" style="text-decoration:none">edit</a>'\
            '</div><div>'\
            '<div><a class="loginlogout" href="/campos/?tid='+pklist+'">AtributosEspecificos</a></div><br/>'\
            '<form method="POST" action="'+pklist+'" class="button-to">'\
            '<input type="hidden" name="_method" value="DELETE" />'\
            '<input class="delete-button" onclick="return confirm(\'Are you sure?\');" value="delete" type="submit" '\
            'style="background-color: transparent; float:left; border:0; color: #286571; display: inline; margin: 0; padding: 0;"/>'\
            '</form>'\
            '</div></div>'

        return value
Beispiel #49
0
 def get_all(self, tid=None, *args, **kw):
     kw['tid'] = tid
     result = super(CamposController, self).get_all(*args, **kw)
     result['tid'] = tid
     fid = DBSession.query(TipoDeItem.idFase).filter_by(id=tid).first()
     result['fid'] = fid[0]
     return result
Beispiel #50
0
    def recorrerArbolAtras(self, *args):
        ids = args[0]
        itemraiz = args[1]
        """-------------Obtiene de la BD las relaciones actuales del nodo en cuestion---"""
        relaciones = DBSession.query(RelacionItem.idItem1,RelacionItem.idItem2).\
                        filter((RelacionItem.idItem1==itemraiz)).all()
        """------------------------------------------------------------------------"""

        for relacion in relaciones:
            itemrelacion = DBSession.query(Item).filter_by(
                id=relacion.idItem2).first()

            if itemrelacion.ultimaversion == 1:
                if (ids.count(itemrelacion.id) < 1):
                    ids.append(itemrelacion.id)
                self.recorrerArbolAtras(ids, itemrelacion.id)
Beispiel #51
0
    def new(self, tid=None, *args, **kw):
        """Display a page to show a new record."""

        fid = DBSession.query(TipoDeItem.idFase).filter_by(id=tid).first()
        """Extra los campos del tipo de Item elegido """
        """fields=[]
        campotipo= DBSession.query(Campos.tipoDeDato, Campos.nombre).filter_by(idTipoDeItem=13).all()
        for ct in campotipo:
            #log.debug(ct[1])
            campo1 = TextField(ct[1], label_text= ct[1])
            fields.append(campo1)
        
        item_add_form = ItemForm('create_item_form', fields)
        
        tmpl_context.widget = item_add_form
        """
        tmpl_context.widget = self.new_form
        #return dict(value=kw, model=self.model.__name__)

        #child_args=dict(child_args=form_fields_dict)

        return dict(value={
            'idTipoDeItem': tid,
            'idFase': fid,
        },
                    model=self.model.__name__)
Beispiel #52
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)

        if len(kw) > 0:
            objs = DBSession.query(self.__entity__).filter((
                Proyecto.liderProyecto == request.identity['repoze.who.userid']
            ) & (Proyecto.nombre.ilike('%' + str(kw['buscar']) + '%'))).all()
        else:
            objs = DBSession.query(self.__entity__).filter_by(
                liderProyecto=request.identity['repoze.who.userid']).all()

        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #53
0
    def _do_get_provider_count_and_objs(self, **kw):
        limit = kw.get('limit', None)
        offset = kw.get('offset', None)
        order_by = kw.get('order_by', None)
        desc = kw.get('desc', False)

        if len(kw) > 0:
            """Filtra para que liste solo las lineas bases que pertenece a la fase elegida """
            objs = DBSession.query(
                self.__entity__).filter_by(idFase=kw['fid']).all()

        else:
            objs = DBSession.query(self.__entity__).all()

        count = len(objs)
        self.__count__ = count
        return count, objs
Beispiel #54
0
 def new(self, *args, **kw):
     """Display a page to show a new record."""
     tmpl_context.widget = self.new_form 
     
     lideres = [x for x in (DBSession.query(Group).filter_by(group_name="lider").one()).users]
     
     
     
     return dict(value=kw, model=self.model.__name__, lider_options=lideres)
Beispiel #55
0
 def _do_get_provider_count_and_objs(self ,**kw):
     limit = kw.get('limit', None)
     offset = kw.get('offset', None)
     order_by = kw.get('order_by', None)
     desc = kw.get('desc', False)
     
     
     if len(kw) > 0:
         if len(kw) > 1:
             objs = DBSession.query(self.__entity__).filter((Fase.idproyec==kw['pid']) & (Fase.nombre.ilike('%'+str(kw['buscar'])+'%'))).all()
         else:
             objs = DBSession.query(self.__entity__).filter_by(idproyec=kw['pid']).all()
     else:
         #objs = DBSession.query(self.__entity__).filter_by(idproyec=kw[result['pid']]).all()
         objs = DBSession.query(self.__entity__).all()
     count = len(objs)
     self.__count__ = count
     return count, objs    
Beispiel #56
0
    def post_delete(self, *args, **kw):
        """This is the code that actually deletes the record"""
        pks = self.provider.get_primary_fields(self.model)
        d = {}
        for i, arg in enumerate(args):
            d[pks[i]] = arg
        pid = DBSession.query(Fase.idproyec).filter_by(id=d[pks[i]]).first()

        self.provider.delete(self.model, d)

        redirect('./?pid=' + str(pid[0]))