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. 119
      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, from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
MateriaPesquisaOrderingFilter, autor_label, MateriaPesquisaOrderingFilter, autor_label,
autor_modal, timezone, choice_anos_com_sessaoplenaria, autor_modal, timezone, choice_anos_com_sessaoplenaria,
FileFieldCheckMixin) FileFieldCheckMixin, verifica_ausencia_parlamentar)
from .models import (ExpedienteMateria, JustificativaAusencia, from .models import (ExpedienteMateria, JustificativaAusencia,
Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
@ -599,8 +599,14 @@ class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet):
class OradorForm(ModelForm): class OradorForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['parlamentar'].queryset = \ sessao = SessaoPlenaria.objects.get(id=kwargs['initial']['id_sessao'])
Parlamentar.objects.filter(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): def clean(self):
super(OradorForm, self).clean() super(OradorForm, self).clean()
@ -641,9 +647,13 @@ class OradorExpedienteForm(ModelForm):
id_sessao = int(self.initial['id_sessao']) id_sessao = int(self.initial['id_sessao'])
sessao = SessaoPlenaria.objects.get(id=id_sessao) sessao = SessaoPlenaria.objects.get(id=id_sessao)
legislatura_vigente = sessao.legislatura legislatura_vigente = sessao.legislatura
self.fields['parlamentar'].queryset = \
Parlamentar.objects.filter(mandato__legislatura=legislatura_vigente, parlamentares_ativos = Parlamentar.objects.filter(ativo=True).order_by('nome_parlamentar')
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): def clean(self):
super(OradorExpedienteForm, self).clean() 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.materia.views import MateriaLegislativaPesquisaView
from sapl.painel.models import Cronometro, PainelConfig from sapl.painel.models import Cronometro, PainelConfig
from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato,
Parlamentar, SessaoLegislativa) Parlamentar, SessaoLegislativa,
AfastamentoParlamentar)
from sapl.sessao.apps import AppConfig from sapl.sessao.apps import AppConfig
from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm 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, from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
JustificativaAusenciaForm, OcorrenciaSessaoForm, ListMateriaForm, JustificativaAusenciaForm, OcorrenciaSessaoForm, ListMateriaForm,
@ -461,10 +463,12 @@ def get_presencas_generic(model, sessao, legislatura):
legislatura=legislatura).order_by('parlamentar__nome_parlamentar') legislatura=legislatura).order_by('parlamentar__nome_parlamentar')
for m in mandato: for m in mandato:
if m.parlamentar in presentes: parlamentar = m.parlamentar
yield (m.parlamentar, True) p_afastado = verifica_ausencia_parlamentar(parlamentar, sessao.data_inicio, sessao.data_fim)
if parlamentar in presentes:
yield (parlamentar, True, p_afastado)
else: else:
yield (m.parlamentar, False) yield (parlamentar, False, p_afastado)
class TipoExpedienteCrud(CrudAux): class TipoExpedienteCrud(CrudAux):
@ -1287,7 +1291,9 @@ class MesaView(FormMixin, DetailView):
org_parlamentares_vagos.sort( org_parlamentares_vagos.sort(
key=lambda x: remover_acentos(x.nome_parlamentar)) key=lambda x: remover_acentos(x.nome_parlamentar))
org_parlamentares_vagos = [ 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 # Se todos os cargos estiverem ocupados, a listagem de parlamentares
# deve ser renderizada vazia # deve ser renderizada vazia
if not cargos_vagos: if not cargos_vagos:

119
sapl/templates/sessao/presenca.html

@ -5,71 +5,72 @@
{% block actions %}{% endblock %} {% block actions %}{% endblock %}
{% block detail_content %} {% block detail_content %}
{% if perms|get_add_perm:view %} {% if perms|get_add_perm:view %}
<form method="POST"> <form method="POST">
{% csrf_token %} {% csrf_token %}
<div class="controls"> <div class="controls">
<div class="checkbox"> <div class="checkbox">
<label for="id_check_all"> <label for="id_check_all">
<input type="checkbox" id="id_check_all" onchange="checkAll(event)" /> Marcar/Desmarcar Todos <input type="checkbox" id="id_check_all" onchange="checkAll(event)" /> Marcar/Desmarcar Todos
</label> </label>
</div>
</div> </div>
</div> <br />
<br /> <div class="controls">
<div class="controls"> <div class="checkbox">
<div class="checkbox"> <label for="id_ativos">
<label for="id_ativos"> <input type="checkbox" name="ativos" id="id_ativos" onchange="escondeInativos()" checked /> Exibir somente
<input type="checkbox" name="ativos" id="id_ativos" onchange="escondeInativos()" checked /> Exibir somente parlamentares ativos
parlamentares ativos </label>
</label> </div>
</div> </div>
</div> <br />
<br /> <div class="controls ">
<div class="controls "> {% for parlamentar, check, afastado in view.get_presencas %}
{% for parlamentar, check in view.get_presencas %} {% if parlamentar.ativo and not afastado %}
{% if parlamentar.ativo %} <div class="checkbox">
<div class="checkbox"> <label for="id_presenca_{{forloop.counter}}">
<label for="id_presenca_{{forloop.counter}}"> <input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_ativos" value="{{ parlamentar.id }}"
<input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_ativos" value="{{ parlamentar.id }}" {% if check %} checked {% endif %}>
{% 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 %}
{{ parlamentar.nome_parlamentar }} / {% if parlamentar|filiacao_data_filter:object.data_inicio %} {{ parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %} </label>
</label> </div>
{% else %}
<div class="checkbox inativos" style="display:none;">
<label for="id_presenca_{{forloop.counter}}" class="inativos" style="display:none;">
<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 %}
{% endfor %}
</div> </div>
{% else %} <br />
<div class="checkbox inativos" style="display:none;"> <input type="submit" value="Salvar" class="btn btn-primary" />
<label for="id_presenca_{{forloop.counter}}" class="inativos" style="display:none;"> </form>
<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 %}
</label>
</div>
{% endif %}
{% endfor %}
</div>
<br />
<input type="submit" value="Salvar" class="btn btn-primary" />
</form>
{% else %} {% else %}
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<h2>Parlamentares presentes <h2>Parlamentares presentes
</div> </div>
</div> </div>
<br /> <br />
{% for parlamentar, check in view.get_presencas %} {% for parlamentar, check, afastado in view.get_presencas %}
{% if check %} {% if check %}
<div class="row"> <div class="row">
<div class="col-md-6"> <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 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> </label>
</div> </div>
</div> </div>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endblock detail_content %} {% endblock detail_content %}
{% block extra_js %} {% block extra_js %}

7
sapl/templates/sessao/presenca_ordemdia.html

@ -31,8 +31,8 @@
<br /> <br />
<div class="controls"> <div class="controls">
{% for parlamentar, check in view.get_presencas_ordem %} {% for parlamentar, check, afastado in view.get_presencas_ordem %}
{% if parlamentar.ativo %} {% if parlamentar.ativo and not afastado %}
<div class="checkbox"> <div class="checkbox">
<label for="id_presenca_{{forloop.counter}}"> <label for="id_presenca_{{forloop.counter}}">
<input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_ativos" value="{{ parlamentar.id }}" <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 }}" <input type="checkbox" id="id_presenca_{{forloop.counter}}" name="presenca_inativos" value="{{ parlamentar.id }}"
{% if check %} checked {% endif %} /> {% 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 %} {{ 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> </label>
</div> </div>
{% endif %} {% endif %}
@ -64,7 +65,7 @@
</div> </div>
<br/> <br/>
{% for parlamentar, check in view.get_presencas_ordem %} {% for parlamentar, check, afastado in view.get_presencas_ordem %}
{% if check %} {% if check %}
<div class="row"> <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 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): if self.exists(name):
os.remove(os.path.join(settings.MEDIA_ROOT, name)) os.remove(os.path.join(settings.MEDIA_ROOT, name))
return 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