diff --git a/sigi/apps/eventos/templates/eventos/alocacao_equipe.html b/sigi/apps/eventos/templates/eventos/alocacao_equipe.html new file mode 100644 index 0000000..1e9c59f --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/alocacao_equipe.html @@ -0,0 +1,75 @@ +{% extends "admin/base_site.html" %} +{% load static i18n djbs_extras %} + +{% block extrastyle %} + {{ block.super }} + +{% endblock %} + +{% block breadcrumbs %} + + +{% endblock %} + +{% block content_title %} +
+ {% if semana_pesquisa %} + {% for s in semanas %} + {% if forloop.counter == semana_pesquisa %} + {% blocktrans with s=s %}Alocação de equipe na semana {{ s }}{% endblocktrans %} + {% endif %} + {% endfor %} + {% elif mes_pesquisa %} + {% blocktrans with ano=ano_pesquisa|stringformat:"04d" mes=mes_pesquisa|stringformat:"02d" %}Alocação de equipe em {{ mes }} / {{ ano }}{% endblocktrans %} + {% else %} + {% blocktrans with ano=ano_pesquisa|stringformat:"04d" %}Alocação de equipe em {{ ano }}{% endblocktrans %} + {% endif %} +
+{% endblock %} + +{% block content %} +
+
+ {% icon "filter" %} {% translate "Filtros" %} +
+
+ + + {% if semanas %} + + {% endif %} +
+ +
+
+
+ {% include "eventos/snippets/alocacao_equipe_snippet.html" with mode="html" %} +
+
+ {% if semana_pesquisa %} + {% include "eventos/snippets/calendario_modals.html" %} + {% endif %} +{% endblock %} \ No newline at end of file diff --git a/sigi/apps/eventos/templates/eventos/alocacao_equipe_pdf.html b/sigi/apps/eventos/templates/eventos/alocacao_equipe_pdf.html new file mode 100644 index 0000000..a498f02 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/alocacao_equipe_pdf.html @@ -0,0 +1,29 @@ +{% extends "pdf/base_report.html" %} +{% load static %} +{% load i18n %} + +{% block page_size %}A4 landscape{% endblock %} +{% block extra_style %} + {{ block.super }} + a { + color: black; + text-decoration: none; + } +{% endblock %} + +{% block main_content %} +
+ {% if semana_pesquisa %} + {% for s in semanas %} + {% if forloop.counter == semana_pesquisa %} + {% blocktrans with s=s %}Alocação de equipe na semana {{ s }}{% endblocktrans %} + {% endif %} + {% endfor %} + {% elif mes_pesquisa %} + {% blocktrans with ano=ano_pesquisa|stringformat:"04d" mes=mes_pesquisa|stringformat:"02d" %}Alocação de equipe em {{ mes }} / {{ ano }}{% endblocktrans %} + {% else %} + {% blocktrans with ano=ano_pesquisa|stringformat:"04d" %}Alocação de equipe em {{ ano }}{% endblocktrans %} + {% endif %} +
+ {% include "eventos/snippets/alocacao_equipe_snippet.html" %} +{% endblock %} diff --git a/sigi/apps/eventos/templates/eventos/snippets/alocacao_equipe_snippet.html b/sigi/apps/eventos/templates/eventos/snippets/alocacao_equipe_snippet.html new file mode 100644 index 0000000..8e79714 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/snippets/alocacao_equipe_snippet.html @@ -0,0 +1,30 @@ + + + + {% for coluna in cabecalho %}{% endfor %} + + + + {% for linha in linhas %} + + {% for coluna in linha %} + {% if forloop.first %} + + {% elif forloop.last and not semana_pesquisa %} + + {% else %} + + {% endif %} + {% endfor %} + + {% endfor %} + +
{{ coluna }}
{{ coluna }}{{ coluna }} + {% if semana_pesquisa %} + {% for evento in coluna %} +

{{ evento.nome }}

+ {% endfor %} + {% else %} + {{ coluna }} + {% endif %} +
diff --git a/sigi/apps/eventos/views.py b/sigi/apps/eventos/views.py index a1cec90..26ca93a 100644 --- a/sigi/apps/eventos/views.py +++ b/sigi/apps/eventos/views.py @@ -315,8 +315,9 @@ def alocacao_equipe(request): lang = to_locale(get_language()) + ".UTF-8" locale.setlocale(locale.LC_ALL, lang) - dados = [] - eventos = Evento.objects.exclude(status="C").prefetch_related("equipe_set") + eventos = Evento.objects.exclude( + status__in=(Evento.STATUS_CANCELADO, Evento.STATUS_SOBRESTADO) + ).prefetch_related("equipe_set") num_cols = 12 @@ -344,6 +345,7 @@ def alocacao_equipe(request): else: eventos = eventos.filter(data_inicio__year=ano_pesquisa) + dados = [] for evento in eventos: for p in evento.equipe_set.all(): registro = None @@ -355,13 +357,13 @@ def alocacao_equipe(request): if semana_pesquisa > 0: registro = [ p.membro.pk, - p.membro.nome_completo, + p.membro.get_apelido(), OrderedDict([(dia, []) for dia in dias]), ] else: registro = [ p.membro.pk, - p.membro.nome_completo, + p.membro.get_apelido(), [{"dias": 0, "eventos": 0} for __ in range(num_cols)], ] dados.append(registro) @@ -441,11 +443,15 @@ def alocacao_equipe(request): .values_list("data_inicio__year", flat=True), "ano_pesquisa": ano_pesquisa, "linhas": linhas, + "meses": meses, } if mes_pesquisa > 0: context["mes_pesquisa"] = mes_pesquisa - context["meses"] = meses + context["semanas"] = [ + _(f"de {inicio:%d/%m} a {fim:%d/%m}") for inicio, fim in semanas + ] + if semana_pesquisa > 0: cabecalho = [_("Servidor")] + dias context["semana_pesquisa"] = semana_pesquisa @@ -468,7 +474,7 @@ def alocacao_equipe(request): context["title"] = _("Alocação de equipe") context["pdf"] = True return WeasyTemplateResponse( - filename="alocacao_equipe.pdf", + filename=f"alocacao_equipe_{ano_pesquisa}.pdf", request=request, template="eventos/alocacao_equipe_pdf.html", context=context, @@ -477,7 +483,7 @@ def alocacao_equipe(request): elif formato == "csv": response = HttpResponse(content_type="text/csv") response["Content-Disposition"] = ( - 'attachment; filename="alocacao_equipe_%s.csv"' % (ano_pesquisa,) + f'attachment; filename="alocacao_equipe_{ano_pesquisa}.csv"' ) writer = csv.writer(response) writer.writerow(cabecalho)