Repository: interlegis/sapl

Issue:
Mudar comportamento ao existir mais de uma matéria vinculada ao mesmo protocolo
<!--- 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. -->
Quando existir mais de uma matéria vinculada ao mesmo protocolo o usuário ser avisado disso ao invés de ser apresentado o ERRO 500 ao tentar entrar no detalha do protocolo.
## 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. -->
Atualmente é apresentado um ERRO 500 e o usuário acha que é um erro do sistema e não um erro de uso dele.

## 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. Vincular duas ou mais matérias ao mesmo protocolo (isso vai ocorrer mais com bases antigas, atualmente esse comportamento é bloqueado já pelo sistema)
2. Tentar entrar na tela de detalhe do protocolo


## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_): 3.1.131



Discussion:

Resolving patch:
diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py
--- a/sapl/protocoloadm/views.py
+++ b/sapl/protocoloadm/views.py
@@ -563,19 +563,21 @@ def get_context_data(self, **kwargs):
         username = self.request.user.username
 
         if protocolo.tipo_materia:
-            try:
-                self.logger.debug("user=" + username + ". Tentando obter objeto MateriaLegislativa com numero_protocolo={} e ano={}."
-                                .format(protocolo.numero, protocolo.ano))
-                materia = MateriaLegislativa.objects.get(
-                    numero_protocolo=protocolo.numero, ano=protocolo.ano)
-            except ObjectDoesNotExist:
-                self.logger.error("user=" + username + ". Objeto MateriaLegislativa com numero_protocolo={} e ano={} não encontrado."
-                                  " Definido como None.".format(protocolo.numero, protocolo.ano))
-                context['materia'] = None
-            else:
-                self.logger.info("user=" + username + ". Objeto MateriaLegislativa com numero_protocolo={} e ano={} encontrado"
-                                 "com sucesso.".format(protocolo.numero, protocolo.ano))
-                context['materia'] = materia
+            self.logger.debug(
+                "user=" + username + ". Tentando obter objeto MateriaLegislativa com numero_protocolo={} e ano={}."
+                .format(protocolo.numero, protocolo.ano))
+            materia = MateriaLegislativa.objects.filter(
+                numero_protocolo=protocolo.numero, ano=protocolo.ano)
+            context['materia'] = materia
+            if len(materia) > 1:
+                msg = _('Foi encontrada mais de uma matéria com o mesmo número de protocolo e ano.'
+                        ' Isso é um erro de uso!'
+                        ' Reporte isso ao suporte para que seja corrigido.')
+                messages.add_message(self.request, messages.ERROR, msg)
+                self.logger.error(
+                    "user=" + username + ". Objeto MateriaLegislativa com numero_protocolo={} e ano={}"
+                                         " encontrado mais de um registro."
+                                         " Erro relatado ao usuário.".format(protocolo.numero, protocolo.ano))
 
         if protocolo.tipo_documento:
             context[


Test patch: