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, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura, Partido, Parlamentar 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.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import (YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO, from sapl.utils import (YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO,
ChoiceWithoutValidationField, ChoiceWithoutValidationField,
@ -580,20 +580,6 @@ class TramitacaoForm(ModelForm):
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(),
@ -670,6 +656,37 @@ class TramitacaoUpdateForm(TramitacaoForm):
return cd 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): class LegislacaoCitadaForm(ModelForm):

23
sapl/materia/views.py

@ -1299,18 +1299,17 @@ class TramitacaoCrud(MasterDetailCrud):
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
tramitacao = Tramitacao.objects.get(id=self.kwargs['pk']) 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', url = reverse('sapl.materia:tramitacao_list',
kwargs={'pk': tramitacao.materia.id}) kwargs={'pk': materia.id})
ultima_tramitacao = materia.tramitacao_set.order_by( ultima_tramitacao = materia.tramitacao_set.order_by(
'-data_tramitacao', '-data_tramitacao',
'-timestamp', '-timestamp',
'-id').first() '-id').first()
username = request.user.username
if tramitacao.pk != ultima_tramitacao.pk: 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={}. " self.logger.error("user=" + username + ". Não é possível deletar a tramitação de pk={}. "
"Somente a última tramitação (pk={}) pode ser deletada!." "Somente a última tramitação (pk={}) pode ser deletada!."
.format(tramitacao.pk, ultima_tramitacao.pk)) .format(tramitacao.pk, ultima_tramitacao.pk))
@ -1318,7 +1317,21 @@ class TramitacaoCrud(MasterDetailCrud):
messages.add_message(request, messages.ERROR, msg) messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
else: 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) return HttpResponseRedirect(url)
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):

23
sapl/utils.py

@ -952,3 +952,26 @@ def mail_service_configured(request=None):
settings.EMAIL_RUNNING = result settings.EMAIL_RUNNING = result
return settings.EMAIL_RUNNING 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