コード例 #1
0
    def __actions__(self, obj):
        """
        Define las acciones posibles para cada tipo de ítem.
        """
        primary_fields = self.__provider__.get_primary_fields(self.__entity__)
        pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
        id_tipo_item = unicode(pklist.split("-")[0])
        value = '<div>'
        if id_tipo_item != u"TI1":
            if TienePermiso("modificar tipo de item", id_fase = self.id_fase) \
                            .is_met(request.environ):
                value = value + '<div><a class="edit_link" href="'+pklist+ \
                        '/edit" style="text-decoration:none" TITLE =' \
                        ' "Modificar"></a>'\
                        '</div>'

            value = value + '<div><a class="caracteristica_link" href="' \
                    +pklist+'/caracteristicas" style="text-decoration:none"' \
                    ' TITLE = "Caracteristicas"></a></div>'
            if TienePermiso("eliminar tipo de item", id_fase = self.id_fase) \
                            .is_met(request.environ):
                value = value + '<div>'\
                    '<form method="POST" action="'+pklist+ \
                    '" class="button-to" TITLE = "Eliminar">'\
                    '<input type="hidden" name="_method" value="DELETE" />'\
                    '<input class="delete-button" onclick="return confirm' \
                    '(\'¿Está seguro?\');" value="delete" type="submit" '\
                    'style="background-color: transparent; float:left;' \
                    ' border:0; color: #286571; display: inline; margin: 0;' \
                    ' padding: 0;"/>'\
                    '</form>'\
                    '</div>'
        value = value + '</div>'
        return value
コード例 #2
0
 def __actions__(self, obj):
     """ Define las acciones posibles para cada archivo.
     """
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     item = DBSession.query(Item).filter(Item.id == self.id_item) \
         .filter(Item.version == self.version).one()
     bloqueado = False
     if item.linea_base:
         if item.linea_base.cerrado: bloqueado = True
     value = '<div>'
     if TienePermiso("descargar archivo", id_fase = item.tipo_item.fase \
                     .id).is_met(request.environ):
         value = value + '<div><a class="descarga_link"' \
                 ' href="descargar?id_archivo='+ pklist + \
                 '" style="text-decoration:none" TITLE= "Descargar"></a>'\
                 '</div>'
     if TienePermiso("modificar item", id_fase = item.tipo_item.fase.id) \
                     .is_met(request.environ) and not bloqueado:
         value = value + '<div>'\
             '<form method="POST" action="'+ pklist + \
             '" class="button-to" TITLE= "Eliminar">'\
             '<input type="hidden" name="_method" value="DELETE" />'\
             '<input class="delete-button" onclick="return confirm' \
             '(\'¿Está seguro?\');" value="delete" type="submit" '\
             'style="background-color: transparent; float:left; border:0;' \
             ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\
             '</form>'\
             '</div>'
     value = value + '</div>'
     return value
コード例 #3
0
 def _do_get_provider_count_and_objs(self, buscado = "", **kw):
     """
     Se utiliza para listar solo las fichas que cumplan ciertas
     condiciones y de acuerdo a ciertos permisos.
     """
     if self.id_fase == "":
         fichas = DBSession.query(Ficha) \
                 .filter(Ficha.id.contains(self.buscado)).all()    
     else:
         id_proyecto = self.id_fase.split("-")[1]
         permiso_asignar_rol_fase = TienePermiso("asignar rol fase", \
                     id_fase = self.id_fase).is_met(request.environ)
         permiso_asignar_rol_cualquier_fase = TienePermiso( \
                 "asignar rol cualquier fase", id_proyecto = \
                 id_proyecto).is_met(request.environ)
         if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase:
             fichas = DBSession.query(Ficha).filter(Ficha.id_fase == \
             self.id_fase).all()
             for ficha in reversed(fichas):
                 if ficha.rol.tipo != u"Fase": 
                     fichas.remove(ficha)
                 elif not (self.buscado in ficha.usuario.nombre_usuario or \
                     self.buscado in ficha.rol.nombre or self.buscado in \
                     ficha.id or self.buscado in ficha.proyecto.nombre or \
                     self.buscado in ficha.fase.nombre): fichas.remove(ficha)
                 
         else: fichas = list()
     return len(fichas), fichas 
コード例 #4
0
    def buscar(self, **kw):
        """ Lista las fases de acuerdo a un criterio de búsqueda introducido
            por el usuario.
        """
        buscar_table_filler = FaseTableFiller(DBSession)
        if "parametro" in kw:
            buscar_table_filler.init(kw["parametro"], self.id_proyecto)
        else:
            buscar_table_filler.init("", self.id_proyecto)
        tmpl_context.widget = self.table
        value = buscar_table_filler.get_value()
        d = dict(value_list = value, model = "fase", accion = "./buscar")

        cant_fases = DBSession.query(Fase).filter(Fase.id_proyecto == \
                    self.id_proyecto).count()
        otroproyecto = DBSession.query(Proyecto).filter(Proyecto.id != \
                       self.id_proyecto).filter(Proyecto.fases != None).count()
        if cant_fases < DBSession.query(Proyecto.nro_fases).filter( \
                        Proyecto.id == self.id_proyecto).scalar():
            d["suficiente"] = True
        else:
            d["suficiente"] = False
        d["model"] = "Fases"
        d["permiso_crear"] = TienePermiso("crear fase", id_proyecto = \
                            self.id_proyecto).is_met(request.environ)
        d["permiso_importar"] = TienePermiso("importar fase", id_proyecto = \
                    self.id_proyecto).is_met(request.environ) and otroproyecto
        d["direccion_anterior"] = "../.."
        return d
コード例 #5
0
ファイル: proyecto_controller.py プロジェクト: rparrapy/SAIP
    def __actions__(self, obj):
        """
        Define las acciones posibles para cada proyecto.
        """
        primary_fields = self.__provider__.get_primary_fields(self.__entity__)
        pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
        value = '<div>'
        if TienePermiso("modificar proyecto").is_met(request.environ):
            value = value + '<div><a class="edit_link" href="'+pklist+ \
                '/edit" style="text-decoration:none" TITLE= "Modificar"></a>'\
                '</div>'
        pp = TieneAlgunPermiso(tipo = u"Proyecto", recurso = u"Fase", \
                id_proyecto = pklist).is_met(request.environ)
        pf = TieneAlgunPermiso(tipo = u"Fase", recurso = u"Tipo de Item", \
                id_proyecto = pklist).is_met(request.environ)
        pfp = TienePermiso(u"asignar rol cualquier fase", \
              id_proyecto = pklist).is_met(request.environ)
        pfi = TieneAlgunPermiso(tipo = "Fase", recurso = u"Ficha", \
              id_proyecto = pklist).is_met(request.environ)
        if pp or pf or pfp or pfi:
            value = value + '<div><a class="fase_link" href="'+pklist+ \
                    '/fases" style="text-decoration:none" TITLE= "Fases"></a>'\
                    '</div>'
        if TienePermiso("asignar rol proyecto", id_proyecto = pklist).is_met( \
                        request.environ):
            value = value + '<div><a class="responsable_link" href="'+pklist+ \
                    '/responsables" style="text-decoration:none" '\
                    'TITLE= "Responsables"></a>'\
                    '</div>'
        if TienePermiso("eliminar proyecto").is_met(request.environ):
            value = value + '<div><form method="POST" action="'+pklist+ \
                    '" class="button-to" TITLE= "Eliminar">'\
                    '<input type="hidden" name="_method" value="DELETE" />'\
                    '<input class="delete-button" onclick="return confirm' \
                    '(\'¿Está seguro?\');" value="delete" type="submit" '\
                    'style="background-color: transparent; float:left; '\
                    'border:0; color: #286571; display: inline; margin: 0; '\
                    'padding: 0;"/>'\
                    '</form></div>'
        pr = DBSession.query(Proyecto).get(pklist)
        estado_proyecto(pr)
        cant_fases = DBSession.query(Fase).filter(Fase.id_proyecto == pklist) \
                    .count()
        if cant_fases == pr.nro_fases and pr.estado == u"Nuevo" and \
            TienePermiso("setear estado proyecto en desarrollo"). \
            is_met(request.environ):
            value = value + '<div><a class="inicio_link" href="iniciar/' \
                    +pklist+'" style="text-decoration:none">Inicia proyecto' \
                    '</a></div>'

        value = value + '</div>'
        return value
コード例 #6
0
    def _do_get_provider_count_and_objs(self, buscado="", **kw):
        """
        Se utiliza para listar solo los proyectos que cumplan ciertas
        condiciones y de acuerdo a ciertos permisos.
        """
        self.opcion = unicode(request.url.split("/")[-3])
        if self.opcion == unicode("tipo_item"):
            self.id_fase = unicode(request.url.split("/")[-4])
            if TienePermiso("importar tipo de item", id_fase=self.id_fase):
                proyectos = DBSession.query(Proyecto).join(Proyecto.fases) \
                        .filter(Proyecto.fases != None).order_by(Proyecto.id) \
                        .all()
                for proyecto in reversed(proyectos):
                    buscado = self.buscado in str(proyecto.nro_fases) or \
                              self.buscado in str(proyecto.fecha_inicio) or \
                              self.buscado in str(proyecto.fecha_fin) or \
                              self.buscado in proyecto.lider.nombre_usuario or \
                              self.buscado in proyecto.nombre or \
                              self.buscado in proyecto.descripcion or \
                              self.buscado in proyecto.estado
                    if not buscado: proyectos.remove(proyecto)

                for proyecto in reversed(proyectos):
                    band = True
                    for fase in proyecto.fases:
                        if len(fase.tipos_item) > 1 and \
                            fase.id != self.id_fase:
                            band = False
                    if band: proyectos.remove(proyecto)
            else:
                proyectos = list()
        else:
            self.id_proyecto = unicode(request.url.split("/")[-4])
            if TienePermiso("importar fase", id_proyecto=self.id):
                proyectos = DBSession.query(Proyecto).filter(Proyecto.id != \
                    self.id_proyecto).filter(Proyecto.fases != \
                    None).order_by(Proyecto.id).all()
                for proyecto in reversed(proyectos):
                    buscado = self.buscado in str(proyecto.nro_fases) or \
                      self.buscado in str(proyecto.fecha_inicio) or \
                      self.buscado in str(proyecto.fecha_fin) or \
                      self.buscado in proyecto.lider.nombre_usuario or \
                      self.buscado in proyecto.nombre or \
                      self.buscado in proyecto.descripcion or \
                      self.buscado in proyecto.estado
                    if not buscado: proyectos.remove(proyecto)

            else:
                proyectos = list()
        return len(proyectos), proyectos
