Browse Source

Relatório de alocação de equipe em bootstrap

pull/183/merge
Sesóstris Vieira 3 weeks ago
parent
commit
c747bf114d
  1. 75
      sigi/apps/eventos/templates/eventos/alocacao_equipe.html
  2. 29
      sigi/apps/eventos/templates/eventos/alocacao_equipe_pdf.html
  3. 30
      sigi/apps/eventos/templates/eventos/snippets/alocacao_equipe_snippet.html
  4. 20
      sigi/apps/eventos/views.py

75
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 }}
<link rel="stylesheet" type="text/css" href="/static/css/calendario.css">
{% endblock %}
{% block breadcrumbs %}
<li class="breadcrumb-item">{% translate "Relatórios" %}</li>
<li class="breadcrumb-item">{% translate "Alocação de equipes" %}</li>
{% endblock %}
{% block content_title %}
<h5>
{% 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 %}
</h5>
{% endblock %}
{% block content %}
<div class="card mb-3">
<div class="card-header">
{% icon "filter" %} {% translate "Filtros" %}
</div>
<div class="card-body">
<ul class="nav nav-pills">
{% for ano in anos %}
<li class="nav-item">
<a class="nav-link{% if ano == ano_pesquisa %} active{% endif %}" aria-current="page" href="?ano={{ ano|safe }}">{{ ano|stringformat:"02d" }}</a>
</li>
{% endfor %}
</ul>
<ul class="nav nav-pills">
{% for mes in meses %}
<li class="nav-item">
<a class="nav-link{% if forloop.counter == mes_pesquisa %} active{% endif %}" href="?ano={{ ano_pesquisa|safe }}&mes={{ forloop.counter|safe }}">{{ mes|safe }}</a>
</li>
{% endfor %}
</ul>
{% if semanas %}
<ul class="nav nav-pills">
{% for s in semanas %}
<li class="nav-item">
<a class="nav-link{% if forloop.counter == semana_pesquisa %} active{% endif %}" href="?ano={{ ano_pesquisa|safe }}&mes={{ mes_pesquisa|safe }}&semana={{ forloop.counter }}">{{ s }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
<div class="card-footer d-flex justify-content-end">
<div>
<a class="btn btn-primary" role="button" href="?ano={{ ano_pesquisa|safe }}{% if mes_pesquisa %}&mes={{ mes_pesquisa|safe }}{% endif %}{% if semana_pesquisa %}&semana={{ semana_pesquisa|safe }}{% endif %}&fmt=pdf" title="{% trans 'Exportar para PDF' %}">{% icon "pdf" %} {% trans 'Exportar para PDF' %}</a>
<a class="btn btn-primary" role="button" href="?ano={{ ano_pesquisa|safe }}{% if mes_pesquisa %}&mes={{ mes_pesquisa|safe }}{% endif %}{% if semana_pesquisa %}&semana={{ semana_pesquisa|safe }}{% endif %}&fmt=csv" title="{% trans 'Exportar para CSV' %}">{% icon "csv" %} {% trans 'Exportar para CSV' %}</a>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
{% include "eventos/snippets/alocacao_equipe_snippet.html" with mode="html" %}
</div>
</div>
{% if semana_pesquisa %}
{% include "eventos/snippets/calendario_modals.html" %}
{% endif %}
{% endblock %}

29
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 %}
<h5>
{% 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 %}
</h5>
{% include "eventos/snippets/alocacao_equipe_snippet.html" %}
{% endblock %}

30
sigi/apps/eventos/templates/eventos/snippets/alocacao_equipe_snippet.html

@ -0,0 +1,30 @@
<table class="table table-striped table-sm table-bordered{% if semana_pesquisa %} fixed{% endif %}">
<thead>
<tr>
{% for coluna in cabecalho %}<th>{{ coluna }}</th>{% endfor %}
</tr>
</thead>
<tbody class="table-group-divider">
{% for linha in linhas %}
<tr>
{% for coluna in linha %}
{% if forloop.first %}
<th>{{ coluna }}</th>
{% elif forloop.last and not semana_pesquisa %}
<th>{{ coluna }}</th>
{% else %}
<td>
{% if semana_pesquisa %}
{% for evento in coluna %}
<p><a class="modal-trigger" data-bs-toggle="modal" data-bs-target="#modal{{ evento.id|safe }}" title="{{ evento.nome }}">{{ evento.nome }}</a></p>
{% endfor %}
{% else %}
{{ coluna }}
{% endif %}
</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>

20
sigi/apps/eventos/views.py

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

Loading…
Cancel
Save