Browse Source

Merge 0748042870 into 547a59135f

pull/3286/merge
João Rodrigues 5 years ago
committed by GitHub
parent
commit
51b9b35082
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 64
      sapl/relatorios/views.py
  2. 1
      sapl/rules/map_rules.py
  3. 53
      sapl/sessao/migrations/0054_popula_expedientepautasessao.py
  4. 24
      sapl/sessao/migrations/0055_expedientepautasessao.py
  5. 32
      sapl/sessao/models.py
  6. 59
      sapl/sessao/views.py

64
sapl/relatorios/views.py

@ -24,7 +24,7 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
IntegranteMesa, JustificativaAusencia,
Orador, OradorExpediente,
OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, OcorrenciaSessao,
SessaoPlenariaPresenca, OcorrenciaSessao, ExpedientePautaSessao,
RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente, ResumoOrdenacao)
from sapl.settings import STATIC_ROOT
from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data, create_barcode
@ -1118,47 +1118,51 @@ def get_pauta_sessao(sessao, casa):
inf_basicas_dic["nom_camara"] = casa.nome
lst_expediente_materia = []
for expediente_materia in ExpedienteMateria.objects.filter(sessao_plenaria=sessao):
for e in ExpedientePautaSessao.objects.filter(
sessao_plenaria=sessao
).order_by('expediente__numero_ordem'):
materia = MateriaLegislativa.objects.filter(
id=expediente_materia.materia.id).first()
materia = e.materia
dic_expediente_materia = {}
dic_expediente_materia["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao
dic_expediente_materia["num_ordem"] = str(
expediente_materia.numero_ordem)
tipo_materia = materia.tipo.sigla + ' - ' + materia.tipo.descricao
dic_expediente_materia["tipo_materia"] = tipo_materia
dic_expediente_materia["num_ordem"] = str(e.expediente.numero_ordem)
dic_expediente_materia["id_materia"] = str(
materia.numero) + "/" + str(materia.ano)
dic_expediente_materia["txt_ementa"] = materia.ementa
dic_expediente_materia["materia_observacao"] = materia.observacao
materia.numero
) + "/" + str(materia.ano)
dic_expediente_materia["ordem_observacao"] = str(
expediente_materia.observacao)
dic_expediente_materia["txt_ementa"] = e.materia.ementa
dic_expediente_materia["des_numeracao"] = ' '
dic_expediente_materia["ordem_observacao"] = str(
e.expediente.observacao
)
numeracao = Numeracao.objects.filter(materia=materia)
if numeracao:
numeracao = numeracao.first()
dic_expediente_materia["des_numeracao"] = str(numeracao)
autores = e.autores if e.autores else [
str(a.autor) for a in e.materia.autoria_set.select_related(
'autor'
).all()
]
dic_expediente_materia["nom_autor"] = ''
autoria = materia.autoria_set.all()
dic_expediente_materia['num_autores'] = 'Autores' if len(
autoria) > 1 else 'Autor'
if autoria:
for a in autoria:
if a.autor.nome:
dic_expediente_materia['nom_autor'] += a.autor.nome + ', '
dic_expediente_materia['nom_autor'] = dic_expediente_materia['nom_autor'][:-2]
autores
) > 1 else 'Autor'
dic_expediente_materia['nom_autor'] = ''
if autores:
for a in autores:
if a:
dic_expediente_materia['nom_autor'] += a + ', '
dic_expediente_materia['nom_autor'] = dic_expediente_materia[
'nom_autor'
][:-2]
else:
dic_expediente_materia["nom_autor"] = 'Desconhecido'
turno, tramitacao = get_turno(materia)
dic_expediente_materia["des_turno"] = turno
dic_expediente_materia["des_situacao"] = tramitacao
situacao = e.tramitacao.status if e.tramitacao else _('Não informada')
dic_expediente_materia["des_situacao"] = situacao
lst_expediente_materia.append(dic_expediente_materia)

1
sapl/rules/map_rules.py

@ -188,6 +188,7 @@ rules_group_sessao = {
(sessao.JustificativaAusencia, __base__, __perms_publicas__),
(sessao.RetiradaPauta, __base__, __perms_publicas__),
(sessao.RegistroLeitura, __base__, __perms_publicas__),
(sessao.ExpedientePautaSessao, __base__, __perms_publicas__)
]
}

53
sapl/sessao/migrations/0054_popula_expedientepautasessao.py

@ -0,0 +1,53 @@
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('sessao', '0053_auto_20200609_1501'),
]
operations = [
migrations.RunSQL(
"""
create or replace view sessao_expedientepauta as
with autoria_materia as (
select ma.materia_id, array_agg(ba.nome) as autores
from materia_autoria ma
join base_autor ba on (ma.autor_id = ba.id)
group by ma.materia_id
order by ma.materia_id, autores
),
tramitacao_numeracao_materia as (
select distinct on (m.id)
m.id as materia_id,
mt.id as tramitacao_id,
mn.id as numeracao_id
from materia_materialegislativa as m
left join materia_tramitacao mt on (m.id = mt.materia_id)
left join materia_numeracao mn on (m.id = mn.materia_id)
order by materia_id, mt.data_tramitacao DESC, mt.id DESC,
mn.id DESC
),
sessao_expedientepauta as (
select ex.id as id,
ex.id as expediente_id,
ex.sessao_plenaria_id as sessao_plenaria_id,
tnm.materia_id as materia_id,
tnm.tramitacao_id as tramitacao_id,
tnm.numeracao_id as numeracao_id,
am.autores as autores
from sessao_expedientemateria ex
join tramitacao_numeracao_materia tnm on (
ex.materia_id = tnm.materia_id
)
left join autoria_materia am on (
ex.materia_id = am.materia_id
)
)
select *
from sessao_expedientepauta
"""
)
]

24
sapl/sessao/migrations/0055_expedientepautasessao.py

@ -0,0 +1,24 @@
# Generated by Django 2.2.13 on 2020-09-24 23:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0054_popula_expedientepautasessao'),
]
operations = [
migrations.CreateModel(
name='ExpedientePautaSessao',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('autores', models.CharField(blank=True, max_length=545)),
],
options={
'db_table': 'sessao_expedientepauta',
'managed': False,
},
),
]

32
sapl/sessao/models.py

@ -9,7 +9,7 @@ from model_utils import Choices
import reversion
from sapl.base.models import Autor
from sapl.materia.models import MateriaLegislativa
from sapl.materia.models import MateriaLegislativa, Tramitacao, Numeracao
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
Partido, SessaoLegislativa)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
@ -944,4 +944,32 @@ class RegistroLeitura(models.Model):
raise ValidationError(
'RegistroLeitura deve ter exatamente um dos campos '
'ordem ou expediente preenchido. Ambos estão preenchidos: '
'{}, {}'. format(self.ordem, self.expediente))
'{}, {}'. format(self.ordem, self.expediente))
class ExpedientePautaSessao(models.Model):
expediente = models.ForeignKey(
ExpedienteMateria, on_delete=models.DO_NOTHING
)
sessao_plenaria = models.ForeignKey(
SessaoPlenaria, on_delete=models.DO_NOTHING
)
materia = models.ForeignKey(
MateriaLegislativa, on_delete=models.DO_NOTHING
)
tramitacao = models.ForeignKey(
Tramitacao, blank=True, null=True, on_delete=models.DO_NOTHING
)
numeracao = models.ForeignKey(
Numeracao, blank=True, null=True, on_delete=models.DO_NOTHING
)
autores = models.CharField(
max_length=545, blank=True
)
class Meta:
managed = False
db_table = "sessao_expedientepauta"
def __str__(self):
return '{}'.format(self.expediente)

59
sapl/sessao/views.py

@ -50,7 +50,7 @@ from .models import (Bancada, CargoBancada, CargoMesa,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta,
RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia,
ORDENACAO_RESUMO, RegistroLeitura)
ORDENACAO_RESUMO, RegistroLeitura, ExpedientePautaSessao)
TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
@ -3574,32 +3574,25 @@ class PautaSessaoDetailView(DetailView):
# =====================================================================
# Matérias Expediente
materias_expediente = []
for m in ExpedienteMateria.objects \
.prefetch_related('registrovotacao_set') \
.select_related("materia", "materia__tipo") \
.filter(sessao_plenaria_id=self.object.id):
rv = m.registrovotacao_set.first()
if rv:
resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao
else:
resultado = _('Matéria não votada')
resultado_observacao = _(' ')
ultima_tramitacao = m.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first()
numeracao = m.materia.numeracao_set.first()
for e in ExpedientePautaSessao.objects.select_related("materia", "materia__tipo").filter(
sessao_plenaria_id=self.object.id
).order_by('expediente__numero_ordem'):
processo = f'{str(e.numeracao.numero_materia)}/{str(e.numeracao.ano_materia)}' if e.numeracao else '-'
autores = e.autores if e.autores else [
str(a.autor) for a in e.materia.autoria_set.select_related('autor').all()
]
materias_expediente.append({
'id': m.materia_id,
'ementa': m.materia.ementa,
'observacao': m.observacao,
'titulo': m.materia,
'numero': m.numero_ordem,
'resultado': resultado,
'resultado_observacao': resultado_observacao,
'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"),
'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-',
'autor': [str(x.autor) for x in m.materia.autoria_set.select_related('autor').all()]
'id': e.materia_id,
'ementa': e.materia.ementa,
'observacao': e.expediente.observacao,
'titulo': e.materia,
'numero': e.expediente.numero_ordem,
'situacao': e.tramitacao.status if e.tramitacao else _('Não informada'),
'processo': processo,
'autor': autores
})
context.update({'materia_expediente': materias_expediente})
# =====================================================================
@ -3616,25 +3609,11 @@ class PautaSessaoDetailView(DetailView):
context.update({'expedientes': expedientes})
# =====================================================================
# Orador Expediente
context.update({
'oradores': OradorExpediente.objects.filter(sessao_plenaria_id=self.object.id).order_by('numero_ordem')
})
# =====================================================================
# Matérias Ordem do Dia
materias_ordem = []
for o in OrdemDia.objects \
.prefetch_related('registrovotacao_set') \
.select_related("materia", "materia__tipo") \
.filter(sessao_plenaria_id=self.object.id):
# Verificar resultado
rv = o.registrovotacao_set.first()
if rv:
resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao
else:
resultado = _('Matéria não votada')
resultado_observacao = _(' ')
ultima_tramitacao = o.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first()
numeracao = o.materia.numeracao_set.first()
@ -3645,8 +3624,6 @@ class PautaSessaoDetailView(DetailView):
'observacao': o.observacao,
'titulo': o.materia,
'numero': o.numero_ordem,
'resultado': resultado,
'resultado_observacao': resultado_observacao,
'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"),
'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-',
'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)]

Loading…
Cancel
Save