Beispiel #1
0
 def _my_update_params(self, d, nullable=False):
     options = []
     
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     id_fase = UrlParser.parse_id(request.url, "fases")
     if not id_proyecto:
         id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
         if not id_proyecto:
             id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase_ti")
             id_fase = UrlParser.parse_id(request.url, "fases_ti")
         
     if (self.accion == "new"):
         if id_fase:
             tipos = Fase.por_id(id_fase).tipos_de_item
             
         #elif (id_proyecto):
         #    tipos = Proyecto.por_id(id_proyecto).tipos_de_item
             
         for ti in tipos:
             options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, 
                                                           ti.codigo)))
     if (self.accion == "edit"):
         id_tipo = UrlParser.parse_id(request.url, "tipositems")
         ti = TipoItem.por_id(id_tipo)
         padre = TipoItem.por_id(ti.id_padre)
         if padre:
             options.append((ti.id_padre, '%s (%s)' % (padre.nombre, 
                                                       padre.codigo)))
         else:
             options.append((ti.id_padre, 'Tipo base'))
     d['options'] = options
     return d
Beispiel #2
0
    def _do_get_provider_count_and_objs(self, id_tipo_item=None, **kw):
        """
        Se muestra la lista de atributos del tipo de ítem 
        si se tiene un permiso necesario.
        """
        if AlgunPermiso(tipo="Tipo",
                        id_tipo_item=id_tipo_item).is_met(request.environ):
            count, lista = super(AtributosPorTipoItemTableFiller,
                                 self)._do_get_provider_count_and_objs(**kw)

            id_tipo = UrlParser.parse_id(request.url, "tipositems")
            ti = TipoItem.por_id(id_tipo)
            pks = []
            actual = ti
            while actual:
                for attr in actual.atributos:
                    pks.append(attr.id_atributos_por_tipo_item)
                actual = TipoItem.por_id(actual.id_padre)

            filtrados = []
            for attr in lista:
                if attr.id_atributos_por_tipo_item in pks:
                    filtrados.append(attr)
            return len(filtrados), filtrados

            #query = DBSession.query(AtributosPorTipoItem) \
            #                 .filter(AtributosPorTipoItem \
            #                         .id_atributos_por_tipo_item.in_(pks))
            #return query.count(), query.all()

        return 0, []
Beispiel #3
0
    def _do_get_provider_count_and_objs(self, id_tipo_item=None,**kw):
        """
        Se muestra la lista de atributos del tipo de ítem 
        si se tiene un permiso necesario.
        """
        if AlgunPermiso(tipo="Tipo", id_tipo_item=id_tipo_item).is_met(request.environ):
            count, lista = super(AtributosPorTipoItemTableFiller, 
                            self)._do_get_provider_count_and_objs(**kw)
                                 
            id_tipo = UrlParser.parse_id(request.url, "tipositems")
            ti = TipoItem.por_id(id_tipo)
            pks = []
            actual = ti
            while actual:
                for attr in actual.atributos:
                    pks.append(attr.id_atributos_por_tipo_item)
                actual = TipoItem.por_id(actual.id_padre)
            
            filtrados = []
            for attr in lista:
                if attr.id_atributos_por_tipo_item in pks:
                    filtrados.append(attr)
            return len(filtrados), filtrados
            
            #query = DBSession.query(AtributosPorTipoItem) \
            #                 .filter(AtributosPorTipoItem \
            #                         .id_atributos_por_tipo_item.in_(pks))
            #return query.count(), query.all()

        return 0, []
Beispiel #4
0
    def evaluate(self, environ, credentials):
        if is_anonymous().is_met(environ):
            self.unmet()
        nombre_usuario = credentials['repoze.what.userid']
        usuario = Usuario.by_user_name(nombre_usuario)

        if self.id_usuario:
            usuario = Usuario.por_id(self.id_usuario)
        
            
        if (self.id_tipo_item):
            #recuperar id  de fase y proyecto
            ti = TipoItem.por_id(self.id_tipo_item)
            if (not self.id_fase):
                self.id_fase = ti.id_fase
            if (not self.id_proyecto):
                self.id_proyecto = ti.id_proyecto
        
        elif (self.id_fase):
            fase = Fase.por_id(self.id_fase)
            if (not self.id_proyecto):
                self.id_proyecto = fase.id_proyecto
                    
                             
        for r in usuario.roles:
            tiene = False
            for p in r.permisos:
                if p.nombre_permiso == self.nombre_permiso:
                    tiene = True
                    
            if not tiene: 
                continue
            
            if r.es_rol_sistema():
                return
            
            if self.id_proyecto == r.id_proyecto:
                if r.tipo == u"Proyecto":
                    return
            
            if self.id_fase == r.id_fase:
                if r.tipo == u"Fase":
                    return
                
            ti = TipoItem.por_id(self.id_tipo_item)
            if ti and ti.es_o_es_hijo(r.id_tipo_item):
                return
        
        self.unmet(self.message % self.nombre_permiso)
Beispiel #5
0
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """

        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        puede_crear = False
        tipo = TipoItem.por_id(id_tipo_item)
        titulo = self.title % tipo.nombre
        atributos = self.table_filler.get_value(id_tipo_item=id_tipo_item,
                                                **kw)
        tmpl_context.widget = self.table
        url_action = self.action
        atras = "../../"

        return dict(lista_elementos=atributos,
                    page=titulo,
                    titulo=titulo,
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    comboboxes=self.comboboxes,
                    url_action=url_action,
                    puede_crear=puede_crear,
                    atras=atras)
Beispiel #6
0
    def __init__(self, **kw):
        """
        Método inicializador
        
        @param kw: Parametros para inicializar
        @keyword tipo: El tipo de permiso (Rol, Usuario, Proyecto, Fase, Tipo Ítem).
        """
        self.id_proyecto = 0
        self.id_fase = 0
        self.id_tipo_item = 0
        self.id_usuario = 0

        self.tipo = unicode(kw["tipo"])
        del kw["tipo"]

        if (not kw.has_key('id_proyecto')):
            if (kw.has_key('id_fase')):
                self.id_fase = int(kw['id_fase'])
                self.id_proyecto = Fase.por_id(self.id_fase).id_proyecto
                del kw['id_fase']
            if (kw.has_key('id_tipo_item')):
                self.id_tipo_item = int(kw['id_tipo_item'])
                ti = TipoItem.por_id(self.id_tipo_item)
                self.id_fase = ti.id_fase
                self.id_proyecto = ti.id_proyecto
                del kw['id_tipo_item']
        else:
            self.id_proyecto = int(kw['id_proyecto'])
            del kw['id_proyecto']

        if kw.has_key("id_usuario"):
            self.id_usuario = int(kw["id_usuario"])
            del kw["id_usuario"]

        super(AlgunPermiso, self).__init__(**kw)
Beispiel #7
0
 def get_all(self, *args, **kw):
     """ 
     Retorna todos los registros
     Retorna una página HTML si no se especifica JSON
     """
     
     id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
     puede_crear = PoseePermiso('redefinir tipo item',
                                id_tipo_item=id_tipo_item).is_met(request.environ)
     tipo = TipoItem.por_id(id_tipo_item)
     titulo = self.title % tipo.nombre
     atributos = self.table_filler.get_value(id_tipo_item=id_tipo_item, **kw)
     tmpl_context.widget = self.table
     url_action = self.action
     atras = "../"
     
     return dict(lista_elementos=atributos,
                 page=titulo, 
                 titulo=titulo, 
                 modelo=self.model.__name__, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 comboboxes=self.comboboxes,
                 url_action=url_action,
                 puede_crear=puede_crear,
                 atras=atras
                 )
Beispiel #8
0
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        tipo = TipoItem.por_id(id_tipo_item)

        #titulo = u"Miembros del Tipo de Item: %s" % tipo.nombre
        titulo = "Lista de Usuarios"
        puede_remover = PoseePermiso("asignar-desasignar rol",
                                     id_tipo_item=id_tipo_item).is_met(
                                         request.environ)

        if request.response_type == 'application/json':
            return self.table_filler.get_value(id_tipo_item=id_tipo_item, **kw)
        if not getattr(self.table.__class__, '__retrieves_own_value__', False):
            miembros = self.table_filler.get_value(id_tipo_item=id_tipo_item,
                                                   **kw)
        else:
            miembros = []

        tmpl_context.widget = self.table

        #atras = "/proyectos/%d/" % id_proyecto
        atras = "../"
        return dict(lista_elementos=miembros,
                    page=titulo,
                    titulo=titulo,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=self.action,
                    atras=atras,
                    puede_remover=puede_remover)
Beispiel #9
0
    def post_buscar(self, *args, **kw):
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        tipo = TipoItem.por_id(id_tipo_item)

        #titulo = u"Miembros del Tipo de Ítem: %s" % tipo.nombre
        titulo = "Lista de Usuarios"
        puede_remover = PoseePermiso("asignar-desasignar rol",
                                     id_tipo_item=id_tipo_item).is_met(
                                         request.environ)
        tmpl_context.widget = miembros_tipo_table
        buscar_table_filler = MiembrosTipoTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        usuarios = buscar_table_filler.get_value(id_tipo_item=id_tipo_item,
                                                 **kw)

        #atras = "/proyectos/%d/" % id_proyecto
        atras = "../"
        return dict(lista_elementos=usuarios,
                    page=titulo,
                    titulo=titulo,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action="../",
                    atras=atras,
                    puede_remover=puede_remover)
Beispiel #10
0
 def evaluate(self, environ, credentials):
     if is_anonymous().is_met(environ): 
         self.unmet()
     nombre_usuario = credentials["repoze.what.userid"]
     usuario = Usuario.by_user_name(nombre_usuario)
     
     if self.id_usuario:
         usuario = Usuario.por_id(self.id_usuario)
     
     for r in usuario.roles:
         for p in r.permisos:
             if p.nombre_permiso.find(u"miembro") >= 0:
                 if self.id_proyecto:
                     if r.tipo == "Proyecto" and \
                        r.id_proyecto == self.id_proyecto:
                         return
                 elif self.id_fase:
                     if r.tipo == "Fase" and \
                        r.id_fase == self.id_fase:
                         return
                 else:
                     if r.tipo.find("Tipo") >= 0:
                         ti = TipoItem.por_id(self.id_tipo_item)
                         if ti and ti.es_o_es_hijo(r.id_tipo_item):
                             return
                     #if (r.tipo.find("Tipo") >= 0 and \
                     #    self.id_tipo_item.es_o_es_hijo(r.id_tipo_item)):
                     #    r.id_tipo_item == self.id_tipo_item:
                     #    return
     self.unmet(self.message)
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """

        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        tipo = TipoItem.por_id(id_tipo_item)
        titulo = "Lista de Usuarios"

        puede_incorporar = PoseePermiso("asignar-desasignar rol", 
                                        id_tipo_item=id_tipo_item).is_met(request.environ)

        if request.response_type == 'application/json':
            return self.table_filler.get_value(id_tipo_item=id_tipo_item,**kw)
        if not getattr(self.table.__class__, '__retrieves_own_value__', False):
            nomiembros = self.table_filler.get_value(id_tipo_item=id_tipo_item,**kw)
        else:
            nomiembros = []
            
        tmpl_context.widget = self.table
        atras = "../"
        return dict(lista_elementos=nomiembros, 
                    page=titulo, 
                    titulo=titulo, 
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=self.action, 
                    atras=atras,
                    puede_incorporar=puede_incorporar)
