Repository: interlegis/sapl

Issue:
Encerramento de votação no ato de REGISTRAR VOTAÇÃO
Quando a matéria é colocada em votação [ABRIR VOTAÇÃO] é aberto o painel de votação para cada parlamentar, que será fechado  só após o operador clicar o botão [FECHAR VOTAÇÃO].  Nesse meio tempo, o operador deverá aperta o botão [ATUALIZAR VOTOS],  antes de fazer qualquer registro de voto (caso o operador seja solicitado a fazê-lo). Depois desse registro, não se aperta mais o botão [ATUALIZAR VOTOS], senão apaga os votos que o mesmo fez. Após isso, clicará em [COMPUTAR VOTOS INFORMADOS PELO OPERADOR], fará o cálculo para informar o Resultado da votação, e digitará alguma observação (se tiver). Só então, é que o mesmo vai clicar em [FECHAR VOTAÇÃO], e será fechado o painel de votação do parlamentar. 
Acontece que se nesse meio tempo, ( entre REGISTRAR A VOTAÇÃO  e FECHAR A VOTAÇÃO), o parlamentar mudar o seu voto, e o operador não clicar em [ATUALIZAR VOTOS], essa alteração não será computada, o que poderá trazer dúvidas quanto à confiabilidade no painel eletrônico. 
Minha sugestão é que após declaração do presidente informando o encerramento da votação, o  operador clicaria em [REGISTRAR VOTAÇÃO],  e nesse momento, travaria o painel de votação e informaria  nas telas dos parlamentares o encerramento dessa votação. Daí pra frente, o operador procederia o encerramento com calma e sem a preocupação de não esquecer de clicar em [ATUALIZAR VOTOS]. 


Discussion:

Resolving patch:
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1691,19 +1691,13 @@ def get_success_url(self):
 
 def fechar_votacao_materia(materia):
     if type(materia) == OrdemDia:
-        registro_votacao = RegistroVotacao.objects.filter(ordem=materia)
-        voto_parlamentar = VotoParlamentar.objects.filter(ordem=materia)
+        RegistroVotacao.objects.filter(ordem=materia).delete()
+        VotoParlamentar.objects.filter(ordem=materia).delete()
 
     elif type(materia) == ExpedienteMateria:
-        registro_votacao = RegistroVotacao.objects.filter(
-            expediente=materia)
-        voto_parlamentar = VotoParlamentar.objects.filter(expediente=materia)
-
-    for v in voto_parlamentar:
-        v.delete()
-
-    for r in registro_votacao:
-        r.delete()
+        RegistroVotacao.objects.filter(
+            expediente=materia).delete()
+        VotoParlamentar.objects.filter(expediente=materia).delete()
 
     if materia.resultado:
         materia.resultado = ''
@@ -1743,6 +1737,9 @@ def get(self, request, *args, **kwargs):
                 return HttpResponseRedirect(reverse(
                     'sapl.sessao:ordemdia_list', kwargs={'pk': kwargs['pk']}))
 
+            ordem.votacao_aberta = False
+            ordem.save()
+
         elif self.expediente:
             expediente_id = kwargs['oid']
             if (RegistroVotacao.objects.filter(
@@ -1771,6 +1768,9 @@ def get(self, request, *args, **kwargs):
                     'sapl.sessao:expedientemateria_list',
                     kwargs={'pk': kwargs['pk']}))
 
+            expediente.votacao_aberta = False
+            expediente
+
         materia = {'materia': materia_votacao.materia,
                    'ementa': sub(
                        '&nbsp;', ' ', strip_tags(
@@ -1828,17 +1828,13 @@ def post(self, request, *args, **kwargs):
                 form.add_error(None, 'Não é possível finalizar a votação sem '
                                      'nenhum voto')
                 return self.form_invalid(form)
-
+            # Remove todas as votação desta matéria, caso existam
             if self.ordem:
-                votacao = RegistroVotacao.objects.filter(
-                    ordem_id=ordem_id)
+                RegistroVotacao.objects.filter(
+                    ordem_id=ordem_id).delete()
             elif self.expediente:
-                votacao = RegistroVotacao.objects.filter(
-                    expediente_id=expediente_id)
-
-            # Remove todas as votação desta matéria, caso existam
-            for v in votacao:
-                v.delete()
+                RegistroVotacao.objects.filter(
+                    expediente_id=expediente_id).delete()
 
             votacao = RegistroVotacao()
             votacao.numero_votos_sim = votos_sim


Test patch: