Browse Source

Ajusta diversos relatórios para bootstrap

sigi-4.0
Sesóstris Vieira 2 weeks ago
parent
commit
df1f561950
  1. 11
      sigi/apps/convenios/templates/convenios/report/erros_gescon_report_view/report_pdf.html
  2. 22
      sigi/apps/eventos/templates/admin/eventos/custos_eventos_report.html
  3. 101
      sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_pdf.html
  4. 263
      sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_snippet.html
  5. 22
      sigi/apps/eventos/templates/admin/eventos/custos_servidor_report.html
  6. 98
      sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_pdf.html
  7. 36
      sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_snippet.html
  8. 9
      sigi/apps/eventos/views.py

11
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 }}
<div class="new-page"></div>
<div style="padding: 24px;">
<h1>{% translate "Resumo da última importação de dados do Gescon" %}</h1>
{{ ultima_importacao }}
</div>
{% endblock %}

22
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 }}
<style type="text/css">
.sessao-resumo {
display: flex;
flex-wrap: wrap;
gap: 0.5em;
}
.card-resumo {
flex-grow: 1;
}
</style>
{% endblock %}
{% block data %}
{% if eventos %}
{% include "admin/eventos/custos_eventos_report_snippet.html" %}
{% endif %}
{% endblock data %}

101
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 %}
<div class="timestamp-container">
<div class="timestamp-row">
<div class="timestamp-col timestamp-label">
{% trans "Data inicial" %}:
</div>
<div class="timestamp-col timestamp-data">
{{ data_inicio|date:"SHORT_DATE_FORMAT" }}<br/>
</div>
</div>
<div class="timestamp-row">
<div class="timestamp-col timestamp-label">
{% trans "Data final" %}:
</div>
<div class="timestamp-col timestamp-data">
{{ data_fim|date:"SHORT_DATE_FORMAT" }}
</div>
</div>
</div>
{% include "admin/eventos/custos_eventos_report_snippet.html" %}
{% endblock %}

263
sigi/apps/eventos/templates/admin/eventos/custos_eventos_report_snippet.html

@ -0,0 +1,263 @@
{% load static i18n sigi_tags %}
<table class="table table-sm table-stripped" repeat="2">
<thead>
<tr>
<th rowspan="3">{% trans "Início / término" %}</th>
<th rowspan="3">{% trans "SIGAD" %}</th>
<th rowspan="3">{% trans "Evento" %}</th>
<th rowspan="3">{% trans "Casa anfitriã" %}</th>
<th rowspan="3">{% trans "Dur. (dias)" %}</th>
<th rowspan="3">{% trans "Tot part." %}</th>
<th colspan="7">{% trans "Equipe" %}</th>
<th colspan="3" rowspan="2">{% trans "Custo" %}</th>
</tr>
<tr>
<th rowspan="2">{% trans "Nome" %}</th>
<th rowspan="2">{% trans "Função" %}</th>
<th colspan="2">{% trans "Diárias" %}</th>
<th colspan="3">{% trans "Passagens" %}</th>
</tr>
<tr>
<th>{% trans "Qtde." %}</th>
<th>{% trans "Valor total" %}</th>
<th>{% trans "Valor total" %}</th>
<th>{% trans "Emissão" %}</th>
<th>{% trans "Antec. (dias)" %}</th>
<th>{% trans "Total" %}</th>
<th>{% trans "Médio partic." %}</th>
<th>{% trans "Médio equipe" %}</th>
</thead>
<tbody>
{% for evento in eventos %}
{% with equipe_count=evento.equipe_ext|length|default:1 %}
<tr class="{% cycle "" "even-row" as row_class %}">
<td rowspan="{{ equipe_count }}" class="center-align">
{% blocktranslate with inicio=evento.data_inicio|date:"SHORT_DATE_FORMAT" termino=evento.data_termino|date:"SHORT_DATE_FORMAT" %}
{{ inicio }} a {{ termino }}
{% endblocktranslate %}
</td>
<td rowspan="{{ equipe_count }}">{{ evento.num_processo }}</td>
<td rowspan="{{ equipe_count }}">
{% blocktranslate with nome=evento.nome turma=evento.turma %}
{{ nome }} - turma {{ turma }}
{% endblocktranslate %}
</td>
<td rowspan="{{ equipe_count }}">{{ evento.casa_anfitria|default:"" }}</td>
<td rowspan="{{ equipe_count }}" class="right-align">{{ evento.duracao_dias|default:"-" }}</td>
<td rowspan="{{ equipe_count }}" class="right-align">{{ evento.total_participantes|default:"-" }}</td>
{% for membro in evento.equipe_ext %}
{% if not forloop.first %}<tr class="{{ row_class }}">{% endif %}
<td>{{ membro.membro.get_apelido }}</td>
<td>{{ membro.funcao }}</td>
<td class="right-align">{{ membro.qtde_diarias|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ membro.total_diarias|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ membro.total_passagens|floatformat:2|default:"-" }}</td>
<td>{{ membro.emissao_passagens|default:"-" }}</td>
<td class="right-align">{{ membro.antecedencia|default:"-" }}</td>
{% if forloop.first %}
<td rowspan="{{ equipe_count }}" class="right-align">{{ evento.custo_total|floatformat:2|default:"-" }}</td>
<td rowspan="{{ equipe_count }}" class="right-align">{{ evento.custo_medio_participante|floatformat:2|default:"-" }}</td>
<td rowspan="{{ equipe_count }}"class="right-align">{{ evento.custo_medio_membro|floatformat:2|default:"-" }}</td>
{% endif %}
</tr>
{% empty %}
<td colspan="7" class="center-align">{% trans "Equipe não definida" %}</td>
<td class="right-align">{{ evento.custo_total|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ evento.custo_medio_participante|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ evento.custo_medio_membro|floatformat:2|default:"-" }}</td>
</tr>
{% endfor %}
{% endwith %}
{% endfor %}
</tbody>
</table>
{# Resumo do relatório #}
<div class="sessao-resumo">
<div class="card-panel card-resumo">
<blockquote class="card-title">{% trans "Dados gerais" %}</blockquote>
<table>
<tr>
<th class="index-cell">{% 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 %}</th>
<th class="label-resumo">{% trans "Quantidade de eventos" %}</th>
<td class="right-align">{{ resumo.qtde_oficinas|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Total de participantes" %}</th>
<td class="right-align">{{ resumo.tot_participantes|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Média de participantes por evento" %} [B / A]</th>
<td class="right-align">{{ resumo.media_participantes|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Mínimo de participantes" %}</th>
<td class="right-align">{{ resumo.min_participantes|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Máximo de participantes" %}</th>
<td class="right-align">{{ resumo.max_participantes|default:"-" }}</td>
</tr>
</table>
</div>
<div class="card-panel card-resumo">
<blockquote class="card-title">{% trans "Equipes" %}</blockquote>
<table>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Total de servidores em missão" %}</th>
<td class="right-align">{{ resumo.tot_servidores|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Tamanho médio das equipes [F / A]" %}</th>
<td class="right-align">{{ resumo.media_membros|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Menor equipe" %}</th>
<td class="right-align">{{ resumo.min_membros|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Maior equipe" %}</th>
<td class="right-align">{{ resumo.max_membros|default:"-" }}</td>
</tr>
</table>
</div>
<div class="card-panel card-resumo">
<blockquote class="card-title">{% trans "Tempo" %}</blockquote>
<table>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Total de dias de evento" %}</th>
<td class="right-align">{{ resumo.tot_dias|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Duração média dos eventos (dias) [J / A]" %}</th>
<td class="right-align">{{ resumo.media_dias|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Total de diárias" %}</th>
<td class="right-align">{{ resumo.tot_diarias|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Média de diárias por evento [L / A]" %}</th>
<td class="right-align">{{ resumo.media_diarias|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Antecedência média na emissão de passagens" %}</th>
<td class="right-align">{{ resumo.media_antecedencia|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Menor antecedência" %}</th>
<td class="right-align">{{ resumo.min_antecedencia|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Maior antecedência" %}</th>
<td class="right-align">{{ resumo.max_antecedencia|default:"-" }}</td>
</tr>
</table>
</div>
<div class="card-panel card-resumo">
<blockquote class="card-title">{% trans "Custos" %}</blockquote>
<table>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Custo total" %}</th>
<td class="right-align">{{ resumo.tot_custo_total|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Total com diárias" %}</th>
<td class="right-align">{{ resumo.tot_custo_diarias|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Total com passagens" %}</th>
<td class="right-align">{{ resumo.tot_custo_passagens|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Custo médio dos eventos [Q / A]" %}</th>
<td class="right-align">{{ resumo.media_custo_total|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Custo médio de diárias por evento [R / A]" %}</th>
<td class="right-align">{{ resumo.media_custo_diarias|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Custo médio de passagens por evento [S / A]" %}</th>
<td class="right-align">{{ resumo.media_custo_passagens|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Custo médio por participante [Q / B]" %}</th>
<td class="right-align">{{ resumo.media_custo_participantes|floatformat:2|default:"-" }}</td>
</tr>
<tr>
<th class="index-cell">{% cycle letra %}</th>
<th class="label-resumo">{% trans "Gasto médio por membro da equipe" %}</th>
<td class="right-align">{{ resumo.media_custo_membro|floatformat:2|default:"-" }}</td>
</tr>
</table>
</div>
<div class="card-panel card-resumo full">
<blockquote class="card-title">{% trans "Custos por região" %}</blockquote>
<table>
<thead>
<tr>
<th rowspan="2" class="center-align">{% trans "Região" %}</th>
<th colspan="4" class="center-align">{% trans "Custos com diárias" %}</th>
<th colspan="4" class="center-align">{% trans "Custos com passagens" %}</th>
<th colspan="4" class="center-align">{% trans "Custo total" %}</th>
</tr>
<tr>
<th class="right-align">{% trans "Mínimo" %}</th>
<th class="right-align">{% trans "Médio" %}</th>
<th class="right-align">{% trans "Máximo" %}</th>
<th class="right-align">{% trans "Total" %}</th>
<th class="right-align">{% trans "Mínimo" %}</th>
<th class="right-align">{% trans "Médio" %}</th>
<th class="right-align">{% trans "Máximo" %}</th>
<th class="right-align">{% trans "Total" %}</th>
<th class="right-align">{% trans "Mínimo" %}</th>
<th class="right-align">{% trans "Médio" %}</th>
<th class="right-align">{% trans "Máximo" %}</th>
<th class="right-align">{% trans "Total" %}</th>
</thead>
<tbody>
{% for data in custos_regiao %}
<tr>
<th>{{ data.nome }}</th>
<td class="right-align">{{ data.extrato.tot_diarias.min|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_diarias.mean|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_diarias.max|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_diarias.sum|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_passagens.min|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_passagens.mean|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_passagens.max|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_passagens.sum|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_custo.min|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_custo.mean|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_custo.max|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ data.extrato.tot_custo.sum|floatformat:2|default:"-" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

22
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 }}
<style type="text/css">
.sessao-resumo {
display: flex;
flex-wrap: wrap;
gap: 0.5em;
}
.card-resumo {
flex-grow: 1;
}
</style>
{% endblock %}
{% block data %}
{% if not servidores is None %}
{% include "admin/eventos/custos_servidor_report_snippet.html" %}
{% endif %}
{% endblock data %}

98
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 %}
<div class="timestamp-container">
<div class="timestamp-row">
<div class="timestamp-col timestamp-label">
{% trans "Data inicial" %}:
</div>
<div class="timestamp-col timestamp-data">
{{ data_inicio|date:"SHORT_DATE_FORMAT" }}<br/>
</div>
</div>
<div class="timestamp-row">
<div class="timestamp-col timestamp-label">
{% trans "Data final" %}:
</div>
<div class="timestamp-col timestamp-data">
{{ data_fim|date:"SHORT_DATE_FORMAT" }}
</div>
</div>
</div>
{% include 'admin/eventos/custos_servidor_report_snippet.html' %}
{% endblock %}

36
sigi/apps/eventos/templates/admin/eventos/custos_servidor_report_snippet.html

@ -0,0 +1,36 @@
{% load i18n %}
<table class="table table-sm table-striped" repeat="2">
<thead>
<tr>
<th>{% trans "Membro da equipe" %}</th>
<th>{% trans "Qtde eventos" %}</th>
<th>{% trans "Qtde diárias" %}</th>
<th>{% trans "Valor médio diária" %}</th>
<th>{% trans "Total diárias" %}</th>
<th>{% trans "Total passagens" %}</th>
<th>{% trans "Total" %}</th>
</tr>
</thead>
<tbody>
{% for servidor in servidores.itertuples %}
<tr>
<td>{{ servidor.nome_completo }}</td>
<td class="right-align">{{ servidor.qtde_eventos|default:"-" }}</td>
<td class="right-align">{{ servidor.qtde_diarias|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ servidor.media_diarias|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ servidor.total_diarias|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ servidor.total_passagens|floatformat:2|default:"-" }}</td>
<td class="right-align">{{ servidor.total_custo|floatformat:2|default:"-" }}</td>
</tr>
{% endfor %}
<tr>
<th class="right-align">{% trans "Totais" %}</th>
<th class="right-align">{{ totais.qtde_eventos|default:"-" }}</th>
<th class="right-align">{{ totais.qtde_diarias|floatformat:2|default:"-" }}</th>
<th class="right-align">{{ totais.media_diarias|floatformat:2|default:"-" }}</th>
<th class="right-align">{{ totais.total_diarias|floatformat:2|default:"-" }}</th>
<th class="right-align">{{ totais.total_passagens|floatformat:2|default:"-" }}</th>
<th class="right-align">{{ totais.total_custo|floatformat:2|default:"-" }}</th>
</tr>
</tbody>
</table>

9
sigi/apps/eventos/views.py

@ -1068,8 +1068,9 @@ class CustosEventosReport(
context["data_inicio"] = form.cleaned_data["data_inicio"] context["data_inicio"] = form.cleaned_data["data_inicio"]
context["data_fim"] = form.cleaned_data["data_fim"] context["data_fim"] = form.cleaned_data["data_fim"]
else: else:
context = {} context = {"object_list": False}
context["form"] = form context["form"] = form
context["report_title"] = self.get_title()
return context return context
def get_dataset(self, context): def get_dataset(self, context):
@ -1278,7 +1279,8 @@ def context_custos_eventos(queryset):
"eventos": eventos.order_by("data_inicio"), "eventos": eventos.order_by("data_inicio"),
"resumo": resumo, "resumo": resumo,
"custos_regiao": custos_regiao, "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"] totais["media_diarias"] = totais["total_diarias"] / totais["qtde_diarias"]
return { return {
"object_list": True,
"servidores": servidores.fillna(0), "servidores": servidores.fillna(0),
"totais": totais.fillna(0), "totais": totais.fillna(0),
"title": _("Custos por servidor"), "report_title": _("Custos por servidor"),
} }

Loading…
Cancel
Save