From df1f5619508c97e2e81c2e2f32c355cc43cbb482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Wed, 11 Dec 2024 15:42:26 -0300 Subject: [PATCH] =?UTF-8?q?Ajusta=20diversos=20relat=C3=B3rios=20para=20bo?= =?UTF-8?q?otstrap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erros_gescon_report_view/report_pdf.html | 11 + .../admin/eventos/custos_eventos_report.html | 22 ++ .../eventos/custos_eventos_report_pdf.html | 101 +++++++ .../custos_eventos_report_snippet.html | 263 ++++++++++++++++++ .../admin/eventos/custos_servidor_report.html | 22 ++ .../eventos/custos_servidor_report_pdf.html | 98 +++++++ .../custos_servidor_report_snippet.html | 36 +++ sigi/apps/eventos/views.py | 9 +- 8 files changed, 559 insertions(+), 3 deletions(-) create mode 100644 sigi/apps/convenios/templates/convenios/report/erros_gescon_report_view/report_pdf.html create mode 100644 sigi/apps/eventos/templates/admin/eventos/custos_eventos_report.html create mode 100644 sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_pdf.html create mode 100644 sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_snippet.html create mode 100644 sigi/apps/eventos/templates/admin/eventos/custos_servidor_report.html create mode 100644 sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_pdf.html create mode 100644 sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_snippet.html diff --git a/sigi/apps/convenios/templates/convenios/report/erros_gescon_report_view/report_pdf.html b/sigi/apps/convenios/templates/convenios/report/erros_gescon_report_view/report_pdf.html new file mode 100644 index 0000000..a4b94b0 --- /dev/null +++ b/sigi/apps/convenios/templates/convenios/report/erros_gescon_report_view/report_pdf.html @@ -0,0 +1,11 @@ +{% extends "utils/report/report_pdf.html" %} +{% load i18n %} + +{% block main_content %} + {{ block.super }} +
+
+

{% translate "Resumo da última importação de dados do Gescon" %}

+ {{ ultima_importacao }} +
+{% endblock %} \ No newline at end of file diff --git a/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report.html b/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report.html new file mode 100644 index 0000000..20a5466 --- /dev/null +++ b/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report.html @@ -0,0 +1,22 @@ +{% extends 'utils/report/report.html' %} +{% load i18n %} + +{% block extrastyle %} +{{ block.super }} + +{% endblock %} + +{% block data %} + {% if eventos %} + {% include "admin/eventos/custos_eventos_report_snippet.html" %} + {% endif %} +{% endblock data %} diff --git a/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_pdf.html b/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_pdf.html new file mode 100644 index 0000000..ee58dd3 --- /dev/null +++ b/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_pdf.html @@ -0,0 +1,101 @@ +{% extends 'pdf/base_report.html' %} +{% load static i18n sigi_tags %} + +{% block page_size %}A4 landscape{% endblock page_size %} +{% block page_margin %}3cm 1cm 2cm 1cm{% endblock page_margin %}; + +{% block extra_style %} + {{ block.super }} + aside { + margin-left: 8px; + font-size: 0.8em; + color: #666; + } + blockquote { + margin: 12px 0 12px; + padding-left: 1.5rem; + border-left: 5px solid #ee6e73; + font-size: 1.4em; + font-weight: bold; + } + tr:nth-child(even) { + background-color: initial; + } + .even-row { + background-color: #d2d2d2 !important; + } + + .sessao-resumo { + align-items: stretch; + display: flex; + flex-wrap: wrap; + width: 100%; + margin-top: 24px; + } + .card-resumo { + background-color: #eeeeef; + border-radius: 2px; + box-sizing: border-box; + margin: 6px; + flex-basis: 49%; + padding: 0 6px 6px 6px; + position: relative; + width: 100%; + } + .card-resumo.full { + flex-basis: 98%; + } + + .index-cell { + width: 2em; + text-align: center; + } + .label-resumo { + min-width: 30em; + } + .timestamp-container { + width: 100%; + margin: 24px 10px; + border-left: 5px solid #ee6e73; + font-size: 1.3em; + } + .timestamp-row { + display: flex; + flex-wrap: wrap; + margin-bottom: 6px; + } + .timestamp-col { + position: relative; + padding-left: 15px; + padding-right: 15px; + } + .timestamp-label { + flex: 0 0 12%; + max-width: 12%; + font-weight: bold; + } +{% endblock %} + +{% block main_content %} +
+
+
+ {% trans "Data inicial" %}: +
+
+ {{ data_inicio|date:"SHORT_DATE_FORMAT" }}
+
+
+
+
+ {% trans "Data final" %}: +
+
+ {{ data_fim|date:"SHORT_DATE_FORMAT" }} +
+
+
+ +{% include "admin/eventos/custos_eventos_report_snippet.html" %} + +{% endblock %} \ No newline at end of file diff --git a/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_snippet.html b/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_snippet.html new file mode 100644 index 0000000..8d7f11c --- /dev/null +++ b/sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_snippet.html @@ -0,0 +1,263 @@ +{% load static i18n sigi_tags %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% for evento in eventos %} + {% with equipe_count=evento.equipe_ext|length|default:1 %} + + + + + + + + {% for membro in evento.equipe_ext %} + {% if not forloop.first %}{% endif %} + + + + + + + + {% if forloop.first %} + + + + {% endif %} + + {% empty %} + + + + + + {% endfor %} + {% endwith %} + {% endfor %} + +
{% trans "Início / término" %}{% trans "SIGAD" %}{% trans "Evento" %}{% trans "Casa anfitriã" %}{% trans "Dur. (dias)" %}{% trans "Tot part." %}{% trans "Equipe" %}{% trans "Custo" %}
{% trans "Nome" %}{% trans "Função" %}{% trans "Diárias" %}{% trans "Passagens" %}
{% trans "Qtde." %}{% trans "Valor total" %}{% trans "Valor total" %}{% trans "Emissão" %}{% trans "Antec. (dias)" %}{% trans "Total" %}{% trans "Médio partic." %}{% trans "Médio equipe" %}
+ {% blocktranslate with inicio=evento.data_inicio|date:"SHORT_DATE_FORMAT" termino=evento.data_termino|date:"SHORT_DATE_FORMAT" %} + {{ inicio }} a {{ termino }} + {% endblocktranslate %} + {{ evento.num_processo }} + {% blocktranslate with nome=evento.nome turma=evento.turma %} + {{ nome }} - turma {{ turma }} + {% endblocktranslate %} + {{ evento.casa_anfitria|default:"" }}{{ evento.duracao_dias|default:"-" }}{{ evento.total_participantes|default:"-" }}
{{ membro.membro.get_apelido }}{{ membro.funcao }}{{ membro.qtde_diarias|floatformat:2|default:"-" }}{{ membro.total_diarias|floatformat:2|default:"-" }}{{ membro.total_passagens|floatformat:2|default:"-" }}{{ membro.emissao_passagens|default:"-" }}{{ membro.antecedencia|default:"-" }}{{ evento.custo_total|floatformat:2|default:"-" }}{{ evento.custo_medio_participante|floatformat:2|default:"-" }}{{ evento.custo_medio_membro|floatformat:2|default:"-" }}
{% trans "Equipe não definida" %}{{ evento.custo_total|floatformat:2|default:"-" }}{{ evento.custo_medio_participante|floatformat:2|default:"-" }}{{ evento.custo_medio_membro|floatformat:2|default:"-" }}
+ +{# Resumo do relatório #} + +
+
+
{% trans "Dados gerais" %}
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{% cycle "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" as letra %}{% trans "Quantidade de eventos" %}{{ resumo.qtde_oficinas|default:"-" }}
{% cycle letra %}{% trans "Total de participantes" %}{{ resumo.tot_participantes|default:"-" }}
{% cycle letra %}{% trans "Média de participantes por evento" %} [B / A]{{ resumo.media_participantes|default:"-" }}
{% cycle letra %}{% trans "Mínimo de participantes" %}{{ resumo.min_participantes|default:"-" }}
{% cycle letra %}{% trans "Máximo de participantes" %}{{ resumo.max_participantes|default:"-" }}
+
+
+
{% trans "Equipes" %}
+ + + + + + + + + + + + + + + + + + + + + +
{% cycle letra %}{% trans "Total de servidores em missão" %}{{ resumo.tot_servidores|default:"-" }}
{% cycle letra %}{% trans "Tamanho médio das equipes [F / A]" %}{{ resumo.media_membros|default:"-" }}
{% cycle letra %}{% trans "Menor equipe" %}{{ resumo.min_membros|default:"-" }}
{% cycle letra %}{% trans "Maior equipe" %}{{ resumo.max_membros|default:"-" }}
+
+
+
{% trans "Tempo" %}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{% cycle letra %}{% trans "Total de dias de evento" %}{{ resumo.tot_dias|default:"-" }}
{% cycle letra %}{% trans "Duração média dos eventos (dias) [J / A]" %}{{ resumo.media_dias|default:"-" }}
{% cycle letra %}{% trans "Total de diárias" %}{{ resumo.tot_diarias|default:"-" }}
{% cycle letra %}{% trans "Média de diárias por evento [L / A]" %}{{ resumo.media_diarias|default:"-" }}
{% cycle letra %}{% trans "Antecedência média na emissão de passagens" %}{{ resumo.media_antecedencia|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Menor antecedência" %}{{ resumo.min_antecedencia|default:"-" }}
{% cycle letra %}{% trans "Maior antecedência" %}{{ resumo.max_antecedencia|default:"-" }}
+
+
+
{% trans "Custos" %}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{% cycle letra %}{% trans "Custo total" %}{{ resumo.tot_custo_total|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Total com diárias" %}{{ resumo.tot_custo_diarias|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Total com passagens" %}{{ resumo.tot_custo_passagens|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Custo médio dos eventos [Q / A]" %}{{ resumo.media_custo_total|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Custo médio de diárias por evento [R / A]" %}{{ resumo.media_custo_diarias|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Custo médio de passagens por evento [S / A]" %}{{ resumo.media_custo_passagens|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Custo médio por participante [Q / B]" %}{{ resumo.media_custo_participantes|floatformat:2|default:"-" }}
{% cycle letra %}{% trans "Gasto médio por membro da equipe" %}{{ resumo.media_custo_membro|floatformat:2|default:"-" }}
+
+
+
{% trans "Custos por região" %}
+ + + + + + + + + + + + + + + + + + + + + + + + {% for data in custos_regiao %} + + + + + + + + + + + + + + + + {% endfor %} + +
{% trans "Região" %}{% trans "Custos com diárias" %}{% trans "Custos com passagens" %}{% trans "Custo total" %}
{% trans "Mínimo" %}{% trans "Médio" %}{% trans "Máximo" %}{% trans "Total" %}{% trans "Mínimo" %}{% trans "Médio" %}{% trans "Máximo" %}{% trans "Total" %}{% trans "Mínimo" %}{% trans "Médio" %}{% trans "Máximo" %}{% trans "Total" %}
{{ data.nome }}{{ data.extrato.tot_diarias.min|floatformat:2|default:"-" }}{{ data.extrato.tot_diarias.mean|floatformat:2|default:"-" }}{{ data.extrato.tot_diarias.max|floatformat:2|default:"-" }}{{ data.extrato.tot_diarias.sum|floatformat:2|default:"-" }}{{ data.extrato.tot_passagens.min|floatformat:2|default:"-" }}{{ data.extrato.tot_passagens.mean|floatformat:2|default:"-" }}{{ data.extrato.tot_passagens.max|floatformat:2|default:"-" }}{{ data.extrato.tot_passagens.sum|floatformat:2|default:"-" }}{{ data.extrato.tot_custo.min|floatformat:2|default:"-" }}{{ data.extrato.tot_custo.mean|floatformat:2|default:"-" }}{{ data.extrato.tot_custo.max|floatformat:2|default:"-" }}{{ data.extrato.tot_custo.sum|floatformat:2|default:"-" }}
+
+
\ No newline at end of file diff --git a/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report.html b/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report.html new file mode 100644 index 0000000..651a472 --- /dev/null +++ b/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report.html @@ -0,0 +1,22 @@ +{% extends 'utils/report/report.html' %} +{% load i18n %} + +{% block extrastyle %} +{{ block.super }} + +{% endblock %} + +{% block data %} + {% if not servidores is None %} + {% include "admin/eventos/custos_servidor_report_snippet.html" %} + {% endif %} +{% endblock data %} diff --git a/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_pdf.html b/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_pdf.html new file mode 100644 index 0000000..812d118 --- /dev/null +++ b/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_pdf.html @@ -0,0 +1,98 @@ +{% extends 'pdf/base_report.html' %} +{% load i18n %} + +{% block page_size %}A4 landscape{% endblock page_size %} +{% block page_margin %}3cm 1cm 2cm 1cm{% endblock page_margin %}; + +{% block extra_style %} + {{ block.super }} + aside { + margin-left: 8px; + font-size: 0.8em; + color: #666; + } + blockquote { + margin: 12px 0 12px; + padding-left: 1.5rem; + border-left: 5px solid #ee6e73; + font-size: 1.4em; + font-weight: bold; + } + tr:nth-child(even) { + background-color: initial; + } + .even-row { + background-color: #d2d2d2 !important; + } + .sessao-resumo { + align-items: stretch; + display: flex; + flex-wrap: wrap; + width: 100%; + margin-top: 24px; + } + .card-resumo { + background-color: #eeeeef; + border-radius: 2px; + box-sizing: border-box; + margin: 6px; + flex-basis: 49%; + padding: 0 6px 6px 6px; + position: relative; + width: 100%; + } + .card-resumo.full { + flex-basis: 98%; + } + + .index-cell { + width: 2em; + text-align: center; + } + .label-resumo { + min-width: 30em; + } + .timestamp-container { + width: 100%; + margin: 24px 10px; + border-left: 5px solid #ee6e73; + font-size: 1.3em; + } + .timestamp-row { + display: flex; + flex-wrap: wrap; + margin-bottom: 6px; + } + .timestamp-col { + position: relative; + padding-left: 15px; + padding-right: 15px; + } + .timestamp-label { + flex: 0 0 12%; + max-width: 12%; + font-weight: bold; + } +{% endblock %} + +{% block main_content %} +
+
+
+ {% trans "Data inicial" %}: +
+
+ {{ data_inicio|date:"SHORT_DATE_FORMAT" }}
+
+
+
+
+ {% trans "Data final" %}: +
+
+ {{ data_fim|date:"SHORT_DATE_FORMAT" }} +
+
+
+ {% include 'admin/eventos/custos_servidor_report_snippet.html' %} +{% endblock %} \ No newline at end of file diff --git a/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_snippet.html b/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_snippet.html new file mode 100644 index 0000000..af40a6e --- /dev/null +++ b/sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_snippet.html @@ -0,0 +1,36 @@ +{% load i18n %} + + + + + + + + + + + + + + {% for servidor in servidores.itertuples %} + + + + + + + + + + {% endfor %} + + + + + + + + + + +
{% trans "Membro da equipe" %}{% trans "Qtde eventos" %}{% trans "Qtde diárias" %}{% trans "Valor médio diária" %}{% trans "Total diárias" %}{% trans "Total passagens" %}{% trans "Total" %}
{{ servidor.nome_completo }}{{ servidor.qtde_eventos|default:"-" }}{{ servidor.qtde_diarias|floatformat:2|default:"-" }}{{ servidor.media_diarias|floatformat:2|default:"-" }}{{ servidor.total_diarias|floatformat:2|default:"-" }}{{ servidor.total_passagens|floatformat:2|default:"-" }}{{ servidor.total_custo|floatformat:2|default:"-" }}
{% trans "Totais" %}{{ totais.qtde_eventos|default:"-" }}{{ totais.qtde_diarias|floatformat:2|default:"-" }}{{ totais.media_diarias|floatformat:2|default:"-" }}{{ totais.total_diarias|floatformat:2|default:"-" }}{{ totais.total_passagens|floatformat:2|default:"-" }}{{ totais.total_custo|floatformat:2|default:"-" }}
\ No newline at end of file diff --git a/sigi/apps/eventos/views.py b/sigi/apps/eventos/views.py index 26ca93a..2a96c96 100644 --- a/sigi/apps/eventos/views.py +++ b/sigi/apps/eventos/views.py @@ -1068,8 +1068,9 @@ class CustosEventosReport( context["data_inicio"] = form.cleaned_data["data_inicio"] context["data_fim"] = form.cleaned_data["data_fim"] else: - context = {} + context = {"object_list": False} context["form"] = form + context["report_title"] = self.get_title() return context def get_dataset(self, context): @@ -1278,7 +1279,8 @@ def context_custos_eventos(queryset): "eventos": eventos.order_by("data_inicio"), "resumo": resumo, "custos_regiao": custos_regiao, - "title": _("Custos por eventos"), + "report_title": _("Custos por eventos"), + "object_list": True, } @@ -1331,7 +1333,8 @@ def context_custos_servidor(queryset): ) totais["media_diarias"] = totais["total_diarias"] / totais["qtde_diarias"] return { + "object_list": True, "servidores": servidores.fillna(0), "totais": totais.fillna(0), - "title": _("Custos por servidor"), + "report_title": _("Custos por servidor"), }