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.materia.models import (Anexada, Autoria, DocumentoAcessorio,
MateriaEmTramitacao, MateriaLegislativa, Proposicao,
StatusTramitacao, TipoDocumento,
TipoMateriaLegislativa, UnidadeTramitacao, Tramitacao)
from sapl.norma.models import NormaJuridica, TipoNormaJuridica
StatusTramitacao, TipoDocumento,MateriaProtocolo,
TipoMateriaLegislativa, UnidadeTramitacao, Tramitacao,ProtocoloMateria)
from sapl.norma.models import NormaJuridica, TipoNormaJuridica, NormaEstatisticas
from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar,
SessaoLegislativa)
from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, Protocolo,
@ -59,7 +59,8 @@ from sapl.sessao.models import (Bancada, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, TipoSessaoPlenaria)
from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao,
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,
ConfiguracoesAppForm, RelatorioAtasFilterSet,
@ -1648,14 +1649,11 @@ class ListarFiliacoesSemDataFiliacaoView(PermissionRequiredMixin, ListView):
def materias_protocolo_inexistente():
materias = []
for materia in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero'):
exists = Protocolo.objects.filter(
ano=materia.ano, numero=materia.numero_protocolo).exists()
if not exists:
materias.append(
(materia, materia.ano, materia.numero_protocolo))
return materias
return [(m.materia, m.materia.ano, m.materia.numero_protocolo) for m in
MateriaProtocolo.objects\
.select_related('materia').all()\
.order_by('-ano_materia', 'numero_materia')]
class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView):
@ -1684,15 +1682,12 @@ class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView):
def protocolos_com_materias():
protocolos = {}
for m in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero_protocolo'):
if Protocolo.objects.filter(numero=m.numero_protocolo, ano=m.ano).exists():
key = "{}/{}".format(m.numero_protocolo, m.ano)
val = protocolos.get(key, list())
val.append(m)
protocolos[key] = val
return [(v[0], len(v)) for (k, v) in protocolos.items() if len(v) > 1]
for p in ProtocoloMateria.objects.filter(total__gt=1):
key = "{}/{}".format(p.numero_protocolo, p.ano_protocolo)
protocolos[key] = list(MateriaLegislativa.objects.filter(id__in=p.materias))
return [(v[0], len(v)) for (k, v) in protocolos.items()]
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,
TextoArticulado)
from sapl.parlamentares.models import Parlamentar
#from sapl.protocoloadm.models import Protocolo
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericForeignKey,
SaplGenericRelation, restringe_tipos_de_arquivo_txt,
texto_upload_path, get_settings_auth_user_model,
@ -1116,3 +1115,33 @@ class MateriaEmTramitacao(models.Model):
def __str__(self):
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
anexados_anexado = Anexado.objects.filter(documento_principal=documento_anexado)
while(anexados_anexado and not ciclico):
while anexados_anexado and not ciclico:
anexados = []
for anexo in anexados_anexado:

11
sapl/utils.py

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

Loading…
Cancel
Save