Repository: interlegis/sapl

Issue:
Ordenação do Resumo é confuso
<!--- Forneça um resumo geral da _issue_ no título acima -->

## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->
Ver somente as opções que ainda não foram selecionadas.

## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Mostra todas as opções em todas as escolhas.

## Possível Solução
<!--- Não é obrigatório, mas sugira uma possível correção/razão para o bug -->
<!--- ou ideias de como implementar a adição/mudança. -->
Ocultar opções selecionadas ou ordenar arrastando as opções.

## Passos para Reproduzir
<!--- Forneça um link para um exemplo, ou um conjunto de passos inequívocos -->
<!--- para reproduzir esse bug. Inclua código para reproduzir, se relevante. -->
1. Sistema
2. Tabelas Auxiliares
3. Módulo Sessão Plenária
4. Ordenação do Resumo

<!-- ## Contexto
<!--- Como esse problema o afeta? O que você está tentando realizar? -->
<!--- Fornecer o contexto nos ajuda a encontrar uma solução que seja mais útil no mundo real -->


<!-- ## Imagens do Ocorrido
<!--- Representação visual em vídeo ou imagem do ocorrido -->
<!--- Se está descrevendo um bug poste imagens ou vídeos na repordução do bug citado, caso se aplique -->

<!-- ## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
<!-- * Versão usada (_Release_):
* Nome e versão do navegador:
* Nome e versão do Sistema Operacional (desktop ou mobile):
* Link para o seu projeto (Caso de fork deste projeto):


Discussion:

Resolving patch:
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -737,146 +737,6 @@ class PautaSessaoFilterSet(SessaoPlenariaFilterSet):
     titulo = _('Pesquisa de Pauta de Sessão')
 
 
-class ResumoOrdenacaoForm(forms.Form):
-    primeiro = forms.ChoiceField(
-        label='1°',
-        choices=ORDENACAO_RESUMO
-    )
-    segundo = forms.ChoiceField(
-        label='2°',
-        choices=ORDENACAO_RESUMO
-    )
-    terceiro = forms.ChoiceField(
-        label='3°',
-        choices=ORDENACAO_RESUMO
-    )
-    quarto = forms.ChoiceField(
-        label='4°',
-        choices=ORDENACAO_RESUMO
-    )
-    quinto = forms.ChoiceField(
-        label='5°',
-        choices=ORDENACAO_RESUMO
-    )
-    sexto = forms.ChoiceField(
-        label='6°',
-        choices=ORDENACAO_RESUMO
-    )
-    setimo = forms.ChoiceField(
-        label='7°',
-        choices=ORDENACAO_RESUMO
-    )
-    oitavo = forms.ChoiceField(
-        label='8°',
-        choices=ORDENACAO_RESUMO
-    )
-    nono = forms.ChoiceField(
-        label='9°',
-        choices=ORDENACAO_RESUMO
-    )
-    decimo = forms.ChoiceField(
-        label='10°',
-        choices=ORDENACAO_RESUMO
-    )
-    decimo_primeiro = forms.ChoiceField(
-        label='11°',
-        choices=ORDENACAO_RESUMO
-    )
-    decimo_segundo = forms.ChoiceField(
-        label='12°',
-        choices=ORDENACAO_RESUMO
-    )
-    decimo_terceiro = forms.ChoiceField(
-        label='13°',
-        choices=ORDENACAO_RESUMO
-    )
-    decimo_quarto = forms.ChoiceField(
-        label='14°',
-        choices=ORDENACAO_RESUMO
-    )
-
-    def __init__(self, *args, **kwargs):
-        row1 = to_row(
-            [('primeiro', 12)])
-        row2 = to_row(
-            [('segundo', 12)])
-        row3 = to_row(
-            [('terceiro', 12)])
-        row4 = to_row(
-            [('quarto', 12)])
-        row5 = to_row(
-            [('quinto', 12)])
-        row6 = to_row(
-            [('sexto', 12)])
-        row7 = to_row(
-            [('setimo', 12)])
-        row8 = to_row(
-            [('oitavo', 12)])
-        row9 = to_row(
-            [('nono', 12)])
-        row10 = to_row(
-            [('decimo', 12)])
-        row11 = to_row(
-            [('decimo_primeiro', 12)])
-        row12 = to_row(
-            [('decimo_segundo', 12)])
-        row13 = to_row(
-            [('decimo_terceiro', 12)])
-        row14 = to_row(
-            [('decimo_quarto', 12)]
-        )
-
-        self.helper = SaplFormHelper()
-        self.helper.layout = Layout(
-            Fieldset(_(''),
-                     row1, row2, row3, row4, row5,
-                     row6, row7, row8, row9, row10,
-                     row11, row12, row13, row14,
-                     form_actions(label='Atualizar'))
-        )
-
-        super().__init__(*args, **kwargs)
-
-    def clean(self):
-        super(ResumoOrdenacaoForm, self).clean()
-
-        if not self.is_valid():
-            return self.cleaned_data
-
-        cleaned_data = self.cleaned_data
-
-        for c1 in cleaned_data:
-            i = 0
-            for c2 in cleaned_data:
-                if cleaned_data[str(c1)] == cleaned_data[str(c2)]:
-                    i = i + 1
-                    if i > 1:
-                        raise ValidationError(_(
-                            'Não é possível ter campos repetidos'))
-        return self.cleaned_data
-
-    def save(self):
-        ordenacao = ResumoOrdenacao.objects.get()
-        cleaned_data = self.cleaned_data
-
-        ordenacao.primeiro = cleaned_data['primeiro']
-        ordenacao.segundo = cleaned_data['segundo']
-        ordenacao.terceiro = cleaned_data['terceiro']
-        ordenacao.quarto = cleaned_data['quarto']
-        ordenacao.quinto = cleaned_data['quinto']
-        ordenacao.sexto = cleaned_data['sexto']
-        ordenacao.setimo = cleaned_data['setimo']
-        ordenacao.oitavo = cleaned_data['oitavo']
-        ordenacao.nono = cleaned_data['nono']
-        ordenacao.decimo = cleaned_data['decimo']
-        ordenacao.decimo_primeiro = cleaned_data['decimo_primeiro']
-        ordenacao.decimo_segundo = cleaned_data['decimo_segundo']
-        ordenacao.decimo_terceiro = cleaned_data['decimo_terceiro']
-        ordenacao.decimo_quarto = cleaned_data['decimo_quarto']
-
-        ordenacao.save()
-
-
 class JustificativaAusenciaForm(ModelForm):
 
     class Meta:
diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py
--- a/sapl/sessao/urls.py
+++ b/sapl/sessao/urls.py
@@ -11,7 +11,7 @@
                                PesquisarPautaSessaoView,
                                PesquisarSessaoPlenariaView,
                                PresencaOrdemDiaView, PresencaView,
-                               ResumoOrdenacaoView, ResumoView, ResumoAtaView, RetiradaPautaCrud, SessaoCrud,
+                               ResumoView, ResumoAtaView, RetiradaPautaCrud, SessaoCrud,
                                TipoJustificativaCrud, TipoExpedienteCrud, TipoResultadoVotacaoCrud,
                                TipoExpedienteCrud, TipoResultadoVotacaoCrud, TipoRetiradaPautaCrud,
                                TipoSessaoCrud, VotacaoEditView,
@@ -33,7 +33,8 @@
                                renumerar_materias_expediente,
                                sessao_legislativa_legislatura_ajax,
                                VotacaoEmBlocoOrdemDia, VotacaoEmBlocoExpediente,
-                               VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView)
+                               VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView,
+                               resumo_ordenacao)
 
 from .apps import AppConfig
 
@@ -99,7 +100,7 @@
     url(r'^sistema/cargo-bancada/',
         include(CargoBancadaCrud.get_urls())),
     url(r'^sistema/resumo-ordenacao/',
-        ResumoOrdenacaoView.as_view(),
+        resumo_ordenacao,
         name='resumo_ordenacao'),
     url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias-expediente/',
         AdicionarVariasMateriasExpediente.as_view(),
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1,6 +1,6 @@
-
 import logging
-from re import sub
+from re import sub, search
+import ast
 
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
@@ -22,6 +22,8 @@
 from django.views.generic.detail import DetailView
 from django.views.generic.edit import FormMixin
 from django_filters.views import FilterView
+from django.shortcuts import render
+
 
 from sapl.base.models import AppConfig as AppsAppConfig
 from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
@@ -40,7 +42,7 @@
 from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
                     ExpedienteForm, JustificativaAusenciaForm, OcorrenciaSessaoForm, ListMateriaForm,
                     MesaForm, OradorExpedienteForm, OradorForm, PautaSessaoFilterSet,
