feat Mostrar tablas con los proyectos coordinados/participados/invitado

parent d93c9e57
......@@ -440,6 +440,12 @@ class Proyecto(models.Model):
except ParticipanteProyecto.DoesNotExist:
return None
def get_usuario_coordinador(self):
pp = ParticipanteProyecto.objects.get(
proyecto_id=self.id, tipo_participacion_id="coordinador"
)
return pp.usuario
def __str__(self):
return self.codigo
......
......@@ -12,7 +12,8 @@ from .views import (
ProyectoDetailView,
ProyectoPresentarView,
ProyectoUpdateFieldView,
ProyectosUsuarioListView,
# ProyectosUsuarioListView,
ProyectosUsuarioView,
)
urlpatterns = [
......@@ -41,9 +42,7 @@ urlpatterns = [
ProyectoPresentarView.as_view(),
name="proyecto_presentar",
),
path(
"proyecto/", ProyectosUsuarioListView.as_view(), name="proyectos_usuario_list"
),
path("proyecto/", ProyectosUsuarioView.as_view(), name="proyectos_usuario_list"),
]
if settings.DEBUG:
......
......@@ -306,6 +306,7 @@ class ProyectoPresentarView(LoginRequiredMixin, ChecksMixin, RedirectView):
class ProyectoUpdateFieldView(LoginRequiredMixin, ChecksMixin, UpdateView):
"""Actualiza un campo de una solicitud de proyecto."""
# TODO: Modificar estado, sólo para gestores
# No permitir modificar convocatoria, etc
# TODO: Comprobar estado/fecha
......@@ -334,22 +335,48 @@ class ProyectoUpdateFieldView(LoginRequiredMixin, ChecksMixin, UpdateView):
return self.es_coordinador(self.kwargs["pk"])
class ProyectosUsuarioListView(LoginRequiredMixin, ListView):
"""Lista los proyectos coordinados por el usuario actual."""
# class ProyectosUsuarioListView(LoginRequiredMixin, ListView):
# """Lista los proyectos coordinados por el usuario actual."""
# context_object_name = "proyectos"
# template_name = "proyecto/list.html"
# def get_queryset(self):
# # TODO ¿Listar sólo los de la convocatoria actual?
# usuario = self.request.user
# queryset = Proyecto.objects.filter(
# participantes__tipo_participacion_id__in=[
# "coordinador",
# "coordinador_principal",
# ],
# participantes__usuario=usuario,
# )
# # print(queryset.query) # DEBUG
# return queryset
context_object_name = "proyectos"
template_name = "proyecto/list.html"
class ProyectosUsuarioView(LoginRequiredMixin, TemplateView):
"""Lista los proyectos a los que está vinculado el usuario actual."""
def get_queryset(self):
# TODO ¿Listar sólo los de la convocatoria actual?
template_name = "proyecto/mis-proyectos.html"
def get_context_data(self, **kwargs):
usuario = self.request.user
coordinador = "coordinador"
queryset = Proyecto.objects.filter(
context = super().get_context_data(**kwargs)
context["proyectos_coordinados"] = Proyecto.objects.filter(
participantes__usuario=usuario,
participantes__tipo_participacion_id__in=[
"coordinador",
"coordinador_principal",
],
).all()
context["proyectos_participados"] = Proyecto.objects.filter(
participantes__usuario=usuario,
)
# print(queryset.query) # DEBUG
return queryset
participantes__tipo_participacion_id="participante",
).all()
context["proyectos_invitado"] = Proyecto.objects.filter(
participantes__usuario=usuario,
participantes__tipo_participacion_id="invitado",
).all()
return context
{% extends 'base.html' %}
{% load i18n %}
{% block title %}{% trans "Proyectos vinculadosl usuario" %}{% endblock title %}
{% block description %}{% trans "Proyectos vinculados al usuario" %}{% endblock description %}
{% block content %}
<div class="container-blanco">
<h1>{% trans "Proyectos coordinados" %}</h1>
<hr />
<br />
{% if proyectos_coordinados %}
<div class="table-responsive">
<table class="table table-hover table-striped table-sm">
<tr>
<th>{% trans 'Programa' %}</th>
<th>{% trans 'Línea' %}</th>
<th>{% trans 'Título' %}</th>
<th>{% trans 'Estado' %}</th>
</tr>
{% for proyecto in proyectos_coordinados %}
<tr>
<td>{{proyecto.programa.nombre_corto}}</td>
<td>{{proyecto.linea.nombre}}</td>
<td><a href="{% url 'proyecto_detail' proyecto.id %}">{{ proyecto.titulo }}</a></td>
<td>{{proyecto.get_estado_display}}</td>
</tr>
{% endfor %}
</table>
</div>
{% else %}
<p>{% trans 'No coordina ningún proyecto.' %}</p>
{% endif %}
<p><a href="{% url 'proyecto_new' %}" class="btn btn-info">{% trans "Solicitar nuevo proyecto" %}</a></p>
<br /><br />
<h1>{% trans "Proyectos participados" %}</h1>
<hr />
<br />
{% if proyectos_participados %}
<div class="table-responsive">
<table class="table table-hover table-striped table-sm">
<tr>
<th>{% trans 'Programa' %}</th>
<th>{% trans 'Línea' %}</th>
<th>{% trans 'Título' %}</th>
<th>{% trans 'Coordinador' %}</th>
</tr>
{% for proyecto in proyectos_participados %}
<tr>
<td>{{proyecto.programa.nombre_corto}}</td>
<td>{{proyecto.linea.nombre}}</td>
<td><a href="{% url 'proyecto_detail' proyecto.id %}">{{ proyecto.titulo }}</a></td>
<td>{{proyecto.get_usuario_coordinador.get_full_name}}</td>
</tr>
{% endfor %}
</table>
</div>
{% else %}
<p>{% trans 'No participa en ningún proyecto.' %}</p>
{% endif %}
<br /><br />
<h1>{% trans "Proyectos invitado" %}</h1>
<hr />
<br />
{% if proyectos_invitado %}
<div class="table-responsive">
<table class="table table-hover table-striped table-sm">
<tr>
<th>{% trans 'Programa' %}</th>
<th>{% trans 'Línea' %}</th>
<th>{% trans 'Título' %}</th>
<th>{% trans 'Coordinador' %}</th>
</tr>
{% for proyecto in proyectos_invitado %}
<tr>
<td>{{proyecto.programa.nombre_corto}}</td>
<td>{{proyecto.linea.nombre}}</td>
<td><a href="{% url 'proyecto_detail' proyecto.id %}">{{ proyecto.titulo }}</a></td>
<td>{{proyecto.get_usuario_coordinador.get_full_name}}</td>
</tr>
{% endfor %}
</table>
</div>
{% else %}
<p>{% trans 'No está invitado a ningún proyecto.' %}</p>
{% endif %}
</div>
{% endblock content %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment