Browse Source

Fixes OSTicket #247431

Refatora lista_anexados
pull/3354/head
eribeiro 5 years ago
parent
commit
8e7c0f3b2b
  1. 24
      sapl/materia/forms.py
  2. 31
      sapl/materia/views.py
  3. 42
      sapl/utils.py

24
sapl/materia/forms.py

@ -550,6 +550,8 @@ class TramitacaoForm(ModelForm):
@transaction.atomic
def save(self, commit=True):
from datetime import datetime
ini = datetime.now()
tramitacao = super(TramitacaoForm, self).save(commit)
materia = tramitacao.materia
materia.em_tramitacao = False if tramitacao.status.indicador == "F" else True
@ -559,16 +561,19 @@ class TramitacaoForm(ModelForm):
'tramitacao_materia')
if tramitar_anexadas:
lista_tramitacao = []
anexadas_list = lista_anexados(materia)
for ma in anexadas_list:
if not ma.tramitacao_set.order_by('-data_tramitacao', '-id').all() \
or ma.tramitacao_set.order_by('-data_tramitacao', '-id').first().unidade_tramitacao_destino \
materias_anexadas = lista_anexados(materia)
for mat in materias_anexadas:
ultima_tramitacao = mat.tramitacao_set.\
select_related('unidade_tramitacao_destino').\
order_by('-data_tramitacao', '-id').first()
if not ultima_tramitacao or \
ultima_tramitacao.unidade_tramitacao_destino \
== tramitacao.unidade_tramitacao_local:
ma.em_tramitacao = False if tramitacao.status.indicador == "F" else True
ma.save()
mat.em_tramitacao = False if \
tramitacao.status.indicador == "F" else True
lista_tramitacao.append(Tramitacao(
status=tramitacao.status,
materia=ma,
materia=mat,
data_tramitacao=tramitacao.data_tramitacao,
unidade_tramitacao_local=tramitacao.unidade_tramitacao_local,
data_encaminhamento=tramitacao.data_encaminhamento,
@ -582,7 +587,10 @@ class TramitacaoForm(ModelForm):
ultima_edicao=tramitacao.ultima_edicao
))
Tramitacao.objects.bulk_create(lista_tramitacao)
# Atualiza status 'em_tramitacao'
MateriaLegislativa.objects.bulk_update(materias_anexadas, ['em_tramitacao'])
print("Execucao total")
print(datetime.now() - ini)
return tramitacao

31
sapl/materia/views.py

@ -1432,7 +1432,7 @@ class TramitacaoCrud(MasterDetailCrud):
logger = logging.getLogger(__name__)
def delete(self, request, *args, **kwargs):
tramitacao = Tramitacao.objects.get(id=self.kwargs['pk'])
tramitacao = Tramitacao.objects.select_related('materia').get(id=self.kwargs['pk'])
materia = tramitacao.materia
url = reverse('sapl.materia:tramitacao_list',
kwargs={'pk': materia.id})
@ -1449,31 +1449,26 @@ class TramitacaoCrud(MasterDetailCrud):
messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(url)
else:
tramitacoes_deletar = [tramitacao]
tramitacoes_deletar = [tramitacao.id]
if materia.tramitacao_set.count() == 0:
materia.em_tramitacao = False
materia.save()
tramitar_anexadas = sapl.base.models.AppConfig.attr(
'tramitacao_materia')
if tramitar_anexadas:
mat_anexadas = lista_anexados(materia)
for ma in mat_anexadas:
tram_anexada = ma.tramitacao_set.order_by(
materias_anexadas = lista_anexados(materia)
for materia in materias_anexadas:
tram_anexada = materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').first()
if compara_tramitacoes_mat(tram_anexada, tramitacao):
tramitacoes_deletar.append(tram_anexada)
if ma.tramitacao_set.count() == 0:
ma.em_tramitacao = False
ma.save()
Tramitacao.objects.filter(
id__in=[t.id for t in tramitacoes_deletar]).delete()
# TODO: otimizar para passar a lista de matérias
# for tramitacao in tramitacoes_deletar:
# post_delete_signal.send(sender=None,
# instance=tramitacao,
# operation='C',
# request=self.request)
tramitacoes_deletar.append(tram_anexada.id)
if materia.tramitacao_set.count() == 0:
materia.em_tramitacao = False
materia.save()
# Atualiza status 'em_tramitacao'
MateriaLegislativa.objects.\
bulk_update(materias_anexadas, ['em_tramitacao'])
Tramitacao.objects.filter(id__in=tramitacoes_deletar).delete()
return HttpResponseRedirect(url)

42
sapl/utils.py

@ -1018,34 +1018,38 @@ def google_recaptcha_configured():
def lista_anexados(principal, isMateriaLegislativa=True):
anexados_total = []
from datetime import datetime
ini = datetime.now()
if isMateriaLegislativa: # MateriaLegislativa
from sapl.materia.models import Anexada
anexados_iterator = Anexada.objects.filter(materia_principal=principal)
anexados = {a.materia_anexada for a in Anexada.objects.select_related(
'materia_anexada').filter(materia_principal=principal)}
else: # DocAdm
from sapl.protocoloadm.models import Anexado
anexados_iterator = Anexado.objects.filter(
documento_principal=principal)
anexadas_temp = list(anexados_iterator)
anexados = {a.documento_anexado for a in Anexado.objects.select_related(
'documento_anexado').filter(documento_principal=principal)}
while anexadas_temp:
anx = anexadas_temp.pop()
anexados_total = set()
while anexados:
if isMateriaLegislativa:
if anx.materia_anexada not in anexados_total:
anexados_total.append(anx.materia_anexada)
anexados_anexado = Anexada.objects.filter(
materia_principal=anx.materia_anexada)
anexadas_temp.extend(anexados_anexado)
novos_anexados = {a.materia_anexada for a in
Anexada.objects.filter(
materia_principal__in=anexados)
if a.materia_anexada not in anexados_total}
else:
if anx.documento_anexado not in anexados_total:
anexados_total.append(anx.documento_anexado)
anexados_anexado = Anexado.objects.filter(
documento_principal=anx.documento_anexado)
anexadas_temp.extend(anexados_anexado)
novos_anexados = {a.documento_anexado for a in
Anexado.objects.filter(
documento_principal__in=anexados)
if a.documento_anexado not in anexados_total}
anexados_total.update(anexados)
anexados = novos_anexados
if principal in anexados_total:
anexados_total.remove(principal)
return anexados_total
print(datetime.now() - ini)
return list(anexados_total)
def from_date_to_datetime_utc(data):

Loading…
Cancel
Save