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..0756f22 --- /dev/null +++ b/sigi/apps/eventos/templates/eventos/alocacao_equipe.html @@ -0,0 +1,51 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_static %} +{% load static from staticfiles %} +{% load thumbnail %} + +{% block extrastyle %} + + {{ block.super }} +{% endblock %} + +{% block extrahead %} + {{ block.super }} +{% endblock %} + +{% block coltype %}colMS{% endblock %} + +{% block content_title %}

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

{% endblock %} + +{% block object-tools-items %} + {% if prev_button %} +
  • {% trans "Ano anterior" %}
  • + {% endif %} + {% if next_button %} +
  • {% trans "Próximo ano" %}
  • + {% endif %} +{% 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 }}
    +
    +{% endblock %} diff --git a/sigi/apps/eventos/urls.py b/sigi/apps/eventos/urls.py index 0368400..a648c7c 100644 --- a/sigi/apps/eventos/urls.py +++ b/sigi/apps/eventos/urls.py @@ -6,4 +6,5 @@ urlpatterns = patterns( 'sigi.apps.eventos.views', # Painel de ocorrencias url(r'^calendario/$', 'calendario', name='eventos-calendario'), + url(r'^alocacaoequipe/$', 'alocacao_equipe', name='eventos-alocacaoequipe'), ) diff --git a/sigi/apps/eventos/views.py b/sigi/apps/eventos/views.py index b3e11b2..da10f94 100644 --- a/sigi/apps/eventos/views.py +++ b/sigi/apps/eventos/views.py @@ -20,9 +20,13 @@ import calendar import datetime +import locale from django.contrib.auth.decorators import login_required from django.shortcuts import render +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 @login_required def calendario(request): @@ -103,4 +107,58 @@ def calendario(request): data['eventos'] = eventos data['linhas'] = linhas - return render(request, 'eventos/calendario.html', data) \ No newline at end of file + return render(request, 'eventos/calendario.html', data) + +def alocacao_equipe(request): + ano_pesquisa = int(request.GET.get('ano', datetime.date.today().year)) + + data = {'ano_pesquisa': ano_pesquisa} + + if Evento.objects.filter(data_inicio__year=ano_pesquisa-1).exists(): + data['prev_button'] = {'ano': ano_pesquisa - 1 } + + if Evento.objects.filter(data_inicio__year=ano_pesquisa+1).exists(): + data['next_button'] = {'ano': ano_pesquisa + 1 } + + dados = [] + + for evento in Evento.objects.filter(data_inicio__year=ano_pesquisa).exclude(status='C').prefetch_related('equipe_set'): + for p in evento.equipe_set.all(): + registro = None + for r in dados: + if r[0] == p.membro.pk: + registro = r + break + if not registro: + registro = [p.membro.pk, p.membro.nome_completo, [{'dias': 0, 'eventos': 0} for x in range(1,13)]] + dados.append(registro) + + registro[2][evento.data_inicio.month-1]['dias'] += (evento.data_termino - evento.data_inicio).days + 1 + registro[2][evento.data_inicio.month-1]['eventos'] += 1 + + dados.sort(lambda x, y: cmp(x[1], y[1])) + + lang = (translation.to_locale(translation.get_language())+'.utf8').encode() + locale.setlocale(locale.LC_ALL, lang) + + linhas = [[_(u"Servidor")] + [calendar.month_name[m] for m in range(1,13)] + ['total']] + + for r in dados: + r[2].append(reduce(lambda x,y:{'dias': x['dias'] + y['dias'], + 'eventos': x['eventos'] + y['eventos']}, r[2])) + linhas.append([r[1]] + + [_(ungettext(u"%(dias)s dia", u"%(dias)s dias", d['dias']) + " em " + + ungettext(u"%(eventos)s evento", u"%(eventos)s eventos", d['eventos']) + ) % d if d['dias'] > 0 or d['eventos'] > 0 else '' for d in r[2]]) + +# for registro in Servidor.objects.filter(equipe_evento__evento__data_inicio__year=ano_pesquisa).exclude(equipe_evento__evento__status='C').distinct(): +# dados = [{'dias': 0, 'eventos': 0} for x in range(1,13)] +# for part in registro.equipe_evento.filter(evento__data_inicio__year=ano_pesquisa).exclude(evento__status='C'): +# dados[part.evento.data_inicio.month-1]['dias'] += (part.evento.data_termino - +# part.evento.data_inicio).days + 1 +# dados[part.evento.data_inicio.month-1]['eventos'] += 1 +# dados.append([registro.nome_completo] + [_(ungettext(u"%(dias)s dia", u"%(dias)s dias", d['dias']) + " em " + ungettext(u"%(eventos)s evento", u"%(eventos)s eventos", d['eventos'])) % d if d['dias'] > 0 or d['eventos'] > 0 else '' for d in dados]) + + data['linhas'] = linhas + + return render(request, 'eventos/alocacao_equipe.html', data) \ No newline at end of file