Repository: interlegis/sapl

Issue:
Separar cadastro de Parlamentar de vinculação a Legislatura
Atualmente, o cadastro de parlamentares é feito mediante a seleção da legislatura e posterior clique no botão Adicionar Parlamentar. Esse tipo de operação induz ao erro pois o operador acaba por cadastrar o parlamentar mais de uma vez, uma para cada legislatura.

## Comportamento Esperado
Evitar a duplicidade de parlamentares cadastrados no SAPL. O cadastro deve ser único com vários mandatos.

## Comportamento Atual
O sistema permite que um mesmo parlamentar seja cadastrado múltiplas vezes no sistema, gerando inconsistência de dados.

## Possível Solução
A função do botão de 'Adicionar Parlamentar' é vincular um Parlamentar previamente cadastrado a uma Legislatura. A ideia é que a tela de cadastro do parlamentar seja movida para Tabelas Auxiliares (sendo chamada de Cadastrar Parlamentar) e uma nova tela (com form) que vincule parlamentares cadastrados a suas legislaturas através da criação de um mandato no botão Adicionar Parlamentar.

## Passos para Reproduzir (para bugs)
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 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/parlamentares/forms.py b/sapl/parlamentares/forms.py
--- a/sapl/parlamentares/forms.py
+++ b/sapl/parlamentares/forms.py
@@ -236,18 +236,6 @@ def __init__(self, *args, **kwargs):
 
 class ParlamentarCreateForm(ParlamentarForm):
 
-    legislatura = forms.ModelChoiceField(
-        label=_('Legislatura'),
-        required=True,
-        queryset=Legislatura.objects.all().order_by('-data_inicio'),
-        empty_label='----------',
-    )
-
-    data_expedicao_diploma = forms.DateField(
-        label=_('Expedição do Diploma'),
-        required=True,
-    )
-
     class Meta(ParlamentarForm.Meta):
         widgets = {
             'fotografia': forms.ClearableFileInput(),
@@ -258,13 +246,6 @@ class Meta(ParlamentarForm.Meta):
     @transaction.atomic
     def save(self, commit=True):
         parlamentar = super(ParlamentarCreateForm, self).save(commit)
-        legislatura = self.cleaned_data['legislatura']
-        Mandato.objects.create(
-            parlamentar=parlamentar,
-            legislatura=legislatura,
-            data_inicio_mandato=legislatura.data_inicio,
-            data_fim_mandato=legislatura.data_fim,
-            data_expedicao_diploma=self.cleaned_data['data_expedicao_diploma'])
         content_type = ContentType.objects.get_for_model(Parlamentar)
         object_id = parlamentar.pk
         tipo = TipoAutor.objects.get(content_type=content_type)
diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py
--- a/sapl/parlamentares/urls.py
+++ b/sapl/parlamentares/urls.py
@@ -18,6 +18,7 @@
                                       insere_parlamentar_composicao,
                                       parlamentares_frente_selected,
                                       remove_parlamentar_composicao,
+                                      lista_parlamentares,
                                       parlamentares_filiados,
                                       PesquisarParlamentarView)
 
@@ -35,9 +36,11 @@
         VotanteView.get_urls()
     )),
 
+    url(r'^parlamentar/lista$', lista_parlamentares, name='lista_parlamentares'),
+  
     url(r'^parlamentar/pesquisar-parlamentar/',
         PesquisarParlamentarView.as_view(), name='pesquisar_parlamentar'),
-
+  
     url(r'^parlamentar/(?P<pk>\d+)/materias$',
         ParlamentarMateriasView.as_view(), name='parlamentar_materias'),
 
diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py
--- a/sapl/parlamentares/views.py
+++ b/sapl/parlamentares/views.py
@@ -674,6 +674,12 @@ def get_context_data(self, **kwargs):
             return context
 
 
+def lista_parlamentares(request):
+    template_name = "parlamentares/lista_parlamentares.html"
+    parlamentares = Parlamentar.objects.select_related().all()
+    return render(request, template_name, {"parlamentares": parlamentares})
+
+
 class ParlamentarMateriasView(FormView):
     template_name = "parlamentares/materias.html"
     success_url = reverse_lazy('sapl.parlamentares:parlamentar_materia')


Test patch:
diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py
--- a/sapl/parlamentares/tests/test_parlamentares.py
+++ b/sapl/parlamentares/tests/test_parlamentares.py
@@ -20,21 +20,14 @@ def test_cadastro_parlamentar(admin_client):
     response = admin_client.post(url, {'nome_completo': 'Teresa Barbosa',
                                        'nome_parlamentar': 'Terezinha',
                                        'sexo': 'F',
-                                       'ativo': 'True',
-                                       'legislatura': legislatura.id,
-                                       'data_expedicao_diploma': '2001-01-01'},
+                                       'ativo': 'True'
+                                       },
                                  follow=True)
 
     [parlamentar] = Parlamentar.objects.all()
     assert parlamentar.nome_parlamentar == 'Terezinha'
     assert parlamentar.sexo == 'F'
     assert parlamentar.ativo is True
-    # o primeiro mandato é criado
-    [mandato] = Mandato.objects.all()
-    assert mandato.parlamentar == parlamentar
-    assert str(mandato.data_expedicao_diploma) == '2001-01-01'
-    assert mandato.legislatura == legislatura
-    assert mandato.data_fim_mandato == legislatura.data_fim
 
 
 @pytest.mark.django_db(transaction=False)
@@ -42,9 +35,7 @@ def test_incluir_parlamentar_errors(admin_client):
     url = reverse('sapl.parlamentares:parlamentar_create')
     response = admin_client.post(url)
     erros_esperados = {campo: ['Este campo é obrigatório.']
-                       for campo in ['legislatura',
-                                     'data_expedicao_diploma',
-                                     'nome_parlamentar',
+                       for campo in ['nome_parlamentar',
                                      'nome_completo',
                                      'sexo',
                                      ]}