From 56853b0030f7bb8440a58352358d11ad2dbf023f Mon Sep 17 00:00:00 2001 From: Cesar Carvalho Date: Tue, 20 Aug 2019 14:08:49 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20verifica=C3=A7=C3=A3o=20de=20aus?= =?UTF-8?q?=C3=AAncia=20de=20parlamentar=20na=20Sess=C3=A3o=20Plenaria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/sessao/forms.py | 22 +++- sapl/sessao/views.py | 20 ++-- sapl/templates/sessao/presenca.html | 119 ++++++++++--------- sapl/templates/sessao/presenca_ordemdia.html | 7 +- sapl/utils.py | 15 ++- 5 files changed, 107 insertions(+), 76 deletions(-) diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 570a706c4..ebc8bb1d5 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -22,7 +22,7 @@ from sapl.parlamentares.models import Parlamentar, Mandato from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, MateriaPesquisaOrderingFilter, autor_label, autor_modal, timezone, choice_anos_com_sessaoplenaria, - FileFieldCheckMixin) + FileFieldCheckMixin, verifica_ausencia_parlamentar) from .models import (ExpedienteMateria, JustificativaAusencia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, @@ -599,8 +599,14 @@ class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet): class OradorForm(ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields['parlamentar'].queryset = \ - Parlamentar.objects.filter(ativo=True).order_by('nome_parlamentar') + sessao = SessaoPlenaria.objects.get(id=kwargs['initial']['id_sessao']) + parlamentares_ativos = Parlamentar.objects.filter(ativo=True).order_by('nome_parlamentar') + for p in parlamentares_ativos: + if verifica_ausencia_parlamentar(p, sessao.data_inicio, sessao.data_fim): + parlamentares_ativos = parlamentares_ativos.exclude(id=p.id) + + self.fields['parlamentar'].queryset = parlamentares_ativos + def clean(self): super(OradorForm, self).clean() @@ -641,9 +647,13 @@ class OradorExpedienteForm(ModelForm): id_sessao = int(self.initial['id_sessao']) sessao = SessaoPlenaria.objects.get(id=id_sessao) legislatura_vigente = sessao.legislatura - self.fields['parlamentar'].queryset = \ - Parlamentar.objects.filter(mandato__legislatura=legislatura_vigente, - ativo=True).order_by('nome_parlamentar') + + parlamentares_ativos = Parlamentar.objects.filter(ativo=True).order_by('nome_parlamentar') + for p in parlamentares_ativos: + if verifica_ausencia_parlamentar(p, sessao.data_inicio, sessao.data_fim): + parlamentares_ativos = parlamentares_ativos.exclude(id=p.id) + + self.fields['parlamentar'].queryset = parlamentares_ativos def clean(self): super(OradorExpedienteForm, self).clean() diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index c6b326986..b76d5864a 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -35,10 +35,12 @@ from sapl.materia.models import (Autoria, TipoMateriaLegislativa, from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.painel.models import Cronometro, PainelConfig from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, - Parlamentar, SessaoLegislativa) + Parlamentar, SessaoLegislativa, + AfastamentoParlamentar) from sapl.sessao.apps import AppConfig from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm -from sapl.utils import show_results_filter_set, remover_acentos, get_client_ip, filiacao_data +from sapl.utils import (show_results_filter_set, remover_acentos, get_client_ip, filiacao_data, + verifica_ausencia_parlamentar) from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm, JustificativaAusenciaForm, OcorrenciaSessaoForm, ListMateriaForm, @@ -453,7 +455,7 @@ def get_presencas_generic(model, sessao, legislatura): sessao_plenaria=sessao) presentes = [p.parlamentar for p in presencas] - + presentes = sorted( presentes, key=lambda x: remover_acentos(x.nome_parlamentar)) @@ -461,10 +463,12 @@ def get_presencas_generic(model, sessao, legislatura): legislatura=legislatura).order_by('parlamentar__nome_parlamentar') for m in mandato: - if m.parlamentar in presentes: - yield (m.parlamentar, True) + parlamentar = m.parlamentar + p_afastado = verifica_ausencia_parlamentar(parlamentar, sessao.data_inicio, sessao.data_fim) + if parlamentar in presentes: + yield (parlamentar, True, p_afastado) else: - yield (m.parlamentar, False) + yield (parlamentar, False, p_afastado) class TipoExpedienteCrud(CrudAux): @@ -1287,7 +1291,9 @@ class MesaView(FormMixin, DetailView): org_parlamentares_vagos.sort( key=lambda x: remover_acentos(x.nome_parlamentar)) org_parlamentares_vagos = [ - p for p in org_parlamentares_vagos if p.ativo] + p for p in org_parlamentares_vagos if (p.ativo and + not verifica_ausencia_parlamentar(p, sessao.data_inicio, sessao.data_fim) + )] # Se todos os cargos estiverem ocupados, a listagem de parlamentares # deve ser renderizada vazia if not cargos_vagos: diff --git a/sapl/templates/sessao/presenca.html b/sapl/templates/sessao/presenca.html index 75b61ab45..4fc7a1cd0 100644 --- a/sapl/templates/sessao/presenca.html +++ b/sapl/templates/sessao/presenca.html @@ -5,71 +5,72 @@ {% block actions %}{% endblock %} {% block detail_content %} -{% if perms|get_add_perm:view %} -
- {% csrf_token %} -
-
- + {% if perms|get_add_perm:view %} + + {% csrf_token %} +
+
+ +
-
-
-
-
- +
+
+
+ +
-
-
-
- {% for parlamentar, check in view.get_presencas %} - {% if parlamentar.ativo %} -
- +
+
+ {% for parlamentar, check, afastado in view.get_presencas %} + {% if parlamentar.ativo and not afastado %} +
+ +
+ {% else %} + + {% endif %} + {% endfor %}
- {% else %} - - {% endif %} - {% endfor %} -
-
- - +
+ + -{% else %} + {% else %} -
-
-

Parlamentares presentes -

-
-
+
+
+

Parlamentares presentes +

+
+
-{% for parlamentar, check in view.get_presencas %} -{% if check %} -
-
- -
-
-{% endif %} -{% endfor %} -{% endif %} + {% for parlamentar, check, afastado in view.get_presencas %} + {% if check %} +
+
+ +
+
+ {% endif %} + {% endfor %} + {% endif %} {% endblock detail_content %} {% block extra_js %} diff --git a/sapl/templates/sessao/presenca_ordemdia.html b/sapl/templates/sessao/presenca_ordemdia.html index edd32edd8..6d8d57282 100644 --- a/sapl/templates/sessao/presenca_ordemdia.html +++ b/sapl/templates/sessao/presenca_ordemdia.html @@ -31,8 +31,8 @@
- {% for parlamentar, check in view.get_presencas_ordem %} - {% if parlamentar.ativo %} + {% for parlamentar, check, afastado in view.get_presencas_ordem %} + {% if parlamentar.ativo and not afastado %}
{% endif %} @@ -64,7 +65,7 @@

-{% for parlamentar, check in view.get_presencas_ordem %} +{% for parlamentar, check, afastado in view.get_presencas_ordem %} {% if check %}
diff --git a/sapl/utils.py b/sapl/utils.py index 0a0041943..d16d6eb54 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -997,4 +997,17 @@ class OverwriteStorage(FileSystemStorage): def get_available_name(self, name, max_length=None): if self.exists(name): os.remove(os.path.join(settings.MEDIA_ROOT, name)) - return name \ No newline at end of file + return name + + +def verifica_ausencia_parlamentar(parlamentar, data_inicio, data_fim=None): + from sapl.parlamentares.models import AfastamentoParlamentar + if data_fim: + existe_afastamento = AfastamentoParlamentar.objects.filter(parlamentar=parlamentar, + data_inicio__lte=data_inicio, + data_fim__gte=data_fim).exists() + else: + existe_afastamento = AfastamentoParlamentar.objects.filter(parlamentar=parlamentar, + data_inicio__lte=data_inicio).exists() + + return existe_afastamento