Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
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/")
Ejemplo n.º 4
0
    def calcular_impacto(self, *args, **kw):
        """Calcula el impacto"""
        id = args[0]
        id_item = int(id)
        item = Item.por_id(id_item)
        page = "Calculo de impacto de item: %s" % item.codigo
        
        atras = "../%s" % id


        #if UrlParser.parse_nombre(request.url, "fases"):
        #    atras = "../%s/edit" % id
            
        item = Item.por_id(id_item)
        sumatoria, grafo = item.calcular_impacto()
        id_proyecto = UrlParser.parse_id(request.url, "proyectos_desarrollo")
        
        #fase = Fase.por_id(item.id_fase)
        proy = Proyecto.por_id(id_proyecto)
        impacto = (float(sumatoria)/float(proy.complejidad_total)) * 100

        return dict(atras=atras,
                    impacto=str(impacto),
                    page=page,
                    ct=str(proy.complejidad_total),
                    suma=str(sumatoria),
                    grafo=grafo
                    )
Ejemplo n.º 5
0
    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_desarrollo")
        
        proy = Proyecto.por_id(id_proyecto)

        titulo = self.title % proy.nombre
        atras = "../../../"
        buscar_table_filler = FaseDesarrolloTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        fases = buscar_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='../',
                    puede_crear=False,
                    comboboxes=self.comboboxes,
                    atras=atras
                    )
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 def post_delete(self, id):
     """Elimina una fase de la bd si el proyecto no está iniciado"""
     fase = Fase.por_id(id)
     proy = Proyecto.por_id(fase.id_proyecto)
     proy.eliminar_fase(id)
     flash("Fase eliminada")
     redirect("../")
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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
                 )
Ejemplo n.º 10
0
 def post_delete(self, id):
     """Elimina una fase de la bd si el proyecto no está iniciado"""
     fase = Fase.por_id(id)
     proy = Proyecto.por_id(fase.id_proyecto)
     proy.eliminar_fase(id)
     flash("Fase eliminada")
     redirect("../")
Ejemplo n.º 11
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")
        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
                    )
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
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")
        proy = Proyecto.por_id(id_proyecto)
        titulo = "Lista de Usuarios"

        puede_incorporar = 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):
            nomiembros = self.table_filler.get_value(id_proyecto=id_proyecto,**kw)
        else:
            nomiembros = []
            
        tmpl_context.widget = self.table
        atras = "/proyectos/%d/" % id_proyecto
        return dict(lista_elementos=nomiembros, 
                    page=titulo, 
                    titulo=titulo, 
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=self.action, 
                    atras=atras,
                    puede_incorporar=puede_incorporar)
Ejemplo n.º 14
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")
        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)
Ejemplo n.º 15
0
 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
                  )
Ejemplo n.º 16
0
    def calcular_impacto(self, *args, **kw):
        """Calcula el impacto"""
        id = args[0]
        id_item = int(id)
        item = Item.por_id(id_item)
        page = "Calculo de impacto de item: %s" % item.codigo

        atras = "../%s" % id

        #if UrlParser.parse_nombre(request.url, "fases"):
        #    atras = "../%s/edit" % id

        item = Item.por_id(id_item)
        sumatoria, grafo = item.calcular_impacto()
        id_proyecto = UrlParser.parse_id(request.url, "proyectos_desarrollo")

        #fase = Fase.por_id(item.id_fase)
        proy = Proyecto.por_id(id_proyecto)
        impacto = (float(sumatoria) / float(proy.complejidad_total)) * 100

        return dict(atras=atras,
                    impacto=str(impacto),
                    page=page,
                    ct=str(proy.complejidad_total),
                    suma=str(sumatoria),
                    grafo=grafo)
Ejemplo n.º 17
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")
        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)
Ejemplo n.º 18
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/")
Ejemplo n.º 19
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")
        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
                    )
Ejemplo n.º 20
0
    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_gestconf")
        
        proy = Proyecto.por_id(id_proyecto)

        titulo = self.title % proy.nombre
        atras = "../"
        buscar_table_filler = FasesGestConfTableFiller(DBSession)
        buscar_table_filler.filtros = kw
        fases = buscar_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='../',
                    puede_crear=False,
                    comboboxes=self.comboboxes,
                    atras=atras
                    )
Ejemplo n.º 21
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_gestconf")
        
        proy = Proyecto.por_id(id_proyecto)

        titulo = self.title % proy.nombre
        atras = "../"
        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='./',
                    puede_crear=False,
                    comboboxes=self.comboboxes,
                    atras=atras
                    )
Ejemplo n.º 22
0
    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
Ejemplo n.º 23
0
 def _to_python(self, value, state):
     nombres = Proyecto.por_nombre(value)
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     print id_proyecto
     if nombres != None and id_proyecto != nombres.id_proyecto:
         raise Invalid('El nombre de proyecto ya existe en sistema',
                                     value, state)
     return value
Ejemplo n.º 24
0
 def _to_python(self, value, state):
     nombres = Proyecto.por_nombre(value)
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     print id_proyecto
     if nombres != None and id_proyecto != nombres.id_proyecto:
         raise Invalid('El nombre de proyecto ya existe en sistema', value,
                       state)
     return value
Ejemplo n.º 25
0
    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
Ejemplo n.º 26
0
 def put(self, *args, **kw):
     """Registra los cambios en la edición de un
     proyecto.
     """
     if "sprox_id" in kw:
         del kw["sprox_id"]
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     proy = Proyecto.por_id(id_proyecto)
     proy.nombre = unicode(kw["nombre"])
     proy.descripcion = unicode(kw["descripcion"])
     redirect("/proyectos/")
Ejemplo n.º 27
0
 def put(self, *args, **kw):
     """Registra los cambios en la edición de un
     proyecto.
     """
     if "sprox_id" in kw:
         del kw["sprox_id"]
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     proy = Proyecto.por_id(id_proyecto)
     proy.nombre = unicode(kw["nombre"])
     proy.descripcion = unicode(kw["descripcion"])
     redirect("/proyectos/")
Ejemplo n.º 28
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/")
Ejemplo n.º 29
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/")
Ejemplo n.º 30
0
    def edit(self, id_proyecto, *args, **kw):
        """Despliega una pagina para admistrar un proyecto"""

        pp = PoseePermiso('modificar proyecto', id_proyecto=id_proyecto)
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect("/proyectos")
        proyecto = Proyecto.por_id(id_proyecto)
        tmpl_context.widget = self.edit_form
        value = self.edit_filler.get_value(values={'id_proyecto': id_proyecto})
        value['_method'] = 'PUT'
        atras = "/proyectos/"
        return dict(value=value,
                    page="Modificar Proyecto %s" % proyecto.nombre,
                    atras=atras)
Ejemplo n.º 31
0
 def iniciar(self, id_proyecto):
     """Inicia un proyecto"""
     
     if (not PoseePermiso('iniciar proyecto', 
                     id_proyecto=id_proyecto).is_met(request.environ)):
         flash("No puedes iniciar el proyecto", "warning")
         
     proy = Proyecto.por_id(id_proyecto)
     if not proy.obtener_lider():
         msg = "No puedes iniciar el proyecto. Debes primero asignarle "
         msg += "un lider"
         flash(msg, "warning")
         redirect("/proyectos/")
     proy.iniciar_proyecto()
     flash("El proyecto se ha iniciado correctamente")
     redirect("/proyectos/")
Ejemplo n.º 32
0
    def edit(self, id_proyecto,*args, **kw):
        """Despliega una pagina para admistrar un proyecto"""

        pp = PoseePermiso('modificar proyecto', id_proyecto=id_proyecto)
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect("/proyectos")
        proyecto = Proyecto.por_id(id_proyecto)
        tmpl_context.widget = self.edit_form
        value = self.edit_filler.get_value(values={'id_proyecto': id_proyecto})
        value['_method'] = 'PUT'
        atras = "/proyectos/"
        return dict(value=value,
                    page="Modificar Proyecto %s" % proyecto.nombre,
                    atras=atras
                    )
Ejemplo n.º 33
0
    def put(self, *args, **kw):
        """update"""
        if "sprox_id" in kw:
            del kw["sprox_id"]
        id_proyecto = int(kw["id_proyecto"])
        id_fase = int(kw["id_fase"])
        del kw["id_fase"]
        pp = PoseePermiso('modificar fase', id_fase=id_fase)
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect("../")

        proy = Proyecto.por_id(id_proyecto)
        proy.modificar_fase(id_fase, **kw)
        flash("Fase modificada")
        redirect("./")
Ejemplo n.º 34
0
    def iniciar(self, id_proyecto):
        """Inicia un proyecto"""

        if (not PoseePermiso('iniciar proyecto',
                             id_proyecto=id_proyecto).is_met(request.environ)):
            flash("No puedes iniciar el proyecto", "warning")

        proy = Proyecto.por_id(id_proyecto)
        if not proy.obtener_lider():
            msg = "No puedes iniciar el proyecto. Debes primero asignarle "
            msg += "un lider"
            flash(msg, "warning")
            redirect("/proyectos/")
        proy.iniciar_proyecto()
        flash("El proyecto se ha iniciado correctamente")
        redirect("/proyectos/")
Ejemplo n.º 35
0
    def put(self, *args, **kw):
        """update"""
        if "sprox_id" in kw:
            del kw["sprox_id"]
        id_proyecto = int(kw["id_proyecto"])
        id_fase = int(kw["id_fase"])
        del kw["id_fase"]
        pp = PoseePermiso('modificar fase', id_fase=id_fase)
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect("../")

        proy = Proyecto.por_id(id_proyecto)
        proy.modificar_fase(id_fase, **kw)
        flash("Fase modificada")
        redirect("./")
Ejemplo n.º 36
0
 def _do_get_provider_count_and_objs(self, id_proyecto=None, **kw):
     """
     Retorna la Lista los proyectos del sistema sobre
     """
     if id_proyecto:
         proy  = Proyecto.por_id(id_proyecto)
         return 1, [proy]
         
     count, lista = super(ProyectoTableFiller, self).\
                         _do_get_provider_count_and_objs(**kw)
     filtrados = []                    
     for p in lista:
         pp = PoseePermiso(u"modificar proyecto", id_proyecto=p.id_proyecto)
         if pp.is_met(request.environ):
             filtrados.append(p)
         
     return len(filtrados), filtrados         
Ejemplo n.º 37
0
    def _do_get_provider_count_and_objs(self, id_proyecto=None, **kw):
        """
        Retorna la Lista los proyectos del sistema sobre
        """
        if id_proyecto:
            proy = Proyecto.por_id(id_proyecto)
            return 1, [proy]

        count, lista = super(ProyectoTableFiller, self).\
                            _do_get_provider_count_and_objs(**kw)
        filtrados = []
        for p in lista:
            pp = PoseePermiso(u"modificar proyecto", id_proyecto=p.id_proyecto)
            if pp.is_met(request.environ):
                filtrados.append(p)

        return len(filtrados), filtrados
Ejemplo n.º 38
0
 def _do_get_provider_count_and_objs(self, id_proyecto=None, **kw):
     """
     Retorna la Lista de los proyectos en los cuales el usuario
     es miembro
     """
     if id_proyecto:
         proy  = Proyecto.por_id(id_proyecto)
         return 1, [proy]
         
     count, lista = super(ProyectosFaseTableFiller, self).\
                         _do_get_provider_count_and_objs(**kw)
     filtrados = []                    
     for p in lista:
         if AlgunPermiso(tipo="Fase", 
                         id_proyecto=p.id_proyecto).is_met(request.environ):
             filtrados.append(p)
         
     return len(filtrados), filtrados         
