From 9eaa8a4d8ea5e5ebefd510d6178fcb776ba00dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Rodrigues?= Date: Fri, 3 May 2019 12:35:28 -0300 Subject: [PATCH] =?UTF-8?q?Fix=20#2751=20e=20Automatiza=20a=20altera=C3=A7?= =?UTF-8?q?=C3=A3o=20do=20campo=20"Em=20Tramita=C3=A7=C3=A3o=3F"=20das=20M?= =?UTF-8?q?at=C3=A9rias=20Legislativas=20(#2752)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Automatizar Em Tramitação? e tramitação anexados * Automatizar Em Tramitação? - Edição direta * Atualizar sapl/materia/forms.py * Atualizar sapl/materia/views.py * Adicionar teste função lista_anexadas --- sapl/materia/forms.py | 30 +++++++++++++--- sapl/materia/tests/test_materia.py | 56 ++++++++++++++++++++++++++++++ sapl/materia/views.py | 29 +++++++++------- 3 files changed, 98 insertions(+), 17 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 82dd8248a..3c5533345 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -553,17 +553,39 @@ class TramitacaoForm(ModelForm): def save(self, commit=True): tramitacao = super(TramitacaoForm, self).save(commit) materia = tramitacao.materia - for ma in materia.anexadas.all(): - if not ma.tramitacao_set.all() \ - or ma.tramitacao_set.last().unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: + + materia.em_tramitacao = False if tramitacao.status.indicador == "F" else True + materia.save() + + anexadas = lista_anexadas(materia) + for anexada in anexadas: + if not anexada.tramitacao_set.all() \ + or anexada.tramitacao_set.last().unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: tramitacao_nova = tramitacao tramitacao_nova.pk = None - tramitacao_nova.materia = ma + tramitacao_nova.materia = anexada tramitacao_nova.save() + anexada.em_tramitacao = False if tramitacao.status.indicador == "F" else True + anexada.save() + return tramitacao +def lista_anexadas(materia_principal): + materias_anexadas = [] + anexadas_principal = Anexada.objects.filter(materia_principal=materia_principal) + while anexadas_principal: + anexadas = [] + for anexada in anexadas_principal: + materias_anexadas.append(anexada.materia_anexada) + anexadas_anexada = Anexada.objects.filter(materia_principal=anexada.materia_anexada) + anexadas.extend(anexadas_anexada) + anexadas_principal = anexadas + + return materias_anexadas + + class TramitacaoUpdateForm(TramitacaoForm): unidade_tramitacao_local = forms.ModelChoiceField( queryset=UnidadeTramitacao.objects.all(), diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py index 80f3f244f..048d528c5 100644 --- a/sapl/materia/tests/test_materia.py +++ b/sapl/materia/tests/test_materia.py @@ -14,12 +14,68 @@ from sapl.materia.models import (Anexada, Autoria, DespachoInicial, StatusTramitacao, TipoDocumento, TipoMateriaLegislativa, TipoProposicao, Tramitacao, UnidadeTramitacao) +from sapl.materia.forms import lista_anexadas from sapl.norma.models import (LegislacaoCitada, NormaJuridica, TipoNormaJuridica) from sapl.parlamentares.models import Legislatura from sapl.utils import models_with_gr_for_model +@pytest.mark.django_db(transaction=False) +def test_lista_anexadas(): + tipo_materia = mommy.make( + TipoMateriaLegislativa, + descricao="Tipo_Teste" + ) + regime_tramitacao = mommy.make( + RegimeTramitacao, + descricao="Regime_Teste" + ) + materia_principal = mommy.make( + MateriaLegislativa, + numero=20, + ano=2018, + data_apresentacao="2018-01-04", + regime_tramitacao=regime_tramitacao, + tipo=tipo_materia + ) + materia_anexada = mommy.make( + MateriaLegislativa, + numero=21, + ano=2019, + data_apresentacao="2019-05-04", + regime_tramitacao=regime_tramitacao, + tipo=tipo_materia + ) + materia_anexada_anexada = mommy.make( + MateriaLegislativa, + numero=22, + ano=2020, + data_apresentacao="2020-01-05", + regime_tramitacao=regime_tramitacao, + tipo=tipo_materia + ) + + mommy.make( + Anexada, + materia_principal=materia_principal, + materia_anexada=materia_anexada, + data_anexacao="2019-05-11" + ) + mommy.make( + Anexada, + materia_principal=materia_anexada, + materia_anexada=materia_anexada_anexada, + data_anexacao="2020-11-05" + ) + + lista = lista_anexadas(materia_principal) + + assert len(lista) == 2 + assert lista[0] == materia_anexada + assert lista[1] == materia_anexada_anexada + + @pytest.mark.django_db(transaction=False) def make_unidade_tramitacao(descricao): # Cria uma comissão para ser a unidade de tramitação diff --git a/sapl/materia/views.py b/sapl/materia/views.py index ec0561838..f38f72dbd 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -47,7 +47,8 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm, ConfirmarProposicaoForm, DevolverProposicaoForm, LegislacaoCitadaForm, OrgaoForm, ProposicaoForm, TipoProposicaoForm, - TramitacaoForm, TramitacaoUpdateForm, MateriaPesquisaSimplesForm) + TramitacaoForm, TramitacaoUpdateForm, MateriaPesquisaSimplesForm, + lista_anexadas) from sapl.norma.models import LegislacaoCitada from sapl.parlamentares.models import Legislatura from sapl.protocoloadm.models import Protocolo @@ -1233,12 +1234,6 @@ class TramitacaoCrud(MasterDetailCrud): self.object = form.save() username = self.request.user.username - if form.instance.status.indicador == 'F': - form.instance.materia.em_tramitacao = False - else: - form.instance.materia.em_tramitacao = True - form.instance.materia.save() - try: self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={})." .format(Tramitacao, self.object, self.request)) @@ -1272,12 +1267,6 @@ class TramitacaoCrud(MasterDetailCrud): self.object = form.save() username = self.request.user.username - if form.instance.status.indicador == 'F': - form.instance.materia.em_tramitacao = False - else: - form.instance.materia.em_tramitacao = True - form.instance.materia.save() - try: self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={}" .format(Tramitacao, self.object, self.request)) @@ -1611,6 +1600,20 @@ class MateriaLegislativaCrud(Crud): form_class = MateriaLegislativaForm + def form_valid(self, form): + self.object = form.save() + username = self.request.user.username + + if Anexada.objects.filter(materia_principal=self.kwargs['pk']).exists(): + materia = MateriaLegislativa.objects.get(pk=self.kwargs['pk']) + anexadas = lista_anexadas(materia) + + for anexada in anexadas: + anexada.em_tramitacao = True if form.instance.em_tramitacao else False + anexada.save() + + return super().form_valid(form) + @property def cancel_url(self): return self.search_url