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 %} -