From 3f52a186a0336c6e19eabe73356aaaa864bcbe64 Mon Sep 17 00:00:00 2001 From: Sesostris Vieira Date: Thu, 15 Oct 2015 16:09:20 -0300 Subject: [PATCH] Add exports (pdf/csv/json) to Event calendar and Staff allocation reports --- .../templates/eventos/alocacao_equipe.html | 21 ++---- .../eventos/alocacao_equipe_pdf.html | 63 +++++++++++++++++ .../eventos/alocacao_equipe_snippet.html | 17 +++++ .../eventos/templates/eventos/calendario.html | 64 +---------------- .../templates/eventos/calendario_pdf.html | 59 ++++++++++++++++ .../templates/eventos/calendario_snippet.html | 68 +++++++++++++++++++ sigi/apps/eventos/views.py | 28 +++++++- 7 files changed, 240 insertions(+), 80 deletions(-) create mode 100644 sigi/apps/eventos/templates/eventos/alocacao_equipe_pdf.html create mode 100644 sigi/apps/eventos/templates/eventos/alocacao_equipe_snippet.html create mode 100644 sigi/apps/eventos/templates/eventos/calendario_pdf.html create mode 100644 sigi/apps/eventos/templates/eventos/calendario_snippet.html diff --git a/sigi/apps/eventos/templates/eventos/alocacao_equipe.html b/sigi/apps/eventos/templates/eventos/alocacao_equipe.html index 0756f22..0ac47c3 100644 --- a/sigi/apps/eventos/templates/eventos/alocacao_equipe.html +++ b/sigi/apps/eventos/templates/eventos/alocacao_equipe.html @@ -28,24 +28,11 @@ {% if next_button %}
  • {% trans "Próximo ano" %}
  • {% endif %} +
  • {% trans "Exportar para PDF" %}
  • +
  • {% trans "Exportar para CSV" %}
  • +
  • {% trans "Exportar para Json" %}
  • {% endblock %} {% block content %} -
    - - {% for linha in linhas %} - - {% if forloop.first %} - {% for coluna in linha %} - - {% endfor %} - {% else %} - {% for coluna in linha %} - - {% endfor %} - {% endif %} - - {% endfor %} -
    {{ coluna }}{{ coluna }}
    -
    + {% include "eventos/alocacao_equipe_snippet.html" %} {% endblock %} 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..8487b56 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/alocacao_equipe_pdf.html @@ -0,0 +1,63 @@ +{% extends "base_report.html" %} +{% load static from staticfiles %} +{% load i18n %} + +{% block extra_head %} + +{% blocktrans %}Alocação de equipe em {{ ano_pesquisa }}{% endblocktrans %} +{% endblock %} + +{% block report %} +

    {% blocktrans %}Alocação de equipe em {{ ano_pesquisa }}{% endblocktrans %}

    + {% include "eventos/alocacao_equipe_snippet.html" %} +{% endblock %} + + diff --git a/sigi/apps/eventos/templates/eventos/alocacao_equipe_snippet.html b/sigi/apps/eventos/templates/eventos/alocacao_equipe_snippet.html new file mode 100644 index 0000000..5c67a50 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/alocacao_equipe_snippet.html @@ -0,0 +1,17 @@ +
    + + {% for linha in linhas %} + + {% if forloop.first %} + {% for coluna in linha %} + + {% endfor %} + {% else %} + {% for coluna in linha %} + + {% endfor %} + {% endif %} + + {% endfor %} +
    {{ coluna }}{{ coluna }}
    +
    diff --git a/sigi/apps/eventos/templates/eventos/calendario.html b/sigi/apps/eventos/templates/eventos/calendario.html index 098709d..2373c1b 100644 --- a/sigi/apps/eventos/templates/eventos/calendario.html +++ b/sigi/apps/eventos/templates/eventos/calendario.html @@ -35,69 +35,9 @@ {% if next_button %}
  • {% trans "Próximo mês" %}
  • {% endif %} +
  • {% trans "Exportar para PDF" %}
  • {% endblock %} {% block content %} -
    - - - {% for d in dates %} - - {% endfor %} - - {% for d in dates %} - - {% endfor %} - - {% for linha in linhas %} - - {% for evento in linha %} - {% if evento.start > 0 %} - - {% endif %} - - - - {% if evento.close > 0 %} - - {% endif %} - - {% endfor %} - - {% endfor %} -
    {{ d|date:'D' }}
    {% ifchanged d|date:'b' %}{{ d|date:'b' }}
    {% endifchanged %}{{ d|date:'j' }}
      -
    {{ evento.evento.nome }}
    -
    ({{ evento.evento.tipo_evento }})
    -
    - {% if evento.evento.solicitante %} -
    {% trans "Solicitante" %}:
    -
    {{ evento.evento.solicitante }}
    - {% endif %} - - {% if evento.evento.casa_anfitria %} -
    {% trans "Casa anfitriã" %}:
    -
    {{ evento.evento.casa_anfitria }}
    - {% endif %} - -
    {% trans "Município" %}:
    -
    {{ evento.evento.municipio }}
    -
    {% trans "Status" %}:
    -
    {{ evento.evento.get_status_display }}
    - - {% if evento.evento.data_cancelamento %} -
    {% trans "Data de cancelamento" %}:
    -
    {{ evento.evento.data_cancelamento }}
    - {% endif %} - - {% if evento.evento.equipe_set.count > 0 %} -
    {% trans "Equipe" %}:
    -
      - {% for m in evento.evento.equipe_set.all %} -
    • {{ m.membro }} ({{ m.funcao }})
    • - {% endfor %} -
        - {% endif %} -
    -
     
    -
    + {% include "eventos/calendario_snippet.html" %} {% endblock %} diff --git a/sigi/apps/eventos/templates/eventos/calendario_pdf.html b/sigi/apps/eventos/templates/eventos/calendario_pdf.html new file mode 100644 index 0000000..d1e5352 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/calendario_pdf.html @@ -0,0 +1,59 @@ +{% extends "base_report.html" %} +{% load static from staticfiles %} +{% load i18n %} + +{% block extra_head %} + +{% blocktrans %}Eventos de {{ mes_pesquisa }}/{{ ano_pesquisa }}{% endblocktrans %} +{% endblock %} + +{% block report %} +

    {% blocktrans %}Eventos de {{ mes_pesquisa }}/{{ ano_pesquisa }}{% endblocktrans %}

    + {% include "eventos/calendario_snippet.html" %} +{% endblock %} + + diff --git a/sigi/apps/eventos/templates/eventos/calendario_snippet.html b/sigi/apps/eventos/templates/eventos/calendario_snippet.html new file mode 100644 index 0000000..099a068 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/calendario_snippet.html @@ -0,0 +1,68 @@ +{% load i18n admin_static %} +{% load static from staticfiles %} + +
    + + + + {% for d in dates %} + + {% endfor %} + + + {% for d in dates %} + + {% endfor %} + + + {% for linha in linhas %} + + {% for evento in linha %} + {% if evento.start > 0 %} + + {% endif %} + + + + {% if evento.close > 0 %} + + {% endif %} + + {% endfor %} + + {% endfor %} +
    {{ d|date:'D' }}
    {% ifchanged d|date:'b' %}{{ d|date:'b' }}
    {% endifchanged %}{{ d|date:'j' }}
      +
    {{ evento.evento.nome }}
    +
    ({{ evento.evento.tipo_evento }})
    +
    + {% if evento.evento.solicitante %} +
    {% trans "Solicitante" %}:
    +
    {{ evento.evento.solicitante }}
    + {% endif %} + + {% if evento.evento.casa_anfitria %} +
    {% trans "Casa anfitriã" %}:
    +
    {{ evento.evento.casa_anfitria }}
    + {% endif %} + +
    {% trans "Município" %}:
    +
    {{ evento.evento.municipio }}
    +
    {% trans "Status" %}:
    +
    {{ evento.evento.get_status_display }}
    + + {% if evento.evento.data_cancelamento %} +
    {% trans "Data de cancelamento" %}:
    +
    {{ evento.evento.data_cancelamento }}
    + {% endif %} + + {% if evento.evento.equipe_set.count > 0 %} +
    {% trans "Equipe" %}:
    +
      + {% for m in evento.evento.equipe_set.all %} +
    • {{ m.membro }} ({{ m.funcao }})
    • + {% endfor %} +
        + {% endif %} +
    +
     
    +
    \ No newline at end of file diff --git a/sigi/apps/eventos/views.py b/sigi/apps/eventos/views.py index da10f94..2278aa0 100644 --- a/sigi/apps/eventos/views.py +++ b/sigi/apps/eventos/views.py @@ -27,11 +27,15 @@ from django.utils import translation from django.utils.translation import ungettext, ugettext as _ from sigi.apps.eventos.models import Evento from sigi.apps.servidores.models import Servidor +from sigi.shortcuts import render_to_pdf +import csv +from django.http.response import JsonResponse, HttpResponse @login_required def calendario(request): mes_pesquisa = int(request.GET.get('mes', datetime.date.today().month)) ano_pesquisa = int(request.GET.get('ano', datetime.date.today().year)) + formato = request.GET.get('fmt', 'html') dia1 = datetime.date(ano_pesquisa, mes_pesquisa, 1) mes_anterior = dia1 - datetime.timedelta(days=1) @@ -107,10 +111,14 @@ def calendario(request): data['eventos'] = eventos data['linhas'] = linhas + if formato == 'pdf': + return render_to_pdf('eventos/calendario_pdf.html', data ) + return render(request, 'eventos/calendario.html', data) def alocacao_equipe(request): ano_pesquisa = int(request.GET.get('ano', datetime.date.today().year)) + formato = request.GET.get('fmt', 'html') data = {'ano_pesquisa': ano_pesquisa} @@ -140,8 +148,9 @@ def alocacao_equipe(request): lang = (translation.to_locale(translation.get_language())+'.utf8').encode() locale.setlocale(locale.LC_ALL, lang) + meses = [calendar.month_name[m] for m in range(1,13)] - linhas = [[_(u"Servidor")] + [calendar.month_name[m] for m in range(1,13)] + ['total']] + linhas = [[_(u"Servidor")] + meses + ['total']] for r in dados: r[2].append(reduce(lambda x,y:{'dias': x['dias'] + y['dias'], @@ -161,4 +170,21 @@ def alocacao_equipe(request): data['linhas'] = linhas + if formato == 'pdf': + return render_to_pdf('eventos/alocacao_equipe_pdf.html', data) + elif formato == 'csv': + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename="alocacao_equipe_%s.csv"' % (ano_pesquisa,) + writer = csv.writer(response) + asc_list = [[s.encode('utf-8') if isinstance(s, unicode) else s for s in l] for l in linhas] + writer.writerows(asc_list) + return response + elif formato == 'json': + result = {'ano': ano_pesquisa, + 'equipe': [{'pk': d[0], + 'nome_completo': d[1], + 'meses': {m[0]: m[1] for m in zip(meses+['total'], d[2])} + } for d in dados]} + return JsonResponse(result) + return render(request, 'eventos/alocacao_equipe.html', data) \ No newline at end of file