Browse Source

Fix #1387 exibir sessao legislativa atual mesa diretora (#1427)

* Fix #1387

Signed-off-by: Eliseu Egewarth <eliseuegewarth@gmail.com>

* Adiciona decorator vigencia_atual e aplica ele nas models Legislatura e SessaoLegislativa

Signed-off-by: Eliseu Egewarth <eliseuegewarth@gmail.com>

* Fix #1387

Signed-off-by: Eliseu Egewarth <eliseuegewarth@gmail.com>
pull/1438/head
Eliseu Egewarth 7 years ago
committed by Edward
parent
commit
e90a38e011
  1. 40
      sapl/decorators.py
  2. 10
      sapl/parlamentares/models.py
  3. 38
      sapl/parlamentares/views.py

40
sapl/decorators.py

@ -0,0 +1,40 @@
from datetime import date
from functools import wraps
def vigencia_atual(decorated_method):
"""
concatena a string ' (Atual)' caso a model instancia estiver
em vigência na data atual do servidor
Premissas:
* A classe precisa conter os atributos 'data_inicio' e 'data_fim'.
* 'data_inicio' e 'data_fim' precisam ser do tipo models.DateField
"""
@wraps(decorated_method)
def display_atual(self):
try:
string_displayed = decorated_method(self)
except TypeError:
string_displayed = ""
if hasattr(self, 'data_inicio') and hasattr(self, 'data_fim'):
today = date.today()
e_atual = self.data_inicio <= today <= self.data_fim
string_displayed = "{} {}".format(
string_displayed, "(Atual)" if e_atual else "")
else:
print('{} {}'.format(
"Instance does not have the attributes [{}, {}].".format(
'data_inicio',
'data_fim'
),
"Decorator @{} has been disabled.".format(
vigencia_atual.__name__()
)
)
)
return string_displayed
return display_atual

10
sapl/parlamentares/models.py

@ -6,6 +6,7 @@ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.decorators import vigencia_atual
from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES, from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES,
SaplGenericRelation, get_settings_auth_user_model, SaplGenericRelation, get_settings_auth_user_model,
intervalos_tem_intersecao, intervalos_tem_intersecao,
@ -28,14 +29,12 @@ class Legislatura(models.Model):
current_year = datetime.now().year current_year = datetime.now().year
return self.data_inicio.year <= current_year <= self.data_fim.year return self.data_inicio.year <= current_year <= self.data_fim.year
@vigencia_atual
def __str__(self): def __str__(self):
current = ' (%s)' % _('Atual') if self.atual() else '' return _('%(numero)sª (%(start)s - %(end)s)') % {
return _('%(numero)sª (%(start)s - %(end)s)%(current)s') % {
'numero': self.numero, 'numero': self.numero,
'start': self.data_inicio.year, 'start': self.data_inicio.year,
'end': self.data_fim.year, 'end': self.data_fim.year}
'current': current}
@reversion.register() @reversion.register()
@ -64,6 +63,7 @@ class SessaoLegislativa(models.Model):
verbose_name_plural = _('Sessões Legislativas') verbose_name_plural = _('Sessões Legislativas')
ordering = ['-data_inicio', '-data_fim'] ordering = ['-data_inicio', '-data_fim']
@vigencia_atual
def __str__(self): def __str__(self):
return _('%(numero)sº (%(inicio)s - %(fim)s)') % { return _('%(numero)sº (%(inicio)s - %(fim)s)') % {
'numero': self.numero, 'numero': self.numero,

38
sapl/parlamentares/views.py

@ -1,4 +1,4 @@
import datetime from datetime import datetime
import json import json
from django.contrib import messages from django.contrib import messages
@ -657,17 +657,20 @@ class MesaDiretoraView(FormView):
not SessaoLegislativa.objects.exists()): not SessaoLegislativa.objects.exists()):
return self.validation(request) return self.validation(request)
sessao = SessaoLegislativa.objects.filter( legislatura = Legislatura.objects.first()
legislatura=Legislatura.objects.first()).first( sessoes = SessaoLegislativa.objects.filter(
) legislatura=legislatura).order_by("data_inicio")
mesa = sessao.composicaomesa_set.all() if sessao else [] today = datetime.now()
sessao_atual = sessoes.filter(data_inicio__year=today.year).first()
mesa = sessao_atual.composicaomesa_set.all() if sessao_atual else []
cargos_ocupados = [m.cargo for m in mesa] cargos_ocupados = [m.cargo for m in mesa]
cargos = CargoMesa.objects.all() cargos = CargoMesa.objects.all()
cargos_vagos = list(set(cargos) - set(cargos_ocupados)) cargos_vagos = list(set(cargos) - set(cargos_ocupados))
parlamentares = Legislatura.objects.first().mandato_set.all() parlamentares = legislatura.mandato_set.all()
parlamentares_ocupados = [m.parlamentar for m in mesa] parlamentares_ocupados = [m.parlamentar for m in mesa]
parlamentares_vagos = list( parlamentares_vagos = list(
set( set(
@ -682,11 +685,9 @@ class MesaDiretoraView(FormView):
return self.render_to_response( return self.render_to_response(
{'legislaturas': Legislatura.objects.all( {'legislaturas': Legislatura.objects.all(
).order_by('-numero'), ).order_by('-numero'),
'legislatura_selecionada': Legislatura.objects.first(), 'legislatura_selecionada': legislatura,
'sessoes': SessaoLegislativa.objects.filter( 'sessoes': sessoes,
legislatura=Legislatura.objects.first()), 'sessao_selecionada': sessao_atual,
'sessao_selecionada': SessaoLegislativa.objects.filter(
legislatura=Legislatura.objects.first()).first(),
'composicao_mesa': mesa, 'composicao_mesa': mesa,
'parlamentares': parlamentares_vagos, 'parlamentares': parlamentares_vagos,
'cargos_vagos': cargos_vagos 'cargos_vagos': cargos_vagos
@ -700,7 +701,6 @@ def altera_field_mesa(request):
operação (Legislatura/Sessão/Inclusão/Remoção), operação (Legislatura/Sessão/Inclusão/Remoção),
atualizando os campos após cada alteração atualizando os campos após cada alteração
""" """
legislatura = request.GET['legislatura'] legislatura = request.GET['legislatura']
sessoes = SessaoLegislativa.objects.filter( sessoes = SessaoLegislativa.objects.filter(
legislatura=legislatura).order_by('-data_inicio') legislatura=legislatura).order_by('-data_inicio')
@ -716,9 +716,11 @@ def altera_field_mesa(request):
# Caso a mudança tenha sido no campo legislatura, a sessão # Caso a mudança tenha sido no campo legislatura, a sessão
# atual deve ser a primeira daquela legislatura # atual deve ser a primeira daquela legislatura
else: else:
sessao_selecionada = SessaoLegislativa.objects.filter( today = datetime.now()
legislatura=legislatura).order_by( try:
'-data_inicio').first().id sessao_selecionada = sessoes.get(data_inicio__year=today.year).id
except ObjectDoesNotExist:
sessao_selecionada = sessoes.first().id
# Atualiza os componentes da view após a mudança # Atualiza os componentes da view após a mudança
composicao_mesa = ComposicaoMesa.objects.filter( composicao_mesa = ComposicaoMesa.objects.filter(
@ -881,7 +883,11 @@ def altera_field_mesa_public_view(request):
# Caso a mudança tenha sido no campo legislatura, a sessão # Caso a mudança tenha sido no campo legislatura, a sessão
# atual deve ser a primeira daquela legislatura # atual deve ser a primeira daquela legislatura
else: else:
sessao_selecionada = sessoes.first().id try:
today = datetime.now()
sessao_selecionada = sessoes.get(data_inicio__year=today.year).id
except ObjectDoesNotExist as e:
sessao_selecionada = sessoes.first().id
# Atualiza os componentes da view após a mudança # Atualiza os componentes da view após a mudança
lista_sessoes = [(s.id, s.__str__()) for s in sessoes] lista_sessoes = [(s.id, s.__str__()) for s in sessoes]

Loading…
Cancel
Save