Repository: interlegis/sapl

Issue:
Edição de relatoria causa erro 500
Após a mudança para adicionar período, a edição de relatoria está dando erro 500.

## Comportamento Esperado
Permitir a edição de relatoria. 

## Comportamento Atual
A edição de relatória existente causa erro 500.

## Possível Solução
Refazer a lógica de edição de relatoria.

## Passos para Reproduzir (para bugs)
1. Abrir uma relatoria existente.
2. Clicar no botão editar.


## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_): 3.1.152
* Nome e versão do navegador: Chrome
* Nome e versão do Sistema Operacional (desktop ou mobile): Linux
* Link para o seu projeto (Caso de fork deste projeto): 



Discussion:

Resolving patch:
diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -402,7 +402,16 @@ def __init__(self, *args, **kwargs):
         self.fields['composicao'].choices = [('', '---------')] + \
                                             [(c.pk, c) for c in composicoes]
 
-        self.fields['parlamentar'].choices = [('', '---------')]
+        # UPDATE
+        if self.initial.get('composicao') and self.initial.get('parlamentar'):
+            parlamentares = [(p.parlamentar.id, p.parlamentar) for p in
+                             Participacao.objects.filter(composicao__comissao_id=comissao_pk,
+                                                         composicao_id=self.initial['composicao'])]
+
+            self.fields['parlamentar'].choices = [('', '---------')] + parlamentares
+        # INSERT
+        else:
+            self.fields['parlamentar'].choices = [('', '---------')]
 
     def clean(self):
         super().clean()
@@ -424,6 +433,10 @@ def clean(self):
         else:
             cleaned_data['comissao'] = comissao
 
+        if cleaned_data['data_designacao_relator'] < cleaned_data['composicao'].periodo.data_inicio \
+                or cleaned_data['data_designacao_relator'] > cleaned_data['composicao'].periodo.data_fim:
+            raise ValidationError(_('Data de designação deve estar dentro do período da composição.'))
+
         return cleaned_data
 
 
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -33,7 +33,7 @@
 from sapl.base.email_utils import do_envia_email_confirmacao
 from sapl.base.models import Autor, CasaLegislativa, AppConfig as BaseAppConfig
 from sapl.base.signals import tramitacao_signal
-from sapl.comissoes.models import Comissao, Participacao
+from sapl.comissoes.models import Comissao, Participacao, Composicao
 from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT,
                                     STATUS_TA_PRIVATE)
 from sapl.compilacao.views import IntegracaoTaView
@@ -1135,6 +1135,26 @@ class UpdateView(MasterDetailCrud.UpdateView):
         layout_key = None
         logger = logging.getLogger(__name__)
 
+        def get_initial(self):
+            relatoria = Relatoria.objects.get(id=self.kwargs['pk'])
+            parlamentar = relatoria.parlamentar
+            comissao = relatoria.comissao
+            composicoes = [p.composicao for p in
+                            Participacao.objects.filter(
+                                parlamentar=parlamentar,
+                                composicao__comissao=comissao)]
+            data_designacao = relatoria.data_designacao_relator
+            composicao = ''
+            for c in composicoes:
+                data_inicial = c.periodo.data_inicio
+                data_fim = c.periodo.data_fim if c.periodo.data_fim else timezone.now().date()
+                if data_inicial <= data_designacao <= data_fim:
+                    composicao = c.id
+                    break
+            return {'comissao': relatoria.comissao.id,
+                    'parlamentar': relatoria.parlamentar.id,
+                    'composicao': composicao}
+
 
 class TramitacaoCrud(MasterDetailCrud):
     model = Tramitacao


Test patch: