Browse Source

Melhora desempenho

pull/2827/head
Edward Ribeiro 6 years ago
committed by ulysses
parent
commit
a99ce5379e
  1. 37
      sapl/base/views.py
  2. 41
      sapl/materia/migrations/0067_auto_20200401_1216.py
  3. 44
      sapl/materia/migrations/0068_materiaprotocolo_protocolomateria.py
  4. 31
      sapl/materia/models.py
  5. 2
      sapl/protocoloadm/forms.py
  6. 11
      sapl/utils.py

37
sapl/base/views.py

@ -47,9 +47,9 @@ from sapl.comissoes.models import Comissao, Reuniao
from sapl.crud.base import CrudAux, make_pagination from sapl.crud.base import CrudAux, make_pagination
from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio, from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio,
MateriaEmTramitacao, MateriaLegislativa, Proposicao, MateriaEmTramitacao, MateriaLegislativa, Proposicao,
StatusTramitacao, TipoDocumento, StatusTramitacao, TipoDocumento,MateriaProtocolo,
TipoMateriaLegislativa, UnidadeTramitacao, Tramitacao) TipoMateriaLegislativa, UnidadeTramitacao, Tramitacao,ProtocoloMateria)
from sapl.norma.models import NormaJuridica, TipoNormaJuridica from sapl.norma.models import NormaJuridica, TipoNormaJuridica, NormaEstatisticas
from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar, from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar,
SessaoLegislativa) SessaoLegislativa)
from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, Protocolo, from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, Protocolo,
@ -59,7 +59,8 @@ from sapl.sessao.models import (Bancada, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, TipoSessaoPlenaria) SessaoPlenariaPresenca, TipoSessaoPlenaria)
from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao, from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao,
mail_service_configured, parlamentares_ativos, mail_service_configured, parlamentares_ativos,
SEPARADOR_HASH_PROPOSICAO, show_results_filter_set, num_materias_por_tipo) SEPARADOR_HASH_PROPOSICAO, show_results_filter_set, num_materias_por_tipo, remover_acentos)
from .forms import (AlterarSenhaForm, CasaLegislativaForm, from .forms import (AlterarSenhaForm, CasaLegislativaForm,
ConfiguracoesAppForm, RelatorioAtasFilterSet, ConfiguracoesAppForm, RelatorioAtasFilterSet,
@ -1648,14 +1649,11 @@ class ListarFiliacoesSemDataFiliacaoView(PermissionRequiredMixin, ListView):
def materias_protocolo_inexistente(): def materias_protocolo_inexistente():
materias = [] return [(m.materia, m.materia.ano, m.materia.numero_protocolo) for m in
for materia in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero'): MateriaProtocolo.objects\
exists = Protocolo.objects.filter( .select_related('materia').all()\
ano=materia.ano, numero=materia.numero_protocolo).exists() .order_by('-ano_materia', 'numero_materia')]
if not exists:
materias.append(
(materia, materia.ano, materia.numero_protocolo))
return materias
class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView): class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView):
@ -1684,15 +1682,12 @@ class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView):
def protocolos_com_materias(): def protocolos_com_materias():
protocolos = {} protocolos = {}
for m in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero_protocolo'): for p in ProtocoloMateria.objects.filter(total__gt=1):
if Protocolo.objects.filter(numero=m.numero_protocolo, ano=m.ano).exists(): key = "{}/{}".format(p.numero_protocolo, p.ano_protocolo)
key = "{}/{}".format(m.numero_protocolo, m.ano) protocolos[key] = list(MateriaLegislativa.objects.filter(id__in=p.materias))
val = protocolos.get(key, list())
val.append(m) return [(v[0], len(v)) for (k, v) in protocolos.items()]
protocolos[key] = val
return [(v[0], len(v)) for (k, v) in protocolos.items() if len(v) > 1]
class ListarProtocolosComMateriasView(PermissionRequiredMixin, ListView): class ListarProtocolosComMateriasView(PermissionRequiredMixin, ListView):

41
sapl/materia/migrations/0067_auto_20200401_1216.py

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-05-31 18:38
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('materia', '0066_auto_20200313_1441'),
]
operations = [
migrations.RunSQL("""
create view materia_protocolomateria as
select p.id,
p.numero as numero_protocolo,
p.ano as ano_protocolo,
count(*) total,
array_agg(m.id) as materias
from materia_materialegislativa m
left join protocoloadm_protocolo p on (m.ano = p.ano and m.numero_protocolo = p.numero)
where m.numero_protocolo is not null
group by p.id
order by p.numero, p.ano;
"""),
migrations.RunSQL("""
create view materia_materiaprotocolo as
select m.id,
m.id as materia_id,
m.numero numero_materia,
m.ano ano_materia,
m.numero_protocolo,
m.ano ano_protocolo
from materia_materialegislativa m
left join protocoloadm_protocolo p on (m.ano = p.ano and m.numero_protocolo = p.numero)
where m.numero_protocolo is not null and p.numero is null
order by m.ano desc , m.numero desc
"""),
]

44
sapl/materia/migrations/0068_materiaprotocolo_protocolomateria.py

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-04-01 15:18
from __future__ import unicode_literals
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0067_auto_20200401_1216'),
]
operations = [
migrations.CreateModel(
name='MateriaProtocolo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('numero_materia', models.PositiveIntegerField()),
('ano_materia', models.PositiveIntegerField()),
('numero_protocolo', models.PositiveIntegerField()),
('ano_protocolo', models.PositiveIntegerField()),
],
options={
'db_table': 'materia_materiaprotocolo',
'managed': False,
},
),
migrations.CreateModel(
name='ProtocoloMateria',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('numero_protocolo', models.PositiveIntegerField()),
('ano_protocolo', models.PositiveIntegerField()),
('total', models.PositiveIntegerField()),
('materias', django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(), size=None)),
],
options={
'db_table': 'materia_protocolomateria',
'managed': False,
},
),
]

31
sapl/materia/models.py

@ -15,7 +15,6 @@ from sapl.comissoes.models import Comissao, Reuniao
from sapl.compilacao.models import (PerfilEstruturalTextoArticulado, from sapl.compilacao.models import (PerfilEstruturalTextoArticulado,
TextoArticulado) TextoArticulado)
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
#from sapl.protocoloadm.models import Protocolo
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericForeignKey, from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericForeignKey,
SaplGenericRelation, restringe_tipos_de_arquivo_txt, SaplGenericRelation, restringe_tipos_de_arquivo_txt,
texto_upload_path, get_settings_auth_user_model, texto_upload_path, get_settings_auth_user_model,
@ -1116,3 +1115,33 @@ class MateriaEmTramitacao(models.Model):
def __str__(self): def __str__(self):
return '{}/{}'.format(self.materia, self.tramitacao) return '{}/{}'.format(self.materia, self.tramitacao)
class ProtocoloMateria(models.Model):
from django.contrib.postgres.fields import ArrayField
numero_protocolo = models.PositiveIntegerField()
ano_protocolo = models.PositiveIntegerField()
total = models.PositiveIntegerField()
materias = ArrayField(models.PositiveIntegerField())
class Meta:
managed = False
db_table = "materia_protocolomateria"
def __str__(self):
return '{}/{}'.format(self.numero_protocolo, self.ano_protocolo)
class MateriaProtocolo(models.Model):
materia = models.ForeignKey(MateriaLegislativa)
numero_materia = models.PositiveIntegerField()
ano_materia = models.PositiveIntegerField()
numero_protocolo = models.PositiveIntegerField()
ano_protocolo = models.PositiveIntegerField()
class Meta:
managed = False
db_table = "materia_materiaprotocolo"
def __str__(self):
return '{}/{}'.format(self.numero_materia, self.ano_materia)

2
sapl/protocoloadm/forms.py

@ -1004,7 +1004,7 @@ class AnexadoForm(ModelForm):
ciclico = False ciclico = False
anexados_anexado = Anexado.objects.filter(documento_principal=documento_anexado) anexados_anexado = Anexado.objects.filter(documento_principal=documento_anexado)
while(anexados_anexado and not ciclico): while anexados_anexado and not ciclico:
anexados = [] anexados = []
for anexo in anexados_anexado: for anexo in anexados_anexado:

11
sapl/utils.py

@ -1007,20 +1007,23 @@ def mail_service_configured(request=None):
return settings.EMAIL_RUNNING return settings.EMAIL_RUNNING
def lista_anexados(principal, isMateriaLegislativa=True): def lista_anexados(principal):
anexados_total = [] from sapl.materia.models import MateriaLegislativa
if isMateriaLegislativa: #MateriaLegislativa is_materia = isinstance(principal, MateriaLegislativa)
if is_materia: #MateriaLegislativa
from sapl.materia.models import Anexada from sapl.materia.models import Anexada
anexados_iterator = Anexada.objects.filter(materia_principal=principal) anexados_iterator = Anexada.objects.filter(materia_principal=principal)
else: #DocAdm else: #DocAdm
from sapl.protocoloadm.models import Anexado from sapl.protocoloadm.models import Anexado
anexados_iterator = Anexado.objects.filter(documento_principal=principal) anexados_iterator = Anexado.objects.filter(documento_principal=principal)
anexados_total = []
anexadas_temp = list(anexados_iterator) anexadas_temp = list(anexados_iterator)
while anexadas_temp: while anexadas_temp:
anx = anexadas_temp.pop() anx = anexadas_temp.pop()
if isMateriaLegislativa: if is_materia:
if anx.materia_anexada not in anexados_total: if anx.materia_anexada not in anexados_total:
anexados_total.append(anx.materia_anexada) anexados_total.append(anx.materia_anexada)
anexados_anexado = Anexada.objects.filter(materia_principal=anx.materia_anexada) anexados_anexado = Anexada.objects.filter(materia_principal=anx.materia_anexada)

Loading…
Cancel
Save