diff --git a/sapl/painel/views.py b/sapl/painel/views.py index 5cadba9a1..097c033a2 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -21,7 +21,7 @@ from sapl.parlamentares.models import Legislatura, Parlamentar, Votante from sapl.sessao.models import (ExpedienteMateria, OradorExpediente, OrdemDia, PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, - VotoParlamentar) + VotoParlamentar, RegistroLeitura) from sapl.utils import filiacao_data, get_client_ip, sort_lista_chave from .models import Cronometro @@ -361,7 +361,7 @@ def get_presentes(pk, response, materia): else: presentes = SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=pk) - + sessao = SessaoPlenaria.objects.get(id=pk) num_presentes = len(presentes) data_sessao = sessao.data_inicio @@ -408,6 +408,8 @@ def get_presentes(pk, response, materia): tipo_votacao = 'Nominal' elif materia.tipo_votacao == 3: tipo_votacao = 'Secreta' + elif materia.tipo_votacao == 4: + tipo_votacao = 'Leitura' response.update({ 'tipo_resultado': materia.resultado, @@ -442,15 +444,27 @@ def response_nenhuma_materia(response): def get_votos(response, materia): logger = logging.getLogger(__name__) if type(materia) == OrdemDia: - registro = RegistroVotacao.objects.filter( - ordem=materia, materia=materia.materia).last() + if materia.tipo_votacao != 4: + registro = RegistroVotacao.objects.filter( + ordem=materia, materia=materia.materia).order_by('data_hora').last() + leitura = None + else: + leitura = RegistroLeitura.objects.filter( + ordem=materia, materia=materia.materia).order_by('data_hora').last() + registro = None tipo = 'ordem' elif type(materia) == ExpedienteMateria: - registro = RegistroVotacao.objects.filter( - expediente=materia, materia=materia.materia).last() + if materia.tipo_votacao != 4: + registro = RegistroVotacao.objects.filter( + expediente=materia, materia=materia.materia).order_by('data_hora').last() + leitura = None + else: + leitura = RegistroLeitura.objects.filter( + expediente=materia, materia=materia.materia).order_by('data_hora').last() + registro = None tipo = 'expediente' - if not registro: + if not registro and not leitura: response.update({ 'numero_votos_sim': 0, 'numero_votos_nao': 0, @@ -479,7 +493,15 @@ def get_votos(response, materia): logger.error("Votos do parlamentar (id={}) não encontrados. Retornado vazio." .format(p['parlamentar_id'])) response['presentes'][i]['voto'] = '' - + elif leitura: + response.update({ + 'numero_votos_sim': 0, + 'numero_votos_nao': 0, + 'numero_abstencoes': 0, + 'registro': True, + 'total_votos': 0, + 'tipo_resultado': 'Matéria lida.', + }) else: total = (registro.numero_votos_sim + registro.numero_votos_nao + @@ -556,33 +578,33 @@ def get_dados_painel(request, pk): # Caso não tenha nenhuma aberta, # a matéria a ser mostrada no Painel deve ser a última votada last_ordem_voto = RegistroVotacao.objects.filter( - ordem__sessao_plenaria=sessao).last() + ordem__sessao_plenaria=sessao).order_by('data_hora').last() last_expediente_voto = RegistroVotacao.objects.filter( - expediente__sessao_plenaria=sessao).last() - - if last_ordem_voto: - ultima_ordem_votada = last_ordem_voto.ordem - if last_expediente_voto: - ultimo_expediente_votado = last_expediente_voto.expediente + expediente__sessao_plenaria=sessao).order_by('data_hora').last() - if last_ordem_voto or last_expediente_voto: - # Se alguma ordem E algum expediente já tiver sido votado... - if last_ordem_voto and last_expediente_voto: - materia = ultima_ordem_votada\ - if last_ordem_voto.pk >= last_expediente_voto.pk\ - else ultimo_expediente_votado - - # Caso somente um deles tenha resultado, prioriza a Ordem do Dia - elif last_ordem_voto: - materia = ultima_ordem_votada - - # Caso a Ordem do dia não tenha resultado, mostra o último expediente - elif last_expediente_voto: - materia = ultimo_expediente_votado + last_ordem_leitura = RegistroLeitura.objects.filter( + ordem__sessao_plenaria=sessao).order_by('data_hora').last() + last_expediente_leitura = RegistroLeitura.objects.filter( + expediente__sessao_plenaria=sessao).order_by('data_hora').last() + # Obtém última matéria que foi votada, através do timestamp mais recente + if last_ordem_voto: + ordem_expediente = last_ordem_voto.ordem + ultimo_timestamp = last_ordem_voto.data_hora + if last_expediente_voto and last_expediente_voto.data_hora > ultimo_timestamp: + ordem_expediente = last_expediente_voto.expediente + ultimo_timestamp = last_expediente_voto.data_hora + if last_ordem_leitura and last_ordem_leitura.data_hora > ultimo_timestamp: + ordem_expediente = last_ordem_leitura.ordem + ultimo_timestamp = last_ordem_leitura.data_hora + if last_expediente_leitura and last_expediente_leitura.data_hora > ultimo_timestamp: + ordem_expediente = last_expediente_leitura.expediente + ultimo_timestamp = last_expediente_leitura.data_hora + + if ordem_expediente: return JsonResponse(get_votos( - get_presentes(pk, response, materia), - materia)) + get_presentes(pk, response, ordem_expediente), + ordem_expediente)) # Retorna que não há nenhuma matéria já votada ou aberta return response_nenhuma_materia(get_presentes(pk, response, None)) diff --git a/sapl/sessao/migrations/0047_auto_20190829_1253.py b/sapl/sessao/migrations/0047_auto_20190829_1253.py new file mode 100644 index 000000000..277233e37 --- /dev/null +++ b/sapl/sessao/migrations/0047_auto_20190829_1253.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-29 15:53 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0046_auto_20190827_1228'), + ] + + operations = [ + migrations.AlterField( + model_name='registroleitura', + name='data_hora', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data/Hora'), + ), + migrations.AlterField( + model_name='registrovotacao', + name='data_hora', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data/Hora'), + ), + migrations.AlterField( + model_name='votoparlamentar', + name='data_hora', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data/Hora'), + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 84b890296..4c90b4abe 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -544,7 +544,7 @@ class RegistroVotacao(models.Model): default='') data_hora = models.DateTimeField( verbose_name=_('Data/Hora'), - auto_now_add=True, + auto_now=True, blank=True, null=True) @@ -595,7 +595,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar default='') data_hora = models.DateTimeField( verbose_name=_('Data/Hora'), - auto_now_add=True, + auto_now=True, blank=True, null=True) @@ -886,7 +886,7 @@ class RegistroLeitura(models.Model): default='') data_hora = models.DateTimeField( verbose_name=_('Data/Hora'), - auto_now_add=True, + auto_now=True, blank=True, null=True) @@ -906,6 +906,6 @@ class RegistroLeitura(models.Model): # forem reestruturados e os campos ordem e expediente forem unificados if not xor(bool(self.ordem), bool(self.expediente)): raise ValidationError( - 'RegistroVotacao deve ter exatamente um dos campos ' + 'RegistroLeitura deve ter exatamente um dos campos ' 'ordem ou expediente preenchido. Ambos estão preenchidos: ' '{}, {}'. format(self.ordem, self.expediente)) \ No newline at end of file diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index 217a09053..070add376 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -421,23 +421,40 @@ else{ $("#observacao_materia").text(''); } - if (data['tipo_resultado'] && data['status_painel'] == true){ + if(data['tipo_votacao'] != 'Leitura'){ + $("#resultado_votacao").css("color", "#45919D"); + $("#mat_em_votacao").text("Matéria em Votação"); + $("#resultado_votacao_div").show(); + } + else{ + $("#resultado_votacao_div").hide(); + $("#mat_em_votacao").text("Matéria em Leitura"); + } + console.log(data["tipo_resultado"], data['tipo_votacao']); $("#resultado_votacao").text(data["tipo_resultado"]); - $("#resultado_votacao").css("color", "#45919D"); + var resultado_votacao_upper = $("#resultado_votacao").text().toUpperCase(); + console.log(resultado_votacao_upper, data['tipo_resultado']); if (resultado_votacao_upper.search("APROV") != -1){ $("#resultado_votacao").css("color", "green"); $("#mat_em_votacao").text("Matéria Votada"); } - if (resultado_votacao_upper.search("REJEIT") != -1){ + else if (resultado_votacao_upper.search("REJEIT") != -1){ $("#resultado_votacao").css("color", "red"); $("#mat_em_votacao").text("Matéria Votada"); } + else if (resultado_votacao_upper.search("LIDA") != -1){ + $("#mat_em_votacao").text("Matéria Lida"); + } } else{ $("#resultado_votacao").text(''); - $("#mat_em_votacao").text("Matéria em Votação"); + if(data['tipo_votacao'] != 'Leitura') + $("#mat_em_votacao").text("Matéria em Votação"); + else{ + $("#mat_em_votacao").text("Matéria em Leitura"); + } } }, error: function(err) {