コード例 #7
0
 def __actions__(self, obj):
     """ Define las acciones posibles para cada relación.
     """
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     value = '<div>'
     relacion = DBSession.query(Relacion).get(pklist)
     item = DBSession.query(Item).filter(Item.id == self.id_item).filter( \
             Item.version == self.version_item).one()
     bloqueado = False
     if item.linea_base:
         if item.linea_base.cerrado: bloqueado = True
     if TienePermiso("eliminar relaciones", id_fase = item.tipo_item.fase \
                     .id).is_met(request.environ) and not bloqueado and \
                     relacion.item_2 == item:
         value = value + '<div>'\
           '<form method="POST" action="'+pklist+'" class="button-to">'\
         '<input type="hidden" name="_method" value="DELETE" />'\
         '<input class="delete-button" onclick="return confirm' \
         '(\'¿Está seguro?\');" value="delete" type="submit" '\
         'style="background-color: transparent; float:left; border:0;' \
         ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\
         '</form>'\
         '</div>'
     value = value + '</div>'
     return value
コード例 #8
0
 def __actions__(self, obj):
     """
     Define las acciones posibles para cada ficha.
     """
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     value = '<div>'
     fase = DBSession.query(Fase).get(self.id_fase)
     permiso_asignar_rol_cualquier_fase = TienePermiso \
                         ("asignar rol cualquier fase", id_proyecto = \
                         fase.id_proyecto).is_met(request.environ)
     permiso_asignar_rol_fase = TienePermiso("asignar rol fase", id_fase = \
                                 self.id_fase).is_met(request.environ)
     if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase:
         value = value + '<div>'\
           '<form method="POST" action="'+pklist+'" class="button-to">'\
           '<input type="hidden" name="_method" value="DELETE" />'\
           '<input class="delete-button" onclick="return confirm' \
           '(\'Está seguro?\');" value="delete" type="submit" '\
           'style="background-color: transparent; float:left; border:0;' \
           ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\
           '</form>'\
           '</div>'
     value = value + '</div>'
     return value
コード例 #9
0
 def __actions__(self, obj):
     """
     Define las acciones posibles para cada ítem.
     """
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     id_item = pklist.split("/")[0]
     version_item = pklist.split("/")[1]
     pklist = id_item + "-" + version_item
     item = DBSession.query(Item).filter(Item.id == id_item) \
             .filter(Item.version == version_item).one()
     value = '<div>'
     bloqueado = False
     if item.linea_base:
         if item.linea_base.cerrado: bloqueado = True
     if TienePermiso("reversionar item", id_fase = item.tipo_item.fase.id) \
                     .is_met(request.environ) and not bloqueado:
         value = value + '<div><a class="reversion_link" href=' \
          '"revertir?item='+pklist+'" style="text-decoration:none" TITLE ='\
          ' "Revertir"></a>'\
           '</div>'
     value = value + '<div><a class="relacion_link" href="'+pklist+ \
         '/relaciones" style="text-decoration:none" TITLE =' \
         '"Relaciones"></a></div>'
     value = value + '<div><a class="archivo_link" href="'+pklist+ \
      '/archivos" style="text-decoration:none" TITLE = "Archivos"></a>'\
      '</div>'
     if item.anexo != "{}":
         value = value + '<div><a class="caracteristica_link" href=' \
             '"listar_caracteristicas?pk_item='+pklist+ \
             '" style="text-decoration:none" TITLE =' \
             ' "Ver caracteristicas"></a></div>'
     value = value + '</div>'
     return value
コード例 #10
0
ファイル: proyecto_controller.py プロジェクト: rparrapy/SAIP
    def _do_get_provider_count_and_objs(self, **kw):
        """
        Se utiliza para listar solo los proyectos que cumplan ciertas
        condiciones y de acuerdo a ciertos permisos.
        """
        proyectos = DBSession.query(Proyecto).order_by(Proyecto.id).all()
        for proyecto in reversed(proyectos):
            buscado = self.buscado in str(proyecto.nro_fases) or \
                      self.buscado in str(proyecto.fecha_inicio) or \
                      self.buscado in str(proyecto.fecha_fin) or \
                      self.buscado in proyecto.lider.nombre_usuario or \
                      self.buscado in proyecto.nombre or \
                      self.buscado in proyecto.descripcion or \
                      self.buscado in proyecto.estado

            if not buscado: proyectos.remove(proyecto)
        ps = TieneAlgunPermiso(tipo = u"Sistema", recurso = u"Proyecto") \
            .is_met(request.environ)
        if not ps:
            for proyecto in reversed(proyectos):
                pfp = TienePermiso(u"asignar rol cualquier fase", \
                      id_proyecto = proyecto.id).is_met(request.environ)
                pfi = TieneAlgunPermiso(tipo = "Fase", recurso = u"Ficha", \
                      id_proyecto = proyecto.id).is_met(request.environ)
                pp = TieneAlgunPermiso(tipo = u"Proyecto", recurso = u"Fase", \
                     id_proyecto = proyecto.id).is_met(request.environ)
                pf = TieneAlgunPermiso(tipo = u"Fase", recurso =
                     u"Tipo de Item", id_proyecto = proyecto.id). \
                     is_met(request.environ)

                if not (pp or pf or pfp or pfi): proyectos.remove(proyecto)

        return len(proyectos), proyectos
コード例 #11
0
    def costo(self, *args, **kw):
        """
        Calcula el costo de impacto de un ítem dado y despliega una
        representación gráfica del mismo.
        """

        if TienePermiso("calcular costo de impacto", id_fase = self.id_fase) \
                        .is_met(request.environ):
            id_item = kw["id_item"]
            if os.path.isfile('saip/public/images/grafo.png'):
                os.remove('saip/public/images/grafo.png')
            item = DBSession.query(Item).filter(Item.id == id_item) \
                .order_by(desc(Item.version)).first()
            grafo = pydot.Dot(graph_type='digraph', size="8, 16")
            valor, grafo, band = costo_impacto(item, grafo)
            grafo.write_png('saip/public/images/grafo.png')
            d = dict()
            d["costo"] = valor
            d["model"] = "Items"
            d["direccion_anterior"] = "./"
            return d
        else:
            flash(u"El usuario no cuenta con los permisos necesarios", \
                u"error")
            redirect('./')
コード例 #12
0
    def __actions__(self, obj):
        """ Define las acciones posibles para cada línea base.
        """
        primary_fields = self.__provider__.get_primary_fields(self.__entity__)
        pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
        value = '<div>'
        id_proyecto = pklist.split("-")[2]
        linea_base = DBSession.query(LineaBase).filter(LineaBase.id == pklist)\
            .one()
        items = DBSession.query(Item).filter(
            Item.id_linea_base == pklist).all()
        items_a_mostrar = UnificarItem(items)
        cant_items = len(items_a_mostrar)
        consistencia_lb(linea_base)
        fase = DBSession.query(Fase).filter(Fase.id == self.id_fase).one()
        estado_fase(fase)
        if linea_base.cerrado:
            if TienePermiso("abrir linea base",
                            id_proyecto=id_proyecto,
                            id_fase=self.id_fase).is_met(request.environ):
                value = value + '<div><a class="abrir_link" ' \
                'href="abrir?pk_linea_base='+pklist+'" ' \
                'style="text-decoration:none" TITLE = "Abrir"></a></div>'

        if not linea_base.cerrado:
            if TienePermiso("separar linea base", id_proyecto = id_proyecto,
                            id_fase = self.id_fase).is_met(request.environ) \
                            and cant_items > 1:
                value = value + '<div><a class="dividir_link" href=' \
                '"dividir?pk_linea_base='+pklist+'" style="text-decoration:' \
                'none" TITLE = "Dividir"></a></div>'

            if linea_base.consistente:
                if TienePermiso("cerrar linea base",
                                id_proyecto=id_proyecto,
                                id_fase=self.id_fase).is_met(request.environ):
                    value = value + '<div><a class="cerrar_link" href=' \
                    '"cerrar?pk_linea_base='+pklist+'" style="text-' \
                    'decoration:none" TITLE = "Cerrar"></a></div>'
        if cant_items >= 1:
            value = value + '<div><a class="item_link" href=' \
                '"'+pklist+'/items" style="text-decoration:' \
                'none" TITLE = "Listar Items"></a></div>'
        value = value + '</div>'
        return value
コード例 #13
0
 def get_all(self, *args, **kw):
     """
     Lista las fichas existentes de acuerdo a condiciones establecidas 
     en L{ficha_fase_controller.FichaTableFiller
     ._do_get_provider_count_and_objs}.
     """  
     ficha_table_filler.init("", self.id_fase)
     d = super(FichaFaseController, self).get_all(*args, **kw)
     id_proyecto = self.id_fase.split("-")[1]
     existe_rol = DBSession.query(Rol).filter(Rol.tipo == u'Fase').count()
     d["permiso_crear"] = (TienePermiso("asignar rol fase", id_fase = \
             self.id_fase).is_met(request.environ) or TienePermiso( \
             "asignar rol cualquier fase", id_proyecto = id_proyecto) \
             .is_met(request.environ)) and existe_rol
     d["model"] = "Responsables"
     d["accion"] = "./buscar"
     d["direccion_anterior"] = "../.."
     return d
