Exemplo n.º 1
0
 def estado(self, obj, **kw):
     id_item = UrlParser.parse_id(request.url, "items")
     id_version = UrlParser.parse_id(request.url, "versiones")
     if not id_version:
         item = Item.por_id(id_item)
         rti = DBSession.query(RelacionPorItem).\
                             filter(and_(RelacionPorItem.id_propiedad_item\
                             == item.id_propiedad_item,\
                             RelacionPorItem.id_relacion == obj.id_relacion))\
                             .first()
     else:
         p_item = PropiedadItem.por_id(id_version)
         rti = DBSession.query(RelacionPorItem).\
                             filter(and_(RelacionPorItem.id_propiedad_item\
                             == p_item.id_propiedad_item,\
                             RelacionPorItem.id_relacion == obj.id_relacion))\
                             .first()
         
     color = u"inherit;"
     estado = u"No"
     
     if(rti.revisar):
         color = u"#ff0000;"
         estado = u'Sí'
         
     value = '<div style="color:' + color + '">' + estado + '</div>'
     
     return value
Exemplo n.º 2
0
 def nuevo_rol_desde_plantilla(cls, plantilla=None, id_plantilla=None, id=None):
     """
     Crea un rol a partir de una plantilla
     
     @param plantilla: rol del tipo plantilla.
     @param id_plantilla: id del rol del tipo plantilla.
     @param id: identificador con el qué asociar al rol.
     """
     base_query = DBSession.query(Rol)
     if (id_plantilla):
         plantilla = base_query.filter(Rol.id_rol == int(id_plantilla)).first()
         
     rol = Rol()
     rol.nombre_rol = plantilla.nombre_rol
     rol.descripcion = plantilla.descripcion
     if (plantilla.tipo == u"Plantilla proyecto"):
         rol.tipo = u"Proyecto"
         rol.id_proyecto = id
     elif (plantilla.tipo == u"Plantilla fase"):
         rol.tipo = u"Fase"
         rol.id_fase = id
     elif (plantilla.tipo == u"Plantilla tipo ítem"):
         rol.tipo = u"Tipo de Ítem"
         rol.id_tipo_item = id
     
     for perm in plantilla.permisos:
         perm.roles.append(rol)
           
     DBSession.add(rol)
     DBSession.flush()
     rol.codigo = Rol.generar_codigo(rol)
     
     return rol
Exemplo n.º 3
0
 def desasignar_roles(self, *args, **kw):
     """ Desasigna los roles seleccionados a un usuario """
     if kw:
         pks = []
         for k, pk in kw.items():
             if not k.isalnum():
                 continue
             pks.append(int(pk))
         transaction.begin()
         id_user = UrlParser.parse_id(request.url, "miembrosfase")
         user = Usuario.por_id(id_user)
         c = 0
         while c < len(user.roles):
             r = user.roles[c]
             if r.id_rol in pks:
                 if r.nombre_rol == "Miembro de Fase":
                     msg = "No puedes eliminar el rol {nr}. Si deseas "
                     msg += "que el usuario deje de ser miembro, debes "
                     msg += "hacerlo en la pagina de Miembros de la Fase."
                     flash(msg.format(nr=r.nombre_rol), "warning")
                     DBSession.rollback()
                     return "./"
                 del user.roles[c]
             else:
                 c += 1
         transaction.commit()
         flash("Roles Desasignados correctamente")
     else:
         flash("Seleccione por lo menos un rol", "warning")
     return "./"
Exemplo n.º 4
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)
Exemplo n.º 5
0
 def desasignar_roles(self, *args, **kw):
     """ Desasigna los roles seleccionados a un usuario """
     if kw:
         pks = []
         for k, pk in kw.items():
             if not k.isalnum():
                 continue
             pks.append(int(pk))
         transaction.begin()
         id_user = UrlParser.parse_id(request.url, "miembrosfase")
         user = Usuario.por_id(id_user)
         c = 0
         while c < len(user.roles):
             r = user.roles[c]
             if r.id_rol in pks:
                 if r.nombre_rol == "Miembro de Fase":
                     msg = "No puedes eliminar el rol {nr}. Si deseas "
                     msg += "que el usuario deje de ser miembro, debes "
                     msg += "hacerlo en la pagina de Miembros de la Fase."
                     flash(msg.format(nr=r.nombre_rol), "warning")
                     DBSession.rollback()
                     return "./"
                 del user.roles[c]
             else:
                 c += 1
         transaction.commit()
         flash("Roles Desasignados correctamente")
     else:
         flash("Seleccione por lo menos un rol", "warning")
     return "./"
Exemplo n.º 6
0
    def estado(self, obj, **kw):
        id_item = UrlParser.parse_id(request.url, "items")
        id_version = UrlParser.parse_id(request.url, "versiones")
        if not id_version:
            item = Item.por_id(id_item)
            rti = DBSession.query(RelacionPorItem).\
                                filter(and_(RelacionPorItem.id_propiedad_item\
                                == item.id_propiedad_item,\
                                RelacionPorItem.id_relacion == obj.id_relacion))\
                                .first()
        else:
            p_item = PropiedadItem.por_id(id_version)
            rti = DBSession.query(RelacionPorItem).\
                                filter(and_(RelacionPorItem.id_propiedad_item\
                                == p_item.id_propiedad_item,\
                                RelacionPorItem.id_relacion == obj.id_relacion))\
                                .first()

        color = u"inherit;"
        estado = u"No"

        if (rti.revisar):
            color = u"#ff0000;"
            estado = u'Sí'

        value = '<div style="color:' + color + '">' + estado + '</div>'

        return value
Exemplo n.º 7
0
 def post_delete(self, *args, **kw):
     """This is the code that actually deletes the record"""
     id_atributo = int(args[0])
     transaction.begin()
     attr = AtributosPorTipoItem.por_id(id_atributo)
     DBSession.delete(attr)
     transaction.commit()
     flash("Atributo Eliminado")
     redirect("./")
Exemplo n.º 8
0
 def post_delete(self, *args, **kw):
     """This is the code that actually deletes the record"""
     id_atributo = int(args[0])
     transaction.begin()
     attr = AtributosPorTipoItem.por_id(id_atributo)
     DBSession.delete(attr)
     transaction.commit()
     flash("Atributo Eliminado")
     redirect("./")
Exemplo n.º 9
0
 def post(self, *args, **kw):
     if "sprox_id" in kw:
         del kw["sprox_id"]
     if "repita_password" in kw:
         del kw["repita_password"]
     if kw["nro_documento"]:
         kw["nro_documento"] = int(kw["nro_documento"])
         
     usuario = Usuario(**kw)
     DBSession.add(usuario)
     redirect("./")
Exemplo n.º 10
0
    def post_delete(self, id_proyecto):
        proy = Proyecto.por_id(int(id_proyecto))
        p_items = DBSession.query(PropiedadItem).filter(and_(PropiedadItem.id_item_actual ==\
                                                   Item.id_item, Item.id_fase == \
                                                   Fase.id_fase, Fase.id_proyecto ==
                                                   id_proyecto)).all()
        for pi in p_items:
            DBSession.delete(pi)

        DBSession.delete(proy)
        flash("Proyecto Eliminado")
        redirect("/proyectos/")
Exemplo n.º 11
0
 def post_delete(self, id_proyecto):
     proy = Proyecto.por_id(int(id_proyecto))
     p_items = DBSession.query(PropiedadItem).filter(and_(PropiedadItem.id_item_actual ==\
                                                Item.id_item, Item.id_fase == \
                                                Fase.id_fase, Fase.id_proyecto ==
                                                id_proyecto)).all()
     for pi in p_items:
         DBSession.delete(pi)
                                                
     DBSession.delete(proy)
     flash("Proyecto Eliminado")
     redirect("/proyectos/")
Exemplo n.º 12
0
    def remover_seleccionados(self, *args, **kw):
        """ 
        Desasigna miembros de la fase.
        """
        id_fase = UrlParser.parse_id(request.url, "fases")
        
        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()

            fase = Fase.por_id(id_fase)
            nr = u"Lider de Proyecto"
            rlp = DBSession.query(Rol) \
                          .filter(and_(Rol.tipo == u"Proyecto",
                                       Rol.id_proyecto == fase.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_fase == id_fase and \
                       u.roles[c].tipo == u"Fase":
                        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 "../"
Exemplo n.º 13
0
    def _my_update_params(self, d, nullable=False):
        options = []
        options.append((None, '-----------------'))

        #Solo tipos de otros proyectos
        
        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"):
            #de otros proyectos.
            if id_proyecto:
                tipos_items = DBSession.query(TipoItem) \
                                       .filter(TipoItem.id_proyecto != id_proyecto) \
                                       .all()
            
            for ti in tipos_items:
                options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, 
                                                              ti.codigo)))
            
            #importa de otras fases tambien
            if id_fase:
                fase = Fase.por_id(id_fase)
                id_proyecto = fase.id_proyecto
                tipos_items_fase = DBSession.query(TipoItem) \
                            .filter(and_(TipoItem.id_proyecto == id_proyecto,
                                         TipoItem.id_fase != id_fase)) \
                                         .all()
                '''
                tipos_items_fase = DBSession.query(TipoItem) \
                            .filter(or_(TipoItem.id_proyecto != id_proyecto,
                            and_(TipoItem.id_proyecto == id_proyecto,
                            TipoItem.id_fase != id_fase))) \
                                       .all()
                '''

                for ti in tipos_items_fase:
                    #solo si posee algun permiso sobre el tipo de item
                    #if (AlgunPermiso(tipo="Tipo", id_tipo_item=ti.id_tipo_item)):
                    options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, 
                                                                  ti.codigo)))

        d['options'] = options
        return d