-                    PresencaForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
+                    PresencaForm, SessaoPlenariaFilterSet,
                     SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
                     VotacaoNominalForm, RetiradaPautaForm, OradorOrdemDiaForm)
 from .models import (Bancada, CargoBancada, CargoMesa,
@@ -1278,45 +1280,58 @@ def remove_parlamentar_composicao(request):
                 {'msg': (
                     'Selecione algum parlamentar para ser excluido!', 0)})
 
-
-class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
-    template_name = 'sessao/resumo_ordenacao.html'
-    form_class = ResumoOrdenacaoForm
-    permission_required = {'sessao.change_resumoordenacao'}
-
-    def get_tupla(self, tupla_key):
+def get_tupla(tupla_key):
         for tupla in ORDENACAO_RESUMO:
             if tupla[0] == tupla_key:
                 return tupla
 
-    def get_initial(self):
-        ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
+def resumo_ordenacao(request):
+    ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
+
+    initial = [
+        get_tupla(ordenacao.primeiro),
+        get_tupla(ordenacao.segundo),
+        get_tupla(ordenacao.terceiro),
+        get_tupla(ordenacao.quarto),
+        get_tupla(ordenacao.quinto),
+        get_tupla(ordenacao.sexto),
+        get_tupla(ordenacao.setimo),
+        get_tupla(ordenacao.oitavo),
+        get_tupla(ordenacao.nono),
+        get_tupla(ordenacao.decimo),
+        get_tupla(ordenacao.decimo_primeiro),
+        get_tupla(ordenacao.decimo_segundo),
+        get_tupla(ordenacao.decimo_terceiro),
+        get_tupla(ordenacao.decimo_quarto)
+    ]
+
+    context = {
+        'ordenacao': initial
+    }
+    if request.method == 'GET':
+        return render(request, 'sessao/resumo_ordenacao.html', context)
+    elif request.method == 'POST':        
+        ordenacao.primeiro = ast.literal_eval(request.POST['0'])[0]
+        ordenacao.segundo = ast.literal_eval(request.POST['1'])[0]
+        ordenacao.terceiro = ast.literal_eval(request.POST['2'])[0]
+        ordenacao.quarto = ast.literal_eval(request.POST['3'])[0]
+        ordenacao.quinto = ast.literal_eval(request.POST['4'])[0]
+        ordenacao.sexto = ast.literal_eval(request.POST['5'])[0]
+        ordenacao.setimo = ast.literal_eval(request.POST['6'])[0]
+        ordenacao.oitavo = ast.literal_eval(request.POST['7'])[0]
+        ordenacao.nono = ast.literal_eval(request.POST['8'])[0]
+        ordenacao.decimo = ast.literal_eval(request.POST['9'])[0]
+        ordenacao.decimo_primeiro =ast.literal_eval(request.POST['10'])[0]
+        ordenacao.decimo_segundo = ast.literal_eval(request.POST['11'])[0]
+        ordenacao.decimo_terceiro = ast.literal_eval(request.POST['12'])[0]
+        ordenacao.decimo_quarto = ast.literal_eval(request.POST['13'])[0]
+        ordenacao.save()
+
+        msg = _('Ordem salva com sucesso.')
+        messages.add_message(request, messages.SUCCESS, msg)
 
-        initial = {
-            'primeiro': self.get_tupla(ordenacao.primeiro),
-            'segundo': self.get_tupla(ordenacao.segundo),
-            'terceiro': self.get_tupla(ordenacao.terceiro),
-            'quarto': self.get_tupla(ordenacao.quarto),
-            'quinto': self.get_tupla(ordenacao.quinto),
-            'sexto': self.get_tupla(ordenacao.sexto),
-            'setimo': self.get_tupla(ordenacao.setimo),
-            'oitavo': self.get_tupla(ordenacao.oitavo),
-            'nono': self.get_tupla(ordenacao.nono),
-            'decimo': self.get_tupla(ordenacao.decimo),
-            'decimo_primeiro': self.get_tupla(ordenacao.decimo_primeiro),
-            'decimo_segundo': self.get_tupla(ordenacao.decimo_segundo),
-            'decimo_terceiro': self.get_tupla(ordenacao.decimo_terceiro),
-            'decimo_quarto': self.get_tupla(ordenacao.decimo_quarto)
-        }
-
-        return initial
-
-    def get_success_url(self):
-        return reverse('sapl.base:sistema')
-
-    def form_valid(self, form):
-        form.save()
-        return HttpResponseRedirect(self.get_success_url())
+        return HttpResponseRedirect(reverse(
+                    'sapl.sessao:resumo_ordenacao'))
 
 
 def get_turno(turno):


Test patch: