mirror of
https://github.com/adrigongv23/G26---Telemetry-Software.git
synced 2026-08-25 11:33:17 +02:00
Sección miembros implementada
This commit is contained in:
parent
0860c191f2
commit
319a95cc91
5 changed files with 121 additions and 3 deletions
|
|
@ -27,4 +27,5 @@ urlpatterns = [
|
||||||
path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
|
path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
|
||||||
path('logout/', auth_views.LogoutView.as_view(next_page='login'), name='logout'),
|
path('logout/', auth_views.LogoutView.as_view(next_page='login'), name='logout'),
|
||||||
path('mi-perfil/', users_views.mi_perfil, name='mi_perfil'),
|
path('mi-perfil/', users_views.mi_perfil, name='mi_perfil'),
|
||||||
|
path('miembros/', users_views.listado_miembros, name='listado_miembros'),
|
||||||
]
|
]
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
<a class="nav-link" href="#">Patrocinios</a>
|
<a class="nav-link" href="#">Patrocinios</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item px-2">
|
<li class="nav-item px-2">
|
||||||
<a class="nav-link" href="#">Miembros</a>
|
<a class="nav-link" href="{% url 'listado_miembros' %}">Miembros</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if user.is_authenticated and user.rol == 'directiva' %}
|
{% if user.is_authenticated and user.rol == 'directiva' %}
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@
|
||||||
<div class="card-body p-3">
|
<div class="card-body p-3">
|
||||||
<h5 class="card-title fw-bold text-dark mb-1">Miembros del Equipo</h5>
|
<h5 class="card-title fw-bold text-dark mb-1">Miembros del Equipo</h5>
|
||||||
<p class="text-secondary small mb-2">Directorio completo de integrantes, correos corporativos y roles.</p>
|
<p class="text-secondary small mb-2">Directorio completo de integrantes, correos corporativos y roles.</p>
|
||||||
<a href="#" class="btn btn-outline-primary btn-sm fw-bold px-3">Ver Directorio</a>
|
<a href="{% url 'listado_miembros' %}" class="btn btn-outline-primary btn-sm fw-bold px-3">Ver Directorio</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
<div class="card-body p-3">
|
<div class="card-body p-3">
|
||||||
<h5 class="card-title fw-bold text-dark mb-1">Miembros del Equipo</h5>
|
<h5 class="card-title fw-bold text-dark mb-1">Miembros del Equipo</h5>
|
||||||
<p class="text-secondary small mb-2">Directorio completo de integrantes, correos corporativos y roles.</p>
|
<p class="text-secondary small mb-2">Directorio completo de integrantes, correos corporativos y roles.</p>
|
||||||
<a href="#" class="btn btn-outline-primary btn-sm fw-bold px-3">Ver Directorio</a>
|
<a href="{% url 'listado_miembros' %}" class="btn btn-outline-primary btn-sm fw-bold px-3">Ver Directorio</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
90
Plataform_Web/templates/listado_miembros.html
Normal file
90
Plataform_Web/templates/listado_miembros.html
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block title %}Miembros | Gades Manager{% endblock title %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row mb-3 flex-shrink-0">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="bg-dark text-white p-3 rounded-3 shadow-sm" style="border-left: 5px solid #0d6efd;">
|
||||||
|
<h1 class="display-6 fw-bold mb-1">Miembros del Equipo</h1>
|
||||||
|
<p class="text-white-50 mb-0">Directorio completo de integrantes de Formula Gades.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-4" style="overflow-y: auto;">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card border-0 shadow-sm">
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
<form method="get" class="row g-2 align-items-end mb-4">
|
||||||
|
<div class="col-12 col-md-3">
|
||||||
|
<label class="form-label small text-secondary mb-1">Rol</label>
|
||||||
|
<select name="rol" class="form-select">
|
||||||
|
<option value="">Todos los roles</option>
|
||||||
|
{% for value, label in rol_choices %}
|
||||||
|
<option value="{{ value }}" {% if filtro_rol == value %}selected{% endif %}>{{ label }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12 col-md-3">
|
||||||
|
<label class="form-label small text-secondary mb-1">Área Técnica</label>
|
||||||
|
<select name="especialidad" class="form-select">
|
||||||
|
<option value="">Todas las áreas</option>
|
||||||
|
{% for value, label in especialidad_choices %}
|
||||||
|
<option value="{{ value }}" {% if filtro_especialidad == value %}selected{% endif %}>{{ label }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12 col-md-4">
|
||||||
|
<label class="form-label small text-secondary mb-1">Apellido</label>
|
||||||
|
<input type="text" name="apellido" class="form-control" placeholder="Buscar por apellido..." value="{{ filtro_apellido }}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12 col-md-2 d-flex gap-2">
|
||||||
|
<button type="submit" class="btn btn-primary fw-bold flex-grow-1">Buscar</button>
|
||||||
|
{% if filtro_rol or filtro_especialidad or filtro_apellido %}
|
||||||
|
<a href="{% url 'listado_miembros' %}" class="btn btn-outline-secondary" title="Limpiar filtros">×</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover align-middle">
|
||||||
|
<thead class="table-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Usuario</th>
|
||||||
|
<th>Nombre</th>
|
||||||
|
<th>Apellidos</th>
|
||||||
|
<th>Email</th>
|
||||||
|
<th>Área Técnica</th>
|
||||||
|
<th>Rol</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for miembro in miembros %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ miembro.username }}</td>
|
||||||
|
<td>{{ miembro.first_name }}</td>
|
||||||
|
<td>{{ miembro.last_name }}</td>
|
||||||
|
<td>{{ miembro.email }}</td>
|
||||||
|
<td>{{ miembro.get_especialidad_display|default:"—" }}</td>
|
||||||
|
<td>{{ miembro.get_rol_display }}</td>
|
||||||
|
</tr>
|
||||||
|
{% empty %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="6" class="text-center text-secondary py-4">No se han encontrado miembros con los filtros seleccionados.</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -4,6 +4,7 @@ from django.contrib.auth.forms import PasswordChangeForm
|
||||||
from django.contrib.auth import update_session_auth_hash
|
from django.contrib.auth import update_session_auth_hash
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from .forms import PerfilForm
|
from .forms import PerfilForm
|
||||||
|
from .models import CustomUser
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|
@ -37,3 +38,29 @@ def mi_perfil(request):
|
||||||
'password_form': password_form,
|
'password_form': password_form,
|
||||||
}
|
}
|
||||||
return render(request, 'mi_perfil.html', context)
|
return render(request, 'mi_perfil.html', context)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def listado_miembros(request):
|
||||||
|
miembros = CustomUser.objects.all().order_by('last_name', 'first_name')
|
||||||
|
|
||||||
|
rol = request.GET.get('rol', '')
|
||||||
|
especialidad = request.GET.get('especialidad', '')
|
||||||
|
apellido = request.GET.get('apellido', '')
|
||||||
|
|
||||||
|
if rol:
|
||||||
|
miembros = miembros.filter(rol=rol)
|
||||||
|
if especialidad:
|
||||||
|
miembros = miembros.filter(especialidad=especialidad)
|
||||||
|
if apellido:
|
||||||
|
miembros = miembros.filter(last_name__icontains=apellido)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
'miembros': miembros,
|
||||||
|
'rol_choices': CustomUser.ROL_CHOICES,
|
||||||
|
'especialidad_choices': CustomUser.ESPECIALIDAD_CHOICES,
|
||||||
|
'filtro_rol': rol,
|
||||||
|
'filtro_especialidad': especialidad,
|
||||||
|
'filtro_apellido': apellido,
|
||||||
|
}
|
||||||
|
return render(request, 'listado_miembros.html', context)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue