feat Mostrar evaluaciones de los proyectos

parent 1bf5445c
Pipeline #576 failed with stage
in 0 seconds
......@@ -33,6 +33,39 @@ class EvaluadoresTable(tables.Table):
per_page = 20
class EvaluacionProyectosTable(tables.Table):
"""Muestra los proyectos presentados y enlaces a su evaluación y resolución de la Comisión."""
def render_titulo(self, record):
enlace = reverse('proyecto_detail', args=[record.id])
return mark_safe(f'<a href="{enlace}">{record.titulo}</a>')
evaluacion = tables.Column(empty_values=(), orderable=False, verbose_name=_('Evaluación'))
resolucion = tables.Column(empty_values=(), orderable=False, verbose_name=_('Resolución'))
def render_evaluacion(self, record):
enlace = reverse('ver_evaluacion', args=[record.id])
return mark_safe(
f'''<a href="{enlace}" title={_('Ver la evaluación')}
aria-label={_('Ver la evaluación')}>
<span class="far fa-eye"></span>
</a>'''
if record.valoraciones.first()
else '—'
)
def render_resolucion(self, record):
return 'FIXME'
class Meta:
attrs = {'class': 'table table-striped table-hover cabecera-azul'}
model = Proyecto
fields = ('programa', 'linea', 'titulo', 'evaluacion', 'resolucion')
empty_text = _('Por el momento no se ha presentado ninguna solicitud de proyecto.')
template_name = 'django_tables2/bootstrap4.html'
per_page = 20
class ProyectosEvaluadosTable(tables.Table):
"""Muestra los proyectos asignados a un usuario evaluador."""
......
......@@ -4,6 +4,7 @@ from django.urls import include, path
from .views import (
AyudaView,
EvaluacionVerView,
EvaluacionView,
HomePageView,
InvitacionView,
......@@ -14,6 +15,7 @@ from .views import (
ProyectoAnularView,
ProyectoCreateView,
ProyectoDetailView,
ProyectoEvaluacionesTableView,
ProyectoEvaluadorTableView,
ProyectoEvaluadorUpdateView,
ProyectoTableView,
......@@ -34,9 +36,14 @@ urlpatterns = [
name='proyectos_evaluados_table',
),
path('evaluador/<int:pk>/evaluacion/', EvaluacionView.as_view(), name='evaluacion'),
path('gestion/proyecto/<int:anyo>/', ProyectoTableView.as_view(), name='proyectos_table'),
path('gestion/proyectos/<int:anyo>/', ProyectoTableView.as_view(), name='proyectos_table'),
path(
'gestion/proyecto/<int:anyo>/evaluadores',
'gestion/proyectos/<int:anyo>/evaluaciones/',
ProyectoEvaluacionesTableView.as_view(),
name='evaluaciones_table',
),
path(
'gestion/proyectos/<int:anyo>/evaluadores/',
ProyectoEvaluadorTableView.as_view(),
name='evaluadores_table',
),
......@@ -45,6 +52,9 @@ urlpatterns = [
ProyectoEvaluadorUpdateView.as_view(),
name='evaluador_update',
),
path(
'gestion/proyecto/<int:pk>/evaluacion/', EvaluacionVerView.as_view(), name='ver_evaluacion'
),
path(
'participante-proyecto/aceptar_invitacion/<int:proyecto_id>/',
ParticipanteAceptarView.as_view(),
......
......@@ -45,7 +45,12 @@ from .models import (
TipoParticipacion,
Valoracion,
)
from .tables import EvaluadoresTable, ProyectosEvaluadosTable, ProyectosTable
from .tables import (
EvaluadoresTable,
EvaluacionProyectosTable,
ProyectosEvaluadosTable,
ProyectosTable,
)
class ChecksMixin(UserPassesTestMixin):
......@@ -169,6 +174,25 @@ class AyudaView(TemplateView):
template_name = 'ayuda.html'
class EvaluacionVerView(LoginRequiredMixin, PermissionRequiredMixin, TemplateView):
"""Muestra la evaluación del proyecto indicado."""
permission_required = 'indo.ver_evaluacion'
permission_denied_message = _('Sólo los gestores pueden acceder a esta página.')
template_name = 'gestion/evaluacion.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
proyecto = get_object_or_404(Proyecto, pk=kwargs['pk'])
context['proyecto'] = proyecto
context['criterios'] = Criterio.objects.filter(
convocatoria_id=proyecto.convocatoria_id
).all()
context['dict_valoraciones'] = proyecto.get_dict_valoraciones()
return context
class EvaluacionView(LoginRequiredMixin, ChecksMixin, TemplateView):
"""Muestra y permite editar las valoraciones de un proyecto."""
......@@ -540,6 +564,27 @@ class ProyectoDetailView(LoginRequiredMixin, ChecksMixin, DetailView):
return self.esta_vinculado_o_es_decano_o_es_coordinador(proyecto_id)
class ProyectoEvaluacionesTableView(LoginRequiredMixin, PermissionRequiredMixin, SingleTableView):
"""Muestra los proyectos presentados y enlaces a su evaluación y resolución de la Comisión."""
permission_required = 'indo.listar_evaluaciones'
permission_denied_message = _('Sólo los gestores pueden acceder a esta página.')
table_class = EvaluacionProyectosTable
template_name = 'gestion/proyecto/tabla_evaluaciones.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['anyo'] = self.kwargs['anyo']
return context
def get_queryset(self):
return (
Proyecto.objects.filter(convocatoria__id=self.kwargs['anyo'])
.exclude(estado__in=['BORRADOR', 'ANULADO'])
.order_by('programa__nombre_corto', 'linea__nombre', 'titulo')
)
class ProyectoTableView(LoginRequiredMixin, PermissionRequiredMixin, SingleTableView):
"""Muestra una tabla de todos los proyectos presentados en una convocatoria."""
......
......@@ -96,7 +96,10 @@
<span class="fas fa-th-list"></span>&nbsp; {% trans "Proyectos presentados" %}
</a>
<a class="dropdown-item" href="{% url 'evaluadores_table' anyo_actual %}">
<span class="fas fa-th-list"></span>&nbsp; {% trans "Evaluadores de los proyectos" %}
<span class="fas fa-balance-scale"></span>&nbsp; {% trans "Evaluadores de los proyectos" %}
</a>
<a class="dropdown-item" href="{% url 'evaluaciones_table' anyo_actual %}">
<span class="fas fa-gavel"></span>&nbsp; {% trans "Evaluaciones de los proyectos" %}
</a>
</div>
</li>
......
{% extends 'base.html' %}
{% load custom_tags i18n %}
{% block title %}{% trans "Evaluación" %}: {{ proyecto.titulo }}{% endblock title %}
{% block content %}
<div class='container-blanco'>
<h1 id="cabecera">{% trans "Evaluación" %} <small>{{ proyecto.titulo }}</small></h1>
<hr />
<br />
<div class="alert-info alert fade-in">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<span class="fas fa-info-circle"></span>
{% trans 'Aquí puede ver la evaluación del proyecto.' %}
</div><br />
{% for criterio in criterios %}
<p><strong>{{ criterio.descripcion }}</strong></p>
{% with valoracion=dict_valoraciones|get_item:criterio.id %}
{% if criterio.tipo == 'opcion' %}
{% if valoracion.opcion %}
<p>{{ valoracion.opcion.puntuacion }}: {{ valoracion.opcion.descripcion }}</p>
{% else %}
<p></p>
{% endif %}
{% elif criterio.tipo == 'texto' %}
<div>{{ valoracion.texto | default:'—'}}</div>
{% endif %}
{% endwith %}
<br />
{% endfor %}
</div>
{% endblock content %}
\ No newline at end of file
{% extends 'base.html' %}
{% load i18n %}
{% load render_table from django_tables2 %}
{% block title %}{% trans "Evaluaciones de los proyectos" %}{% endblock title %}
{% block content %}
<div class='container-blanco'>
<h1 id="presentados">{% trans "Evaluaciones de los proyectos" %} <small>{{ anyo }}</small></h1>
<hr />
<br />
<div class="alert-info alert fade-in">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<span class="fas fa-info-circle"></span>
{% blocktrans %}
Desde esta página puede ver las evaluaciones de los proyectos presentados en esta convocatoria,
así como introducir la resolución de la Comisión Evaluadora.
{% endblocktrans %}
</div><br />
{% render_table table %}
</div>
{% endblock content %}
\ No newline at end of file
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