tables.py 5 KB
Newer Older
1 2 3 4 5 6 7 8
import django_tables2 as tables
from django.urls import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _

from .models import Proyecto


9 10 11 12 13 14 15 16 17 18 19 20
class EvaluadoresTable(tables.Table):
    """Muestra los proyectos solicitados y el evaluador asignado a ellos."""

    def render_titulo(self, record):
        enlace = reverse('proyecto_detail', args=[record.id])
        return mark_safe(f'<a href="{enlace}">{record.titulo}</a>')

    editar = tables.Column(empty_values=(), orderable=False, verbose_name='')

    def render_editar(self, record):
        enlace = reverse('evaluador_update', args=[record.id])
        return mark_safe(
21 22
            f'''<a href="{enlace}" title="{_('Editar el evaluador')}"
                aria-label="{_('Editar el evaluador')}">
23 24 25 26 27 28 29 30 31 32 33 34 35
                  <span class="fas fa-pencil-alt"></span>
                </a>'''
        )

    class Meta:
        attrs = {'class': 'table table-striped table-hover cabecera-azul'}
        model = Proyecto
        fields = ('programa', 'linea', 'titulo', 'evaluador.full_name', 'editar')
        empty_text = _('Por el momento no se ha presentado ninguna solicitud de proyecto.')
        template_name = 'django_tables2/bootstrap4.html'
        per_page = 20


36 37 38 39 40 41 42 43 44 45 46 47 48
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(
49 50
            f'''<a href="{enlace}" title="{_('Ver la evaluación')}"
                aria-label="{_('Ver la evaluación')}">
51 52 53 54 55 56 57
                  <span class="far fa-eye"></span>
                </a>'''
            if record.valoraciones.first()
            else '—'
        )

    def render_resolucion(self, record):
58 59 60 61 62 63 64 65 66
        enlace = reverse('resolucion_update', args=[record.id])
        return mark_safe(
            f'''<a href="{enlace}" title="{_('Editar la resolución de la Comisión')}"
                aria-label="{_('Editar la resolución')}">
                  <span class="fas fa-pencil-alt"></span>
                </a>'''
            if record.valoraciones.first()
            else '—'
        )
67 68 69 70 71 72 73 74 75 76

    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


77 78 79 80 81 82 83 84 85 86
class ProyectosEvaluadosTable(tables.Table):
    """Muestra los proyectos asignados a un usuario evaluador."""

    def render_titulo(self, record):
        enlace = reverse('proyecto_detail', args=[record.id])
        return mark_safe(f"<a href='{enlace}'>{record.titulo}</a>")

    boton_evaluar = tables.Column(empty_values=(), orderable=False, verbose_name='')

    def render_boton_evaluar(self, record):
87
        enlace = reverse('evaluacion', args=[record.id])
88
        return mark_safe(
89 90
            f'''<a href="{enlace}" title="{_('Evaluar el proyecto')}"
          aria-label="{_('Evaluar el proyecto')}" class="btn btn-info btn-sm">
91 92 93 94 95 96 97 98 99 100 101 102 103 104
            <span class="fas fa-balance-scale" aria-hidden="true" style="display: inline;"></span>
            &nbsp;{_('Evaluar')}
          </a>'''
        )

    class Meta:
        attrs = {'class': 'table table-striped table-hover cabecera-azul'}
        model = Proyecto
        fields = ('programa', 'linea', 'titulo', 'boton_evaluar')
        empty_text = _('Por el momento no se le ha asignado ningún proyecto.')
        template_name = 'django_tables2/bootstrap4.html'
        per_page = 20


105
class ProyectosTable(tables.Table):
106 107
    """Muestra las solicitudes de proyecto presentadas."""

108
    def render_titulo(self, record):
109
        enlace = reverse('proyecto_detail', args=[record.id])
110
        return mark_safe(f'<a href="{enlace}">{record.titulo}</a>')
111

112 113 114
    coordinadores = tables.Column(
        empty_values=(), orderable=False, verbose_name=_('Coordinador(es)')
    )
115 116 117

    def render_coordinadores(self, record):
        coordinadores = record.get_coordinadores()
118
        enlaces = [f'<a href="mailto:{c.email}">{c.get_full_name()}</a>' for c in coordinadores]
119
        return mark_safe(', '.join(enlaces))
120 121

    class Meta:
122
        attrs = {'class': 'table table-striped table-hover cabecera-azul'}
123
        model = Proyecto
124 125 126
        fields = ('programa', 'linea', 'titulo', 'coordinadores', 'estado')
        empty_text = _('Por el momento no se ha presentado ninguna solicitud de proyecto.')
        template_name = 'django_tables2/bootstrap4.html'
127
        per_page = 20