Browse Source

Add Staff Allocation report in eventos app

stable/2.1
Sesostris Vieira 9 years ago
parent
commit
8251a914ca
  1. 51
      sigi/apps/eventos/templates/eventos/alocacao_equipe.html
  2. 1
      sigi/apps/eventos/urls.py
  3. 60
      sigi/apps/eventos/views.py

51
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 %}
<style type="text/css">
th { vertical-align: bottom !important; text-align: center !important; background-color: #f1f1f1; }
td { width: 6%; vertical-align: bottom !important; }
td:first-child { width: 22%; font-weight: bolder; }
td:last-child { font-weight: bolder; }
</style>
{{ block.super }}
{% endblock %}
{% block extrahead %}
{{ block.super }}
{% endblock %}
{% block coltype %}colMS{% endblock %}
{% block content_title %}<h1>{% blocktrans %}Alocação de equipe em {{ ano_pesquisa }}{% endblocktrans %}</h1>{% endblock %}
{% block object-tools-items %}
{% if prev_button %}
<li><a href="?ano={{ prev_button.ano|safe }}">{% trans "Ano anterior" %}</a></li>
{% endif %}
{% if next_button %}
<li><a href="?ano={{ next_button.ano|safe }}">{% trans "Próximo ano" %}</a></li>
{% endif %}
{% endblock %}
{% block content %}
<div class="table-responsive">
<table class="table table-condensed table-bordered">
{% for linha in linhas %}
<tr>
{% if forloop.first %}
{% for coluna in linha %}
<th>{{ coluna }}</th>
{% endfor %}
{% else %}
{% for coluna in linha %}
<td>{{ coluna }}</td>
{% endfor %}
{% endif %}
</tr>
{% endfor %}
</table>
</div>
{% endblock %}

1
sigi/apps/eventos/urls.py

@ -6,4 +6,5 @@ urlpatterns = patterns(
'sigi.apps.eventos.views', 'sigi.apps.eventos.views',
# Painel de ocorrencias # Painel de ocorrencias
url(r'^calendario/$', 'calendario', name='eventos-calendario'), url(r'^calendario/$', 'calendario', name='eventos-calendario'),
url(r'^alocacaoequipe/$', 'alocacao_equipe', name='eventos-alocacaoequipe'),
) )

60
sigi/apps/eventos/views.py

@ -20,9 +20,13 @@
import calendar import calendar
import datetime import datetime
import locale
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.shortcuts import render 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.eventos.models import Evento
from sigi.apps.servidores.models import Servidor
@login_required @login_required
def calendario(request): def calendario(request):
@ -103,4 +107,58 @@ def calendario(request):
data['eventos'] = eventos data['eventos'] = eventos
data['linhas'] = linhas data['linhas'] = linhas
return render(request, 'eventos/calendario.html', data) 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)
Loading…
Cancel
Save