コード例 #14
0
 def get_all(self):
     """Lista las fases de acuerdo a lo establecido en
        L{fase_controller_2.FaseTableFiller._do_get_provider_count_and_objs}.
     """
     if TienePermiso("importar tipo de item").is_met(request.environ) \
                 or TienePermiso("importar fase").is_met(request.environ):
         fase_table_filler.init("")
         tmpl_context.widget = self.table
         d = dict()
         d["value_list"] = self.fase_filler.get_value()
         d["model"] = "Fases"
         d["accion"] = "./buscar"
         d["direccion_anterior"] = "../.."
         return d
     else:
         flash(u"El usuario no cuenta con los permisos necesarios", \
             u"error")
         raise redirect('./')
コード例 #15
0
 def new(self, *args, **kw):
     """
     Despliega una página para la creación de una nueva ficha de fase.
     """
     id_proyecto = self.id_fase.split("-")[1]
     permiso_asignar_rol_fase = TienePermiso("asignar rol fase", \
             id_fase = self.id_fase).is_met(request.environ)
     permiso_asignar_rol_cualquier_fase = TienePermiso( \
             "asignar rol cualquier fase", id_proyecto = id_proyecto) \
             .is_met(request.environ)
     if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase:
         d = super(FichaFaseController, self).new(*args, **kw)
         d["direccion_anterior"] = "./"
         return d
     else:
         flash(u"El usuario no cuenta con los permisos necesarios", \
             u"error")
         raise redirect('./')
コード例 #16
0
 def __actions__(self, obj):
     """ Define las acciones posibles para cada fase en administración.
     """
     primary_fields = self.__provider__.get_primary_fields(self.__entity__)
     pklist = '/'.join(map(lambda x: str(getattr(obj, x)), primary_fields))
     fase = DBSession.query(Fase).filter(Fase.id == pklist).one()
     estado_fase(fase)
     value = '<div>'
     if TienePermiso("modificar fase", id_proyecto = fase.id_proyecto). \
                     is_met(request.environ):
         value = value + '<div><a class="edit_link" href="'+pklist+ \
             '/edit" style="text-decoration:none" TITLE= "Modificar"></a>'\
             '</div>'
     permiso_tipo_item = TieneAlgunPermiso(tipo = u"Fase", recurso = \
                         u"Tipo de Item", id_fase = pklist). \
                         is_met(request.environ)
     permiso_asignar_rol_cualquier_fase = TienePermiso \
                         ("asignar rol cualquier fase", id_proyecto = \
                         self.id_proyecto).is_met(request.environ)
     permiso_asignar_rol_fase = TienePermiso("asignar rol fase", id_fase = \
                                 pklist).is_met(request.environ)
     if permiso_tipo_item:
         value = value + '<div><a class="tipo_item_link" href="'+pklist+ \
                 '/tipo_item" style="text-decoration:none" TITLE=' \
                 '"Tipos de item"></a></div>'
     if permiso_asignar_rol_fase or permiso_asignar_rol_cualquier_fase:
         value = value + '<div><a class="responsable_link" href="'+pklist+ \
                 '/responsables" style="text-decoration:none" TITLE=' \
                 '"Responsables"></a></div>'
     if TienePermiso("eliminar fase", id_proyecto = fase.id_proyecto). \
                     is_met(request.environ):
         value = value + '<div>'\
             '<form method="POST" action="'+pklist+ \
             '" class="button-to" TITLE= "Eliminar">'\
             '<input type="hidden" name="_method" value="DELETE" />'\
             '<input class="delete-button" onclick="return confirm' \
             '(\'¿Está seguro?\');" value="delete" type="submit" '\
             'style="background-color: transparent; float:left; border:0;' \
             ' color: #286571; display: inline; margin: 0; padding: 0;"/>'\
             '</form>'\
             '</div>'
     value = value + '</div>'
     return value
コード例 #17
0
    def dividir(self, **kw):
        """ Permite formar una línea base a partir de dos o más líneas base
            existentes previamente.
        """
        id_proyecto = self.id_fase.split("-")[1]
        if TienePermiso("separar linea base",
                        id_proyecto=id_proyecto,
                        id_fase=self.id_fase).is_met(request.environ):
            if "pk_linea_base" in kw:
                self.id_primera_lb = kw["pk_linea_base"]
                items = DBSession.query(Item).filter(
                    Item.id_linea_base == self.id_primera_lb)
                items_a_mostrar = UnificarItem(items)

            if "seleccionados" in kw:
                lb = LineaBase()
                lb.descripcion = kw["descripcion"]
                ids_lineas_base = DBSession.query(LineaBase.id) \
                                  .filter(LineaBase.id_fase == self.id_fase) \
                                  .all()
                proximo_id_linea_base = proximo_id(ids_lineas_base)
                lb.id = proximo_id_linea_base
                lb.fase = DBSession.query(Fase) \
                          .filter(Fase.id == self.id_fase).one()
                lb.cerrado = False
                lb.consistente = True
                DBSession.add(lb)

                if type(kw["seleccionados"]).__name__ == "unicode":
                    item = DBSession.query(Item) \
                           .filter(Item.id == kw["seleccionados"]).all()
                    for aux in item:
                        aux.linea_base = DBSession.query(LineaBase) \
                                      .filter(LineaBase.id == lb.id).one()
                    consistencia_lb(lb)
                else:
                    for item_seleccionado in kw["seleccionados"]:
                        items = DBSession.query(Item) \
                                .filter(Item.id == item_seleccionado).all()
                        for item in items:
                            item.linea_base = DBSession.query(LineaBase) \
                                              .filter(LineaBase.id == lb.id) \
                                              .one()
                primera_lb = DBSession.query(LineaBase) \
                             .filter(LineaBase.id == self.id_primera_lb).one()
                consistencia_lb(primera_lb)
                redirect('./.')
            d = dict(items=items_a_mostrar, model="Lineas Base")
            d["accion"] = "dividir"
            d["direccion_anterior"] = "./"
            return d
        else:
            flash(u"El usuario no cuenta con los permisos necesarios",
                  u"error")
            redirect('./')
コード例 #18
0
 def get_all(self, *args, **kw):
     """Lista las relaciones de acuerdo a lo establecido en
        L{relacion_controller.RelacionTableFiller._do_get_provider_count_and_objs}.
     """
     relacion_table_filler.init("", self.id_item, self.version_item)
     d = super(RelacionController, self).get_all(*args, **kw)
     item = DBSession.query(Item).filter(Item.id == self.id_item) \
         .filter(Item.version == self.version_item).one()
     d["accion"] = "./buscar"
     d["fases"] = list()
     d["model"] = "Relaciones"
     lista = [x.id_item_2 for x in item.relaciones_a] + \
             [x.id_item_1 for x in item.relaciones_b]
     fase_actual = DBSession.query(Fase).filter(Fase.id == \
             item.tipo_item.id_fase).one()
     band = False
     ts_item = [t for t in fase_actual.tipos_item]
     items = list()
     for t_item in ts_item:
         items = items + t_item.items
     for it in reversed(items):
         if it.borrado: items.remove(it)
     for it in items:
         if it.id not in lista and it.id != self.id_item and \
            it.estado == u"Aprobado" and not it.revisiones:
             band = True
             break
     if band: d["fases"].append(fase_actual)
     fase_ant = DBSession.query(Fase).filter(Fase.id_proyecto == \
             item.tipo_item.fase.id_proyecto).filter(Fase.orden == \
             item.tipo_item.fase.orden - 1).first()
     if fase_ant:
         band = False
         ts_item = [t for t in fase_ant.tipos_item]
         items = list()
         for t_item in ts_item:
             items = items + t_item.items
         for it in reversed(items):
             if it.borrado: items.remove(it)
         for it in items:
             if it.id not in lista and it.linea_base:
                 if it.linea_base.cerrado and it.linea_base.consistente:
                     band = True
                     break
         if band: d["fases"].append(fase_ant)
     bloqueado = False
     if item.linea_base:
         if item.linea_base.cerrado: bloqueado = True
     if d["fases"]:
         d["permiso_crear"] = TienePermiso("crear relaciones", id_fase = \
                 fase_actual.id).is_met(request.environ) and not bloqueado
     else:
         d["permiso_crear"] = False
     d["direccion_anterior"] = "../.."
     return d
コード例 #19
0
 def buscar(self, **kw):
     """ Lista las líneas base de acuerdo a un criterio de búsqueda
         introducido por el usuario.
     """
     buscar_table_filler = LineaBaseTableFiller(DBSession)
     if "parametro" in kw:
         buscar_table_filler.init(kw["parametro"], self.id_fase)
     else:
         buscar_table_filler.init("", self.id_fase)
     tmpl_context.widget = self.table
     value = buscar_table_filler.get_value()
     d = dict(value_list=value, model="Lineas Base")
     d["accion"] = "./buscar"
     d["permiso_crear"] = TienePermiso("crear linea base",
                                       id_fase=self.id_fase).is_met(
                                           request.environ)
     d["permiso_unir"] = TienePermiso("unir lineas base",
                                      id_fase=self.id_fase).is_met(
                                          request.environ)
     cant = DBSession.query(LineaBase).filter(LineaBase.cerrado == False) \
             .filter(LineaBase.id_fase == self.id_fase).count()
     if cant < 2:
         d["lineas_base"] = False
     else:
         d["lineas_base"] = True
     items = DBSession.query(Item).filter(Item.id_tipo_item
             .contains(self.id_fase)).filter(Item.borrado == False) \
             .filter(Item.id_linea_base == None).filter(Item.estado ==
             u"Aprobado").all()
     aux = []
     for item in items:
         for item_2 in items:
             if item.id == item_2.id:
                 if item.version > item_2.version:
                     aux.append(item_2)
                 elif item.version < item_2.version:
                     aux.append(item)
     items = [i for i in items if i not in aux and not es_huerfano(i)]
     cant_items = len(items)
     if cant_items == 0: d["permiso_crear"] = False
     d["direccion_anterior"] = "../.."
     return d
コード例 #20
0
 def get_all(self, *args, **kw):
     """
     Lista los ítems existentes de acuerdo a condiciones establecidas 
     en el L{item_controller.ItemTableFiller
     ._do_get_provider_count_and_objs}.
     """
     item_table_filler.init("", self.id_fase)
     d = super(ItemController, self).get_all(*args, **kw)
     items_borrados = DBSession.query(Item).filter(Item.id.contains( \
                     self.id_fase)).filter(Item.borrado == True).count()
     d["permiso_recuperar"] = TienePermiso("recuperar item", id_fase = \
             self.id_fase).is_met(request.environ) and items_borrados
     d["permiso_crear"] = TienePermiso("crear item", id_fase = \
             self.id_fase).is_met(request.environ)
     d["accion"] = "./buscar"
     d["tipos_item"] = DBSession.query(TipoItem).filter( \
                         TipoItem.id_fase == self.id_fase)
     d["model"] = "Items"
     d["direccion_anterior"] = "../.."
     return d
コード例 #21
0
ファイル: rol_controller.py プロジェクト: rparrapy/SAIP
 def get_all(self, *args, **kw):
     """
     Lista los roles existentes de acuerdo a condiciones establecidas 
     en el L{rol_controller.RolTableFiller._do_get_provider_count_and_objs}.
     """
     d = super(RolController, self).get_all(*args, **kw)
     d["permiso_crear"] = TienePermiso("crear rol").is_met(request.environ)
     d["accion"] = "./buscar"
     d["model"] = "roles"
     d["direccion_anterior"] = "../"
     return d
コード例 #22
0
 def buscar(self, **kw):
     """
     Lista las fichas de fase de acuerdo a un criterio de búsqueda 
     introducido por el usuario.
     """
     id_proyecto = self.id_fase.split("-")[1]
     existe_rol = DBSession.query(Rol).filter(Rol.tipo == u'Fase').count()
     buscar_table_filler = FichaTableFiller(DBSession)
     if "parametro" in kw:
         buscar_table_filler.init(kw["parametro"], self.id_fase)
     else:
        buscar_table_filler.init("",self.id_fase)
     tmpl_context.widget = self.table
     value = buscar_table_filler.get_value()
     d = dict(value_list=value, model="Responsables", accion = "./buscar")
     d["permiso_crear"] = (TienePermiso("asignar rol fase", id_fase = \
             self.id_fase).is_met(request.environ) or TienePermiso( \
             "asignar rol cualquier fase", id_proyecto = id_proyecto) \
             .is_met(request.environ)) and existe_rol
     d["direccion_anterior"] = "../.."
     return d
コード例 #23
0
 def new(self, *args, **kw):
     """ Permite la creación de una nueva fase para un determinado proyecto.
     """
     if TienePermiso("crear fase", id_proyecto = self.id_proyecto). \
                     is_met(request.environ):
         d = super(FaseController, self).new(*args, **kw)
         d["direccion_anterior"] = "./"
         return d
     else:
         flash(u" El usuario no cuenta con los permisos necesarios", \
             u"error" )
         raise redirect('./')
コード例 #24
0
 def new(self, *args, **kw):
     """
     Despliega una página para la creación de una nueva ficha de sistema.
     """
     if TienePermiso("asignar rol sistema").is_met(request.environ):
         d = super(FichaSistemaController, self).new(*args, **kw)
         d["direccion_anterior"] = "./"
         return d
     else:
         flash(u"El usuario no cuenta con los permisos necesarios", \
             u"error")
         raise redirect('./')
コード例 #25
0
 def get_all(self, *args, **kw):
     """
     Lista los tipos de ítem existentes de acuerdo a condiciones 
     establecidas en el 
     L{tipo_item_controller.TipoItemTableFiller
     ._do_get_provider_count_and_objs}.
     """
     tipo_item_table_filler.init("", self.id_fase)
     d = super(TipoItemController, self).get_all(*args, **kw)
     otrafase = DBSession.query(Fase).filter(Fase.id != self.id_fase) \
                 .filter(Fase.tipos_item != None).all()
     otrafase = [f for f in otrafase if len(f.tipos_item) > 1]
     d["permiso_crear"] = TienePermiso("crear tipo de item", id_fase = \
                         self.id_fase).is_met(request.environ)
     d["permiso_importar"] = TienePermiso("importar tipo de item", \
                         id_fase = self.id_fase).is_met(request.environ) \
                         and otrafase
     d["accion"] = "./buscar"
     d["model"] = "Tipos de item"
     d["direccion_anterior"] = "../.."
     return d