Ejemplo n.º 39
0
 def post_buscar(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     proy = Proyecto.por_id(id_proyecto)
     titulo = "Lista de Usuarios"
     puede_incorporar = PoseePermiso("asignar-desasignar rol", 
                                     id_proyecto=id_proyecto).is_met(request.environ)
     tmpl_context.widget = no_miembros_proyecto_table
     buscar_table_filler = NoMiembrosProyectoTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     usuarios = buscar_table_filler.get_value(id_proyecto=id_proyecto,**kw)
     atras = "/proyectos/%d/" % id_proyecto
     return dict(lista_elementos=usuarios, 
                 page=titulo, titulo=titulo, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 url_action="../", 
                 atras=atras,
                 puede_incorporar=puede_incorporar)
Ejemplo n.º 40
0
 def _do_get_provider_count_and_objs(self, id_proyecto=None, **kw):
     """
     Retorna la Lista de los proyectos en los cuales el usuario
     es miembro
     """
     if id_proyecto:
         proy  = Proyecto.por_id(id_proyecto)
         return 1, [proy]
         
     count, lista = super(ProyectosFaseTipoTableFiller, self).\
                         _do_get_provider_count_and_objs(**kw)
     filtrados = []                    
     for p in lista:
         if AlgunPermiso(tipo="Tipo",
                         id_proyecto=p.id_proyecto).is_met(request.environ):
             filtrados.append(p)
         
     return len(filtrados), filtrados         
Ejemplo n.º 41
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_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
        tipo_items = self.table_filler.get_value(id_fase=id_fase, **kw)
        tmpl_context.widget = self.table
        url_action = self.action
        
        if UrlParser.parse_nombre(request.url, "post_buscar"):
            url_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
                    )
Ejemplo n.º 42
0
    def post(self, *args, **kw):
        """create a new record"""
        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")

        pp = PoseePermiso('crear tipo item', id_fase=id_fase)
        url_action = self.action
        
        if not pp.is_met(request.environ):
            flash(pp.message % pp.nombre_permiso, 'warning')
            redirect(url_action)
            
        if kw.has_key("sprox_id"):
            del kw["sprox_id"]
            
        id_padre = int(kw["id_padre"])
        id_importado = kw["id_importado"]
        
        if (kw["id_importado"]):
            id_importado = int(kw["id_importado"])
        mezclar = False
        if kw.has_key("mezclar"):
            mezclar = kw["mezclar"]
            del kw["mezclar"]
        del kw["id_padre"]
        del kw["id_importado"]
        
        proy = Proyecto.por_id(id_proyecto)
        tipo = proy.definir_tipo_item(id_padre, id_importado, mezclar, **kw)
        
        #Creamos el rol miembro  de tipo de ítem
        #plant_m = Rol.obtener_rol_plantilla(nombre_rol=u"Miembro de Tipo Item")
        #rol_m = Rol.nuevo_rol_desde_plantilla(plantilla=plant_m, 
        #                                      id=tipo.id_tipo_item)
        
        flash(u"Creacion exitosa")
        redirect(url_action)
Ejemplo n.º 43
0
    def post(self, *args, **kw):
        if "sprox_id" in kw:
            del kw["sprox_id"]
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        atras = "./"

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

        proy = Proyecto.por_id(id_proyecto)
        fase = proy.crear_fase(**kw)

        #Creamos el rol miembro  de fase
        #plant_m = Rol.obtener_rol_plantilla(nombre_rol=u"Miembro de Fase")
        #rol_m = Rol.nuevo_rol_desde_plantilla(plantilla=plant_m,
        #                                      id=fase.id_fase)

        flash("Fase Creada")
        redirect(atras)
Ejemplo n.º 44
0
 def post_buscar(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     proy = Proyecto.por_id(id_proyecto)
     titulo = "Lista de Usuarios"
     puede_incorporar = PoseePermiso("asignar-desasignar rol",
                                     id_proyecto=id_proyecto).is_met(
                                         request.environ)
     tmpl_context.widget = no_miembros_proyecto_table
     buscar_table_filler = NoMiembrosProyectoTableFiller(DBSession)
     buscar_table_filler.filtros = kw
     usuarios = buscar_table_filler.get_value(id_proyecto=id_proyecto, **kw)
     atras = "/proyectos/%d/" % id_proyecto
     return dict(lista_elementos=usuarios,
                 page=titulo,
                 titulo=titulo,
                 columnas=self.columnas,
                 opciones=self.opciones,
                 url_action="../",
                 atras=atras,
                 puede_incorporar=puede_incorporar)
Ejemplo n.º 45
0
 def post(self, *args, **kw):
     if "sprox_id" in kw:
         del kw["sprox_id"]
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     atras = "./"
     
     if not id_proyecto:
         id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
         atras = "../../"
     
     proy = Proyecto.por_id(id_proyecto)
     fase = proy.crear_fase(**kw)
     
     #Creamos el rol miembro  de fase
     #plant_m = Rol.obtener_rol_plantilla(nombre_rol=u"Miembro de Fase")
     #rol_m = Rol.nuevo_rol_desde_plantilla(plantilla=plant_m, 
     #                                      id=fase.id_fase)
     
     flash("Fase Creada")
     redirect(atras)
Ejemplo n.º 46
0
    def post_buscar(self, *args, **kw):
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        atras = "../"
        proy = Proyecto.por_id(id_proyecto)
        puede_crear = False
        titulo = self.title % proy.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_proyecto=id_proyecto)

        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)
Ejemplo n.º 47
0
 def post_buscar(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     atras = "../"        
     proy = Proyecto.por_id(id_proyecto)
     puede_crear = False
     titulo = self.title % proy.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_proyecto=id_proyecto)
     
     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
                  )
Ejemplo n.º 48
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, "miembros")
        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/miembros/" % 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)
Ejemplo n.º 49
0
    def get_one(self, *args, **kw):
        id_proyecto = UrlParser.parse_id(request.url, "proyectos")
        action = "./"
        atras = '../'
        if not id_proyecto:
            id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
            atras = "/proyectos_fase/"

        id_fase = int(args[0])
        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

        if pylons.request.response_type == 'application/json':
            return dict(
                lista=self.table_filler.get_value(id_fase=id_fase, **kw))
        if not getattr(self.table.__class__, ' ', False):
            fase = self.table_filler.get_value(id_fase=id_fase, **kw)
        else:
            fase = []

        tmpl_context.widget = self.table
        titulo = self.title % proy.nombre

        return dict(lista_elementos=fase,
                    page=titulo,
                    titulo=titulo,
                    modelo=self.model.__name__,
                    columnas=self.columnas,
                    opciones=self.opciones,
                    url_action=action,
                    puede_crear=puede_crear,
                    comboboxes=self.comboboxes,
                    atras=atras)
Ejemplo n.º 50
0
 def get_one(self, *args, **kw):
     id_proyecto = UrlParser.parse_id(request.url, "proyectos")
     action = "./"
     atras = '../'
     if not id_proyecto:
         id_proyecto = UrlParser.parse_id(request.url, "proyectos_fase")
         atras = "/proyectos_fase/"
         
     id_fase = int(args[0])
     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
         
     if pylons.request.response_type == 'application/json':
         return dict(lista=self.table_filler.get_value(id_fase=id_fase, **kw))
     if not getattr(self.table.__class__, ' ', False):
         fase = self.table_filler.get_value(id_fase=id_fase, **kw)
     else:
         fase = []
         
     tmpl_context.widget = self.table
     titulo = self.title % proy.nombre
     
     return dict(lista_elementos=fase, 
                 page=titulo,
                 titulo=titulo, 
                 modelo=self.model.__name__, 
                 columnas=self.columnas,
                 opciones=self.opciones,
                 url_action=action,
                 puede_crear=puede_crear,
                 comboboxes=self.comboboxes,
                 atras=atras
                 )
Ejemplo n.º 51
0
    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
                    )
Ejemplo n.º 52
0
 def _to_python(self, value, state):
     nombres = Proyecto.por_nombre(value)
     if nombres != None:
         raise Invalid('El nombre de proyecto ya existe en sistema', value,
                       state)
     return value
Ejemplo n.º 53
0
 def _to_python(self, value, state):
     nombres = Proyecto.por_nombre(value)
     if nombres != None:
         raise Invalid('El nombre de proyecto ya existe en sistema',
                                     value, state)
     return value