Repository: interlegis/sapl

Issue:
Tramitação automática da matéria anexada não funciona corretamente se a matéria anexadora for tramitada em lote
## Comportamento Esperado
Ao tramitar em lote uma matéria que possui uma matéria anexada a ela, a matéria anexada registra automaticamente a tramitação da matéria anexadora, da mesma forma que ocorre ao realizar a tramitação normal de uma matéria que possui uma matéria anexada.

## Comportamento Atual
Ao tramitar em lote um matéria que possui uma matéria anexada a ela, a matéria anexada não registra automaticamente a tramitação da matéria anexadora.

## Possível Solução
Implementar o mesmo mecanismo de tramitação automática das matérias anexadas para a tramitação em lote.

## Passos para Reproduzir (para bugs)
1. Anexe uma matéria a outra matéria já existente.
2. Realize a tramitação em lote da matéria anexadora.
3. Verifique se a matéria anexada realizou a mesma tramitação da matéria anexadora.

## Contexto
Em casos que há varias matérias e realizarão a mesma tramitação, utiliza-se a tramitação em lote para poupar tempo do usuário que realizará a tramitação das matérias.
Em caso de uma matéria com uma matérias anexada a ela, o sistema realiza automaticamente na matéria anexada a mesma tramitação da matéria anexadora, para poupar tempo do usuário que realizará a tramitação das matéria.
Portanto, para poupar tempo do usuário que realizará a tramitação das matéria, ao se tramitar em lote matérias que possuem matérias anexadas a elas, o sistema deveria realizar automaticamente na matéria anexada a mesma tramitação da respectiva matéria anexadora.

## Seu Ambiente
* Versão usada (_Release_): 3.1.149
* Nome e versão do navegador: Google Chrome Versão 73.0.3683.86 64 bits
* Nome e versão do Sistema Operacional (desktop ou mobile): Windowns 10 Home Silgle Language Versão 1803



Discussion:
@LeandroJatai @DtiLegBG @andreagudo O que vcs acham desta proposta?
Correto... tramitação em lote deve ter o mesmo comportamento que a tramitação individual... porém, deve-se levar as mesmas considerações ainda nao implementadas e citadas aqui: #2415 

Resolving patch:
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -3,6 +3,7 @@
 import shutil
 import tempfile
 import weasyprint
+import itertools
 
 from datetime import datetime
 from random import choice
@@ -2249,8 +2250,18 @@ def post(self, request, *args, **kwargs):
         # issue https://github.com/interlegis/sapl/issues/1123
         # TODO: usar Form
         urgente = request.POST['urgente'] == 'True'
-        flag_error = False
-        for materia_id in marcadas:
+        flag_error = False  
+
+        materias_principais = [m for m in MateriaLegislativa.objects.filter(id__in=marcadas)]
+        materias_anexadas = [m.anexadas.all() for m in MateriaLegislativa.objects.filter(id__in=marcadas) if m.anexadas.all()]
+        materias_anexadas = list(itertools.chain.from_iterable(materias_anexadas)) 
+        tramitacao_local = int(request.POST['unidade_tramitacao_local'])
+        materias_anexadas = list(filter(lambda ma : not ma.tramitacao_set.all() or \
+                                        ma.tramitacao_set.last().unidade_tramitacao_destino.id == tramitacao_local,
+                                        materias_anexadas))
+        materias = set(materias_principais + materias_anexadas)
+
+        for materia in materias:
             try:
                 data_tramitacao = tz.localize(datetime.strptime(
                     request.POST['data_tramitacao'], "%d/%m/%Y"))
@@ -2260,7 +2271,7 @@ def post(self, request, *args, **kwargs):
                 return self.get(request, self.kwargs)
 
             t = Tramitacao(
-                materia_id=materia_id,
+                materia=materia,
                 data_tramitacao=data_tramitacao,
                 data_encaminhamento=data_encaminhamento,
                 data_fim_prazo=data_fim_prazo,
@@ -2294,7 +2305,7 @@ def post(self, request, *args, **kwargs):
 
         status = StatusTramitacao.objects.get(id=request.POST['status'])
 
-        for materia in MateriaLegislativa.objects.filter(id__in=marcadas):
+        for materia in materias:
             if status.indicador == 'F':
                 materia.em_tramitacao = False
             elif self.primeira_tramitacao:


Test patch: