Browse Source

Adiciona verificação de ausência de parlamentar na Sessão Plenaria

pull/2904/head
Cesar Carvalho 6 years ago
parent
commit
56853b0030
  1. 22
      sapl/sessao/forms.py
  2. 18
      sapl/sessao/views.py
  3. 33
      sapl/templates/sessao/presenca.html
  4. 7
      sapl/templates/sessao/presenca_ordemdia.html
  5. 13
      sapl/utils.py

22
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()

18
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,
@ -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:

33
sapl/templates/sessao/presenca.html

@ -5,8 +5,8 @@
{% block actions %}{% endblock %}
{% block detail_content %}
{% if perms|get_add_perm:view %}
<form method="POST">
{% if perms|get_add_perm:view %}
<form method="POST">
{% csrf_token %}
<div class="controls">
<div class="checkbox">
@ -26,8 +26,8 @@
</div>
<br />
<div class="controls ">
{% for parlamentar, check in view.get_presencas %}
{% if parlamentar.ativo %}
{% for parlamentar, check, afastado in view.get_presencas %}
{% if parlamentar.ativo and not afastado %}
<div class="checkbox">
<label for="id_presenca_{{forloop.counter}}">
<input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_ativos" value="{{ parlamentar.id }}"
@ -41,6 +41,7 @@
<input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_inativos" value="{{ parlamentar.id }}"
{% if check %} checked {% endif %}>
{{ parlamentar.nome_parlamentar }} / {% if parlamentar|filiacao_data_filter:object.data_inicio %} {{ parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
{% if afastado %} (Afastado) {% endif %}
</label>
</div>
{% endif %}
@ -48,28 +49,28 @@
</div>
<br />
<input type="submit" value="Salvar" class="btn btn-primary" />
</form>
</form>
{% else %}
{% else %}
<div class="row">
<div class="row">
<div class="col-md-6">
<h2>Parlamentares presentes
</div>
</div>
<br />
</div>
<br />
{% for parlamentar, check in view.get_presencas %}
{% if check %}
<div class="row">
{% for parlamentar, check, afastado in view.get_presencas %}
{% if check %}
<div class="row">
<div class="col-md-6">
<label for="parlamentar"> - {{ parlamentar.nome_parlamentar }} / {% if parlamentar|filiacao_data_filter:object.data_inicio %} {{ parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
</label>
</div>
</div>
{% endif %}
{% endfor %}
{% endif %}
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endblock detail_content %}
{% block extra_js %}

7
sapl/templates/sessao/presenca_ordemdia.html

@ -31,8 +31,8 @@
<br />
<div class="controls">
{% 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 %}
<div class="checkbox">
<label for="id_presenca_{{forloop.counter}}">
<input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_ativos" value="{{ parlamentar.id }}"
@ -46,6 +46,7 @@
<input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_inativos" value="{{ parlamentar.id }}"
{% if check %} checked {% endif %} />
{{ parlamentar.nome_parlamentar }} / {% if parlamentar|filiacao_data_filter:object.data_inicio %} {{ parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
{% if afastado %} (Afastado) {% endif %}
</label>
</div>
{% endif %}
@ -64,7 +65,7 @@
</div>
<br/>
{% for parlamentar, check in view.get_presencas_ordem %}
{% for parlamentar, check, afastado in view.get_presencas_ordem %}
{% if check %}
<div class="row">
<div class="col-md-6"><label for="parlamentar"> - {{ parlamentar.nome_parlamentar }} / {% if parlamentar|filiacao_data_filter:object.data_inicio %} {{ parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}</label></div>

13
sapl/utils.py

@ -998,3 +998,16 @@ class OverwriteStorage(FileSystemStorage):
if self.exists(name):
os.remove(os.path.join(settings.MEDIA_ROOT, name))
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

Loading…
Cancel
Save