Browse Source

Fix #2763

pull/2765/head
Cesar Carvalho 7 years ago
parent
commit
161ac92261
  1. 47
      sapl/materia/forms.py
  2. 23
      sapl/materia/views.py
  3. 23
      sapl/utils.py

47
sapl/materia/forms.py

@ -38,7 +38,7 @@ from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto,
from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura, Partido, Parlamentar
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo, Anexado
from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import (YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO,
ChoiceWithoutValidationField,
@ -580,20 +580,6 @@ class TramitacaoForm(ModelForm):
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(),
@ -670,6 +656,37 @@ class TramitacaoUpdateForm(TramitacaoForm):
return cd
@transaction.atomic
def save(self, commit=True):
tram_principal = super(TramitacaoUpdateForm, self).save(commit)
materia = tram_principal.materia
for ma in materia.anexadas.all():
tram_anexada = ma.tramitacao_set.last()
if (tram_principal.status != tram_anexada.status or \
tram_principal.data_tramitacao != tram_anexada.data_tramitacao or \
tram_principal.unidade_tramitacao_local != tram_anexada.unidade_tramitacao_local or \
tram_principal.data_encaminhamento != tram_anexada.data_encaminhamento or \
tram_principal.unidade_tramitacao_destino != tram_anexada.unidade_tramitacao_destino or \
tram_principal.urgente != tram_anexada.urgente or \
tram_principal.turno != tram_anexada.turno or \
tram_principal.texto != tram_anexada.texto or \
tram_principal.data_fim_prazo != tram_anexada.data_fim_prazo or \
tram_principal.user != tram_anexada.user or \
tram_principal.ip != tram_anexada.ip):
tram_anexada.status = tram_principal.status
tram_anexada.data_tramitacao = tram_principal.data_tramitacao
tram_anexada.unidade_tramitacao_local = tram_principal.unidade_tramitacao_local
tram_anexada.data_encaminhamento = tram_principal.data_encaminhamento
tram_anexada.unidade_tramitacao_destino = tram_principal.unidade_tramitacao_destino
tram_anexada.urgente = tram_principal.urgente
tram_anexada.turno = tram_principal.turno
tram_anexada.texto = tram_principal.texto
tram_anexada.data_fim_prazo = tram_principal.data_fim_prazo
tram_anexada.user = tram_principal.user
tram_anexada.ip = tram_principal.ip
tram_anexada.save()
return tram_principal
class LegislacaoCitadaForm(ModelForm):

23
sapl/materia/views.py

@ -1299,18 +1299,17 @@ class TramitacaoCrud(MasterDetailCrud):
def delete(self, request, *args, **kwargs):
tramitacao = Tramitacao.objects.get(id=self.kwargs['pk'])
materia = MateriaLegislativa.objects.get(id=tramitacao.materia.id)
materia = tramitacao.materia
url = reverse('sapl.materia:tramitacao_list',
kwargs={'pk': tramitacao.materia.id})
kwargs={'pk': materia.id})
ultima_tramitacao = materia.tramitacao_set.order_by(
'-data_tramitacao',
'-timestamp',
'-id').first()
username = request.user.username
if tramitacao.pk != ultima_tramitacao.pk:
username = request.user.username
self.logger.error("user=" + username + ". Não é possível deletar a tramitação de pk={}. "
"Somente a última tramitação (pk={}) pode ser deletada!."
.format(tramitacao.pk, ultima_tramitacao.pk))
@ -1318,7 +1317,21 @@ class TramitacaoCrud(MasterDetailCrud):
messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(url)
else:
tramitacao.delete()
tramitacoes_deletar = [tramitacao.id]
for ma in materia.anexadas.all():
tram_anexada = ma.tramitacao_set.last()
if (tram_anexada and
tramitacao.status == tram_anexada.status and \
tramitacao.data_tramitacao == tram_anexada.data_tramitacao and \
tramitacao.unidade_tramitacao_local == tram_anexada.unidade_tramitacao_local and \
tramitacao.data_encaminhamento == tram_anexada.data_encaminhamento and \
tramitacao.unidade_tramitacao_destino == tram_anexada.unidade_tramitacao_destino and \
tramitacao.urgente == tram_anexada.urgente and \
tramitacao.turno == tram_anexada.turno and \
tramitacao.texto == tram_anexada.texto and \
tramitacao.data_fim_prazo == tram_anexada.data_fim_prazo):
tramitacoes_deletar.append(tram_anexada.id)
Tramitacao.objects.filter(id__in=tramitacoes_deletar).delete()
return HttpResponseRedirect(url)
class DetailView(MasterDetailCrud.DetailView):

23
sapl/utils.py

@ -952,3 +952,26 @@ def mail_service_configured(request=None):
settings.EMAIL_RUNNING = result
return settings.EMAIL_RUNNING
def lista_anexados(principal, isMateriaLegislativa=True):
from sapl.materia.models import Anexada
from sapl.protocoloadm.models import Anexado
anexados_total = []
if isMateriaLegislativa: #MateriaLegislativa
anexados_iterator = Anexada.objects.filter(materia_principal=principal)
else: #DocAdm
anexados_iterator = Anexado.objects.filter(documento_principal=principal)
while anexados_iterator:
anexados_tmp = []
for anx in anexados_iterator:
if isMateriaLegislativa:
anexados_total.append(anx.materia_anexada)
anexados_anexado = Anexada.objects.filter(materia_principal=anx.materia_anexada)
else:
anexados_total.append(anx.documento_anexado)
anexados_anexado = Anexado.objects.filter(documento_principal=anx.documento_anexado)
anexados_tmp.extend(anexados_anexado)
anexados_iterator = anexados_tmp
return anexados_total
Loading…
Cancel
Save