Esempio n. 1
0
 def get(self, request, pk):
     dni = username_to_dni(request.user.username)
     punto = self.get_object(Punto, pk=pk)
     form = UpdatePuntoForm(instance=punto, org=organos_miembro(dni))
     queryset = Documentos.objects.filter(punto=punto)
     context = {'form': form, 'punto': punto, 'tipo': "general"}
     return render(request, 'main/punto_update.html', context)
Esempio n. 2
0
 def post(self, request, pk):
     punto = self.get_object(Punto, pk=pk)
     dni = username_to_dni(request.user.username)
     form = UpdateAdminPuntoForm(request.POST,
                                 instance=punto,
                                 org=organos_miembro(dni))
     if form.is_valid():
         form.save()
         return redirect(
             reverse_lazy('punto_consensuado', kwargs={'pk': punto.pk}))
     return render(request, 'main/punto_update.html', {'form': form})
Esempio n. 3
0
 def post(request):
     """
     Esta función devuelve una página con un formulario donde escoger el órgano
     :param request: HttpRequest
     :return: HttpResponse
     """
     dni = username_to_dni(request.user.username)
     form = OrganosForm(request.POST, org=organos_miembro(dni))
     if form.is_valid():
         organo = form.cleaned_data['organo']
         request.session['organo'] = organo
         return redirect('puntos_list')
Esempio n. 4
0
 def get(self, request):
     """
         Devuelve:
         -Las propuestas de puntos creadas por el usuario para el organo elegido si éste no tiene privilegios
         -Todas las propuestas de puntos de ése órgano si éste tiene privilegios
         """
     dni = username_to_dni(request.user.username)
     organo = request.session.get('organo')
     context = {
         'puntos': self.get_punto_queryset(request),
         'usuario_tiene_permiso': miembro_tiene_privilegios(dni, organo)
     }
     return render(request, 'main/punto_list.html', context)
Esempio n. 5
0
 def get_punto_queryset(request):
     dni = username_to_dni(request.user.username)
     organo = request.session.get('organo')
     # si el usuario no tiene privilegios solo ve las suyas
     if miembro_tiene_privilegios(dni, organo) is False:
         puntos = Punto.objects.filter(
             Q(creador=request.user)
             & Q(organo=organo)).order_by('-fecha_modificacion')
     # si el usuario tiene privilegios
     else:
         puntos = Punto.objects.filter(
             organo=organo).order_by('-fecha_modificacion')
     return puntos
Esempio n. 6
0
 def get(self, request):
     """
         Devuelve las reuniones del órgano seleccionado
         """
     dni = username_to_dni(request.user.username)
     organo = request.session.get('organo')
     context = {
         'reuniones':
         Reunion.objects.filter(
             organo=request.session.get('organo')).order_by('-fecha_hora'),
         'usuario_tiene_permiso':
         miembro_tiene_privilegios(dni, organo)
     }
     return render(request, 'main/reunion_list.html', context)
Esempio n. 7
0
 def get(request):
     # type: (object) -> object
     if re.match(r'u[0-9]{8}', request.user.username):
         dni = username_to_dni(request.user.username)
         form = OrganosForm(org=organos_miembro(dni))
         if request.session._session.get(u'organo'):
             context = {
                 'form': form,
                 'organo_actual': request.session._session.get(u'organo')
             }
         else:
             context = {'form': form}
         return render(request, 'main/organo_selec.html', context)
     else:
         return render(request, 'main/usuario_no_valido.html')
Esempio n. 8
0
 def post(self, request, pk):
     punto = self.get_object(Punto, pk=pk)
     queryset = Documentos.objects.filter(punto=punto)
     dni = username_to_dni(request.user.username)
     form = UpdatePuntoForm(request.POST,
                            instance=punto,
                            org=organos_miembro(dni))
     if form.is_valid():
         form.save()
         return redirect(
             reverse_lazy('punto_consensuado', kwargs={'pk': punto.pk}))
     return render(request, 'main/punto_update.html', {
         'form': form,
         'punto': punto,
         'tipo': "general",
     })
