Browse Source

Iniciar a refatoração

pull/1398/head
Eduardo Calil 8 years ago
parent
commit
afcc00be52
  1. 58
      sapl/base/views.py
  2. 27
      sapl/parlamentares/views.py
  3. 28
      sapl/utils.py

58
sapl/base/views.py

@ -4,6 +4,7 @@ from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.tokens import default_token_generator
from django.core.exceptions import ObjectDoesNotExist
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Count, Q from django.db.models import Count, Q
@ -21,8 +22,8 @@ from sapl.base.models import Autor, TipoAutor
from sapl.crud.base import CrudAux from sapl.crud.base import CrudAux
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.sessao.models import PresencaOrdemDia, SessaoPlenaria from sapl.sessao.models import PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca
from sapl.utils import sapl_logger from sapl.utils import parlamentares_ativos, sapl_logger
from .forms import (CasaLegislativaForm, ConfiguracoesAppForm, from .forms import (CasaLegislativaForm, ConfiguracoesAppForm,
RelatorioAtasFilterSet, RelatorioAtasFilterSet,
@ -237,28 +238,49 @@ class RelatorioPresencaSessaoView(FilterView):
param1 = {'presencaordemdia__%s' % sufixo: _range} param1 = {'presencaordemdia__%s' % sufixo: _range}
param2 = {'sessaoplenariapresenca__%s' % sufixo: _range} param2 = {'sessaoplenariapresenca__%s' % sufixo: _range}
pls = Parlamentar.objects.filter( # Parlamentares com Mandato no intervalo de tempo (Ativos)
(Q(**param1) | Q(presencaordemdia__isnull=True)) & parlamentares_qs = parlamentares_ativos(
(Q(**param2) | Q(sessaoplenariapresenca__isnull=True)) _range[0], _range[1]).order_by('nome_parlamentar')
).annotate( parlamentares_id = [p.id for p in parlamentares_qs]
sessao_count=Count(
'sessaoplenariapresenca__sessao_plenaria', # Presenças de cada Parlamentar em Sessões
distinct=True), presenca_sessao = SessaoPlenariaPresenca.objects.filter(
ordemdia_count=Count( parlamentar_id__in=parlamentares_id,
'presencaordemdia__sessao_plenaria', sessao_plenaria__data_inicio__range=_range).values_list(
distinct=True), 'parlamentar_id').annotate(
sessao_porc=Count(0), sessao_count=Count('id'))
ordemdia_porc=Count(0)
).exclude( # Presenças de cada Ordem do Dia
sessao_count=0, presenca_ordem = PresencaOrdemDia.objects.filter(
ordemdia_count=0) parlamentar_id__in=parlamentares_id,
sessao_plenaria__data_inicio__range=_range).values_list(
'parlamentar_id').annotate(
sessao_count=Count('id'))
# Completa o dicionario as informacoes parlamentar/sessao/ordem
parlamentares_presencas = []
for i, p in enumerate(parlamentares_qs):
parlamentares_presencas.append({
'parlamentar': p,
'sessao_count': 0,
'ordemdia_count': 0,
'sessao_porc': 0,
'ordemdia_porc': 0
})
try:
parlamentares_presencas[i].update({
'sessao_count': presenca_sessao.get(parlamentar_id=p.id)[1],
'ordemdia_count': presenca_ordem.get(parlamentar_id=p.id)[1]
})
except ObjectDoesNotExist:
pass
total_ordemdia = PresencaOrdemDia.objects.filter( total_ordemdia = PresencaOrdemDia.objects.filter(
**param0).distinct('sessao_plenaria__id').order_by( **param0).distinct('sessao_plenaria__id').order_by(
'sessao_plenaria__id').count() 'sessao_plenaria__id').count()
self.calcular_porcentagem_presenca( self.calcular_porcentagem_presenca(
pls, parlamentares_presencas,
context['object_list'].count(), context['object_list'].count(),
total_ordemdia) total_ordemdia)

27
sapl/parlamentares/views.py

@ -27,6 +27,7 @@ from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.materia.models import Autoria from sapl.materia.models import Autoria
from sapl.utils import parlamentares_ativos
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db.models.aggregates import Count from django.db.models.aggregates import Count
@ -224,32 +225,6 @@ def json_date_convert(date):
year=int(ano)) year=int(ano))
def parlamentares_ativos(data_inicio, data_fim=None):
'''
:param data_inicio: define a data de inicial do período desejado
:param data_fim: define a data final do período desejado
:return: queryset dos parlamentares ativos naquele período
'''
mandatos_ativos = Mandato.objects.filter(Q(
data_inicio_mandato__lte=data_inicio,
data_fim_mandato__isnull=True) | Q(
data_inicio_mandato__lte=data_inicio,
data_fim_mandato__gte=data_inicio))
if data_fim:
mandatos_ativos = mandatos_ativos | Mandato.objects.filter(
data_inicio_mandato__gte=data_inicio,
data_inicio_mandato__lte=data_fim)
else:
mandatos_ativos = mandatos_ativos | Mandato.objects.filter(
data_inicio_mandato__gte=data_inicio)
parlamentares_id = mandatos_ativos.values_list(
'parlamentar_id',
flat=True).distinct('parlamentar_id')
return Parlamentar.objects.filter(id__in=parlamentares_id)
def frente_atualiza_lista_parlamentares(request): def frente_atualiza_lista_parlamentares(request):
''' '''
:param request: recebe os parâmetros do GET da chamada Ajax :param request: recebe os parâmetros do GET da chamada Ajax

28
sapl/utils.py

@ -15,6 +15,7 @@ from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button from crispy_forms.layout import HTML, Button
from django import forms from django import forms
from django.apps import apps from django.apps import apps
from django.db.models import Q
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes.fields import (GenericForeignKey, GenericRel, from django.contrib.contenttypes.fields import (GenericForeignKey, GenericRel,
@ -594,3 +595,30 @@ def qs_override_django_filter(self):
self._qs = qs self._qs = qs
return self._qs return self._qs
def parlamentares_ativos(data_inicio, data_fim=None):
from sapl.parlamentares.models import Mandato, Parlamentar
'''
:param data_inicio: define a data de inicial do período desejado
:param data_fim: define a data final do período desejado
:return: queryset dos parlamentares ativos naquele período
'''
mandatos_ativos = Mandato.objects.filter(Q(
data_inicio_mandato__lte=data_inicio,
data_fim_mandato__isnull=True) | Q(
data_inicio_mandato__lte=data_inicio,
data_fim_mandato__gte=data_inicio))
if data_fim:
mandatos_ativos = mandatos_ativos | Mandato.objects.filter(
data_inicio_mandato__gte=data_inicio,
data_inicio_mandato__lte=data_fim)
else:
mandatos_ativos = mandatos_ativos | Mandato.objects.filter(
data_inicio_mandato__gte=data_inicio)
parlamentares_id = mandatos_ativos.values_list(
'parlamentar_id',
flat=True).distinct('parlamentar_id')
return Parlamentar.objects.filter(id__in=parlamentares_id)
Loading…
Cancel
Save