From d8406fdeb7f7406e48a56e77f941aa28e4e85f65 Mon Sep 17 00:00:00 2001
From: DTILegBG
Date: Wed, 5 Sep 2018 12:54:21 -0300
Subject: [PATCH] Adiciona extrato ao menu resumo
---
sapl/sessao/urls.py | 4 +-
sapl/sessao/views.py | 252 +++++++++++++++++-
.../sessao/blocos_ata/assinaturas.html | 12 +
.../blocos_ata/conteudo_multimidia.html | 0
.../sessao/blocos_ata/expedientes.html | 8 +
.../blocos_ata/identificacao_basica.html | 7 +
.../sessao/blocos_ata/lista_presenca.html | 9 +
.../blocos_ata/lista_presenca_ordem_dia.html | 9 +
.../blocos_ata/materias_expediente.html | 24 ++
.../sessao/blocos_ata/materias_ordem_dia.html | 22 ++
.../sessao/blocos_ata/mesa_diretora.html | 9 +
.../blocos_ata/oradores_expediente.html | 11 +
.../blocos_ata/oradores_explicacoes.html | 8 +
sapl/templates/sessao/resumo_ata.html | 28 ++
sapl/templates/sessao/subnav.yaml | 6 +-
15 files changed, 406 insertions(+), 3 deletions(-)
create mode 100644 sapl/templates/sessao/blocos_ata/assinaturas.html
create mode 100644 sapl/templates/sessao/blocos_ata/conteudo_multimidia.html
create mode 100644 sapl/templates/sessao/blocos_ata/expedientes.html
create mode 100644 sapl/templates/sessao/blocos_ata/identificacao_basica.html
create mode 100644 sapl/templates/sessao/blocos_ata/lista_presenca.html
create mode 100644 sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html
create mode 100644 sapl/templates/sessao/blocos_ata/materias_expediente.html
create mode 100644 sapl/templates/sessao/blocos_ata/materias_ordem_dia.html
create mode 100644 sapl/templates/sessao/blocos_ata/mesa_diretora.html
create mode 100644 sapl/templates/sessao/blocos_ata/oradores_expediente.html
create mode 100644 sapl/templates/sessao/blocos_ata/oradores_explicacoes.html
create mode 100644 sapl/templates/sessao/resumo_ata.html
diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py
index df358d42d..201623824 100644
--- a/sapl/sessao/urls.py
+++ b/sapl/sessao/urls.py
@@ -10,7 +10,7 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
PesquisarPautaSessaoView,
PesquisarSessaoPlenariaView,
PresencaOrdemDiaView, PresencaView,
- ResumoOrdenacaoView, ResumoView, SessaoCrud,
+ ResumoOrdenacaoView, ResumoView, ResumoAtaView, SessaoCrud,
TipoExpedienteCrud, TipoResultadoVotacaoCrud,
TipoSessaoCrud, VotacaoEditView,
VotacaoExpedienteEditView,
@@ -109,6 +109,8 @@ urlpatterns = [
name='presencaordemdia'),
url(r'^sessao/(?P\d+)/resumo$',
ResumoView.as_view(), name='resumo'),
+ url(r'^sessao/(?P\d+)/resumo_ata$',
+ ResumoAtaView.as_view(), name='resumo_ata'),
url(r'^sessao/pesquisar-sessao$',
PesquisarSessaoPlenariaView.as_view(), name='pesquisar_sessao'),
url(r'^sessao/(?P\d+)/matordemdia/votnom/(?P\d+)/(?P\d+)$',
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
index 5a2b0785a..87e3cee96 100644
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1272,7 +1272,7 @@ class ResumoView(DetailView):
ex = {'tipo': tipo, 'conteudo': conteudo}
expedientes.append(ex)
context.update({'expedientes': expedientes})
-
+
# =====================================================================
# Matérias Expediente
materias = ExpedienteMateria.objects.filter(
@@ -1448,7 +1448,257 @@ class ResumoView(DetailView):
'decimo_ordenacao': dict_ord_template['oradores_expli']})
return self.render_to_response(context)
+class ResumoAtaView(DetailView):
+ template_name = 'sessao/resumo_ata.html'
+ model = SessaoPlenaria
+
+ def get(self, request, *args, **kwargs):
+ self.object = self.get_object()
+ context = self.get_context_data(object=self.object)
+
+ # =====================================================================
+ # Identificação Básica
+ data_inicio = self.object.data_inicio
+ abertura = data_inicio.strftime('%d/%m/%Y') if data_inicio else ''
+
+ data_fim = self.object.data_fim
+ encerramento = data_fim.strftime('%d/%m/%Y') + ' -' if data_fim else ''
+
+ context.update({'basica': [
+ _('Tipo de Sessão: %(tipo)s') % {'tipo': self.object.tipo},
+ _('Abertura: %(abertura)s - %(hora_inicio)s') % {
+ 'abertura': abertura, 'hora_inicio': self.object.hora_inicio},
+ _('Encerramento: %(encerramento)s %(hora_fim)s') % {
+ 'encerramento': encerramento, 'hora_fim': self.object.hora_fim}
+ ]})
+ # =====================================================================
+ # Conteúdo Multimídia
+ if self.object.url_audio:
+ context.update({'multimidia_audio':
+ _('Audio: ') + str(self.object.url_audio)})
+ else:
+ context.update({'multimidia_audio': _('Audio: Indisponível')})
+ if self.object.url_video:
+ context.update({'multimidia_video':
+ _('Video: ') + str(self.object.url_video)})
+ else:
+ context.update({'multimidia_video': _('Video: Indisponível')})
+
+ # =====================================================================
+ # Mesa Diretora
+ mesa = IntegranteMesa.objects.filter(
+ sessao_plenaria=self.object)
+
+ integrantes = []
+ for m in mesa:
+ parlamentar = Parlamentar.objects.get(
+ id=m.parlamentar_id)
+ cargo = CargoMesa.objects.get(
+ id=m.cargo_id)
+ integrante = {'parlamentar': parlamentar, 'cargo': cargo}
+ integrantes.append(integrante)
+
+ context.update({'mesa': ordenar_integrantes_por_cargo(integrantes)})
+
+ # =====================================================================
+ # Presença Sessão
+ presencas = SessaoPlenariaPresenca.objects.filter(
+ sessao_plenaria_id=self.object.id
+ ).order_by('parlamentar__nome_parlamentar')
+
+ parlamentares_sessao = [p.parlamentar for p in presencas]
+
+ context.update({'presenca_sessao': parlamentares_sessao})
+
+ # =====================================================================
+ # Expedientes
+ expediente = ExpedienteSessao.objects.filter(
+ sessao_plenaria_id=self.object.id).order_by('tipo__nome')
+
+ expedientes = []
+ for e in expediente:
+ tipo = TipoExpediente.objects.get(id=e.tipo_id)
+ conteudo = e.conteudo
+ ex = {'tipo': tipo, 'conteudo': conteudo}
+ expedientes.append(ex)
+ context.update({'expedientes': expedientes})
+
+ # =====================================================================
+ # Matérias Expediente
+ materias = ExpedienteMateria.objects.filter(
+ sessao_plenaria_id=self.object.id)
+
+ materias_expediente = []
+ for m in materias:
+
+ ementa = m.materia.ementa
+ titulo = m.materia
+ numero = m.numero_ordem
+ tramitacao = m.materia.tramitacao_set.last()
+ turno = None
+ if tramitacao:
+ turno = get_turno(tramitacao.turno)
+
+ 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 = _(' ')
+
+ autoria = Autoria.objects.filter(materia_id=m.materia_id)
+ autor = [str(x.autor) for x in autoria]
+
+ mat = {'ementa': ementa,
+ 'titulo': titulo,
+ 'numero': numero,
+ 'turno': turno,
+ 'resultado': resultado,
+ 'resultado_observacao': resultado_observacao,
+ 'autor': autor,
+ 'numero_protocolo': m.materia.numero_protocolo,
+ 'numero_processo': m.materia.numeracao_set.last()
+ }
+ materias_expediente.append(mat)
+
+ context.update({'materia_expediente': materias_expediente})
+
+ # =====================================================================
+ # Oradores Expediente
+ oradores = []
+ for orador in OradorExpediente.objects.filter(
+ sessao_plenaria_id=self.object.id).order_by('numero_ordem'):
+ numero_ordem = orador.numero_ordem
+ url_discurso = orador.url_discurso
+ observacao = orador.observacao
+ parlamentar = Parlamentar.objects.get(
+ id=orador.parlamentar_id)
+ ora = {'numero_ordem': numero_ordem,
+ 'url_discurso': url_discurso,
+ 'parlamentar': parlamentar,
+ 'observacao' : observacao
+ }
+ oradores.append(ora)
+
+ context.update({'oradores': oradores})
+
+ # =====================================================================
+ # Presença Ordem do Dia
+ presencas = PresencaOrdemDia.objects.filter(
+ sessao_plenaria_id=self.object.id
+ ).order_by('parlamentar__nome_parlamentar')
+
+ parlamentares_ordem = [p.parlamentar for p in presencas]
+
+ context.update({'presenca_ordem': parlamentares_ordem})
+
+ # =====================================================================
+ # Matérias Ordem do Dia
+ ordem = OrdemDia.objects.filter(
+ sessao_plenaria_id=self.object.id)
+ materias_ordem = []
+ for o in ordem:
+ ementa = o.materia.ementa
+ titulo = o.materia
+ numero = o.numero_ordem
+ tramitacao = o.materia.tramitacao_set.last()
+ turno = None
+ if tramitacao:
+ turno = get_turno(tramitacao.turno)
+
+ # Verificar resultado
+ rv = o.registrovotacao_set.filter(materia=o.materia).first()
+ if rv:
+ resultado = rv.tipo_resultado_votacao.nome
+ resultado_observacao = rv.observacao
+ else:
+ resultado = _('Matéria não votada')
+ resultado_observacao = _(' ')
+
+ autoria = Autoria.objects.filter(
+ materia_id=o.materia_id)
+ autor = [str(x.autor) for x in autoria]
+
+ mat = {'ementa': ementa,
+ 'titulo': titulo,
+ 'numero': numero,
+ 'turno': turno,
+ 'resultado': resultado,
+ 'resultado_observacao': resultado_observacao,
+ 'autor': autor,
+ 'numero_protocolo': o.materia.numero_protocolo,
+ 'numero_processo': o.materia.numeracao_set.last()
+ }
+ materias_ordem.append(mat)
+
+ context.update({'materias_ordem': materias_ordem})
+
+ # =====================================================================
+ # Oradores nas Explicações Pessoais
+ oradores_explicacoes = []
+ for orador in Orador.objects.filter(
+ sessao_plenaria_id=self.object.id).order_by('numero_ordem'):
+ for parlamentar in Parlamentar.objects.filter(
+ id=orador.parlamentar.id):
+ partido_sigla = Filiacao.objects.filter(
+ parlamentar=parlamentar).last()
+ if not partido_sigla:
+ sigla = ''
+ else:
+ sigla = partido_sigla.partido.sigla
+ oradores = {
+ 'numero_ordem': orador.numero_ordem,
+ 'parlamentar': parlamentar,
+ 'sgl_partido': sigla
+ }
+ oradores_explicacoes.append(oradores)
+ context.update({'oradores_explicacoes': oradores_explicacoes})
+
+ # =====================================================================
+ # Indica a ordem com a qual o template será renderizado
+ ordenacao = ResumoOrdenacao.objects.first()
+ dict_ord_template = {
+ 'cont_mult': 'conteudo_multimidia.html',
+ 'exp': 'expedientes.html',
+ 'id_basica': 'identificacao_basica.html',
+ 'lista_p': 'lista_presenca.html',
+ 'lista_p_o_d': 'lista_presenca_ordem_dia.html',
+ 'mat_exp': 'materias_expediente.html',
+ 'mat_o_d': 'materias_ordem_dia.html',
+ 'mesa_d': 'mesa_diretora.html',
+ 'oradores_exped': 'oradores_expediente.html',
+ 'oradores_expli': 'oradores_explicacoes.html'
+ }
+
+ if ordenacao:
+ context.update(
+ {'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro],
+ 'segundo_ordenacao': dict_ord_template[ordenacao.segundo],
+ 'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro],
+ 'quarto_ordenacao': dict_ord_template[ordenacao.quarto],
+ 'quinto_ordenacao': dict_ord_template[ordenacao.quinto],
+ 'sexto_ordenacao': dict_ord_template[ordenacao.sexto],
+ 'setimo_ordenacao': dict_ord_template[ordenacao.setimo],
+ 'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo],
+ 'nono_ordenacao': dict_ord_template[ordenacao.nono],
+ 'decimo_ordenacao': dict_ord_template[ordenacao.decimo]})
+ else:
+ context.update(
+ {'primeiro_ordenacao': dict_ord_template['id_basica'],
+ 'segundo_ordenacao': dict_ord_template['cont_mult'],
+ 'terceiro_ordenacao': dict_ord_template['mesa_d'],
+ 'quarto_ordenacao': dict_ord_template['lista_p'],
+ 'quinto_ordenacao': dict_ord_template['exp'],
+ 'sexto_ordenacao': dict_ord_template['mat_exp'],
+ 'setimo_ordenacao': dict_ord_template['oradores_exped'],
+ 'oitavo_ordenacao': dict_ord_template['lista_p_o_d'],
+ 'nono_ordenacao': dict_ord_template['mat_o_d'],
+ 'decimo_ordenacao': dict_ord_template['oradores_expli']})
+
+ return self.render_to_response(context)
class ExpedienteView(FormMixin, DetailView):
template_name = 'sessao/expediente.html'
diff --git a/sapl/templates/sessao/blocos_ata/assinaturas.html b/sapl/templates/sessao/blocos_ata/assinaturas.html
new file mode 100644
index 000000000..5b422e410
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/assinaturas.html
@@ -0,0 +1,12 @@
+{% load common_tags %}
+
+
+
+ Assinatura Parlamentares Presentes
+
+ {% for p in presenca_ordem %}
+
{{p.nome_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }}
+
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/conteudo_multimidia.html b/sapl/templates/sessao/blocos_ata/conteudo_multimidia.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/sapl/templates/sessao/blocos_ata/expedientes.html b/sapl/templates/sessao/blocos_ata/expedientes.html
new file mode 100644
index 000000000..d5838cbe8
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/expedientes.html
@@ -0,0 +1,8 @@
+
+
+ Expedientes: {% for e in expedientes %}
+ {{e.tipo}} :
+ {{e.conteudo}}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/identificacao_basica.html b/sapl/templates/sessao/blocos_ata/identificacao_basica.html
new file mode 100644
index 000000000..9b68189d1
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/identificacao_basica.html
@@ -0,0 +1,7 @@
+
+
+ Identificação Básica: {% for b in basica %}
+ {{b}} -
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/lista_presenca.html b/sapl/templates/sessao/blocos_ata/lista_presenca.html
new file mode 100644
index 000000000..f904a71ce
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/lista_presenca.html
@@ -0,0 +1,9 @@
+{% load common_tags %}
+
+
+
+ Lista de Presença na Sessão: {% for p in presenca_sessao %}
+ {{p.nome_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }} -
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html b/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html
new file mode 100644
index 000000000..6407e046c
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html
@@ -0,0 +1,9 @@
+{% load common_tags %}
+
+
+
+ Lista de Presença na Ordem do Dia: {% for p in presenca_ordem %}
+ {{p.nome_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/materias_expediente.html b/sapl/templates/sessao/blocos_ata/materias_expediente.html
new file mode 100644
index 000000000..c6d2ea4aa
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/materias_expediente.html
@@ -0,0 +1,24 @@
+
+
+ Matérias do Expediente: {% for m in materia_expediente %}
+ {{m.numero}} - {{m.titulo}}
+
+ {% if m.turno %}
+ Turno: {{m.turno}}
+ {% endif %}
+
+ Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}
+
+ {% if m.numero_protocolo %}
+ Número de Protocolo: {{ m.numero_protocolo }}
+ {% endif %}
+
+ {% if m.numero_processo %}
+ Processo: {{ m.numero_processo }}
+ {% endif %}
+
+ {{m.ementa|safe}}
+ {{m.resultado}} {{m.resultado_observacao}}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html b/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html
new file mode 100644
index 000000000..c010d1a3b
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html
@@ -0,0 +1,22 @@
+
+
+
+
+ Matérias da Ordem do Dia: {% for m in materias_ordem %}
+ {{m.numero}} - {{m.titulo}}
+ {% if m.turno %}
+ Turno:{{m.turno}}
+ {% endif %}
+ Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}
+ {% if m.numero_protocolo %}
+ Número de Protocolo: {{ m.numero_protocolo }}
+ {% endif %}
+ {% if m.numero_processo %}
+ Processo: {{ m.numero_processo }}
+ {% endif %}
+ {{m.ementa|safe}}
+ {{m.resultado}} {{m.resultado_observacao}}
+ {% endfor %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/mesa_diretora.html b/sapl/templates/sessao/blocos_ata/mesa_diretora.html
new file mode 100644
index 000000000..2f9f4b17c
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/mesa_diretora.html
@@ -0,0 +1,9 @@
+
+
+ Mesa Diretora: {% for m in mesa %}
+ {{m.cargo}}:
+ {{m.parlamentar.nome_parlamentar}} / {{ m.parlamentar.filiacao_atual }} ;
+ {% endfor %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_ata/oradores_expediente.html b/sapl/templates/sessao/blocos_ata/oradores_expediente.html
new file mode 100644
index 000000000..d31e8a77c
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/oradores_expediente.html
@@ -0,0 +1,11 @@
+
+
+ Oradores do Expediente: {% for o in oradores %}
+
{{o.numero_ordem}} - {{o.parlamentar}}
+ {{o.url_discurso}}
+ {{o.observacao}}
+
+ {% endfor %}
+
+
+
diff --git a/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html b/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html
new file mode 100644
index 000000000..9ba355148
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html
@@ -0,0 +1,8 @@
+
+
+ Oradores das Explicações Pessoais: {% for o in oradores_explicacoes %}
+ {{o.numero_ordem}} - {{o.parlamentar.nome_parlamentar}} / {{ o.parlamentar.filiacao_atual }};
+ {{o.url_discurso}}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/resumo_ata.html b/sapl/templates/sessao/resumo_ata.html
new file mode 100644
index 000000000..f6b8d3302
--- /dev/null
+++ b/sapl/templates/sessao/resumo_ata.html
@@ -0,0 +1,28 @@
+{% extends "crud/detail.html" %}
+{% load i18n %}
+{% load crispy_forms_tags %}
+
+{% block title %}
+
+{% endblock %}
+
+{% block detail_content %}
+
+
+ {% include 'sessao/blocos_ata/'|add:primeiro_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:segundo_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:terceiro_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:quarto_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:quinto_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:sexto_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:setimo_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:oitavo_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:nono_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:decimo_ordenacao %}
+ {% include 'sessao/blocos_ata/assinaturas.html' %}
+
+
+
+{% endblock detail_content %}
diff --git a/sapl/templates/sessao/subnav.yaml b/sapl/templates/sessao/subnav.yaml
index e80201f46..236d57c4c 100644
--- a/sapl/templates/sessao/subnav.yaml
+++ b/sapl/templates/sessao/subnav.yaml
@@ -33,4 +33,8 @@
check_permission: painel.list_painel
- title: {% trans 'Resumo' %}
- url: resumo
+ children:
+ - title: {% trans 'Resumo' %}
+ url: resumo
+ - title: {% trans 'Extrato' %}
+ url: resumo_ata
\ No newline at end of file