コード例 #1
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        atras = "../"
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            atras = "../../"

        puede_crear = PoseePermiso(
            "crear fase", id_proyecto=id_proyecto).is_met(request.environ)
        proy = Proyecto.por_id(id_proyecto)
        if proy.estado == "Iniciado":
            puede_crear = False

        titulo = self.title % proy.nombre
        fases = self.table_filler.get_value(id_proyecto=id_proyecto, **kw)
        tmpl_context.widget = self.table

        return dict(lista_elementos=fases,
                    page=titulo,
                    titulo=titulo,
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=self.tmp_action,
                    puede_crear=puede_crear,
                    comboboxes=self.comboboxes,
                    atras=atras)
コード例 #2
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""

        if UrlParser.parse_nombre(request.url, "versiones"):
            #no se hace nada desde el controlador de versiones.
            return '<div></div>'

        value = '<div>'
        clase = 'actions_fase'
        id = str(obj.id_relacion)
        controller = "./" + id
        id_item = UrlParser.parse_id(request.url, "items")

        if id_item:
            item = Item.por_id(id_item)
            p_item = PropiedadItem.por_id(item.id_propiedad_item)

            otro = obj.obtener_otro_item(id_item)
            p_otro = PropiedadItem.por_id(otro.id_propiedad_item)

            if (p_item.estado not in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"] and\
                    obj.id_anterior != id_item or p_otro.estado == u"Eliminado"):

                if (PoseePermiso('modificar item',
                                 id_fase=item.id_fase).is_met(
                                     request.environ)):
                    value += '<div><form method="POST" action="' + controller + '" class="button-to">'+\
                             '<input type="hidden" name="_method" value="DELETE" />' +\
                             '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\
                             'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\
                             'margin: 0; padding: 0;' + clase + '"/>'+\
                             '</form></div><br />'

        value += '</div>'
        return value
コード例 #3
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def post_buscar(self, *args, **kw):
        """
        Controlador que recibe los parámetros de búsqueda para 
        devolver el resultado esperado.
        """
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        #action = self.tmp_action % id_proyecto
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            #action = self.tmp_action_fase % id_proyecto

        puede_crear = PoseePermiso(
            "crear fase", id_proyecto=id_proyecto).is_met(request.environ)

        proy = Proyecto.por_id(id_proyecto)
        if proy.estado == "Iniciado":
            puede_crear = False

        titulo = self.title % proy.nombre
        tmpl_context.widget = self.table
        buscar_table_filler = FaseTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        fases = buscar_table_filler.get_value(id_proyecto=id_proyecto)
        atras = '../'

        return dict(lista_elementos=fases,
                    page=titulo,
                    titulo=titulo,
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    url_action="../",
                    puede_crear=puede_crear,
                    comboboxes=self.comboboxes,
                    opciones=self.opciones,
                    atras=atras)
コード例 #4
0
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions'
        url_cont = "./" + str(obj.id_tipo_item)
        id_tipo = UrlParser.parse_id(request.url, "tipositems")

        if id_tipo:
            url_cont = "../" + str(obj.id_tipo_item)

        if UrlParser.parse_nombre(request.url, "post_buscar"):
            url_cont = "../" + str(obj.id_tipo_item)

        value += '<div>' + \
                    '<a href="' + url_cont + '/edit" ' + \
                    'class="' + clase + '">Ver</a>' + \
                 '</div><br />'

        value += '<div>' + \
                    '<a href="' + url_cont + '/atributostipoitem/" ' + \
                    'class="' + clase + '">Atributos</a>' + \
                 '</div><br />'

        value += '</div>'
        return value
コード例 #5
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
 def item_relacionado(self, obj, **kw):
     id_item = UrlParser.parse_id(request.url, "items")
     id_version = UrlParser.parse_id(request.url, "versiones")
     if not id_item:
         id_item = id_version
     otro = obj.obtener_otro_item(id_item)
     return otro.codigo
コード例 #6
0
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""

        if UrlParser.parse_nombre(request.url, "versiones"):
            #no se hace nada desde el controlador de versiones.
            return '<div></div>'

        value = '<div>'
        clase = 'actions_fase'
        id = str(obj.id_atributos_por_item)
        controller = "./atributos/" + id
        id_item = UrlParser.parse_id(request.url, "items")
        item = Item.por_id(id_item)

        if UrlParser.parse_nombre(request.url, "atributos"):
            controller = id

        #if PoseePermiso('modificar item',
        #                id_fase=item.id_fase).is_met(request.environ):
        if PoseePermiso('modificar item',
                        id_tipo_item=item.id_tipo_item).is_met(
                            request.environ):
            value += '<div>' + \
                        '<a href="./'+ controller +'/edit" ' + \
                        'class="' + clase + '">Modificar</a>' + \
                     '</div><br />'

        value += '</div>'
        return value
コード例 #7
0
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        clase = 'actions'
        value = "<div>"
        url = "./"
        if UrlParser.parse_nombre(request.url, "post_buscar"):
            url = "../"

        value += '<div>' + \
                    '<a href="' + url + str(obj.id_usuario) + '/" ' + \
                    'class="' + clase + '">Ver</a>' + \
                 '</div><br />'

        id_tipo_item = UrlParser.parse_id(request.url, "tipositems")
        if PoseePermiso("asignar-desasignar rol",
                        id_tipo_item=id_tipo_item).is_met(request.environ):
            value += '<div>' + \
                        '<a href="./'+ str(obj.id_usuario) + \
                        "/rolesasignados/" '" ' + \
                        'class="' + clase + '">Roles Asig.</a>' + \
                     '</div><br />'
            value += '<div>' + \
                        '<a href="./' + str(obj.id_usuario) + \
                        "/rolesdesasignados/" '" ' + \
                        'class="' + clase + '">Roles Desasig.</a>' + \
                     '</div><br />'
        value += '</div>'

        return value
コード例 #8
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""

        if UrlParser.parse_nombre(request.url, "versiones"):
            #no se hace nada desde el controlador de versiones.
            return '<div></div>'

        value = '<div>'
        clase = 'actions_fase'
        id = str(obj.id_relacion)
        controller = "./" + id
        id_item = UrlParser.parse_id(request.url, "items")
        
        if id_item:
            item = Item.por_id(id_item)
            p_item = PropiedadItem.por_id(item.id_propiedad_item)

            otro = obj.obtener_otro_item(id_item)
            p_otro = PropiedadItem.por_id(otro.id_propiedad_item)
        
            if (p_item.estado not in [u"Bloqueado", u"Revisión-Bloq", u"Eliminado"] and\
                    obj.id_anterior != id_item or p_otro.estado == u"Eliminado"):
                    
                if (PoseePermiso('modificar item', 
                                id_fase=item.id_fase).is_met(request.environ) ):
                    value += '<div><form method="POST" action="' + controller + '" class="button-to">'+\
                             '<input type="hidden" name="_method" value="DELETE" />' +\
                             '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\
                             'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\
                             'margin: 0; padding: 0;' + clase + '"/>'+\
                             '</form></div><br />'
        
        value += '</div>'
        return value
コード例 #9
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def _my_update_params(self, d, nullable=False):

        id_proyecto = UrlParser.parse_id(request.url, "proyectos")

        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")

        if id_proyecto:
            proy = Proyecto.por_id(id_proyecto)

        options = []
        id_fase = UrlParser.parse_id(request.url, "fases")

        if id_fase:
            fase = Fase.por_id(id_fase)
            proy = Proyecto.por_id(fase.id_proyecto)

        if self.accion == "edit":
            options.append((fase.posicion, str(fase.posicion)))
            if (proy.estado != u"Iniciado"):
                pos = range(1, proy.numero_fases + 1)
                pos.pop(fase.posicion - 1)
                options.extend(pos)

        elif self.accion == "new":
            if (not id_proyecto):
                return d

            np = proy.numero_fases + 1
            options.append((np, str(np)))
            options.extend(range(1, np))
        d['options'] = options
        return d
コード例 #10
0
ファイル: no_miembros_fase.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        if id_proyecto:
            url_cont = "/proyectos/%d/" % id_proyecto
        else:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            url_cont = "/proyectos_fase/%d/" % id_proyecto
        
        id_fase = UrlParser.parse_id(request.url, "fases")
        url_cont += "fases/%d/"
        url_cont %= id_fase
        id = str(obj.id_usuario)
        clase = 'actions'
        value = "<div>"
        value += '<div>' + \
                    '<a href="' + url_cont + "nomiembrosfase/" + id + '" ' + \
                    'class="' + clase + '">Ver</a>' + \
                 '</div><br />'
        
        if PoseePermiso("asignar-desasignar rol", 
                        id_fase=id_fase).is_met(request.environ):
            value += '<div>' + \
                        '<a href="'+ url_cont + "nomiembrosfase/" + id + \
                        '/rolesdesasignados/" ' + \
                        'class="' + clase + '">Asignar Rol</a>' + \
                     '</div><br />'

        value += '</div>'
        
        return value
コード例 #11
0
ファイル: no_miembros_fase.py プロジェクト: jorgeramirez/LPM
 def post_buscar(self, *args, **kw):
     id_fase = UrlParser.parse_id(request.url, "fases")
     id_usuario = UrlParser.parse_id(request.url, "nomiembrosfase")
     usuario = Usuario.por_id(id_usuario)
     fase = Fase.por_id(id_fase)
     
     puede_asignar = PoseePermiso("asignar-desasignar rol", 
                                     id_fase=id_fase).is_met(request.environ)
     titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario
     tmpl_context.widget = self.table
     buscar_table_filler = MiembrosFaseRolesTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     roles = buscar_table_filler.get_value(usuario=usuario, asignados=False,
                                            id_fase=id_fase, **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)
コード例 #12
0
ファイル: miembros_proyecto.py プロジェクト: jorgeramirez/LPM
 def post_buscar(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     
     id_usuario = UrlParser.parse_id(request.url, "miembros")
     usuario = Usuario.por_id(id_usuario)
     
     proy = Proyecto.por_id(id_proyecto)
     puede_desasignar = PoseePermiso("asignar-desasignar rol", 
                                     id_proyecto=id_proyecto).is_met(request.environ)
     
     titulo = "Roles de: %s" % usuario.nombre_usuario
     tmpl_context.widget = self.table
     buscar_table_filler = MiembrosProyectoRolesTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     usuarios = buscar_table_filler.get_value(usuario=usuario, 
                                              id_proyecto=id_proyecto, **kw)
     atras = "/proyectos/%d/miembros/" % id_proyecto
     return dict(lista_elementos=usuarios, 
                 page=titulo, 
                 titulo=titulo, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 comboboxes=self.comboboxes,
                 url_action="../", 
                 atras=atras,
                 puede_desasignar=puede_desasignar)
コード例 #13
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
 def item_relacionado(self, obj, **kw):
     id_item = UrlParser.parse_id(request.url, "items")
     id_version = UrlParser.parse_id(request.url, "versiones")
     if not id_item:
         id_item = id_version        
     otro = obj.obtener_otro_item(id_item)
     return otro.codigo
コード例 #14
0
ファイル: items_relacion.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_item = UrlParser.parse_id(request.url, "items")
        item = Item.por_id(id_item)

        controller = "relacionar_as"
        tipo = "A-S"
        if (UrlParser.parse_nombre(request.url, "relaciones_ph")):
            controller = "relacionar_ph"
            tipo = "P-H"

        #TODO ACENTO EN RELACION
        page = u"Relacion {tipo} con ítem: {codigo}".format(tipo=tipo,
                                                            codigo=item.codigo)
        tmpl_context.tabla_items = item_relacion_table
        items = item_relacion_table_filler.get_value(id_item=id_item,\
                                                          tipo=tipo, **kw)

        atras = "../"

        return dict(items=items,
                    page=page,
                    title=self.title,
                    controlador=controller,
                    atras=atras)
コード例 #15
0
ファイル: roles_fase.py プロジェクト: jorgeramirez/LPM
    def post(self, *args, **kw):
        """ Crea un nuevo rol plantilla o con contexto"""
        id_fase = UrlParser.parse_id(request.url, "fases")
        url_action = "./"
        pp = PoseePermiso('crear rol', id_fase=id_fase)
        kw["id_fase"] = id_fase

        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")

        kw["id_proyecto"] = id_proyecto

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

        #url que redirige al new y rellena los parametros que ya ingreso
        error_url = url_action + "new"

        #agregamos los parametros que ya ingreso el usuario.
        nombre = kw.get("nombre_rol", None).encode("utf-8")
        nombre_q = urllib.quote(nombre)
        desc = kw.get("descripcion", None).encode("utf-8")
        desc_q = urllib.quote(desc)
        params = "?nombre_rol=" + nombre_q + "&descripcion=" + desc_q
        error_url += params

        if not (kw.has_key("permisos") and kw["permisos"]):
            flash("Debe seleccionar al menos un permiso", 'warning')
            redirect(error_url)
        else:
            Rol.crear_rol(**kw)
            flash(u"El Rol se ha creado correctamente")
            redirect(url_action)
コード例 #16
0
ファイル: roles_fase.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions'

        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        if id_proyecto:
            url_cont = "/proyectos/%d/" % id_proyecto
        else:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            url_cont = "/proyectos_fase/%d/" % id_proyecto

        id_fase = UrlParser.parse_id(request.url, "fases")
        url_cont += "fases/%d/rolesfase/"
        url_cont %= id_fase

        perm_mod = PoseePermiso('modificar rol', id_fase=id_fase)
        perm_del = PoseePermiso('eliminar rol', id_fase=id_fase)

        if perm_mod.is_met(request.environ):
            value += '<div>' + \
                        '<a href="' +  url_cont + str(obj.id_rol) + "/edit"+  \
                        '" class="' + clase + '">Modificar</a>' + \
                     '</div><br />'

        if perm_del.is_met(request.environ):
            value += '<div><form method="POST" action="./' + str(obj.id_rol) + '" class="button-to">'+\
                     '<input type="hidden" name="_method" value="DELETE" />' +\
                     '<input onclick="return confirm(\'Está seguro?\');" value="Eliminar" type="submit" '+\
                     'style="background-color: transparent; float:left; border:0; color: #286571;'+\
                     'display: inline; margin: 0; padding: 0; margin-left:-3px;" class="' + clase + '"/>'+\
                     '</form></div><br />'
        value += '</div>'
        return value
コード例 #17
0
ファイル: tipoitem.py プロジェクト: jorgeramirez/LPM
 def post_buscar(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     id_fase = UrlParser.parse_id(request.url, "fases")
     atras = "../"
     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")
         atras = "../../../"
     
     proy = Proyecto.por_id(id_proyecto)
     puede_crear = puede_crear = PoseePermiso("crear tipo item",
                                              id_fase=id_fase).is_met(request.environ)
     if proy.estado != "Iniciado":
         puede_crear = False
     fase = Fase.por_id(id_fase)
     titulo = self.title % fase.nombre
     tmpl_context.widget = self.table
     buscar_table_filler = self.table_filler.__class__(DBSession)
     buscar_table_filler.filtros = kw
     tipos_items = buscar_table_filler.get_value(id_fase=id_fase)
     
     return  dict(lista_elementos=tipos_items, 
                  page=titulo, 
                  titulo=titulo,
                  modelo=self.model.__name__, 
                  columnas=self.columnas,
                  opciones=self.opciones, 
                  url_action="../",
                  puede_crear=puede_crear,
                  atras=atras
                  )
コード例 #18
0
ファイル: atributoitem.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_item = UrlParser.parse_id(request.url, "items")
        id_version = UrlParser.parse_id(request.url, "versiones")
        titulo = self.title
        atributos = {}
        atras="../../"
        
        if id_version:
            #desde controller de versiones
            p_item = PropiedadItem.por_id(id_version)
            titulo = u"Atributos de Version: %d" % p_item.version
            atributos = self.table_filler. \
                        get_value(id_version=id_version, **kw)
        elif id_item:
            #desde controller de items.
            item = Item.por_id(id_item)
            titulo = u"Atributos de Ítem: %s" % item.codigo
            atras="../"
            atributos = self.table_filler. \
                        get_value(id_version=item.id_propiedad_item, **kw)
        
        tmpl_context.widget = self.table
        return dict(lista_elementos=atributos, 
                    page=titulo,
                    titulo=titulo, 
                    modelo=self.model.__name__, 
#                    columnas=self.columnas,
#                    opciones=self.opciones,
                    url_action=self.tmp_action,
                    atras=atras
                    )
コード例 #19
0
ファイル: atributoitem.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""

        if UrlParser.parse_nombre(request.url, "versiones"):
            #no se hace nada desde el controlador de versiones.
            return '<div></div>'

        value = '<div>'
        clase = 'actions_fase'
        id = str(obj.id_atributos_por_item)
        controller = "./atributos/" + id
        id_item = UrlParser.parse_id(request.url, "items")
        item = Item.por_id(id_item)
        
        if UrlParser.parse_nombre(request.url, "atributos"):
            controller = id

        #if PoseePermiso('modificar item', 
        #                id_fase=item.id_fase).is_met(request.environ):
        if PoseePermiso('modificar item', 
                        id_tipo_item=item.id_tipo_item).is_met(request.environ):
            value += '<div>' + \
                        '<a href="./'+ controller +'/edit" ' + \
                        'class="' + clase + '">Modificar</a>' + \
                     '</div><br />'
        
        value += '</div>'
        return value
コード例 #20
0
ファイル: miembros_fase.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        if id_proyecto:
            url_cont = "/proyectos/%d/" % id_proyecto
        else:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            url_cont = "/proyectos_fase/%d/" % id_proyecto

        id_fase = UrlParser.parse_id(request.url, "fases")
        url_cont += "fases/%d/"
        url_cont %= id_fase

        clase = 'actions'
        value = "<div>"
        value += '<div>' + \
                    '<a href="' + url_cont + "miembrosfase/" + str(obj.id_usuario) + '" ' + \
                    'class="' + clase + '">Ver</a>' + \
                 '</div><br />'

        if PoseePermiso("asignar-desasignar rol",
                        id_proyecto=id_proyecto).is_met(request.environ):
            value += '<div>' + \
                        '<a href="'+ url_cont + "miembrosfase/" + str(obj.id_usuario) + \
                        "/rolesasignados/" '" ' + \
                        'class="' + clase + '">Roles Asig.</a>' + \
                     '</div><br />'
            value += '<div>' + \
                        '<a href="'+ url_cont + "miembrosfase/" + str(obj.id_usuario) + \
                        "/rolesdesasignados/" '" ' + \
                        'class="' + clase + '">Roles Desasig.</a>' + \
                     '</div><br />'
        value += '</div>'

        return value
コード例 #21
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
 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
コード例 #22
0
ファイル: miembros_proyecto.py プロジェクト: jorgeramirez/LPM
 def post_buscar(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     id_usuario = UrlParser.parse_id(request.url, "miembros")
     usuario = Usuario.por_id(id_usuario)
     proy = Proyecto.por_id(id_proyecto)
     puede_asignar = PoseePermiso("asignar-desasignar rol",
                                  id_proyecto=id_proyecto).is_met(
                                      request.environ)
     titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario
     tmpl_context.widget = self.table
     buscar_table_filler = MiembrosProyectoRolesTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     roles = buscar_table_filler.get_value(usuario=usuario,
                                           asignados=False,
                                           id_proyecto=id_proyecto,
                                           **kw)
     atras = "/proyectos/%d/miembros/" % id_proyecto
     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)
コード例 #23
0
 def get_all(self, *args, **kw):
     """ 
     Retorna todos los registros
     Retorna una página HTML si no se especifica JSON
     """
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     id_usuario = UrlParser.parse_id(request.url, "nomiembros")
     usuario = Usuario.por_id(id_usuario)
     proy = Proyecto.por_id(id_proyecto)
     titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario
     puede_asignar = PoseePermiso("asignar-desasignar rol", 
                                     id_proyecto=id_proyecto).is_met(request.environ)
                                     
     if request.response_type == 'application/json':
         return self.table_filler.get_value(usuario=usuario, asignados=False,
                                            id_proyecto=id_proyecto, **kw)
     if not getattr(self.table.__class__, '__retrieves_own_value__', False):
         roles = self.table_filler.get_value(usuario=usuario, asignados=False,
                                            id_proyecto=id_proyecto, **kw)
     else:
         roles = []
         
     tmpl_context.widget = self.table
     atras = "/proyectos/%d/nomiembros/" % id_proyecto
     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)
コード例 #24
0
ファイル: adjunto.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""

        value = '<div>'
        clase = 'actions_fase'
        id_item = UrlParser.parse_id(request.url, "items")
        item = Item.por_id(id_item)
        p_item = PropiedadItem.por_id(item.id_propiedad_item)
        id = str(obj.id_archivo_externo)
        #if PoseePermiso('modificar item', 
        #                id_fase=item.id_fase).is_met(request.environ):
        if PoseePermiso('modificar item', 
                        id_tipo_item=item.id_tipo_item).is_met(request.environ):
            value += '<div>' + \
                        '<a href="./descargar/' + id + '" ' +  \
                        'class="' + clase + '">Descargar</a>' + \
                     '</div><br />'
            if not UrlParser.parse_nombre(request.url, "versiones") and \
                   p_item.estado not in [u"Eliminado", u"Bloqueado", 
                                       u"Revisión-Bloq"]:
                #No se puede eliminar desde el controlador de versiones.
                value += '<div><form method="POST" action="' + id + '" class="button-to">'+\
                         '<input type="hidden" name="_method" value="DELETE" />' +\
                         '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\
                         'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\
                         'margin: 0; padding: 0;' + clase + '"/>'+\
                         '</form></div><br />'

        value += '</div>'
        return value
コード例 #25
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
    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
コード例 #26
0
ファイル: miembros_proyecto.py プロジェクト: jorgeramirez/LPM
    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 "./"
コード例 #27
0
ファイル: miembros_fase.py プロジェクト: jorgeramirez/LPM
    def post_buscar(self, *args, **kw):
        id_fase = UrlParser.parse_id(request.url, "fases")
        id_usuario = UrlParser.parse_id(request.url, "miembrosfase")
        usuario = Usuario.por_id(id_usuario)

        fase = Fase.por_id(id_fase)
        puede_desasignar = PoseePermiso("asignar-desasignar rol",
                                        id_fase=id_fase).is_met(
                                            request.environ)

        titulo = "Roles de: %s" % usuario.nombre_usuario
        tmpl_context.widget = self.table
        buscar_table_filler = MiembrosFaseRolesTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        usuarios = buscar_table_filler.get_value(usuario=usuario,
                                                 id_fase=id_fase,
                                                 **kw)

        atras = "../../"
        return dict(lista_elementos=usuarios,
                    page=titulo,
                    titulo=titulo,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    comboboxes=self.comboboxes,
                    url_action="../",
                    atras=atras,
                    puede_desasignar=puede_desasignar)
コード例 #28
0
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_item = UrlParser.parse_id(request.url, "items")
        id_version = UrlParser.parse_id(request.url, "versiones")
        titulo = self.title
        atributos = {}
        atras = "../../"

        if id_version:
            #desde controller de versiones
            p_item = PropiedadItem.por_id(id_version)
            titulo = u"Atributos de Version: %d" % p_item.version
            atributos = self.table_filler. \
                        get_value(id_version=id_version, **kw)
        elif id_item:
            #desde controller de items.
            item = Item.por_id(id_item)
            titulo = u"Atributos de Ítem: %s" % item.codigo
            atras = "../"
            atributos = self.table_filler. \
                        get_value(id_version=item.id_propiedad_item, **kw)

        tmpl_context.widget = self.table
        return dict(
            lista_elementos=atributos,
            page=titulo,
            titulo=titulo,
            modelo=self.model.__name__,
            #                    columnas=self.columnas,
            #                    opciones=self.opciones,
            url_action=self.tmp_action,
            atras=atras)
コード例 #29
0
ファイル: tipoitem.py プロジェクト: jorgeramirez/LPM
 def get_one(self, *args, **kw):
     id_tipo = int(args[0])
     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")
     
     proy = Proyecto.por_id(id_proyecto)
     puede_crear = puede_crear = PoseePermiso("crear tipo item",
                                              id_fase=id_fase).is_met(request.environ)
     if proy.estado != "Iniciado":
         puede_crear = False
         
     ti = self.table_filler.get_value(id_tipo=id_tipo, **kw)
         
     tmpl_context.widget = self.table
     fase = Fase.por_id(id_fase)
     titulo = self.title % fase.nombre
     atras = '../'
     return dict(lista_elementos=ti, 
                 page=titulo,
                 titulo=titulo, 
                 modelo=self.model.__name__, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 url_action=self.action,
                 puede_crear=puede_crear,
                 atras=atras
                 )
コード例 #30
0
ファイル: proyecto_tipoitem.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions'
        url_cont = "./" + str(obj.id_tipo_item)
        id_tipo = UrlParser.parse_id(request.url, "tipositems")
        
        if id_tipo:
            url_cont = "../" + str(obj.id_tipo_item)
        
        if UrlParser.parse_nombre(request.url, "post_buscar"):
            url_cont = "../" + str(obj.id_tipo_item)        
        
        value += '<div>' + \
                    '<a href="' + url_cont + '/edit" ' + \
                    'class="' + clase + '">Ver</a>' + \
                 '</div><br />'

        value += '<div>' + \
                    '<a href="' + url_cont + '/atributostipoitem/" ' + \
                    'class="' + clase + '">Atributos</a>' + \
                 '</div><br />'        
        
        value += '</div>'
        return value
コード例 #31
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def _my_update_params(self, d, nullable=False):
        
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
        
        if id_proyecto:
            proy = Proyecto.por_id(id_proyecto)
            
        options = []
        id_fase = UrlParser.parse_id(request.url, "fases")

        if id_fase:
            fase = Fase.por_id(id_fase)
            proy = Proyecto.por_id(fase.id_proyecto)
            
        if self.accion == "edit":
                options.append((fase.posicion, str(fase.posicion)))
                if (proy.estado != u"Iniciado"):
                    pos = range(1, proy.numero_fases + 1)
                    pos.pop(fase.posicion - 1)
                    options.extend(pos)
                    
        elif self.accion == "new":
            if (not id_proyecto):
                return d
            
            np = proy.numero_fases + 1
            options.append((np, str(np)))
            options.extend(range(1, np))
        d['options'] = options
        return d
コード例 #32
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 "./"
コード例 #33
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        atras = "../"
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            atras = "../../"
        
        puede_crear = PoseePermiso("crear fase", 
                                   id_proyecto=id_proyecto).is_met(request.environ)
        proy = Proyecto.por_id(id_proyecto)
        if proy.estado == "Iniciado":
            puede_crear = False

        titulo = self.title % proy.nombre
        fases = self.table_filler.get_value(id_proyecto=id_proyecto, **kw)
        tmpl_context.widget = self.table
  
        
        
        return dict(lista_elementos=fases, 
                    page=titulo,
                    titulo=titulo, 
                    modelo=self.model.__name__, 
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=self.tmp_action,
                    puede_crear=puede_crear,
                    comboboxes=self.comboboxes,
                    atras=atras
                    )
コード例 #34
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions_fase'
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        url_proy = "/proyectos/"
        if not id_proyecto:
            #desde el submenu fase.
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            url_proy = "/proyectos_fase/"
            
        url_cont = url_proy + "%d/fases/"
        url_cont %= id_proyecto

        if PoseePermiso('modificar fase',
                        id_fase=obj.id_fase).is_met(request.environ):
            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/edit" ' + \
                        'class="' + clase + '">Modificar</a>' + \
                     '</div><br />'

            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/rolesfase" ' + \
                        'class="' + clase + '">Roles de Fase</a>' + \
                     '</div><br />'


            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/tipositems" ' + \
                        'class="' + clase + '">Tipos de Ítem</a>' + \
                     '</div><br />'


            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/miembrosfase" ' + \
                        'class="' + clase + '">Usuarios</a>' + \
                     '</div><br />'
            
            '''
            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/nomiembrosfase" ' + \
                        'class="' + clase + '">No miembros</a>' + \
                     '</div><br />'
            '''

        proy = Proyecto.por_id(obj.id_proyecto)
        if proy.estado != "Iniciado" and \
            PoseePermiso('eliminar fase',
                         id_fase=obj.id_fase).is_met(request.environ):
            
            value += '<div><form method="POST" action="' + str(obj.id_fase) + '" class="button-to">'+\
                     '<input type="hidden" name="_method" value="DELETE" />' +\
                     '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\
                     'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\
                     'margin: 0; padding: 0; margin-left: -3px; margin-top: -3px;' + clase + '"/>'+\
                     '</form></div><br />'
                     
        value += '</div>'
        return value
コード例 #35
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
 def item_relacionado_estado(self, obj, **kw):
     id_item = UrlParser.parse_id(request.url, "items")
     id_version = UrlParser.parse_id(request.url, "versiones")
     if not id_item:
         id_item = id_version
     otro = obj.obtener_otro_item(id_item)
     p_otro = PropiedadItem.por_id(otro.id_propiedad_item)
     return p_otro.estado
コード例 #36
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
 def item_relacionado_estado(self, obj, **kw):
     id_item = UrlParser.parse_id(request.url, "items")
     id_version = UrlParser.parse_id(request.url, "versiones")
     if not id_item:
         id_item = id_version        
     otro = obj.obtener_otro_item(id_item)
     p_otro = PropiedadItem.por_id(otro.id_propiedad_item)
     return p_otro.estado
コード例 #37
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions_fase'
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        url_proy = "/proyectos/"
        if not id_proyecto:
            #desde el submenu fase.
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            url_proy = "/proyectos_fase/"

        url_cont = url_proy + "%d/fases/"
        url_cont %= id_proyecto

        if PoseePermiso('modificar fase',
                        id_fase=obj.id_fase).is_met(request.environ):
            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/edit" ' + \
                        'class="' + clase + '">Modificar</a>' + \
                     '</div><br />'

            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/rolesfase" ' + \
                        'class="' + clase + '">Roles de Fase</a>' + \
                     '</div><br />'


            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/tipositems" ' + \
                        'class="' + clase + '">Tipos de Ítem</a>' + \
                     '</div><br />'


            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/miembrosfase" ' + \
                        'class="' + clase + '">Usuarios</a>' + \
                     '</div><br />'
            '''
            value += '<div>' + \
                        '<a href="'+ url_cont + str(obj.id_fase) + '/nomiembrosfase" ' + \
                        'class="' + clase + '">No miembros</a>' + \
                     '</div><br />'
            '''

        proy = Proyecto.por_id(obj.id_proyecto)
        if proy.estado != "Iniciado" and \
            PoseePermiso('eliminar fase',
                         id_fase=obj.id_fase).is_met(request.environ):

            value += '<div><form method="POST" action="' + str(obj.id_fase) + '" class="button-to">'+\
                     '<input type="hidden" name="_method" value="DELETE" />' +\
                     '<input onclick="return confirm(\'¿Está seguro?\');" value="Eliminar" type="submit" '+\
                     'style="background-color: transparent; float:left; border:0; color: #286571; display: inline;'+\
                     'margin: 0; padding: 0; margin-left: -3px; margin-top: -3px;' + clase + '"/>'+\
                     '</form></div><br />'

        value += '</div>'
        return value
コード例 #38
0
ファイル: tipoitem.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions'
        url_cont = "./" + str(obj.id_tipo_item)
        id_tipo = UrlParser.parse_id(request.url, "tipositems")
        if id_tipo:
            url_cont = "../" + str(obj.id_tipo_item)
        
        if UrlParser.parse_nombre(request.url, "post_buscar"):
            url_cont = "../" + str(obj.id_tipo_item)
        
        pp = PoseePermiso('redefinir tipo item', 
                          id_tipo_item=obj.id_tipo_item)
        
            
        #if PoseePermiso('redefinir tipo item').is_met(request.environ):
        if pp.is_met(request.environ):
            value += '<div>' + \
                        '<a href="' + url_cont + '/edit" ' + \
                        'class="' + clase + '">Modificar</a>' + \
                     '</div><br />'

            value += '<div>' + \
                        '<a href="' + url_cont + '/atributostipoitem/" ' + \
                        'class="' + clase + '">Atributos</a>' + \
                     '</div><br />'

            value += '<div>' + \
                        '<a href="'+ url_cont + '/miembrostipo" ' + \
                        'class="' + clase + '">Usuarios</a>' + \
                     '</div><br />'

            '''
            value += '<div>' + \
                        '<a href="'+ url_cont + '/nomiembrostipo" ' + \
                        'class="' + clase + '">No miembros</a>' + \
                     '</div><br />'
            '''
            
            value += '<div>' + \
                        '<a href="'+ url_cont + '/rolestipo" ' + \
                        'class="' + clase + '">Roles de Tipo</a>' + \
                     '</div><br />'

        if obj.puede_eliminarse():
            if pp.is_met(request.environ):
                value += '<div><form method="POST" action="' + str(obj.id_tipo_item) + '" class="button-to">'+\
                         '<input type="hidden" name="_method" value="DELETE" />' +\
                         '<input onclick="return confirm(\'Está seguro?\');" value="Eliminar" type="submit" '+\
                         'style="background-color: transparent; float:left; border:0; color: #286571;'+\
                         'display: inline; margin: 0; padding: 0; margin-left:-3px;" class="' + clase + '"/>'+\
                         '</form></div><br />'
        
        
        value += '</div>'
        return value
コード例 #39
0
 def _my_update_params(self, d, nullable=False):
     options = []
     id_fase = UrlParser.parse_id(request.url, "fases")
     if not id_fase:
         id_fase = UrlParser.parse_id(request.url, "fases_desarrollo")
     if id_fase:
         fase = Fase.por_id(id_fase)
         for ti in fase.tipos_de_item:
             options.append(
                 (ti.id_tipo_item, '%s (%s)' % (ti.nombre, ti.codigo)))
     d["options"] = options
     return d
コード例 #40
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
    def new(self, *args, **kw):
        """Display a page to show a new record."""
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        atras = "./"
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            atras = "../../"

        if not id_proyecto:
            redirect(atras)
        tmpl_context.widget = self.new_form
        return dict(value=kw, page="Nueva Fase", atras=atras)
コード例 #41
0
ファイル: item.py プロジェクト: jorgeramirez/LPM
 def _my_update_params(self, d, nullable=False):
     options = []
     id_fase = UrlParser.parse_id(request.url, "fases")
     if not id_fase:
         id_fase = UrlParser.parse_id(request.url, "fases_desarrollo")
     if id_fase:
         fase = Fase.por_id(id_fase)
         for ti in fase.tipos_de_item:
             options.append((ti.id_tipo_item, '%s (%s)' % (ti.nombre, 
                                                           ti.codigo)))
     d["options"] = options
     return d
コード例 #42
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        id_item = UrlParser.parse_id(request.url, "items")
        id_version = UrlParser.parse_id(request.url, "versiones")
        titulo = self.title
        relaciones = []
        tabla = self.table
        puede_relacionar = False
        puede_nueva = False
        atras = "../../"

        if id_version:
            #desde controller de versiones
            p_item = PropiedadItem.por_id(id_version)
            titulo = u"Relaciones de Version: %d" % p_item.version
            relaciones = self.table_filler. \
                        get_value(id_version=id_version, **kw)
        elif id_item:
            #desde controller de items.
            item = Item.por_id(id_item)
            titulo = u"Relaciones de Ítem: %s" % item.codigo
            atras = "../"

            relaciones = relacion_item_table_filler. \
                        get_value(id_version=item.id_propiedad_item, **kw)
            tabla = relacion_item_table

            puede_relacionar = PoseePermiso('modificar item', \
                                id_tipo_item=item.id_tipo_item).is_met(request.environ)
            fase = Fase.por_id(item.id_fase)
            if (UrlParser.parse_nombre(request.url, "relaciones_as")):
                if (fase.posicion > 1):
                    puede_nueva = True
            else:
                puede_nueva = True

        tmpl_context.widget = tabla
        return dict(
            lista_elementos=relaciones,
            page=titulo,
            titulo=titulo,
            modelo=self.model.__name__,
            #columnas=self.columnas,
            #opciones=self.opciones,
            #comboboxes=self.comboboxes,
            url_action=self.tmp_action,
            puede_relacionar=puede_relacionar,
            atras=atras,
            puede_nueva=puede_nueva)
コード例 #43
0
ファイル: relacion.py プロジェクト: jorgeramirez/LPM
 def get_all(self, *args, **kw):
     """ 
     Retorna todos los registros
     Retorna una página HTML si no se especifica JSON
     """
     id_item = UrlParser.parse_id(request.url, "items")
     id_version = UrlParser.parse_id(request.url, "versiones")
     titulo = self.title
     relaciones = []
     tabla = self.table
     puede_relacionar = False
     puede_nueva = False
     atras = "../../"    
       
     if id_version:
         #desde controller de versiones
         p_item = PropiedadItem.por_id(id_version)
         titulo = u"Relaciones de Version: %d" % p_item.version
         relaciones = self.table_filler. \
                     get_value(id_version=id_version, **kw)
     elif id_item:
         #desde controller de items.
         item = Item.por_id(id_item)
         titulo = u"Relaciones de Ítem: %s" % item.codigo
         atras = "../"
         
         relaciones = relacion_item_table_filler. \
                     get_value(id_version=item.id_propiedad_item, **kw)
         tabla = relacion_item_table
         
         puede_relacionar = PoseePermiso('modificar item', \
                             id_tipo_item=item.id_tipo_item).is_met(request.environ)
         fase = Fase.por_id(item.id_fase)
         if (UrlParser.parse_nombre(request.url, "relaciones_as")):
             if (fase.posicion > 1):
                 puede_nueva = True
         else:
             puede_nueva = True
             
     tmpl_context.widget = tabla
     return dict(lista_elementos=relaciones, 
                 page=titulo,
                 titulo=titulo, 
                 modelo=self.model.__name__, 
                 #columnas=self.columnas,
                 #opciones=self.opciones,
                 #comboboxes=self.comboboxes,
                 url_action=self.tmp_action,
                 puede_relacionar=puede_relacionar,
                 atras=atras,
                 puede_nueva=puede_nueva
                 )
コード例 #44
0
ファイル: fase.py プロジェクト: jorgeramirez/LPM
 def new(self, *args, **kw):
     """Display a page to show a new record."""
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     atras = "./"
     if not id_proyecto:
         id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
         atras = "../../"
     
     
     if not id_proyecto:
         redirect(atras)
     tmpl_context.widget = self.new_form
     return dict(value=kw, page="Nueva Fase", atras=atras)
コード例 #45
0
ファイル: tipoitem.py プロジェクト: jorgeramirez/LPM
    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
コード例 #46
0
ファイル: adjunto.py プロジェクト: jorgeramirez/LPM
    def post_buscar(self, *args, **kw):
        """
        Controlador que recibe los parámetros de búsqueda para 
        devolver el resultado esperado.
        """
        id_item = UrlParser.parse_id(request.url, "items")
        id_version = UrlParser.parse_id(request.url, "versiones")
        titulo = self.title
        archivos = {}
        puede_crear = False
        buscar_table_filler = AdjuntoTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        atras="../../../"
        
        if id_version:
            #desde controller de versiones
            p_item = PropiedadItem.por_id(id_version)
            titulo = u"Archivos Adjuntos de Versión: %d" % p_item.version
            archivos = buscar_table_filler. \
                        get_value(id_version=id_version)
        elif id_item:
            #desde controller de items.
            item = Item.por_id(id_item)

            puede_crear = PoseePermiso("modificar item", 
                                id_tipo_item=item.id_tipo_item).is_met(request.environ)

            if puede_crear:
                p_item = PropiedadItem.por_id(item.id_propiedad_item)
                if p_item.estado in [u"Bloqueado", u"Revisión-Bloq", 
                                         u"Eliminado"]:
                    puede_crear = False

            titulo = u"Archivos Adjuntos de Ítem: %s" % item.codigo
            atras="../../"
            archivos = buscar_table_filler. \
                        get_value(id_version=item.id_propiedad_item)
        
        tmpl_context.widget = self.table
        return dict(lista_elementos=archivos, 
                    page=titulo, 
                    titulo=titulo, 
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    url_action='../',
                    puede_crear=puede_crear,
                    opciones=self.opciones,
                    atras=atras
                    )
コード例 #47
0
ファイル: miembros_fase.py プロジェクト: jorgeramirez/LPM
 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 "./"
コード例 #48
0
ファイル: historialitem.py プロジェクト: jorgeramirez/LPM
 def post_buscar(self, *args, **kw):
     """
     Controlador que recibe los parámetros de búsqueda para 
     devolver el resultado esperado.
     """
     titulo = self.title
     id_p_item = UrlParser.parse_id(request.url, "versiones")
     
     if id_p_item:
        p_item = PropiedadItem.por_id(id_p_item)
        titulo = u"Cambios en versión: %d" % p_item.version
     tmpl_context.widget = self.table
     
     buscar_table_filler = HistorialItemTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     items = buscar_table_filler.get_value(id_usuario=id_usuario, **kw)
     
     return dict(lista_elementos=items, 
                 page=titulo,
                 titulo=self.title, 
                 modelo=self.model.__name__, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 url_action=self.tmp_action,
                 atras="../../../"
                 )
コード例 #49
0
ファイル: atributotipoitem.py プロジェクト: jorgeramirez/LPM
    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, []
コード例 #50
0
    def post_buscar(self, *args, **kw):
        """
        Controlador que recibe los parámetros de búsqueda para 
        devolver el resultado esperado.
        """
        titulo = self.title
        id_p_item = UrlParser.parse_id(request.url, "versiones")

        if id_p_item:
            p_item = PropiedadItem.por_id(id_p_item)
            titulo = u"Cambios en versión: %d" % p_item.version
        tmpl_context.widget = self.table

        buscar_table_filler = HistorialItemTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        items = buscar_table_filler.get_value(id_usuario=id_usuario, **kw)

        return dict(lista_elementos=items,
                    page=titulo,
                    titulo=self.title,
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=self.tmp_action,
                    atras="../../../")
コード例 #51
0
ファイル: proyecto_tipoitem.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """
        
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        atras = "../"        
        proy = Proyecto.por_id(id_proyecto)
        puede_crear = False
        titulo = self.title % proy.nombre
        tipo_items = self.table_filler.get_value(id_proyecto=id_proyecto, 
                                                 **kw)
        tmpl_context.widget = self.table
        url_action = self.action

        return dict(lista_elementos=tipo_items,
                    page=titulo, 
                    titulo=titulo, 
                    modelo=self.model.__name__, 
                    columnas=self.columnas,
                    opciones=self.opciones, 
                    url_action=url_action,
                    puede_crear=puede_crear,
                    atras=atras
                    )
コード例 #52
0
ファイル: usuario_validator.py プロジェクト: jorgeramirez/LPM
 def _to_python(self, value, state):
     nro_doc = Usuario.by_nro_documento(value)
     id_usuario = UrlParser.parse_id(request.url, "usuarios")
     if nro_doc != None and id_usuario != nro_doc.id_usuario:
         raise Invalid('Nro de Documento ya existe en sistema', value,
                       state)
     return value
コード例 #53
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 = 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
                 )
コード例 #54
0
ファイル: miembros_proyecto.py プロジェクト: jorgeramirez/LPM
    def get_all(self, *args, **kw):
        """ 
        Retorna todos los registros
        Retorna una página HTML si no se especifica JSON
        """

        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        proy = Proyecto.por_id(id_proyecto)
        #titulo = "Miembros del Proyecto: %s" % proy.nombre
        titulo = "Lista de Usuarios"
        puede_remover = PoseePermiso("asignar-desasignar rol",
                                     id_proyecto=id_proyecto).is_met(
                                         request.environ)

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

        tmpl_context.widget = self.table
        atras = "/proyectos/%d/" % id_proyecto
        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)
コード例 #55
0
ファイル: usuario_roles_sys.py プロジェクト: jorgeramirez/LPM
 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, "usuarios")
         user = Usuario.por_id(id_user)
         c = 0
         while c < len(user.roles):
             if user.roles[c].id_rol in pks:
                 r = user.roles[c]
                 if r.nombre_rol == u"Administrador del Sistema" and \
                    len(r.usuarios) == 1:
                     #verificamos que haya mas de un administrador 
                     #del sistema
                     msg = "No puedes eliminar el rol {nr}. Solo existe "
                     msg += "un {nr}, y es usted."
                     flash(msg.format(nr=r.nombre_rol), "warning")
                     return "./"
                 del user.roles[c]
             else:
                 c += 1
         transaction.commit()
     
     flash("Roles Desasignados correctamente")
     return "./"
コード例 #56
0
ファイル: atributotipoitem.py プロジェクト: jorgeramirez/LPM
    def __actions__(self, obj):
        """Links de acciones para un registro dado"""
        value = '<div>'
        clase = 'actions'
        id = str(obj.id_atributos_por_tipo_item)
        id_tipo = UrlParser.parse_id(request.url, "tipositems")
        
       
        if PoseePermiso('redefinir tipo item',
                        id_tipo_item=obj.id_tipo_item).is_met(request.environ):
            value += '<div>' + \
                        '<a href="./' + id + '/edit" ' + \
                        'class="' + clase + '">Modificar</a>' + \
                     '</div><br />'

        if obj.puede_eliminarse():
            if PoseePermiso('redefinir tipo item',
                            id_tipo_item=obj.id_tipo_item).is_met(request.environ):
                value += '<div><form method="POST" action="' + id + '" class="button-to">'+\
                         '<input type="hidden" name="_method" value="DELETE" />' +\
                         '<input onclick="return confirm(\'Está seguro?\');" value="Eliminar" type="submit" '+\
                         'style="background-color: transparent; float:left; border:0; color: #286571;'+\
                         'display: inline; margin: 0; padding: 0; margin-left:-3px;" class="' + clase + '"/>'+\
                         '</form></div><br />'
        value += '</div>'
        return value