コード例 #26
0
ファイル: proyecto_controller.py プロジェクト: rparrapy/SAIP
 def edit(self, *args, **kw):
     """
     Despliega una página para la modificación de un proyecto.
     """
     if TienePermiso("modificar proyecto").is_met(request.environ):
         d = super(ProyectoController, self).edit(*args, **kw)
         d["direccion_anterior"] = "../"
         return d
     else:
         flash(u"El usuario no cuenta con los permisos necesarios", \
             u"error")
         raise redirect('./')
コード例 #27
0
    def get_all(self):
        """
        Lista los proyectos existentes de acuerdo a condiciones establecidas en 
        el L{proyecto_controller_2.ProyectoTableFiller
        ._do_get_provider_count_and_objs}.
        """

        if TienePermiso("importar tipo de item").is_met(request.environ) or \
                        TienePermiso("importar fase").is_met(request.environ):
            proyecto_table_filler.init("")
            tmpl_context.widget = self.table
            d = dict()
            d["value_list"] = self.proyecto_filler.get_value()
            d["model"] = "proyectos"
            d["accion"] = "./buscar"
            d["direccion_anterior"] = "../"
            return d
        else:
            flash(u"El usuario no cuenta con los permisos necesarios", \
                 u"error")
            raise redirect('./')
コード例 #28
0
    def _do_get_provider_count_and_objs(self, **kw):
        """ Se utiliza para listar las fases que cumplan ciertas condiciones y
            ciertos permisos.
        """
        self.id_proyecto = unicode(request.url.split("/")[-3])
        self.opcion = unicode(request.url.split("/")[-5])
        self.id_fase = unicode(request.url.split("/")[-6])
        if self.opcion == unicode("tipo_item"):
            if TienePermiso("importar tipo de item", id_fase=self.id_fase):
                fases = DBSession.query(Fase).filter(Fase.id_proyecto == \
                    self.id_proyecto).filter(Fase.id != self.id_fase) \
                    .order_by(Fase.orden).all()
                fases = [f for f in fases if len(f.tipos_item) > 1]
                for fase in reversed(fases):
                    buscado = self.buscado in fase.nombre or \
                      self.buscado in fase.descripcion or \
                      self.buscado in str(fase.orden) or \
                      self.buscado in str(fase.fecha_inicio) or \
                      self.buscado in str(fase.fecha_fin) or \
                      self.buscado in fase.estado

                    if not buscado: fases.remove(fase)
            else:
                fases = list()
        else:
            if TienePermiso("importar fase", id_proyecto=self.id_proyecto):
                fases = DBSession.query(Fase).filter(Fase.id_proyecto == \
                self.id_proyecto).all()
                for fase in reversed(fases):
                    buscado = self.buscado in fase.nombre or \
                      self.buscado in fase.descripcion or \
                      self.buscado in str(fase.orden) or \
                      self.buscado in str(fase.fecha_inicio) or \
                      self.buscado in str(fase.fecha_fin) or \
                      self.buscado in fase.estado

                    if not buscado: fases.remove(fase)
            else:
                proyectos = list()
        return len(fases), fases
コード例 #29
0
 def edit(self, *args, **kw):
     """
     Despliega una página para la modificación de un tipo de ítem
     """
     self.id_fase = unicode(request.url.split("/")[-4])
     if TienePermiso("modificar tipo de item").is_met(request.environ):
         d = super(TipoItemController, self).edit(*args, **kw)
         d["direccion_anterior"] = "../"
         return d
     else:
         flash(u"El usuario no cuenta con los permisos necesarios", \
             u"error")
         raise redirect('./')
コード例 #30
0
 def buscar(self, **kw):
     """
     Lista los tipos de ítem de acuerdo a un criterio de búsqueda 
     introducido por el usuario.
     """
     buscar_table_filler = TipoItemTableFiller(DBSession)
     if "parametro" in kw:
         buscar_table_filler.init(kw["parametro"], self.id_fase)
     else:
         buscar_table_filler.init("", self.id_fase)
     tmpl_context.widget = self.table
     value = buscar_table_filler.get_value()
     d = dict(value_list = value, model = "Tipos de item", \
             accion = "./buscar")
     otrafase = DBSession.query(Fase).filter(Fase.id != self.id_fase) \
             .filter(Fase.tipos_item != None).count()
     d["permiso_crear"] = TienePermiso("crear tipo de item", id_fase = \
             self.id_fase).is_met(request.environ)
     d["permiso_importar"] = TienePermiso("importar tipo de item", \
             id_fase = self.id_fase).is_met(request.environ) and otrafase
     d["direccion_anterior"] = "../.."
     return d