Repository: interlegis/sapl

Issue:
Ordenar ordem do dia por NOME DO AUTOR
<!--- Forneça um resumo geral da _issue_ no título acima -->
Hoje temos ordem do dia com uma média de 100 proposições, o sistema só ordena por numero da proposições ou por inserção etc, além disso você pode arrastar tbm, porém aqui na casa por padrão a ordem do dia é lida sempre em ordem alfabética, dessa forma ordenar isso de forma manual fica inviável. 

## 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. -->
Ter uma ordenação por autor, e dentro da ordenação pro autor também ficar ordenado por numero da matéria.
## 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. -->Não ordena por autor

## 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. -->

## Passos para Reproduzir (para bugs)
<!--- 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.
2.
3.
4.

## 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 reprodução do bug citado, caso se aplique -->
![1](https://user-images.githubusercontent.com/2423695/74361385-9308ee00-4da5-11ea-8b24-b71a3d8555be.png)

## 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/urls.py b/sapl/sessao/urls.py
--- a/sapl/sessao/urls.py
+++ b/sapl/sessao/urls.py
@@ -27,10 +27,7 @@
                                mudar_ordem_materia_sessao, recuperar_materia,
                                recuperar_numero_sessao_view,
                                remove_parlamentar_composicao,
-                               reordernar_materias_expediente,
-                               reordernar_materias_ordem,
-                               renumerar_materias_ordem,
-                               renumerar_materias_expediente,
+                               reordena_materias,
                                sessao_legislativa_legislatura_ajax,
                                VotacaoEmBlocoOrdemDia, VotacaoEmBlocoExpediente,
                                VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView,
@@ -82,15 +79,9 @@
     url(r'^sessao/(?P<pk>\d+)/(?P<spk>\d+)/abrir-votacao$',
         abrir_votacao,
         name="abrir_votacao"),
-    url(r'^sessao/(?P<pk>\d+)/reordenar-expediente$',
-        reordernar_materias_expediente,
-        name="reordenar_expediente"),
-    url(r'^sessao/(?P<pk>\d+)/reordenar-ordem$', reordernar_materias_ordem,
-        name="reordenar_ordem"),
-    url(r'^sessao/(?P<pk>\d+)/renumerar-ordem$', renumerar_materias_ordem,
-        name="renumerar_ordem"),
-    url(r'^sessao/(?P<pk>\d+)/renumerar-materias-expediente$', renumerar_materias_expediente,
-        name="renumerar_materias_expediente"),
+
+    url(r'^sessao/(?P<pk>\d+)/reordena/(?P<tipo>[\w\-]+)/(?P<ordenacao>\d+)/$', reordena_materias, name="reordena_materias"),
+
     url(r'^sistema/sessao-plenaria/tipo/',
         include(TipoSessaoCrud.get_urls())),
     url(r'^sistema/sessao-plenaria/tipo-resultado-votacao/',
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1,5 +1,6 @@
 
 import logging
+from collections import OrderedDict
 from re import sub
 
 from django.contrib import messages
@@ -66,59 +67,32 @@
 LEITURA = 4
 
 
-def reordernar_materias_expediente(request, pk):
-    expedientes = ExpedienteMateria.objects.filter(
-        sessao_plenaria_id=pk
-    ).order_by(
-        'materia__tipo__sequencia_regimental',
-        'materia__ano',
-        'materia__numero'
-    )
+def reordena_materias(request, pk, tipo, ordenacao):
+    TIPOS_MATERIAS = {
+        "expediente": ExpedienteMateria,
+        "ordemdia": OrdemDia
+    }
 
-    for exp_num, e in enumerate(expedientes, 1):
-        e.numero_ordem = exp_num
-        e.save()
+    TIPOS_ORDENACAO = {
+        "1": ("materia__tipo__sequencia_regimental", "materia__ano", "materia__numero"),
+        "2": ("materia__ano", "materia__numero"),
+        "3": ("-materia__ano", "materia__numero"),
+        "4": ("materia__autores", "materia__ano", "materia__numero")
+    }
 
-    return HttpResponseRedirect(
-        reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': pk}))
+    TIPOS_URLS_SUCESSO = {
+        "expediente": "sapl.sessao:expedientemateria_list",
+        "ordemdia": "sapl.sessao:ordemdia_list"
+    }
 
+    materias = TIPOS_MATERIAS[tipo].objects.filter(sessao_plenaria_id=pk).order_by(*TIPOS_ORDENACAO[ordenacao])
+    materias = OrderedDict.fromkeys(materias)
 
-def reordernar_materias_ordem(request, pk):
-    ordens = OrdemDia.objects.filter(
-        sessao_plenaria_id=pk
-    ).order_by(
-        'materia__tipo__sequencia_regimental',
-        'materia__ano',
-        'materia__numero'
-    )
-    for ordem_num, o in enumerate(ordens, 1):
-        o.numero_ordem = ordem_num
-        o.save()
+    for numero, materia in enumerate(materias, 1):
+        materia.numero_ordem = numero
+        materia.save()
 
-    return HttpResponseRedirect(
-        reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk}))
-
-
-def renumerar_materias_ordem(request, pk):
-    ordens = OrdemDia.objects.filter(sessao_plenaria_id=pk)
-
-    for ordem_num, o in enumerate(ordens, 1):
-        o.numero_ordem = ordem_num
-        o.save()
-
-    return HttpResponseRedirect(
-        reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk}))
-
-
-def renumerar_materias_expediente(request, pk):
-    expedientes = ExpedienteMateria.objects.filter(sessao_plenaria_id=pk)
-
-    for exp_num, e in enumerate(expedientes, 1):
-        e.numero_ordem = exp_num
-        e.save()
-
-    return HttpResponseRedirect(
-        reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': pk}))
+    return HttpResponseRedirect(reverse(TIPOS_URLS_SUCESSO[tipo], kwargs={'pk': pk}))
 
 
 def verifica_presenca(request, model, spk, is_leitura=False):


Test patch: