diff --git a/sapl/painel/views.py b/sapl/painel/views.py index 7f36fa8be..dfdc748f6 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -355,7 +355,7 @@ def get_cronometro_status(request, name): def get_materia_aberta(pk): return OrdemDia.objects.filter( - sessao_plenaria_id=pk, votacao_aberta=True).last() + sessao_plenaria_id=pk).filter(Q(votacao_aberta=True) | Q(discussao_aberta=True)).last() def get_presentes(pk, response, materia): @@ -437,7 +437,7 @@ def get_presentes(pk, response, materia): def get_materia_expediente_aberta(pk): return ExpedienteMateria.objects.filter( - sessao_plenaria_id=pk, votacao_aberta=True).last() + sessao_plenaria_id=pk).filter(Q(votacao_aberta=True) | Q(discussao_aberta=True)).last() def response_nenhuma_materia(response): @@ -563,7 +563,8 @@ def get_dados_painel(request, pk): 'cronometro_ordem': get_cronometro_status(request, 'ordem'), 'cronometro_consideracoes': get_cronometro_status(request, 'consideracoes'), 'status_painel': sessao.painel_aberto, - 'brasao': brasao + 'brasao': brasao, + 'discutir': False } ordem_dia = get_materia_aberta(pk) @@ -572,10 +573,14 @@ def get_dados_painel(request, pk): # Caso tenha alguma matéria com votação aberta, ela é mostrada no painel # com prioridade para Ordem do Dia. if ordem_dia: + if ordem_dia.discussao_aberta == True: + response.update({'discutir':True}) return JsonResponse(get_votos( get_presentes(pk, response, ordem_dia), ordem_dia)) elif expediente: + if expediente.discussao_aberta == True: + response.update({'discutir':True}) return JsonResponse(get_votos( get_presentes(pk, response, expediente), expediente)) diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 39f144c2c..c14226fe1 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -381,6 +381,13 @@ class AbstractOrdemDia(models.Model): choices=YES_NO_CHOICES, verbose_name=_('Registro de Votação Iniciado?') ) + discussao_aberta = models.BooleanField( + null=True, + blank=True, + default=False, + choices=YES_NO_CHOICES, + verbose_name=_('Discurssão iniciada?') + ) class Meta: abstract = True diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 986aca20e..193ea9883 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -3,6 +3,7 @@ from collections import OrderedDict from datetime import datetime from re import sub import logging +from urllib.request import parse_keqv_list from django.conf import settings from django.contrib import messages @@ -117,10 +118,10 @@ def verifica_presenca(request, model, spk, is_leitura=False): return True -def verifica_votacoes_abertas(request): +def verifica_votacoes_abertas(request, pk): votacoes_abertas = SessaoPlenaria.objects.filter( - Q(ordemdia__votacao_aberta=True) | - Q(expedientemateria__votacao_aberta=True)).distinct() + (Q(ordemdia__votacao_aberta=True) | Q(ordemdia__discussao_aberta=True) & ~Q(ordemdia__id=int(pk))) | + (Q(expedientemateria__votacao_aberta=True) | Q(expedientemateria__discussao_aberta=True) & ~Q(expedientemateria__id=int(pk)))).distinct() logger = logging.getLogger(__name__) @@ -185,9 +186,15 @@ def abrir_votacao(request, pk, spk): materia_votacao = model.objects.get(id=pk) is_leitura = materia_votacao.tipo_votacao == 4 if (verifica_presenca(request, presenca_model, spk, is_leitura) and - verifica_votacoes_abertas(request) and + verifica_votacoes_abertas(request, pk) and verifica_sessao_iniciada(request, spk, is_leitura)): - materia_votacao.votacao_aberta = True + if 'discutir' in request.GET: + materia_votacao.discussao_aberta = True + else: + if materia_votacao.discussao_aberta == True: + materia_votacao.discussao_aberta = False + if 'cancelar_discussao' not in request.GET: + materia_votacao.votacao_aberta = True sessao = SessaoPlenaria.objects.get(id=spk) sessao.painel_aberto = True sessao.save() @@ -325,7 +332,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente): if obj.tipo_votacao != LEITURA: btn_registrar = '''
- %s
''' % ( @@ -333,7 +340,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente): else: btn_registrar = '''
- %s
''' % ( @@ -363,17 +370,31 @@ def customize_link_materia(context, pk, has_permission, is_expediente): if has_permission: if not obj.tipo_votacao == LEITURA: - btn_abrir = ''' - Matéria não votada
- Abrir Votação''' % (url) - resultado = btn_abrir + if obj.discussao_aberta != True: + btn_abrir = ''' + Matéria não votada
+ Abrir Discussão + Abrir Votação''' % (url + '&discutir=True', url) + resultado = btn_abrir + else: + btn_abrir = ''' + Matéria não votada
+ Cancelar Discussão + Abrir Votação''' % (url + '&cancelar_discussao=True', url) + resultado = btn_abrir else: btn_abrir = ''' Matéria não lida
Abrir para Leitura''' % (url) resultado = btn_abrir else: diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index 1cb2e2c83..22706d34d 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -408,13 +408,17 @@ if (data["status_painel"] == true){ $("#materia_legislativa_texto").text(data["materia_legislativa_texto"]); $("#materia_legislativa_ementa").text(data["materia_legislativa_ementa"]); + $("#materia_legislativa_ementa").show(); } else{ $("#materia_legislativa_texto").text('A Matéria em votação só aparecerá quando o painel estiver aberto'); + $("#materia_legislativa_ementa").hide(); + } } else{ $("#materia_legislativa_texto").text('Não há nenhuma matéria votada ou para votação.'); + $("#materia_legislativa_ementa").hide(); } if (data['observacao_materia'] && data["status_painel"] == true){ @@ -432,7 +436,11 @@ if (data['tipo_resultado'] && data['status_painel'] == true){ if(data['tipo_votacao'] != 'Leitura' && !data['sessao_finalizada'] && !data["sessao_solene"]){ $("#resultado_votacao").css("color", "#45919D"); - $("#mat_em_votacao").text("Matéria em Votação"); + if (!data['discutir']){ + $("#mat_em_votacao").text("Matéria em Votação"); + }else{ + $("#mat_em_votacao").text("Matéria em Discussão"); + } $("#resultado_votacao_div").show(); } else{