Esempio n. 9
0
 def usuario_tiene_permiso(self):
     dni = username_to_dni(self.request.user.username)
     organo = self.request.session.get('organo')
     return miembro_tiene_privilegios(dni, organo)
Esempio n. 10
0
 def get(self, request, pk):
     dni = username_to_dni(request.user.username)
     punto = self.get_object(Punto, pk=pk)
     form = UpdateAdminPuntoForm(instance=punto, org=organos_miembro(dni))
     context = {'form': form}
     return render(request, 'main/punto_update.html', context)
Esempio n. 11
0
def navigation_context(request):
    """
    Este context_processor añade al contexto de las vistas los elementos de navegación definidos en el ajuste
    settings.NAVIGATION. Además, comprueba cuál es la URL actual y añade el elemento 'active' a los elementos coincidentes
    """

    # Primero, gestionamos los permisos: cada enlace puede indicar los grupos de usuarios que podrán verlo con el
    # elemento 'groups'. Si no existe este elemento todos los usuarios podrán ver el enlace
    nav = []

    # Guardamos los nombres de los grupos del usuario
    user_groups = [x.name for x in request.user.groups.all()]

    for element in settings.NAVIGATION:

        # Si el elemento de navegación no tiene restricción por grupos, se añade:
        if 'groups' not in element:
            nav.append(copy.deepcopy(element))

        # Si el usuario pertenece a alguno de los grupos permitidos, se añade
        elif set(user_groups) & set(element['groups']):
            nav.append(copy.deepcopy(element))

        # Si es administrador, se añade
        elif request.user.is_superuser:
            nav.append(copy.deepcopy(element))

    # Ahora todos los elementos que no tienen restriccion por grupos están en "nav",
    # asi que la recorremos buscando si tienen restriccion por seleccion de órgano
    nav2 = []
    for element in nav:
        # si el elemento tiene restricción por órgano y éste no está seleccionado se saca de la lista
        if not (element.get('organo_requerido') == 'si'
                and request.session.get('organo') is None):
            nav2.append(element)
    nav = nav2
    nav2 = []
    if request.user.is_authenticated() and not request.user.is_superuser:
        dni = username_to_dni(request.user.username)
        organo = request.session.get('organo')
        for element in nav:
            #si el elemento necesita permisos especiales y el usuario es un miembro se saca de la lista
            if not (element.get('permiso_requerido') == 'si'
                    and miembro_tiene_privilegios(dni, organo) is False):
                nav2.append(element)
        nav = nav2

    current_first_level = None
    current_second_level = None

    # Función en línea para comprobar si una cadena sin barras coincide con la ruta actual
    def matches(x):
        """
        Comprueba que la URL actual coincida con x. Tiene en cuenta el caso especial del home ("/")
        """

        if request.path == "/" and x == "/":
            return True
        elif x != "/" and request.path.startswith(x.rstrip('/')):
            return True
        else:
            return False

    # Recorremos todos los enlaces de navegación definidos
    for first_level_item in nav:

        # Si coincide el primer nivel, ponemos el atributo active a true
        if matches(first_level_item['url']):
            first_level_item['active'] = True
            current_first_level = first_level_item

        # Comprobamos si hay subnivel
        if 'items' not in first_level_item:
            continue

        # Recorremos subniveles
        for second_level_item in first_level_item['items']:
            if matches(second_level_item['url']):
                first_level_item['active'] = True
                second_level_item['active'] = True
                current_first_level = first_level_item
                current_second_level = second_level_item

            # Comprobamos si no hay un tercer subnivel
            if 'items' not in second_level_item:
                continue

            for third_level_item in second_level_item['items']:
                if third_level_item['url'] == request.path:
                    first_level_item['active'] = True
                    second_level_item['active'] = True
                    third_level_item['active'] = True
                    current_first_level = first_level_item
                    current_second_level = second_level_item

    return {
        'navigation':
        nav,
        'subnavigation':
        current_first_level['items']
        if current_first_level and 'items' in current_first_level else None,
        'subsubnavigation':
        current_second_level['items']
        if current_second_level and 'items' in current_second_level else None
    }