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 %} +

+ Extrato Eletrônico da {{sessaoplenaria}} +

+{% 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