Browse Source

Fix #2836 (#2839)

* Fix #2836

* Fix #2836

* Fix #2836
pull/2846/head
João Rodrigues 6 years ago
committed by Edward
parent
commit
da107fb730
  1. 12
      sapl/sessao/forms.py
  2. 160
      sapl/sessao/views.py
  3. 14
      sapl/templates/sessao/votacao/votacao.html
  4. 7
      sapl/templates/sessao/votacao/votacao_simbolica_bloco.html

12
sapl/sessao/forms.py

@ -464,6 +464,9 @@ class VotacaoForm(forms.Form):
abstencoes = forms.IntegerField(label='Abstenções') abstencoes = forms.IntegerField(label='Abstenções')
total_presentes = forms.IntegerField( total_presentes = forms.IntegerField(
required=False, widget=forms.HiddenInput()) required=False, widget=forms.HiddenInput())
total_votantes = forms.IntegerField(
required=False, widget=forms.HiddenInput()
)
voto_presidente = forms.IntegerField( voto_presidente = forms.IntegerField(
label='A totalização inclui o voto do Presidente?') label='A totalização inclui o voto do Presidente?')
total_votos = forms.IntegerField(required=False, label='total') total_votos = forms.IntegerField(required=False, label='total')
@ -479,15 +482,16 @@ class VotacaoForm(forms.Form):
votos_nao = cleaned_data['votos_nao'] votos_nao = cleaned_data['votos_nao']
abstencoes = cleaned_data['abstencoes'] abstencoes = cleaned_data['abstencoes']
qtde_presentes = cleaned_data['total_presentes'] qtde_presentes = cleaned_data['total_presentes']
qtde_votantes = cleaned_data['total_votantes']
qtde_votos = votos_sim + votos_nao + abstencoes qtde_votos = votos_sim + votos_nao + abstencoes
voto_presidente = cleaned_data['voto_presidente'] voto_presidente = cleaned_data['voto_presidente']
if qtde_presentes and not voto_presidente: if qtde_votantes and not voto_presidente:
qtde_presentes -= 1 qtde_votantes -= 1
if qtde_presentes and qtde_votos != qtde_presentes: if qtde_votantes and qtde_votos != qtde_votantes:
raise ValidationError( raise ValidationError(
'O total de votos não corresponde com a quantidade de presentes!') 'O total de votos não corresponde com a quantidade de votantes!')
return cleaned_data return cleaned_data

160
sapl/sessao/views.py

@ -2084,13 +2084,24 @@ class VotacaoView(SessaoPermissionMixin):
ordem_id = kwargs['oid'] ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count() presentes_id = [
presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presenca_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presenca_ativos)
materia = {'materia': ordem.materia, 'ementa': ordem.materia.ementa} materia = {'materia': ordem.materia, 'ementa': ordem.materia.ementa}
context.update({'votacao_titulo': titulo, context.update({'votacao_titulo': titulo,
'materia': materia, 'materia': materia,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
return self.render_to_response(context) return self.render_to_response(context)
@ -2110,13 +2121,24 @@ class VotacaoView(SessaoPermissionMixin):
ordem_id = kwargs['oid'] ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count() presentes_id = [
presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presenca_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presenca_ativos)
materia = {'materia': ordem.materia, 'ementa': ordem.materia.ementa} materia = {'materia': ordem.materia, 'ementa': ordem.materia.ementa}
context.update({'votacao_titulo': titulo, context.update({'votacao_titulo': titulo,
'materia': materia, 'materia': materia,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
context.update({'form': form}) context.update({'form': form})
# ==================================================== # ====================================================
@ -2129,21 +2151,19 @@ class VotacaoView(SessaoPermissionMixin):
materia_id = kwargs['mid'] materia_id = kwargs['mid']
ordem_id = kwargs['oid'] ordem_id = kwargs['oid']
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count()
qtde_votos = (int(request.POST['votos_sim']) + qtde_votos = (int(request.POST['votos_sim']) +
int(request.POST['votos_nao']) + int(request.POST['votos_nao']) +
int(request.POST['abstencoes'])) int(request.POST['abstencoes']))
if (int(request.POST['voto_presidente']) == 0): if (int(request.POST['voto_presidente']) == 0):
qtde_presentes -= 1 qtde_ativos -= 1
if (qtde_votos > qtde_presentes or qtde_votos < qtde_presentes): if qtde_votos != qtde_ativos:
msg = _( msg = _(
'O total de votos não corresponde com a quantidade de presentes!') 'O total de votos não corresponde com a quantidade de votantes!')
messages.add_message(request, messages.ERROR, msg) messages.add_message(request, messages.ERROR, msg)
return self.render_to_response(context) return self.render_to_response(context)
elif (qtde_presentes == qtde_votos): else:
try: try:
votacao = RegistroVotacao() votacao = RegistroVotacao()
votacao.numero_votos_sim = int(request.POST['votos_sim']) votacao.numero_votos_sim = int(request.POST['votos_sim'])
@ -2788,14 +2808,25 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
expediente_id = kwargs['oid'] expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(id=expediente_id)
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count() presentes_id = [
presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presentes_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presentes_ativos)
materia = {'materia': expediente.materia, materia = {'materia': expediente.materia,
'ementa': expediente.materia.ementa} 'ementa': expediente.materia.ementa}
context.update({'votacao_titulo': titulo, context.update({'votacao_titulo': titulo,
'materia': materia, 'materia': materia,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
return self.render_to_response(context) return self.render_to_response(context)
@ -2815,14 +2846,25 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
expediente_id = kwargs['oid'] expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(id=expediente_id)
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count() presentes_id = [
presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presentes_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presentes_ativos)
materia = {'materia': expediente.materia, materia = {'materia': expediente.materia,
'ementa': expediente.materia.ementa} 'ementa': expediente.materia.ementa}
context.update({'votacao_titulo': titulo, context.update({'votacao_titulo': titulo,
'materia': materia, 'materia': materia,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
context.update({'form': form}) context.update({'form': form})
# ==================================================== # ====================================================
@ -2835,17 +2877,17 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
materia_id = kwargs['mid'] materia_id = kwargs['mid']
expediente_id = kwargs['oid'] expediente_id = kwargs['oid']
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count()
qtde_votos = (int(request.POST['votos_sim']) + qtde_votos = (int(request.POST['votos_sim']) +
int(request.POST['votos_nao']) + int(request.POST['votos_nao']) +
int(request.POST['abstencoes'])) int(request.POST['abstencoes']))
if (int(request.POST['voto_presidente']) == 0): if (int(request.POST['voto_presidente']) == 0):
qtde_presentes -= 1 qtde_ativos -= 1
if qtde_votos != qtde_presentes: if qtde_votos != qtde_ativos:
form._errors["total_votos"] = ErrorList([u""]) msg = _(
'O total de votos não corresponde com a quantidade de votantes!')
messages.add_message(request, messages.ERROR, msg)
return self.render_to_response(context) return self.render_to_response(context)
else: else:
try: try:
@ -3594,17 +3636,41 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
if request.POST['origem'] == 'ordem': if request.POST['origem'] == 'ordem':
ordens = OrdemDia.objects.filter( ordens = OrdemDia.objects.filter(
id__in=request.POST.getlist('marcadas_1')) id__in=request.POST.getlist('marcadas_1'))
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.kwargs['pk']).count() presentes_id = [
presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presenca_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presenca_ativos)
context.update({'ordens': ordens, context.update({'ordens': ordens,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
else: else:
expedientes = ExpedienteMateria.objects.filter( expedientes = ExpedienteMateria.objects.filter(
id__in=request.POST.getlist('marcadas_1')) id__in=request.POST.getlist('marcadas_1'))
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.kwargs['pk']).count() presentes_id = [
presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presenca_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presenca_ativos)
context.update({'expedientes': expedientes, context.update({'expedientes': expedientes,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
if 'salvar-votacao' in request.POST: if 'salvar-votacao' in request.POST:
form = VotacaoForm(request.POST) form = VotacaoForm(request.POST)
@ -3729,17 +3795,41 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
if self.request.POST['origem'] == 'ordem': if self.request.POST['origem'] == 'ordem':
ordens = OrdemDia.objects.filter( ordens = OrdemDia.objects.filter(
id__in=self.request.POST.getlist('ordens')) id__in=self.request.POST.getlist('ordens'))
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.kwargs['pk']).count() presentes_id = [
presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presenca_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presenca_ativos)
context.update({'ordens': ordens, context.update({'ordens': ordens,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
elif self.request.POST['origem'] == 'expediente': elif self.request.POST['origem'] == 'expediente':
expedientes = ExpedienteMateria.objects.filter( expedientes = ExpedienteMateria.objects.filter(
id__in=self.request.POST.getlist('expedientes')) id__in=self.request.POST.getlist('expedientes'))
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.kwargs['pk']).count() presentes_id = [
presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.kwargs['pk']
)
]
qtde_presentes = len(presentes_id)
presenca_ativos = Parlamentar.objects.filter(
id__in=presentes_id, ativo=True
)
qtde_ativos = len(presenca_ativos)
context.update({'expedientes': expedientes, context.update({'expedientes': expedientes,
'total_presentes': qtde_presentes}) 'total_presentes': qtde_presentes,
'total_votantes': qtde_ativos})
context.update({'resultado_votacao': TipoResultadoVotacao.objects.all(), context.update({'resultado_votacao': TipoResultadoVotacao.objects.all(),
'form': form, 'form': form,

14
sapl/templates/sessao/votacao/votacao.html

@ -15,7 +15,7 @@
{% for field in form %} {% for field in form %}
{% if field.errors %} {% if field.errors %}
{% if field.label == 'total'%} {% if field.label == 'total'%}
<li>O total de votos não corresponde com a quantidade de presentes!</li> <li>O total de votos não corresponde com a quantidade de votantes!</li>
{% else %} {% else %}
<li>O campo <b>{{field.label}}</b> é obrigatório!</li> <li>O campo <b>{{field.label}}</b> é obrigatório!</li>
{% endif %} {% endif %}
@ -32,19 +32,21 @@
<br /> <br />
<br /> <br />
<b>Total presentes:</b> {{total_presentes}} (com presidente) <b>Total presentes:</b> {{total_presentes}} (com presidente)
<br />
<b>Total votantes:</b> {{total_votantes}} (com presidente)
<input type="hidden" id="total_votos" name="total_votos"> <input type="hidden" id="total_votos" name="total_votos">
</div> </div>
<br /> <br />
<div class="row"> <div class="row">
<div class="col-md-4">Sim: <input type="text" id="votos_sim" name="votos_sim" value="" class="form-control"/></div> <div class="col-md-4">Sim*: <input type="text" id="votos_sim" name="votos_sim" value="" class="form-control"/></div>
<div class="col-md-4">Não: <input type="text" id="votos_nao" name="votos_nao" value="" class="form-control"/></div> <div class="col-md-4">Não*: <input type="text" id="votos_nao" name="votos_nao" value="" class="form-control"/></div>
<div class="col-md-4">Abstenções: <input type="text" id="abstencoes" name="abstencoes" value="" class="form-control"/></div> <div class="col-md-4">Abstenções*: <input type="text" id="abstencoes" name="abstencoes" value="" class="form-control"/></div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
A totalização inclui o voto do Presidente? A totalização inclui o voto do Presidente?*
<select id="voto_presidente" name="voto_presidente" class="form-control"> <select id="voto_presidente" name="voto_presidente" class="form-control">
<option value="1">Sim</option> <option value="1">Sim</option>
<option value="0" selected>Não</option> <option value="0" selected>Não</option>
@ -52,7 +54,7 @@
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
Resultado da Votação Resultado da Votação*
<select id="resultado_votacao" name="resultado_votacao" class="form-control"> <select id="resultado_votacao" name="resultado_votacao" class="form-control">
{% for tipo in view.get_tipos_votacao %} {% for tipo in view.get_tipos_votacao %}
<option value="{{tipo.id}}">{{tipo.nome}}</option> <option value="{{tipo.id}}">{{tipo.nome}}</option>

7
sapl/templates/sessao/votacao/votacao_simbolica_bloco.html

@ -8,9 +8,9 @@
<fieldset class="form-group"> <fieldset class="form-group">
<legend>Votação Simbólica</legend> <legend>Votação Simbólica</legend>
{% if ordens or expedientes %} {% if ordens or expedientes %}
{% if total_presentes == 0 %} {% if total_votantes == 0 %}
<div class="alert alert-info alert-dismissible " role="alert"> <div class="alert alert-info alert-dismissible " role="alert">
<div>Não existe nenhum parlamentar presente para que a votação ocorra.</div> <div>Não existe nenhum parlamentar ativo presente para que a votação ocorra.</div>
</div> </div>
{% if origem == 'ordem' %} {% if origem == 'ordem' %}
<a href="{% url 'sapl.sessao:votacao_bloco_ordemdia' pk %}" class="btn btn-warning">Voltar</a> <a href="{% url 'sapl.sessao:votacao_bloco_ordemdia' pk %}" class="btn btn-warning">Voltar</a>
@ -36,7 +36,10 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<b>Total presentes:</b> {{total_presentes}} (com presidente) <b>Total presentes:</b> {{total_presentes}} (com presidente)
<br/>
<b>Total votantes:</b> {{total_votantes}} (com presidente)
<input type="hidden" id="total_presentes" name="total_presentes" value="{{total_presentes}}"> <input type="hidden" id="total_presentes" name="total_presentes" value="{{total_presentes}}">
<input type="hidden" id="total_votantes" name="total_votantes" value="{{total_votantes}}">
</div> </div>
<br /> <br />

Loading…
Cancel
Save