Exemplo n.º 14
0
    def remover_seleccionados(self, *args, **kw):
        """ 
        Desasigna miembros de la fase.
        """
        id_fase = UrlParser.parse_id(request.url, "fases")

        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()

            fase = Fase.por_id(id_fase)
            nr = u"Lider de Proyecto"
            rlp = DBSession.query(Rol) \
                          .filter(and_(Rol.tipo == u"Proyecto",
                                       Rol.id_proyecto == fase.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_fase == id_fase and \
                       u.roles[c].tipo == u"Fase":
                        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 "../"
Exemplo n.º 15
0
    def post(self, *args, **kw):
        if "sprox_id" in kw:
            del kw["sprox_id"]

        proy = Proyecto(**kw)
        DBSession.add(proy)
        DBSession.flush()
        proy.codigo = Proyecto.generar_codigo(proy)

        #Creamos el rol miembro  y lider de proyecto para este proyecto.
        plant_l = Rol.obtener_rol_plantilla(nombre_rol=u"Lider de Proyecto")
        rol_l = Rol.nuevo_rol_desde_plantilla(plantilla=plant_l, id=proy.id_proyecto)

        flash("Se ha creado un nuevo proyecto")
        redirect("/proyectos/")
Exemplo n.º 16
0
    def asignar_roles(self, *args, **kw):
        """ Asigna los roles seleccionados a un usuario """

        if kw:
            pks = []
            for k, pk in kw.items():
                if not k.isalnum():
                    continue
                pks.append(int(pk))
            transaction.begin()
            id_user = UrlParser.parse_id(request.url, "miembros")
            id_proyecto = UrlParser.parse_id(request.url, "proyectos")
            user = Usuario.por_id(id_user)
            roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all()
            for r in roles:
                if r.tipo.find(
                        u"Plantilla") >= 0:  #crear rol a partir de plantilla
                    rol_new = Rol.nuevo_rol_desde_plantilla(plantilla=r,
                                                            id=id_proyecto)
                    rol_new.usuarios.append(user)
                else:
                    r.usuarios.append(user)
            transaction.commit()
            flash("Roles Asignados correctamente")
        else:
            flash("Seleccione por lo menos un rol", "warning")
        return "./"
Exemplo n.º 17
0
    def _do_get_provider_count_and_objs(self, usuario=None, asignados=True, 
                                        id_proyecto=None, **kw):
        count, lista = super(MiembrosProyectoRolesTableFiller,
                         self)._do_get_provider_count_and_objs(**kw)
        
        roles = []
        
        if not asignados:
            roles_proy = DBSession.query(Rol) \
                                  .filter(or_(and_(Rol.tipo == ("Proyecto"),
                                          Rol.id_proyecto == id_proyecto),
                                          and_(Rol.tipo == "Plantilla proyecto",
                                               Rol.nombre_rol != u"Miembro de Proyecto",
                                               Rol.nombre_rol != u"Lider de Proyecto")
                                               )).all()
            for r in roles_proy:
                if r not in usuario.roles:
                    roles.append(r)
        else:
            if id_proyecto:
                for r in usuario.roles:
                    if r.tipo == "Proyecto" and r.id_proyecto == id_proyecto:
                        roles.append(r)

        return len(roles), roles
Exemplo n.º 18
0
    def _do_get_provider_count_and_objs(self,
                                        usuario=None,
                                        asignados=True,
                                        id_tipo_item=None,
                                        **kw):
        count, lista = super(MiembrosTipoRolesTableFiller,
                             self)._do_get_provider_count_and_objs(**kw)

        roles = []

        if not asignados:
            roles_tipo = DBSession.query(Rol) \
                                  .filter(or_(and_(Rol.tipo.like(u"Tipo%"),
                                          Rol.id_tipo_item == id_tipo_item),
                                          and_(Rol.tipo.like(u"Plantilla tipo ítem"))
                                               )).all()
            for r in roles_tipo:
                if r not in usuario.roles:
                    roles.append(r)
        else:
            if id_tipo_item:
                for r in usuario.roles:
                    if r.tipo.find(
                            u"Tipo") >= 0 and r.id_tipo_item == id_tipo_item:
                        roles.append(r)

        return len(roles), roles
Exemplo n.º 19
0
    def post(self, *args, **kw):
        if "sprox_id" in kw:
            del kw["sprox_id"]

        proy = Proyecto(**kw)
        DBSession.add(proy)
        DBSession.flush()
        proy.codigo = Proyecto.generar_codigo(proy)

        #Creamos el rol miembro  y lider de proyecto para este proyecto.
        plant_l = Rol.obtener_rol_plantilla(nombre_rol=u"Lider de Proyecto")
        rol_l = Rol.nuevo_rol_desde_plantilla(plantilla=plant_l,
                                              id=proy.id_proyecto)

        flash("Se ha creado un nuevo proyecto")
        redirect("/proyectos/")
Exemplo n.º 20
0
    def asignar_roles(self, *args, **kw):
        """ Asigna los roles seleccionados a un usuario """

        if kw:
            pks = []
            for k, pk in kw.items():
                if not k.isalnum():
                    continue
                pks.append(int(pk))
            transaction.begin()
            id_user = UrlParser.parse_id(request.url, "nomiembros")
            id_proyecto = UrlParser.parse_id(request.url, "proyectos")
            user = Usuario.por_id(id_user)
            roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all()
            for r in roles:
                if r.tipo.find(u"Plantilla") >= 0: #crear rol a partir de plantilla
                    rol_new = Rol.nuevo_rol_desde_plantilla(plantilla=r, 
                                                            id=id_proyecto)
                    rol_new.usuarios.append(user)
                else:
                    r.usuarios.append(user)
            transaction.commit()
            flash("Roles Asignados correctamente")
        else:
            flash("Seleccione por lo menos un rol", "warning")
        return "./"
Exemplo n.º 21
0
    def _do_get_provider_count_and_objs(self,
                                        usuario=None,
                                        asignados=True,
                                        id_fase=None,
                                        **kw):
        count, lista = super(MiembrosFaseRolesTableFiller,
                             self)._do_get_provider_count_and_objs(**kw)

        roles = []

        if not asignados:
            roles_fase = DBSession.query(Rol) \
                                  .filter(or_(and_(Rol.tipo == u"Fase",
                                          Rol.id_fase == id_fase),
                                          and_(Rol.tipo == u"Plantilla fase")
                                               )).all()
            for r in roles_fase:
                if r not in usuario.roles:
                    roles.append(r)
        else:
            if id_fase:
                for r in usuario.roles:
                    if r.tipo == "Fase" and r.id_fase == id_fase:
                        roles.append(r)

        return len(roles), roles
Exemplo n.º 22
0
    def _do_get_provider_count_and_objs(self,
                                        usuario=None,
                                        asignados=True,
                                        id_proyecto=None,
                                        **kw):
        count, lista = super(MiembrosProyectoRolesTableFiller,
                             self)._do_get_provider_count_and_objs(**kw)

        roles = []

        if not asignados:
            roles_proy = DBSession.query(Rol) \
                                  .filter(or_(and_(Rol.tipo == ("Proyecto"),
                                          Rol.id_proyecto == id_proyecto),
                                          and_(Rol.tipo == "Plantilla proyecto",
                                               Rol.nombre_rol != u"Miembro de Proyecto",
                                               Rol.nombre_rol != u"Lider de Proyecto")
                                               )).all()
            for r in roles_proy:
                if r not in usuario.roles:
                    roles.append(r)
        else:
            if id_proyecto:
                for r in usuario.roles:
                    if r.tipo == "Proyecto" and r.id_proyecto == id_proyecto:
                        roles.append(r)

        return len(roles), roles
Exemplo n.º 23
0
 def _my_update_params(self, d, nullable=False):
     options = []
     options.append((0, "----------"))
     proyectos = DBSession.query(Proyecto).all()
     for p in proyectos:
         options.append((p.id_proyecto, '%s (%s)' % (p.codigo, p.nombre)))
     d['options'] = options
     return d
Exemplo n.º 24
0
 def _my_update_params(self, d, nullable=False):
     options = []
     options.append((0, "----------"))
     tipos = DBSession.query(TipoItem).all()
     for t in tipos:
         options.append((t.id_tipo_item, '%s' % t.codigo))
     d['options'] = options
     return d
Exemplo n.º 25
0
 def _my_update_params(self, d, nullable=False):
     options = []
     options.append((0, "----------"))
     tipos = DBSession.query(TipoItem).all()
     for t in tipos:
         options.append((t.id_tipo_item, '%s' % t.codigo))
     d['options'] = options
     return d
Exemplo n.º 26
0
 def _my_update_params(self, d, nullable=False):
     options = []
     options.append((0, "----------"))
     fases = DBSession.query(Fase).all()
     for f in fases:
         options.append((f.id_fase, '%s (%s)' % (f.codigo, f.nombre)))
     d['options'] = options
     return d
Exemplo n.º 27
0
 def _my_update_params(self, d, nullable=False):
     options = []
     options.append((0, "----------"))
     proyectos = DBSession.query(Proyecto).all()
     for p in proyectos:
         options.append((p.id_proyecto, '%s (%s)' % (p.codigo, 
                 p.nombre)))
     d['options'] = options
     return d
Exemplo n.º 28
0
 def _my_update_params(self, d, nullable=False):
     options = []
     options.append((0, "----------"))
     fases = DBSession.query(Fase).all()
     for f in fases:
         options.append((f.id_fase, '%s (%s)' % (f.codigo, 
                 f.nombre)))
     d['options'] = options
     return d
Exemplo n.º 29
0
 def por_nombre_permiso(cls, np):
     """
     Método de clase que realiza las búsquedas por nombre de permiso.
     
     @param np: nombre del permiso
     @type np: C{unicode}
     @return: el elemento recuperado
     @rtype: L{Permiso}
     """
     return DBSession.query(Permiso).filter_by(nombre_permiso=np).one()
Exemplo n.º 30
0
 def por_id(cls, id):
     """
     Método de clase que realiza las búsquedas por identificador.
     
     @param id: identificador del elemento a recuperar
     @type id: C{Integer}
     @return: el elemento recuperado
     @rtype: L{Permiso}
     """        
     return DBSession.query(cls).filter_by(id_permiso=id).one()
Exemplo n.º 31
0
 def por_nombre_permiso(cls, np):
     """
     Método de clase que realiza las búsquedas por nombre de permiso.
     
     @param np: nombre del permiso
     @type np: C{unicode}
     @return: el elemento recuperado
     @rtype: L{Permiso}
     """
     return DBSession.query(Permiso).filter_by(nombre_permiso=np).one()
Exemplo n.º 32
0
 def por_id(cls, id):
     """
     Método de clase que realiza las búsquedas por identificador.
     
     @param id: identificador del elemento a recuperar
     @type id: C{Integer}
     @return: el elemento recuperado
     @rtype: L{Permiso}
     """
     return DBSession.query(cls).filter_by(id_permiso=id).one()
Exemplo n.º 33
0
 def _my_update_params(self, d, nullable=False):
     options = []
     pks = []
     for i, v in enumerate(d["value"]):
         pks.append(int(v))
     permisos = DBSession.query(Permiso) \
                         .filter(Permiso.id_permiso.in_(pks)).all()
     for p in permisos:
         options.append((p.id_permiso, '%s' % p.nombre_permiso))
     d['options'] = options
     return d
Exemplo n.º 34
0
 def _my_update_params(self, d, nullable=False):
     options = []
     pks = []
     for i, v in enumerate(d["value"]):
         pks.append(int(v))
     permisos = DBSession.query(Permiso) \
                         .filter(Permiso.id_permiso.in_(pks)).all()
     for p in permisos:
         options.append((p.id_permiso, '%s' % p.nombre_permiso))
     d['options'] = options
     return d
Exemplo n.º 35
0
 def enviar_pass(self, **kw):
     """Recupera el pass enviado por mail uno nuevo."""
     usernamegiven = kw["loginusernamegiven"]
     user = Usuario.by_user_name(usernamegiven)
     if user != None:
         smtp_gmail = Gmail()
         mail = user.email  #DEBUG:  u"*****@*****.**"
         hash = hashlib.new('ripemd160')
         hash.update(user.email + unicode(random.random()))
         new_pass = hash.hexdigest()[0:15]
         user._set_password(new_pass)
         DBSession.add(user)
         text = _(u"Tu nueva contraseña es : %s") % new_pass
         smtp_gmail.enviar_mail(mail, text)
         smtp_gmail.quit()
         flash(_(u'Nueva contraseña enviada a %s') % mail)
         redirect(url('/login'))
     else:
         flash(_(u'No existe Usuario'))
         redirect(url('/recuperar_pass'))
Exemplo n.º 36
0
    def _do_get_provider_count_and_objs(self, id_item=None, tipo=None, **kw):
        """
        Recupera los ítems para los cuales tenemos algún permiso. y está o no
        relacionado al campo relacionado.
        Si el usuario se encuentra en una fase, retorna solo
        los ítems que pertenecen a dicha fase.
        """
        #count, lista = super(ItemTableFiller, self).\
        #                   _do_get_provider_count_and_objs(**kw)
        filtrados = []
        if id_item:
            item = Item.por_id(int(id_item))

            if (tipo == 'P-H'):

                items_fase_actual = DBSession.query(Item)\
                .filter(and_(Item.id_propiedad_item == PropiedadItem.id_propiedad_item,\
                Item.id_item != item.id_item, Item.id_fase == item.id_fase,
                PropiedadItem.estado != u"Eliminado"))\
                .all()

                for it in items_fase_actual:
                    if (not it.esta_relacionado(id_item)):
                        filtrados.append(it)

            if (tipo == 'A-S'):
                fase = Fase.por_id(item.id_fase)
                items_fase_anterior = DBSession.query(Item)\
                .filter(and_(Item.id_propiedad_item == PropiedadItem.id_propiedad_item,\
                Item.id_fase == Fase.id_fase, Fase.id_proyecto == fase.id_proyecto, PropiedadItem.estado == u"Bloqueado", \
                    Fase.posicion == fase.posicion - 1, fase.posicion != 1))\
                .all()

                for it in items_fase_anterior:
                    if (not it.esta_relacionado(id_item)):
                        filtrados.append(it)

        return len(filtrados), filtrados
Exemplo n.º 37
0
 def _do_get_provider_count_and_objs(self, id_fase=None, items=None, **kw):
     """
     Recupera los items aprobados de la fase en cuestión
     """
     if items or items == []:
         return len(items), items
         
     id_fase = int(id_fase)             #falta probar.
     query = DBSession.query(Item).join(PropiedadItem) \
                      .filter(and_(Item.id_propiedad_item == \
                                   PropiedadItem.id_propiedad_item,
                                   and_(Item.id_fase == id_fase,
                                        PropiedadItem.estado == u"Aprobado")))
     return query.count(), query.all()
Exemplo n.º 38
0
    def nuevo_rol_desde_plantilla(cls,
                                  plantilla=None,
                                  id_plantilla=None,
                                  id=None):
        """
        Crea un rol a partir de una plantilla
        
        @param plantilla: rol del tipo plantilla.
        @param id_plantilla: id del rol del tipo plantilla.
        @param id: identificador con el qué asociar al rol.
        """
        base_query = DBSession.query(Rol)
        if (id_plantilla):
            plantilla = base_query.filter(
                Rol.id_rol == int(id_plantilla)).first()

        rol = Rol()
        rol.nombre_rol = plantilla.nombre_rol
        rol.descripcion = plantilla.descripcion
        if (plantilla.tipo == u"Plantilla proyecto"):
            rol.tipo = u"Proyecto"
            rol.id_proyecto = id
        elif (plantilla.tipo == u"Plantilla fase"):
            rol.tipo = u"Fase"
            rol.id_fase = id
        elif (plantilla.tipo == u"Plantilla tipo ítem"):
            rol.tipo = u"Tipo de Ítem"
            rol.id_tipo_item = id

        for perm in plantilla.permisos:
            perm.roles.append(rol)

        DBSession.add(rol)
        DBSession.flush()
        rol.codigo = Rol.generar_codigo(rol)

        return rol
Exemplo n.º 39
0
    def crear_rol(cls, **kw):
        """ Crea un nuevo rol """
        if "sprox_id" in kw:
            del kw["sprox_id"]
        if "permisos_src" in kw: #campo que genera dojo
            del kw["permisos_src"]
            
        pks = kw["permisos"]
        del kw["permisos"]
        for k in ["id_proyecto", "id_fase", "id_tipo_item"]:
            if kw.has_key(k):
                if kw[k]:
                    kw[k] = int(kw[k])
                else:
                    del kw[k]

        rol_new = Rol(**kw)

        if type(pks).__name__ == 'list':
            for i, pk in enumerate(pks):
                pks[i] = int(pk)
        else:
            pks = [int(pks)]

        permisos = DBSession.query(Permiso).filter( \
                                            Permiso.id_permiso.in_(pks)).all()
        if not permisos:
            return None
            
        for p in permisos:
            p.roles.append(rol_new)
            
        DBSession.flush()
        rol_new.codigo = Rol.generar_codigo(rol_new)
        DBSession.add(rol_new)
        return rol_new
Exemplo n.º 40
0
    def crear_rol(cls, **kw):
        """ Crea un nuevo rol """
        if "sprox_id" in kw:
            del kw["sprox_id"]
        if "permisos_src" in kw:  #campo que genera dojo
            del kw["permisos_src"]

        pks = kw["permisos"]
        del kw["permisos"]
        for k in ["id_proyecto", "id_fase", "id_tipo_item"]:
            if kw.has_key(k):
                if kw[k]:
                    kw[k] = int(kw[k])
                else:
                    del kw[k]

        rol_new = Rol(**kw)

        if type(pks).__name__ == 'list':
            for i, pk in enumerate(pks):
                pks[i] = int(pk)
        else:
            pks = [int(pks)]

        permisos = DBSession.query(Permiso).filter( \
                                            Permiso.id_permiso.in_(pks)).all()
        if not permisos:
            return None

        for p in permisos:
            p.roles.append(rol_new)

        DBSession.flush()
        rol_new.codigo = Rol.generar_codigo(rol_new)
        DBSession.add(rol_new)
        return rol_new
Exemplo n.º 41
0
 def obtener_rol_plantilla(cls, **kw):
     """
     Obtiene un rol utilizado como plantilla, para la creación de 
     otros roles
     
     @param kw: posee el identificador o el nombre del rol.
     """
     base_query = DBSession.query(Rol)
     if "id" in kw:
         rol = base_query.filter(and_(Rol.id_rol == int(kw["id"]),
                                     Rol.tipo.like(u"Plantilla%"))).first()
     elif "nombre_rol" in kw:
         rol = base_query.filter(and_(
                                 Rol.nombre_rol == unicode(kw["nombre_rol"]),
                                 Rol.tipo.like(u"Plantilla%"))).first()
     return rol
Exemplo n.º 42
0
    def actualizar_rol(cls, **kw):
        """Actualiza un rol"""
        if "sprox_id" in kw:
            del kw["sprox_id"]
        if "permisos_src" in kw:  #campo que genera dojo
            del kw["permisos_src"]

        pks = kw["permisos"]
        if type(pks).__name__ == 'list':
            for i, pk in enumerate(pks):
                pks[i] = int(pk)
        else:
            pks = [int(pks)]

        del kw["permisos"]
        for k in ["id_proyecto", "id_fase", "id_tipo_item"]:
            if kw.has_key(k):
                if kw[k]:
                    kw[k] = int(kw[k])
                else:
                    del kw[k]
        rol_mod = Rol.por_id(kw['id_rol'])
        for k in [
                "id_proyecto", "id_fase", "id_tipo_item", "nombre_rol",
                "descripcion"
        ]:
            if kw.has_key(k):
                setattr(rol_mod, k, kw[k])
        c = 0
        while c < len(rol_mod.permisos):
            p = rol_mod.permisos[c]
            if p.id_permiso not in pks:
                del rol_mod.permisos[c]
            else:
                c += 1
        if pks:
            permisos = DBSession.query(Permiso).filter( \
                                            Permiso.id_permiso.in_(pks)).all()
            if not permisos:
                return None

            for p in permisos:
                if p not in rol_mod.permisos:
                    p.roles.append(rol_mod)

        return rol_mod
Exemplo n.º 43
0
 def obtener_rol_plantilla(cls, **kw):
     """
     Obtiene un rol utilizado como plantilla, para la creación de 
     otros roles
     
     @param kw: posee el identificador o el nombre del rol.
     """
     base_query = DBSession.query(Rol)
     if "id" in kw:
         rol = base_query.filter(
             and_(Rol.id_rol == int(kw["id"]),
                  Rol.tipo.like(u"Plantilla%"))).first()
     elif "nombre_rol" in kw:
         rol = base_query.filter(
             and_(Rol.nombre_rol == unicode(kw["nombre_rol"]),
                  Rol.tipo.like(u"Plantilla%"))).first()
     return rol
Exemplo n.º 44
0
    def asignar_roles(self, *args, **kw):
        """ Asigna los roles seleccionados a un usuario """

        if kw:
            pks = []
            for k, pk in kw.items():
                if not k.isalnum():
                    continue
                pks.append(int(pk))
            transaction.begin()
            id_user = UrlParser.parse_id(request.url, "usuarios")
            user = Usuario.por_id(id_user)
            roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all()
            for r in roles:
                r.usuarios.append(user)
            transaction.commit()
        flash("Roles Asignados correctamente")
        return "./"
Exemplo n.º 45
0
 def actualizar_rol(cls, **kw):
     """Actualiza un rol"""
     if "sprox_id" in kw:
         del kw["sprox_id"]
     if "permisos_src" in kw: #campo que genera dojo
         del kw["permisos_src"]
         
     pks = kw["permisos"]
     if type(pks).__name__ == 'list':
         for i, pk in enumerate(pks):
             pks[i] = int(pk)
     else:
         pks = [int(pks)]
         
     del kw["permisos"]
     for k in ["id_proyecto", "id_fase", "id_tipo_item"]:
         if kw.has_key(k):
             if kw[k]:
                 kw[k] = int(kw[k])
             else:
                 del kw[k]
     rol_mod = Rol.por_id(kw['id_rol'])
     for k in ["id_proyecto", "id_fase", "id_tipo_item", "nombre_rol",
               "descripcion"]:
         if kw.has_key(k):
             setattr(rol_mod, k, kw[k])
     c = 0
     while c < len(rol_mod.permisos):
         p = rol_mod.permisos[c]
         if p.id_permiso not in pks:
             del rol_mod.permisos[c]
         else:
             c += 1
     if pks:
         permisos = DBSession.query(Permiso).filter( \
                                         Permiso.id_permiso.in_(pks)).all()
         if not permisos:
             return None
             
         for p in permisos:
             if p not in rol_mod.permisos:
                 p.roles.append(rol_mod)
     
     return rol_mod
Exemplo n.º 46
0
 def setUp(self):
     """Prepare model test fixture."""
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Exemplo n.º 47
0
 def setUp(self):
     """Prepare model test fixture."""
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Exemplo n.º 48
0
    def roles_desasignados(cls,
                           usuario,
                           id_proyecto=None,
                           id_fase=None,
                           id_tipo_item=None):
        """
        Obtiene los roles que no están asignados al usuario
        
        @param usuario: identificador del usuario para ver cuales roles no 
                        tiene asignado.
        """
        roles = DBSession.query(cls).all()
        id_u = int(usuario)
        desasignados = []
        #falta discrimininar el tipo
        for r in roles:
            if id_proyecto:
                if r.tipo != u"Plantilla proyecto" and \
                   r.id_proyecto != id_proyecto:
                    continue
            elif id_fase:
                if r.tipo != u"Plantilla fase" and \
                   r.id_fase != id_fase:
                    continue
            elif id_tipo_item:
                if r.tipo != u"Plantilla tipo ítem" and \
                   r.id_tipo_item != id_tipo_item:
                    continue
            elif (r.tipo.find(u"Plantilla") >= 0):
                continue
            esta = False
            for u in r.usuarios:
                if (u.id_usuario == id_u):
                    esta = True
                    break
            if (not esta):
                desasignados.append(r)

        return desasignados
Exemplo n.º 49
0
    def _do_get_provider_count_and_objs(self, usuario=None, asignados=True, 
                                        id_fase=None, **kw):
        count, lista = super(MiembrosFaseRolesTableFiller,
                         self)._do_get_provider_count_and_objs(**kw)
        
        roles = []
        
        if not asignados:
            roles_fase = DBSession.query(Rol) \
                                  .filter(or_(and_(Rol.tipo == u"Fase",
                                          Rol.id_fase == id_fase),
                                          and_(Rol.tipo == u"Plantilla fase")
                                               )).all()
            for r in roles_fase:
                if r not in usuario.roles:
                    roles.append(r)
        else:
            if id_fase:
                for r in usuario.roles:
                    if r.tipo == "Fase" and r.id_fase == id_fase:
                        roles.append(r)

        return len(roles), roles
Exemplo n.º 50
0
    def roles_desasignados(cls, usuario, id_proyecto=None,
                           id_fase=None, id_tipo_item=None):
        """
        Obtiene los roles que no están asignados al usuario
        
        @param usuario: identificador del usuario para ver cuales roles no 
                        tiene asignado.
        """
        roles = DBSession.query(cls).all()
        id_u = int(usuario)
        desasignados = []
        #falta discrimininar el tipo
        for r in roles:
            if id_proyecto:
                if r.tipo != u"Plantilla proyecto" and \
                   r.id_proyecto != id_proyecto:
                    continue
            elif id_fase:
                if r.tipo != u"Plantilla fase" and \
                   r.id_fase != id_fase:
                    continue
            elif id_tipo_item:
                if r.tipo != u"Plantilla tipo ítem" and \
                   r.id_tipo_item != id_tipo_item:
                    continue
            elif (r.tipo.find(u"Plantilla") >= 0):
                continue
            esta = False
            for u in r.usuarios:
                if (u.id_usuario == id_u):
                    esta = True
                    break
            if (not esta):
                desasignados.append(r)

        return desasignados
Exemplo n.º 51
0
 def test_query_obj(self):
     """Model objects can be queried"""
     obj = DBSession.query(self.klass).one()
     for key, value in self.attrs.iteritems():
         assert_equals(getattr(obj, key), value)
Exemplo n.º 52
0
 def tearDown(self):
     """Finish model test fixture."""
     DBSession.rollback()
Exemplo n.º 53
0
 def permisos_ti(cls):
     """
     Método de clase que retorna los permisos que poseen un contexto.
     """
     return DBSession.query(Permiso).filter(Permiso.tipo.like("%Tipo%")).all()                                                                 
Exemplo n.º 54
0
 def tearDown(self):
     """Finish model test fixture."""
     DBSession.rollback()
Exemplo n.º 55
0
 def test_query_obj(self):
     """Model objects can be queried"""
     obj = DBSession.query(self.klass).one()
     for key, value in self.attrs.iteritems():
         assert_equals(getattr(obj, key), value)
Exemplo n.º 56
0
    def _do_get_provider_count_and_objs(self, order=None, **kw): #sobreescribimos el método
        """
        Este método define como la consulta a la base de
        datos se debe realizar.
        """
        filtrados = []
        query = DBSession.query(self.__entity__)
        mapper = self.__entity__.__mapper__
        res = []
        
# p = " "

        if not self.filtros:
            if (self.cualquiera == ""):
                if (order):
                    return query.count, query.order_by(order).all()
                else:
                    return query.count, query.all()
            
            #contaminando código
            for key in mapper.columns.keys():
                column = mapper.columns.get(key)
                 
# p = p + "/" + str(column) + ":" + column.type.__visit_name__
                if column.type.__visit_name__ == 'unicode':

                    res.extend(query.filter(column.ilike(self.cualquiera + "%")).all())
#                    query = query.filter(column.ilike(self.cualquiera + "%"))
                elif (column.type.__visit_name__ == 'integer' and self.buscar_enteros):
                    entero = int(self.cualquiera)
                    res.extend(query.filter(column.in_([entero])).all())
#                    query = query.filter(column.in_([entero]))
                    
                filtrados.extend(res)
# session["print"] = p
# session.save()
            filtrados = self.__remover_duplicados(filtrados)
            return len(filtrados), filtrados
# p = ""
        for fil_col, fil_val_list in self.filtros.items(): #filtrado OR
            col = mapper.columns.get(fil_col)
            col_type = col.type.__visit_name__
            
# p = p + "/" + str(col) + ":" + col_type
            if col_type == 'integer':
                lista = []
                for i, fvl in enumerate(fil_val_list):
                    try:
                        lista.append(int(fvl))
                    except:
                        continue
                res = query.filter(col.in_(lista)).all()
            elif col_type == 'unicode':
                for fvl in fil_val_list:
                    res.extend(query.filter(col.ilike(fvl)).all())
            elif col_type == 'datetime':
                for i in range(0, len(fil_val_list), 2):
                    date0 = fil_val_list[i]
                    date1 = fil_val_list[i + 1]
                    if (date0 == '' or date1 == ''):
                        continue
                    res.extend(query.filter(col.between(date0, date1)))
                           
            filtrados.extend(res)
# session["print"] = p
# session.save()
        filtrados = self.__remover_duplicados(filtrados)
        return len(filtrados), filtrados