Browse Source

Fix #2751 e Automatiza a alteração do campo "Em Tramitação?" das Matérias Legislativas (#2752)

* 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
pull/2811/head
João Rodrigues 6 years ago
committed by Cesar Carvalho
parent
commit
9eaa8a4d8e
  1. 30
      sapl/materia/forms.py
  2. 56
      sapl/materia/tests/test_materia.py
  3. 29
      sapl/materia/views.py

30
sapl/materia/forms.py

@ -553,17 +553,39 @@ class TramitacaoForm(ModelForm):
def save(self, commit=True): def save(self, commit=True):
tramitacao = super(TramitacaoForm, self).save(commit) tramitacao = super(TramitacaoForm, self).save(commit)
materia = tramitacao.materia materia = tramitacao.materia
for ma in materia.anexadas.all():
if not ma.tramitacao_set.all() \ materia.em_tramitacao = False if tramitacao.status.indicador == "F" else True
or ma.tramitacao_set.last().unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: 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 = tramitacao
tramitacao_nova.pk = None tramitacao_nova.pk = None
tramitacao_nova.materia = ma tramitacao_nova.materia = anexada
tramitacao_nova.save() tramitacao_nova.save()
anexada.em_tramitacao = False if tramitacao.status.indicador == "F" else True
anexada.save()
return tramitacao 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): class TramitacaoUpdateForm(TramitacaoForm):
unidade_tramitacao_local = forms.ModelChoiceField( unidade_tramitacao_local = forms.ModelChoiceField(
queryset=UnidadeTramitacao.objects.all(), queryset=UnidadeTramitacao.objects.all(),

56
sapl/materia/tests/test_materia.py

@ -14,12 +14,68 @@ from sapl.materia.models import (Anexada, Autoria, DespachoInicial,
StatusTramitacao, TipoDocumento, StatusTramitacao, TipoDocumento,
TipoMateriaLegislativa, TipoProposicao, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao)
from sapl.materia.forms import lista_anexadas
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura from sapl.parlamentares.models import Legislatura
from sapl.utils import models_with_gr_for_model 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) @pytest.mark.django_db(transaction=False)
def make_unidade_tramitacao(descricao): def make_unidade_tramitacao(descricao):
# Cria uma comissão para ser a unidade de tramitação # Cria uma comissão para ser a unidade de tramitação

29
sapl/materia/views.py

@ -47,7 +47,8 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm,
ConfirmarProposicaoForm, ConfirmarProposicaoForm,
DevolverProposicaoForm, LegislacaoCitadaForm, DevolverProposicaoForm, LegislacaoCitadaForm,
OrgaoForm, ProposicaoForm, TipoProposicaoForm, OrgaoForm, ProposicaoForm, TipoProposicaoForm,
TramitacaoForm, TramitacaoUpdateForm, MateriaPesquisaSimplesForm) TramitacaoForm, TramitacaoUpdateForm, MateriaPesquisaSimplesForm,
lista_anexadas)
from sapl.norma.models import LegislacaoCitada from sapl.norma.models import LegislacaoCitada
from sapl.parlamentares.models import Legislatura from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
@ -1233,12 +1234,6 @@ class TramitacaoCrud(MasterDetailCrud):
self.object = form.save() self.object = form.save()
username = self.request.user.username 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: try:
self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={})." self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={})."
.format(Tramitacao, self.object, self.request)) .format(Tramitacao, self.object, self.request))
@ -1272,12 +1267,6 @@ class TramitacaoCrud(MasterDetailCrud):
self.object = form.save() self.object = form.save()
username = self.request.user.username 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: try:
self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={}" self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={}"
.format(Tramitacao, self.object, self.request)) .format(Tramitacao, self.object, self.request))
@ -1611,6 +1600,20 @@ class MateriaLegislativaCrud(Crud):
form_class = MateriaLegislativaForm 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 @property
def cancel_url(self): def cancel_url(self):
return self.search_url return self.search_url

Loading…
Cancel
Save