Beispiel #12
0
    def __init__(self, nombre_permiso, **kw):
        """
        Método inicializador.
        
        @param nombre_permiso: el nombre del permiso a evaluar
        @type nombre_permiso: C{unicode}
        """
        self.nombre_permiso = unicode(nombre_permiso)
        self.id_proyecto = 0
        self.id_fase = 0
        self.id_tipo_item = 0
        self.id_usuario = 0
        
        if not kw.has_key('id_proyecto'):
            if kw.has_key('id_fase'):
                self.id_fase = int(kw['id_fase'])
                self.id_proyecto = Fase.por_id(self.id_fase).id_proyecto
                del kw['id_fase']
            if kw.has_key('id_tipo_item'):
                self.id_tipo_item = int(kw['id_tipo_item'])
                ti = TipoItem.por_id(self.id_tipo_item)
                self.id_fase = ti.id_fase
                self.id_proyecto = ti.id_proyecto
                del kw['id_tipo_item']
        else:
            self.id_proyecto = int(kw['id_proyecto'])
            del kw['id_proyecto']        

        if kw.has_key("id_usuario"):
            self.id_usuario = int(kw["id_usuario"])
            del kw["id_usuario"]
        
        super(PoseePermiso, self).__init__(**kw)
 def post_buscar(self, *args, **kw):
     """ 
     Retorna todos los registros
     Retorna una página HTML si no se especifica JSON
     """
     
     id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
     puede_crear = False
     tipo = TipoItem.por_id(id_tipo_item)
     titulo = self.title % tipo.nombre
     filler = AtributosPorTipoItemTableFiller(DBSession)
     filler.filtros = kw
     atributos = filler.get_value(id_tipo_item=id_tipo_item, **kw)
     tmpl_context.widget = self.table
     url_action = self.action
     atras = "../"
     
     return dict(lista_elementos=atributos,
                 page=titulo, 
                 titulo=titulo, 
                 modelo=self.model.__name__, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 comboboxes=self.comboboxes,
                 url_action="../",
                 puede_crear=puede_crear,
                 atras=atras
                 )
Beispiel #14
0
    def post_buscar(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """

        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        puede_crear = PoseePermiso('redefinir tipo item',
                                   id_tipo_item=id_tipo_item).is_met(
                                       request.environ)
        tipo = TipoItem.por_id(id_tipo_item)
        titulo = self.title % tipo.nombre
        filler = AtributosPorTipoItemTableFiller(DBSession)
        filler.filtros = kw
        atributos = filler.get_value(id_tipo_item=id_tipo_item, **kw)
        tmpl_context.widget = self.table
        url_action = self.action
        atras = "../"

        return dict(lista_elementos=atributos,
                    page=titulo,
                    titulo=titulo,
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    comboboxes=self.comboboxes,
                    url_action="../",
                    puede_crear=puede_crear,
                    atras=atras)
Beispiel #15
0
    def post_buscar(self, *args, **kw):
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        id_usuario = UrlParser.parse_id(request.url, "miembrostipo")
        usuario = Usuario.por_id(id_usuario)
        tipo = TipoItem.por_id(id_tipo_item)
        puede_asignar = PoseePermiso("asignar-desasignar rol",
                                     id_tipo_item=id_tipo_item).is_met(
                                         request.environ)
        titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario
        tmpl_context.widget = self.table
        buscar_table_filler = MiembrosTipoRolesTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        roles = buscar_table_filler.get_value(usuario=usuario,
                                              asignados=False,
                                              id_tipo_item=id_tipo_item,
                                              **kw)

        atras = "../../"
        return dict(lista_elementos=roles,
                    page=titulo,
                    titulo=titulo,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    comboboxes=self.comboboxes,
                    url_action="../",
                    atras=atras,
                    puede_asignar=puede_asignar)
Beispiel #16
0
    def __init__(self, nombre_permiso, **kw):
        """
        Método inicializador.
        
        @param nombre_permiso: el nombre del permiso a evaluar
        @type nombre_permiso: C{unicode}
        """
        self.nombre_permiso = unicode(nombre_permiso)
        self.id_proyecto = 0
        self.id_fase = 0
        self.id_tipo_item = 0
        self.id_usuario = 0

        if not kw.has_key('id_proyecto'):
            if kw.has_key('id_fase'):
                self.id_fase = int(kw['id_fase'])
                self.id_proyecto = Fase.por_id(self.id_fase).id_proyecto
                del kw['id_fase']
            if kw.has_key('id_tipo_item'):
                self.id_tipo_item = int(kw['id_tipo_item'])
                ti = TipoItem.por_id(self.id_tipo_item)
                self.id_fase = ti.id_fase
                self.id_proyecto = ti.id_proyecto
                del kw['id_tipo_item']
        else:
            self.id_proyecto = int(kw['id_proyecto'])
            del kw['id_proyecto']

        if kw.has_key("id_usuario"):
            self.id_usuario = int(kw["id_usuario"])
            del kw["id_usuario"]

        super(PoseePermiso, self).__init__(**kw)
Beispiel #17
0
    def evaluate(self, environ, credentials):
        if is_anonymous().is_met(environ):
            self.unmet()
        nombre_usuario = credentials["repoze.what.userid"]
        usuario = Usuario.by_user_name(nombre_usuario)

        if self.id_usuario:
            usuario = Usuario.por_id(self.id_usuario)

        for r in usuario.roles:
            for p in r.permisos:
                if p.nombre_permiso.find(u"miembro") >= 0:
                    if self.id_proyecto:
                        if r.tipo == "Proyecto" and \
                           r.id_proyecto == self.id_proyecto:
                            return
                    elif self.id_fase:
                        if r.tipo == "Fase" and \
                           r.id_fase == self.id_fase:
                            return
                    else:
                        if r.tipo.find("Tipo") >= 0:
                            ti = TipoItem.por_id(self.id_tipo_item)
                            if ti and ti.es_o_es_hijo(r.id_tipo_item):
                                return
                        #if (r.tipo.find("Tipo") >= 0 and \
                        #    self.id_tipo_item.es_o_es_hijo(r.id_tipo_item)):
                        #    r.id_tipo_item == self.id_tipo_item:
                        #    return
        self.unmet(self.message)
Beispiel #18
0
 def post_delete(self, *args, **kw):
     """This is the code that actually deletes the record"""
     atras = './'
     id_tipo = int(args[0])
     tipo = TipoItem.por_id(id_tipo)
     DBSession.delete(tipo)
     redirect(atras)
Beispiel #19
0
    def evaluate(self, environ, credentials):
        if is_anonymous().is_met(environ):
            self.unmet()
        nombre_usuario = credentials['repoze.what.userid']
        usuario = Usuario.by_user_name(nombre_usuario)

        if self.id_usuario:
            usuario = Usuario.por_id(self.id_usuario)

        if (self.id_tipo_item):
            #recuperar id  de fase y proyecto
            ti = TipoItem.por_id(self.id_tipo_item)
            if (not self.id_fase):
                self.id_fase = ti.id_fase
            if (not self.id_proyecto):
                self.id_proyecto = ti.id_proyecto

        elif (self.id_fase):
            fase = Fase.por_id(self.id_fase)
            if (not self.id_proyecto):
                self.id_proyecto = fase.id_proyecto

        for r in usuario.roles:
            tiene = False
            for p in r.permisos:
                if p.nombre_permiso == self.nombre_permiso:
                    tiene = True

            if not tiene:
                continue

            if r.es_rol_sistema():
                return

            if self.id_proyecto == r.id_proyecto:
                if r.tipo == u"Proyecto":
                    return

            if self.id_fase == r.id_fase:
                if r.tipo == u"Fase":
                    return

            ti = TipoItem.por_id(self.id_tipo_item)
            if ti and ti.es_o_es_hijo(r.id_tipo_item):
                return

        self.unmet(self.message % self.nombre_permiso)
Beispiel #20
0
    def _do_get_provider_count_and_objs(self, id_tipo_item=None, **kw):
        """
        Se muestra la lista de atributos del tipo de ítem
        """
        count, lista = super(AtributosPorTipoItemTableFiller,
                             self)._do_get_provider_count_and_objs(**kw)

        id_tipo = UrlParser.parse_id(request.url, "tipositems")
        ti = TipoItem.por_id(id_tipo)
        pks = []
        actual = ti
        while actual:
            for attr in actual.atributos:
                pks.append(attr.id_atributos_por_tipo_item)
            actual = TipoItem.por_id(actual.id_padre)

        filtrados = []
        for attr in lista:
            if attr.id_atributos_por_tipo_item in pks:
                filtrados.append(attr)
        return len(filtrados), filtrados
 def _do_get_provider_count_and_objs(self, id_tipo_item=None,**kw):
     """
     Se muestra la lista de atributos del tipo de ítem
     """
     count, lista = super(AtributosPorTipoItemTableFiller, 
                          self)._do_get_provider_count_and_objs(**kw)
                          
     id_tipo = UrlParser.parse_id(request.url, "tipositems")
     ti = TipoItem.por_id(id_tipo)
     pks = []
     actual = ti
     while actual:
         for attr in actual.atributos:
             pks.append(attr.id_atributos_por_tipo_item)
         actual = TipoItem.por_id(actual.id_padre)
         
     filtrados = []
     for attr in lista:
         if attr.id_atributos_por_tipo_item in pks:
             filtrados.append(attr)
     return len(filtrados), filtrados
Beispiel #22
0
    def put(self, *args, **kw):
        """update a record"""
        url_action = url_action = "../../"
        pp = PoseePermiso('redefinir tipo item',
                          id_tipo_item=kw["id_tipo_item"])
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect(url_action)

        tipo = TipoItem.por_id(int(kw["id_tipo_item"]))  
        tipo.descripcion = unicode(kw["descripcion"])
        flash("Actualizacion exitosa")
        redirect("./")
Beispiel #23
0
    def remover_seleccionados(self, *args, **kw):
        """ 
        Desasigna miembros de la fase.
        """
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")

        if kw:
            pks = []
            for k, pk in kw.items():
                if not k.isalnum():
                    continue
                pks.append(int(pk))

            transaction.begin()
            usuarios = DBSession.query(Usuario) \
                                .filter(Usuario.id_usuario.in_(pks)).all()

            ti = TipoItem.por_id(id_tipo_item)

            nr = u"Lider de Proyecto"
            rlp = DBSession.query(Rol) \
                          .filter(and_(Rol.tipo == u"Proyecto",
                                       Rol.id_proyecto == ti.id_proyecto,
                                       Rol.nombre_rol == nr)).first()

            warning = False
            for u in usuarios:
                if rlp in u.roles and len(rlp.usuarios) == 1:
                    msg = "No puedes eliminar al usuario {nu} porque "
                    msg += "es el {nr}"
                    flash(msg.format(nu=u.nombre_usuario, nr=nr), "warning")
                    warning = True
                    continue

                c = 0
                while c < len(u.roles):
                    if u.roles[c].id_tipo_item == id_tipo_item and \
                       u.roles[c].tipo == u"Tipo Ítem":
                        del u.roles[c]
                    else:
                        c += 1

            transaction.commit()
            if not warning:
                flash("Usuarios removidos correctamente")
        else:
            flash("Seleccione por lo menos un usuario", "warning")
        return "../"
Beispiel #24
0
    def _do_get_provider_count_and_objs(self, id_tipo_item=None, **kw):
        """
        Se muestran los usuarios que no tienen por lo menos un rol de tipo
        Tipo Item para el tipo de item en cuestión.
        """
        count, lista = super(NoMiembrosTipoTableFiller,
                             self)._do_get_provider_count_and_objs(**kw)

        filtrados = []
        tipo = TipoItem.por_id(id_tipo_item)
        apti = AlgunPermiso(tipo="Tipo", id_tipo_item=tipo.id_tipo_item)
        for u in lista:
            apti.id_usuario = u.id_usuario
            if not apti.is_met(request.environ):
                filtrados.append(u)
        return len(filtrados), filtrados
 def _do_get_provider_count_and_objs(self, id_tipo_item=None, **kw):
     """
     Se muestran los usuarios que no tienen por lo menos un rol de tipo
     Tipo Item para el tipo de item en cuestión.
     """
     count, lista = super(NoMiembrosTipoTableFiller,
                      self)._do_get_provider_count_and_objs(**kw)
     
     filtrados = []
     tipo = TipoItem.por_id(id_tipo_item)
     apti = AlgunPermiso(tipo="Tipo", id_tipo_item=tipo.id_tipo_item)
     for u in lista:
         apti.id_usuario = u.id_usuario
         if not apti.is_met(request.environ):
             filtrados.append(u)
     return len(filtrados), filtrados
    def post_buscar(self, *args, **kw):
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        tipo = TipoItem.por_id(id_tipo_item)
        titulo = "Lista de Usuarios"

        puede_incorporar = PoseePermiso("asignar-desasignar rol", 
                                        id_tipo_item=id_tipo_item).is_met(request.environ)
        tmpl_context.widget = no_miembros_tipo_table
        buscar_table_filler = NoMiembrosTipoTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        usuarios = buscar_table_filler.get_value(id_tipo_item=id_tipo_item,**kw)
        atras = "../"
        return dict(lista_elementos=usuarios, 
                    page=titulo, titulo=titulo, 
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action="../", 
                    atras=atras,
                    puede_incorporar=puede_incorporar)
Beispiel #27
0
    def post(self, *args, **kw):
        """create a new record"""
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        url_action = "./"

        pp = PoseePermiso('redefinir tipo item',id_tipo_item=id_tipo_item)
                          
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect(url_action)
            
        if kw.has_key("sprox_id"):
            del kw["sprox_id"]

        tipo = TipoItem.por_id(id_tipo_item)
        try:
            tipo.agregar_atributo(**kw)
        except NombreDeAtributoError, err:
            flash(unicode(err), "warning")
Beispiel #28
0
    def post(self, *args, **kw):
        """create a new record"""
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        url_action = "./"

        pp = PoseePermiso('redefinir tipo item', id_tipo_item=id_tipo_item)

        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect(url_action)

        if kw.has_key("sprox_id"):
            del kw["sprox_id"]

        tipo = TipoItem.por_id(id_tipo_item)
        try:
            tipo.agregar_atributo(**kw)
        except NombreDeAtributoError, err:
            flash(unicode(err), "warning")
Beispiel #29
0
    def _do_get_provider_count_and_objs(self, id_proyecto=None, id_tipo=None, **kw):
        """
        Se muestra la lista de tipos de ítem para el proyecto en 
        cuestión
        """
        if not id_proyecto: 
            return 0, []
        
        if id_tipo:
            ti = TipoItem.por_id(id_tipo)
            return 1, [ti]
            
        count, lista = super(ProyectoTipoItemTableFiller, self).\
                            _do_get_provider_count_and_objs(**kw)
        filtrados = []                    
        for ti in lista:
            if ti.id_proyecto == id_proyecto:
                filtrados.append(ti)

        return len(filtrados), filtrados        
Beispiel #30
0
 def _do_get_provider_count_and_objs(self, id_fase=None, id_tipo=None, **kw):
     """
     Se muestra la lista de tipos de item para la fase en cuestión
     """
     if id_tipo:
         ti = TipoItem.por_id(id_tipo)
         return 1, [ti]
         
     count, lista = super(TipoItemTableFiller, self).\
                         _do_get_provider_count_and_objs(**kw)
     filtrados = []                    
     
     if id_fase:
         id_fase = int(id_fase)
         for t in lista:
             if t.id_fase == id_fase:
                 if AlgunPermiso(tipo='Tipo', 
                    id_tipo_item=t.id_tipo_item).is_met(request.environ):
                     filtrados.append(t)
             
     return len(filtrados), filtrados        
Beispiel #31
0
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        id_usuario = UrlParser.parse_id(request.url, "miembrostipo")
        usuario = Usuario.por_id(id_usuario)
        tipo = TipoItem.por_id(id_tipo_item)
        puede_asignar = PoseePermiso("asignar-desasignar rol",
                                     id_tipo_item=id_tipo_item).is_met(
                                         request.environ)

        titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario

        if request.response_type == 'application/json':
            return self.table_filler.get_value(usuario=usuario,
                                               asignados=False,
                                               id_tipo_item=id_tipo_item,
                                               **kw)
        if not getattr(self.table.__class__, '__retrieves_own_value__', False):
            roles = self.table_filler.get_value(usuario=usuario,
                                                asignados=False,
                                                id_tipo_item=id_tipo_item,
                                                **kw)
        else:
            roles = []

        tmpl_context.widget = self.table
        atras = "../../"
        return dict(lista_elementos=roles,
                    page=titulo,
                    titulo=titulo,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    comboboxes=self.comboboxes,
                    url_action=self.action,
                    atras=atras,
                    puede_asignar=puede_asignar)
Beispiel #32
0
    def _do_get_provider_count_and_objs(self,
                                        id_proyecto=None,
                                        id_tipo=None,
                                        **kw):
        """
        Se muestra la lista de tipos de ítem para el proyecto en 
        cuestión
        """
        if not id_proyecto:
            return 0, []

        if id_tipo:
            ti = TipoItem.por_id(id_tipo)
            return 1, [ti]

        count, lista = super(ProyectoTipoItemTableFiller, self).\
                            _do_get_provider_count_and_objs(**kw)
        filtrados = []
        for ti in lista:
            if ti.id_proyecto == id_proyecto:
                filtrados.append(ti)

        return len(filtrados), filtrados
 def post_buscar(self, *args, **kw):
     id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
     id_usuario = UrlParser.parse_id(request.url, "nomiembrostipo")
     usuario = Usuario.por_id(id_usuario)
     tipo = TipoItem.por_id(id_tipo_item)
     puede_desasignar = PoseePermiso("asignar-desasignar rol", 
                                     id_tipo_item=id_tipo_item).is_met(request.environ)
     titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario
     tmpl_context.widget = self.table
     buscar_table_filler = MiembrosTipoRolesTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     roles = buscar_table_filler.get_value(usuario=usuario, asignados=False,
                                            id_tipo_item=id_tipo_item, **kw)
     
     atras = "../../"
     return dict(lista_elementos=roles, 
                 page=titulo, 
                 titulo=titulo, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 comboboxes=self.comboboxes,
                 url_action="../", 
                 atras=atras,
                 puede_asignar=puede_asignar)
Beispiel #34
0
 def __init__(self, **kw):
     """
     Método inicializador
     
     @param kw: Parametros para inicializar
     @keyword tipo: El tipo de permiso (Rol, Usuario, Proyecto, Fase, Tipo Ítem).
     """
     self.id_proyecto = 0
     self.id_fase = 0
     self.id_tipo_item = 0
     self.id_usuario = 0
     
     self.tipo = unicode(kw["tipo"])
     del kw["tipo"]
     
     if (not kw.has_key('id_proyecto')):
         if (kw.has_key('id_fase')):
             self.id_fase = int(kw['id_fase'])
             self.id_proyecto = Fase.por_id(self.id_fase).id_proyecto
             del kw['id_fase']
         if (kw.has_key('id_tipo_item')):
             self.id_tipo_item = int(kw['id_tipo_item'])
             ti = TipoItem.por_id(self.id_tipo_item)
             self.id_fase = ti.id_fase
             self.id_proyecto = ti.id_proyecto
             del kw['id_tipo_item']
     else:
         self.id_proyecto = int(kw['id_proyecto'])
         del kw['id_proyecto']
     
     if kw.has_key("id_usuario"):
         self.id_usuario = int(kw["id_usuario"])
         del kw["id_usuario"]
     
         
     super(AlgunPermiso, self).__init__(**kw)
Beispiel #35
0
 def id_padre(self, obj, **kw):
     ti = TipoItem.por_id(obj.id_padre)
     if ti:
         return ti.nombre
     return "No Tiene"
Beispiel #36
0
 def tipo(self, obj, **kw):
     item = Item.por_id(obj.id_item_actual)
     ti = TipoItem.por_id(item.id_tipo_item)
     return ti.codigo
Beispiel #37
0
 def codigo_tipo(self, obj, **kw):
     ti = TipoItem.por_id(obj.id_tipo_item)
     return ti.codigo
Beispiel #38
0
 def id_padre(self, obj, **kw):
     ti = TipoItem.por_id(obj.id_padre)
     if ti:
         return ti.nombre
     return "No Tiene"
Beispiel #39
0
 def codigo_tipo(self, obj, **kw):
     ti = TipoItem.por_id(obj.id_tipo_item)
     return ti.codigo
Beispiel #40
0
 def evaluate(self, environ, credentials):
     if is_anonymous().is_met(environ): 
         self.unmet()
     nombre_usuario = credentials["repoze.what.userid"]
     usuario = Usuario.by_user_name(nombre_usuario)
     
     if self.id_usuario:
         usuario = Usuario.por_id(self.id_usuario)
     
     if (self.id_tipo_item):
         #recuperar id  de fase y proyecto
         ti = TipoItem.por_id(self.id_tipo_item)
         if (not self.id_fase):
             self.id_fase = ti.id_fase
         if (not self.id_proyecto):
             self.id_proyecto = ti.id_proyecto
     
     elif (self.id_fase):
         fase = Fase.por_id(self.id_fase)
         if (not self.id_proyecto):
             self.id_proyecto = fase.id_proyecto
                 
     for r in usuario.roles:
         
         if (r.tipo.find(u"Sistema") == 0):
             
             for p in r.permisos:
                 if (p.tipo.find(self.tipo) >= 0):
                     return
                 
         if (r.tipo.find(u"Proyecto") == 0):
             if (self.tipo == "Proyecto" and self.id_proyecto == r.id_proyecto):
                 return
             
             elif (self.tipo == "Fase" or self.tipo == "Tipo"):
                 algun = False
                 for p in r.permisos:
                     if (p.tipo.find(self.tipo) >= 0):
                         algun = True
                         break
                     
                 if (algun and self.id_proyecto == r.id_proyecto):
                     return
                 
                 elif (algun and (self.id_fase + self.id_proyecto +\
                                   self.id_tipo_item == 0)):
                     return
                  
         elif (r.tipo.find(u"Fase") == 0):
             if (self.tipo == "Fase"):
                 if (self.id_fase == r.id_fase):
                     return
                 
                 elif (not self.id_fase):
                     fase = Fase.por_id(r.id_fase)
                     if (self.id_proyecto == fase.id_proyecto):
                         return
                 
             elif (self.tipo == "Tipo"):
                 algun = False
                 for p in r.permisos:
                     if (p.tipo.find(self.tipo) >= 0):
                         algun = True
                         break
                     
                 if (algun and self.id_fase == r.id_fase):
                     return
                 
                 elif (algun and (self.id_fase + self.id_proyecto +\
                                   self.id_tipo_item == 0)):
                     return
                   
         elif (r.tipo.find(u"Tipo") == 0):
             if (self.tipo == "Tipo"):
                 if (self.id_tipo_item and ti.es_o_es_hijo(r.id_tipo_item)):
                     return
                 
                 ti = TipoItem.por_id(r.id_tipo_item)
                         
                 if (ti.id_fase == self.id_fase or ti.id_proyecto == self.id_proyecto):
                     return
         '''
         algun = False
         for p in r.permisos:
             if p.nombre_permiso.find(u"consultar") < 0 and \
                p.tipo.find(self.tipo) >= 0 and \
                p.nombre_permiso != "miembro":
                 algun = True
                 break
         if not algun:
             continue
         
         if (self.id_fase + self.id_proyecto + self.id_tipo_item == 0):
             return
         
         if (r.es_rol_sistema()):
             return
         
         if (self.id_proyecto == r.id_proyecto):
             if (r.tipo == u"Proyecto"):
                 return
             
         if (self.id_fase == r.id_fase):
             if (r.tipo == u"Fase"):
                 return
             
         ti = TipoItem.por_id(self.id_tipo_item)
         if (ti and ti.es_o_es_hijo(r.id_tipo_item)):
             return
         '''
     self.unmet(self.message)
Beispiel #41
0
    def evaluate(self, environ, credentials):
        if is_anonymous().is_met(environ):
            self.unmet()
        nombre_usuario = credentials["repoze.what.userid"]
        usuario = Usuario.by_user_name(nombre_usuario)

        if self.id_usuario:
            usuario = Usuario.por_id(self.id_usuario)

        if (self.id_tipo_item):
            #recuperar id  de fase y proyecto
            ti = TipoItem.por_id(self.id_tipo_item)
            if (not self.id_fase):
                self.id_fase = ti.id_fase
            if (not self.id_proyecto):
                self.id_proyecto = ti.id_proyecto

        elif (self.id_fase):
            fase = Fase.por_id(self.id_fase)
            if (not self.id_proyecto):
                self.id_proyecto = fase.id_proyecto

        for r in usuario.roles:

            if (r.tipo.find(u"Sistema") == 0):

                for p in r.permisos:
                    if (p.tipo.find(self.tipo) >= 0):
                        return

            if (r.tipo.find(u"Proyecto") == 0):
                if (self.tipo == "Proyecto"
                        and self.id_proyecto == r.id_proyecto):
                    return

                elif (self.tipo == "Fase" or self.tipo == "Tipo"):
                    algun = False
                    for p in r.permisos:
                        if (p.tipo.find(self.tipo) >= 0):
                            algun = True
                            break

                    if (algun and self.id_proyecto == r.id_proyecto):
                        return

                    elif (algun and (self.id_fase + self.id_proyecto +\
                                      self.id_tipo_item == 0)):
                        return

            elif (r.tipo.find(u"Fase") == 0):
                if (self.tipo == "Fase"):
                    if (self.id_fase == r.id_fase):
                        return

                    elif (not self.id_fase):
                        fase = Fase.por_id(r.id_fase)
                        if (self.id_proyecto == fase.id_proyecto):
                            return

                elif (self.tipo == "Tipo"):
                    algun = False
                    for p in r.permisos:
                        if (p.tipo.find(self.tipo) >= 0):
                            algun = True
                            break

                    if (algun and self.id_fase == r.id_fase):
                        return

                    elif (algun and (self.id_fase + self.id_proyecto +\
                                      self.id_tipo_item == 0)):
                        return

            elif (r.tipo.find(u"Tipo") == 0):
                if (self.tipo == "Tipo"):
                    if (self.id_tipo_item and ti.es_o_es_hijo(r.id_tipo_item)):
                        return

                    ti = TipoItem.por_id(r.id_tipo_item)

                    if (ti.id_fase == self.id_fase
                            or ti.id_proyecto == self.id_proyecto):
                        return
            '''
            algun = False
            for p in r.permisos:
                if p.nombre_permiso.find(u"consultar") < 0 and \
                   p.tipo.find(self.tipo) >= 0 and \
                   p.nombre_permiso != "miembro":
                    algun = True
                    break
            if not algun:
                continue
            
            if (self.id_fase + self.id_proyecto + self.id_tipo_item == 0):
                return
            
            if (r.es_rol_sistema()):
                return
            
            if (self.id_proyecto == r.id_proyecto):
                if (r.tipo == u"Proyecto"):
                    return
                
            if (self.id_fase == r.id_fase):
                if (r.tipo == u"Fase"):
                    return
                
            ti = TipoItem.por_id(self.id_tipo_item)
            if (ti and ti.es_o_es_hijo(r.id_tipo_item)):
                return
            '''
        self.unmet(self.message)