Browse Source

Merge branch '3.1.x' into 3174-perm-op-mat

pull/3215/head
Edward 5 years ago
committed by GitHub
parent
commit
2e1a5a31e1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      requirements/requirements.txt
  2. 9
      sapl/materia/forms.py
  3. 23
      sapl/materia/migrations/0068_configetiquetamaterialegislativa.py
  4. 20
      sapl/materia/migrations/0069_auto_20200518_1519.py
  5. 8
      sapl/materia/models.py
  6. 4
      sapl/materia/urls.py
  7. 20
      sapl/materia/views.py
  8. 6
      sapl/norma/views.py
  9. 11
      sapl/parlamentares/forms.py
  10. 4
      sapl/relatorios/urls.py
  11. 59
      sapl/relatorios/views.py
  12. 3
      sapl/rules/map_rules.py
  13. 180
      sapl/sessao/views.py
  14. 19
      sapl/templates/materia/config_etiqueta_materia.html
  15. 6
      sapl/templates/materia/layouts.yaml
  16. 6
      sapl/templates/materia/materialegislativa_detail.html
  17. 2
      sapl/templates/materia/materialegislativa_filter.html
  18. 172
      sapl/templates/materia/materialegislativa_form.html
  19. 3
      sapl/templates/menu_tabelas_auxiliares.yaml
  20. 116
      sapl/templates/norma/normajuridica_form.html
  21. 3
      sapl/templates/relatorios/blocos_sessao_plenaria/materias_expediente.html
  22. 3
      sapl/templates/relatorios/blocos_sessao_plenaria/materias_ordemdia.html
  23. 40
      sapl/templates/relatorios/etiqueta_materia_legislativa.html
  24. 3
      sapl/templates/sessao/blocos_ata/materias_expediente.html
  25. 3
      sapl/templates/sessao/blocos_ata/materias_ordem_dia.html
  26. 5
      sapl/templates/sessao/blocos_resumo/materias_expediente.html
  27. 5
      sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html
  28. 17
      sapl/templates/sessao/oradores_create.html

1
requirements/requirements.txt

@ -31,6 +31,7 @@ more-itertools==8.2.0
pysolr==3.6.0 pysolr==3.6.0
PyPDF4==1.27.0 PyPDF4==1.27.0
pyoai==2.5.0 pyoai==2.5.0
Unidecode==1.1.1
git+https://github.com/interlegis/trml2pdf git+https://github.com/interlegis/trml2pdf
git+https://github.com/interlegis/django-admin-bootstrapped git+https://github.com/interlegis/django-admin-bootstrapped

9
sapl/materia/forms.py

@ -34,7 +34,7 @@ from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto,
MateriaLegislativa, Orgao, MateriaLegislativa, Orgao,
RegimeTramitacao, StatusTramitacao, RegimeTramitacao, StatusTramitacao,
TipoDocumento, TipoProposicao, TipoDocumento, TipoProposicao,
UnidadeTramitacao) UnidadeTramitacao,ConfigEtiquetaMateriaLegislativa)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura, Partido, Parlamentar from sapl.parlamentares.models import Legislatura, Partido, Parlamentar
@ -2913,3 +2913,10 @@ class MateriaPesquisaSimplesForm(forms.Form):
_('A Data Final não pode ser menor que a Data Inicial')) _('A Data Final não pode ser menor que a Data Inicial'))
return cleaned_data return cleaned_data
class ConfigEtiquetaMateriaLegislativaForms(ModelForm):
class Meta:
model = ConfigEtiquetaMateriaLegislativa
fields = '__all__'

23
sapl/materia/migrations/0068_configetiquetamaterialegislativa.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-05-18 18:14
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0067_auto_20200416_1538'),
]
operations = [
migrations.CreateModel(
name='ConfigEtiquetaMateriaLegislativa',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('largura', models.FloatField(default=5)),
('altura', models.FloatField(default=3)),
],
),
]

20
sapl/materia/migrations/0069_auto_20200518_1519.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-05-18 18:19
from __future__ import unicode_literals
from django.db import migrations
def create_first(apps, schema_editor):
db_alias = schema_editor.connection.alias
Type = apps.get_model("materia", "ConfigEtiquetaMateriaLegislativa")
Type.objects.using(db_alias).create()
class Migration(migrations.Migration):
dependencies = [
('materia', '0068_configetiquetamaterialegislativa'),
]
operations = [
migrations.RunPython(create_first),
]

8
sapl/materia/models.py

@ -1116,3 +1116,11 @@ class MateriaEmTramitacao(models.Model):
def __str__(self): def __str__(self):
return '{}/{}'.format(self.materia, self.tramitacao) return '{}/{}'.format(self.materia, self.tramitacao)
class ConfigEtiquetaMateriaLegislativa(models.Model):
largura = models.FloatField(default=5)
altura = models.FloatField(default=3)
def save(self, *args, **kwargs):
self.id = 1
return super().save(*args, **kwargs)

4
sapl/materia/urls.py

@ -27,7 +27,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
proposicao_texto, recuperar_materia, proposicao_texto, recuperar_materia,
ExcluirTramitacaoEmLoteView, RetornarProposicao, ExcluirTramitacaoEmLoteView, RetornarProposicao,
MateriaPesquisaSimplesView, MateriaPesquisaSimplesView,
DespachoInicialMultiCreateView, get_zip_docacessorios, get_pdf_docacessorios) DespachoInicialMultiCreateView, get_zip_docacessorios,
get_pdf_docacessorios, configEtiquetaMateriaLegislativaCrud)
from sapl.norma.views import NormaPesquisaSimplesView from sapl.norma.views import NormaPesquisaSimplesView
from sapl.protocoloadm.views import ( from sapl.protocoloadm.views import (
FichaPesquisaAdmView, FichaSelecionaAdmView) FichaPesquisaAdmView, FichaSelecionaAdmView)
@ -172,6 +173,7 @@ urlpatterns_sistema = [
url(r'^sistema/materia/status-tramitacao/', url(r'^sistema/materia/status-tramitacao/',
include(StatusTramitacaoCrud.get_urls())), include(StatusTramitacaoCrud.get_urls())),
url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())), url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())),
url(r'^sistema/materia/config-etiqueta-materia-legislativas/',configEtiquetaMateriaLegislativaCrud, name="configEtiquetaMateriaLegislativaCrud"),
] ]
urlpatterns = urlpatterns_impressos + urlpatterns_materia + \ urlpatterns = urlpatterns_impressos + urlpatterns_materia + \

20
sapl/materia/views.py

@ -32,6 +32,8 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic import CreateView, ListView, TemplateView, UpdateView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django.shortcuts import render
from django_filters.views import FilterView from django_filters.views import FilterView
@ -48,7 +50,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm, AutoriaMultiCreateForm
ConfirmarProposicaoForm, DevolverProposicaoForm, ConfirmarProposicaoForm, DevolverProposicaoForm,
DespachoInicialCreateForm, LegislacaoCitadaForm, DespachoInicialCreateForm, LegislacaoCitadaForm,
MateriaPesquisaSimplesForm, OrgaoForm, ProposicaoForm, MateriaPesquisaSimplesForm, OrgaoForm, ProposicaoForm,
TipoProposicaoForm, TramitacaoForm, TramitacaoUpdateForm) TipoProposicaoForm, TramitacaoForm, TramitacaoUpdateForm,ConfigEtiquetaMateriaLegislativaForms)
from sapl.norma.models import LegislacaoCitada from sapl.norma.models import LegislacaoCitada
from sapl.parlamentares.models import Legislatura from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
@ -72,7 +74,7 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, De
DocumentoAcessorio, MateriaAssunto, MateriaLegislativa, Numeracao, Orgao, DocumentoAcessorio, MateriaAssunto, MateriaLegislativa, Numeracao, Orgao,
Origem, Proposicao, RegimeTramitacao, Relatoria, StatusTramitacao, Origem, Proposicao, RegimeTramitacao, Relatoria, StatusTramitacao,
TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao,ConfigEtiquetaMateriaLegislativa)
AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia') AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia')
@ -2822,3 +2824,17 @@ def get_pdf_docacessorios(request, pk):
response['Content-Disposition'] = ('attachment; filename="%s"' response['Content-Disposition'] = ('attachment; filename="%s"'
% external_name) % external_name)
return response return response
def configEtiquetaMateriaLegislativaCrud(request):
config = ConfigEtiquetaMateriaLegislativa.objects.last()
if request.method == "POST":
form = ConfigEtiquetaMateriaLegislativaForms(request.POST, instance=config)
if form.is_valid():
config = form.save(commit=False)
config.published_date = timezone.now()
config.save()
return redirect('materia/config_etiqueta_materia.html', {'form': form})
else:
form = ConfigEtiquetaMateriaLegislativaForms(instance=config)
return render(request, 'materia/config_etiqueta_materia.html', {'form': form})

6
sapl/norma/views.py

@ -258,7 +258,7 @@ class NormaCrud(Crud):
def get_initial(self): def get_initial(self):
initial = super().get_initial() initial = super().get_initial()
norma = NormaJuridica.objects.get(id=self.kwargs['pk']) norma = NormaJuridica.objects.select_related("materia").get(id=self.kwargs['pk'])
if norma.materia: if norma.materia:
initial['tipo_materia'] = norma.materia.tipo initial['tipo_materia'] = norma.materia.tipo
initial['ano_materia'] = norma.materia.ano initial['ano_materia'] = norma.materia.ano
@ -267,9 +267,7 @@ class NormaCrud(Crud):
return initial return initial
def form_valid(self, form): def form_valid(self, form):
norma_antiga = NormaJuridica.objects.get( norma_antiga = NormaJuridica.objects.get(pk=self.kwargs['pk'])
pk=self.kwargs['pk']
)
# Feito desta forma para que sejam materializados os assuntos # Feito desta forma para que sejam materializados os assuntos
# antigos # antigos

11
sapl/parlamentares/forms.py

@ -216,6 +216,17 @@ class ParlamentarForm(FileFieldCheckMixin, ModelForm):
'biografia': forms.Textarea( 'biografia': forms.Textarea(
attrs={'id': 'texto-rico'})} attrs={'id': 'texto-rico'})}
def save(self, commit=True):
parlamentar = super().save()
autor = parlamentar.autor.first()
usuario = autor.user if autor else None
if autor and usuario:
usuario.is_active = parlamentar.ativo
usuario.save()
return parlamentar
class ParlamentarFilterSet(django_filters.FilterSet): class ParlamentarFilterSet(django_filters.FilterSet):
nome_parlamentar = django_filters.CharFilter( nome_parlamentar = django_filters.CharFilter(

4
sapl/relatorios/urls.py

@ -6,7 +6,7 @@ from .views import (relatorio_capa_processo,
relatorio_etiqueta_protocolo, relatorio_materia, relatorio_etiqueta_protocolo, relatorio_materia,
relatorio_ordem_dia, relatorio_pauta_sessao, relatorio_ordem_dia, relatorio_pauta_sessao,
relatorio_protocolo, relatorio_sessao_plenaria, relatorio_protocolo, relatorio_sessao_plenaria,
resumo_ata_pdf, relatorio_sessao_plenaria_pdf) resumo_ata_pdf, relatorio_sessao_plenaria_pdf, etiqueta_materia_legislativa)
app_name = AppConfig.name app_name = AppConfig.name
@ -33,4 +33,6 @@ urlpatterns = [
resumo_ata_pdf, name='resumo_ata_pdf'), resumo_ata_pdf, name='resumo_ata_pdf'),
url(r'^relatorios/(?P<pk>\d+)/sessao-plenaria-pdf$', url(r'^relatorios/(?P<pk>\d+)/sessao-plenaria-pdf$',
relatorio_sessao_plenaria_pdf, name='relatorio_sessao_plenaria_pdf'), relatorio_sessao_plenaria_pdf, name='relatorio_sessao_plenaria_pdf'),
url(r'^relatorios/(?P<pk>\d+)/etiqueta-materia-legislativa$',
etiqueta_materia_legislativa, name='etiqueta_materia_legislativa'),
] ]

59
sapl/relatorios/views.py

@ -3,6 +3,7 @@ import html
import logging import logging
import re import re
import tempfile import tempfile
import unidecode
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
@ -15,7 +16,7 @@ from sapl.settings import MEDIA_URL
from sapl.base.models import Autor, CasaLegislativa from sapl.base.models import Autor, CasaLegislativa
from sapl.comissoes.models import Comissao from sapl.comissoes.models import Comissao
from sapl.materia.models import (Autoria, MateriaLegislativa, Numeracao, from sapl.materia.models import (Autoria, MateriaLegislativa, Numeracao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao, ConfigEtiquetaMateriaLegislativa)
from sapl.parlamentares.models import CargoMesa, Filiacao, Parlamentar from sapl.parlamentares.models import CargoMesa, Filiacao, Parlamentar
from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo, from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo,
TramitacaoAdministrativo) TramitacaoAdministrativo)
@ -26,7 +27,7 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
SessaoPlenariaPresenca, OcorrenciaSessao, SessaoPlenariaPresenca, OcorrenciaSessao,
RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente, ResumoOrdenacao) RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente, ResumoOrdenacao)
from sapl.settings import STATIC_ROOT from sapl.settings import STATIC_ROOT
from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data, create_barcode
from sapl.sessao.views import (get_identificacao_basica, get_mesa_diretora, from sapl.sessao.views import (get_identificacao_basica, get_mesa_diretora,
get_presenca_sessao, get_expedientes, get_presenca_sessao, get_expedientes,
@ -601,6 +602,7 @@ def get_sessao_plenaria(sessao, casa):
str(materia.ano)), str(materia.ano)),
"des_numeracao": ' ', "des_numeracao": ' ',
"des_turno": get_turno(materia)[0], "des_turno": get_turno(materia)[0],
"situacao": materia.materiaemtramitacao_set.first().tramitacao.status,
"txt_ementa": str(materia.ementa), "txt_ementa": str(materia.ementa),
"ordem_observacao": expediente_materia.observacao, "ordem_observacao": expediente_materia.observacao,
"nom_resultado": '', "nom_resultado": '',
@ -703,7 +705,8 @@ def get_sessao_plenaria(sessao, casa):
# https://github.com/interlegis/sapl/issues/1009 # https://github.com/interlegis/sapl/issues/1009
"txt_ementa": html.unescape(materia.ementa), "txt_ementa": html.unescape(materia.ementa),
"ordem_observacao": html.unescape(votacao.observacao), "ordem_observacao": html.unescape(votacao.observacao),
"nom_autor": '' "nom_autor": '',
"situacao": materia.materiaemtramitacao_set.first().tramitacao.status
}) })
autoria = materia.autoria_set.all() autoria = materia.autoria_set.all()
@ -1003,6 +1006,8 @@ def relatorio_etiqueta_protocolo(request, nro, ano):
protocolo = Protocolo.objects.filter(numero=nro, ano=ano) protocolo = Protocolo.objects.filter(numero=nro, ano=ano)
m = MateriaLegislativa.objects.filter(numero_protocolo=nro,ano=ano)
protocolo_data = get_etiqueta_protocolos(protocolo) protocolo_data = get_etiqueta_protocolos(protocolo)
pdf = pdf_etiqueta_protocolo_gerar.principal(imagem, pdf = pdf_etiqueta_protocolo_gerar.principal(imagem,
@ -1498,3 +1503,51 @@ def relatorio_sessao_plenaria_pdf(request, pk):
response.write(pdf_file) response.write(pdf_file)
return response return response
def gera_etiqueta_ml(materia_legislativa, base_url):
confg = ConfigEtiquetaMateriaLegislativa.objects.first()
ml_info = unidecode.unidecode("{}/{}-{}".format(materia_legislativa.numero,
materia_legislativa.ano,
materia_legislativa.tipo.sigla))
base64_data = create_barcode(ml_info, 100, 500)
barcode = 'data:image/png;base64,{0}'.format(base64_data)
max_ementa_size = 240
ementa = materia_legislativa.ementa
ementa = ementa if len(ementa) < max_ementa_size else ementa[:max_ementa_size]+"..."
context = {
'numero': materia_legislativa.numero,
'ano': materia_legislativa.ano,
'tipo': materia_legislativa.tipo,
'data_apresentacao':materia_legislativa.data_apresentacao,
'autores': materia_legislativa.autores.all(),
'ementa':ementa,
'largura': confg.largura,
'altura':confg.largura,
'barcode': barcode
}
main_template = render_to_string('relatorios/etiqueta_materia_legislativa.html', context)
html = HTML(base_url=base_url, string=main_template)
main_doc = html.render(stylesheets=[CSS(string="@page {{size: {}cm {}cm;}}".format(confg.largura,confg.altura))])
pdf_file = main_doc.write_pdf()
return pdf_file
def etiqueta_materia_legislativa(request, pk):
base_url = request.build_absolute_uri()
materia_legislativa = MateriaLegislativa.objects.get(pk=pk)
pdf_file = gera_etiqueta_ml(materia_legislativa, base_url)
response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=etiqueta.pdf'
response['Content-Transfer-Encoding'] = 'binary'
response.write(pdf_file)
return response

3
sapl/rules/map_rules.py

@ -258,7 +258,8 @@ rules_group_geral = {
(materia.Parecer, __base__, __perms_publicas__), (materia.Parecer, __base__, __perms_publicas__),
(materia.StatusTramitacao, __base__, __perms_publicas__), (materia.StatusTramitacao, __base__, __perms_publicas__),
(materia.UnidadeTramitacao, __base__, __perms_publicas__), (materia.UnidadeTramitacao, __base__, __perms_publicas__),
(materia.ConfigEtiquetaMateriaLegislativa, __base__, set()),
(norma.AssuntoNorma, __base__, __perms_publicas__), (norma.AssuntoNorma, __base__, __perms_publicas__),
(norma.TipoNormaJuridica, __base__, __perms_publicas__), (norma.TipoNormaJuridica, __base__, __perms_publicas__),

180
sapl/sessao/views.py

@ -29,7 +29,7 @@ from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
PermissionRequiredForAppCrudMixin, make_pagination) PermissionRequiredForAppCrudMixin, make_pagination)
from sapl.materia.forms import filtra_tramitacao_status from sapl.materia.forms import filtra_tramitacao_status
from sapl.materia.models import (Autoria, TipoMateriaLegislativa, from sapl.materia.models import (Autoria, TipoMateriaLegislativa,
Tramitacao) Tramitacao, MateriaEmTramitacao)
from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.materia.views import MateriaLegislativaPesquisaView
from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato,
Parlamentar, SessaoLegislativa) Parlamentar, SessaoLegislativa)
@ -228,19 +228,23 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
if t[0] == tramitacao.turno: if t[0] == tramitacao.turno:
turno = t[1] turno = t[1]
break break
situacao = MateriaEmTramitacao.objects.select_related("materia", "tramitacao")\
.filter(materia=materia).first().tramitacao.status
title_materia = """<a id=id%s href=%s>%s</a> </br> title_materia = """<a id=id%s href=%s>%s</a> </br>
<b>Processo:</b> %s </br> <b>Processo:</b> %s </br>
<b>Autor:</b> %s </br> <b>Autor:</b> %s </br>
<b>Protocolo:</b> %s </br> <b>Protocolo:</b> %s </br>
<b>Turno:</b> %s </br> <b>Turno:</b> %s </br>
<b>Situação:</b> %s </br>
""" % (obj.materia.id, """ % (obj.materia.id,
url_materia, url_materia,
row[1][0], row[1][0],
numeracao if numeracao else '', numeracao if numeracao else '',
autor if autor else '', autor if autor else '',
num_protocolo if num_protocolo else '', num_protocolo if num_protocolo else '',
turno) turno,
situacao if situacao else '')
# Na linha abaixo, o segundo argumento é None para não colocar # Na linha abaixo, o segundo argumento é None para não colocar
# url em toda a string de title_materia # url em toda a string de title_materia
@ -706,6 +710,8 @@ class OradorCrud(MasterDetailCrud):
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = OradorForm form_class = OradorForm
template_name = 'sessao/oradores_create.html'
def get_initial(self): def get_initial(self):
return {'id_sessao': self.kwargs['pk']} return {'id_sessao': self.kwargs['pk']}
@ -718,6 +724,8 @@ class OradorCrud(MasterDetailCrud):
if tipo_sessao.nome == "Solene": if tipo_sessao.nome == "Solene":
context.update( context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'}) {'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = Orador.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
def get_success_url(self): def get_success_url(self):
@ -775,6 +783,7 @@ class OradorExpedienteCrud(OradorCrud):
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = OradorExpedienteForm form_class = OradorExpedienteForm
template_name = 'sessao/oradores_create.html'
def get_initial(self): def get_initial(self):
return {'id_sessao': self.kwargs['pk']} return {'id_sessao': self.kwargs['pk']}
@ -787,6 +796,8 @@ class OradorExpedienteCrud(OradorCrud):
if tipo_sessao.nome == "Solene": if tipo_sessao.nome == "Solene":
context.update( context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'}) {'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = OradorExpediente.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
def get_success_url(self): def get_success_url(self):
@ -850,9 +861,9 @@ class OradorExpedienteCrud(OradorCrud):
class OradorOrdemDiaCrud(OradorCrud): class OradorOrdemDiaCrud(OradorCrud):
model = OradorOrdemDia model = OradorOrdemDia
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = OradorOrdemDiaForm form_class = OradorOrdemDiaForm
template_name = 'sessao/oradores_create.html'
def get_initial(self): def get_initial(self):
return {'id_sessao': self.kwargs['pk']} return {'id_sessao': self.kwargs['pk']}
@ -861,6 +872,12 @@ class OradorOrdemDiaCrud(OradorCrud):
return reverse('sapl.sessao:oradorordemdia_list', return reverse('sapl.sessao:oradorordemdia_list',
kwargs={'pk': self.kwargs['pk']}) kwargs={'pk': self.kwargs['pk']})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
ultimo_orador = OradorOrdemDia.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
form_class = OradorOrdemDiaForm form_class = OradorOrdemDiaForm
@ -1689,28 +1706,14 @@ def get_expedientes(sessao_plenaria):
def get_materias_expediente(sessao_plenaria): def get_materias_expediente(sessao_plenaria):
materias = ExpedienteMateria.objects.filter(
sessao_plenaria_id=sessao_plenaria.id)
materias_expediente = [] materias_expediente = []
for m in materias: for m in ExpedienteMateria.objects.select_related("materia").filter(sessao_plenaria_id=sessao_plenaria.id):
ementa = m.materia.ementa
titulo = m.materia
numero = m.numero_ordem
tramitacao = '' tramitacao = ''
tramitacoes = Tramitacao.objects.filter( for aux_tramitacao in Tramitacao.objects.filter(materia=m.materia).order_by('-pk'):
materia=m.materia).order_by('-pk')
for aux_tramitacao in tramitacoes:
if aux_tramitacao.turno: if aux_tramitacao.turno:
tramitacao = aux_tramitacao tramitacao = aux_tramitacao
break break
turno = None
if tramitacao:
turno = get_turno(tramitacao.turno)
rv = m.registrovotacao_set.first() rv = m.registrovotacao_set.first()
rp = m.retiradapauta_set.filter(materia=m.materia).first() rp = m.retiradapauta_set.filter(materia=m.materia).first()
if rv: if rv:
@ -1720,30 +1723,24 @@ def get_materias_expediente(sessao_plenaria):
resultado = rp.tipo_de_retirada.descricao resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao resultado_observacao = rp.observacao
else: else:
if m.tipo_votacao == 4: resultado = _('Matéria lida') if m.tipo_votacao == 4 else _('Matéria não votada')
resultado = _('Matéria lida')
else:
resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
autoria = Autoria.objects.filter(materia_id=m.materia_id) materias_expediente.append({
autor = [str(x.autor) for x in autoria] 'ementa': m.materia.ementa,
'titulo': m.materia,
mat = {'ementa': ementa, 'numero': m.numero_ordem,
'titulo': titulo, 'turno': get_turno(tramitacao.turno) if tramitacao else None,
'numero': numero, 'situacao': m.materia.materiaemtramitacao_set.first().tramitacao.status,
'turno': turno, 'resultado': resultado,
'resultado': resultado, 'resultado_observacao': resultado_observacao,
'resultado_observacao': resultado_observacao, 'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=m.materia_id)],
'autor': autor, 'numero_protocolo': m.materia.numero_protocolo,
'numero_protocolo': m.materia.numero_protocolo, 'numero_processo': m.materia.numeracao_set.last(),
'numero_processo': m.materia.numeracao_set.last(), 'observacao': m.observacao
'observacao': m.observacao })
}
materias_expediente.append(mat)
context = {'materia_expediente': materias_expediente} return {'materia_expediente': materias_expediente}
return context
def get_oradores_expediente(sessao_plenaria): def get_oradores_expediente(sessao_plenaria):
@ -1811,26 +1808,14 @@ def get_assinaturas(sessao_plenaria):
def get_materias_ordem_do_dia(sessao_plenaria): def get_materias_ordem_do_dia(sessao_plenaria):
ordem = OrdemDia.objects.filter(sessao_plenaria_id=sessao_plenaria.id)
materias_ordem = [] materias_ordem = []
for o in ordem: for o in OrdemDia.objects.filter(sessao_plenaria_id=sessao_plenaria.id):
ementa = o.materia.ementa
ementa_observacao = o.observacao
titulo = o.materia
numero = o.numero_ordem
tramitacao = '' tramitacao = ''
tramitacoes = Tramitacao.objects.filter( for aux_tramitacao in Tramitacao.objects.filter(materia=o.materia).order_by('-pk'):
materia=o.materia).order_by('-pk')
for aux_tramitacao in tramitacoes:
if aux_tramitacao.turno: if aux_tramitacao.turno:
tramitacao = aux_tramitacao tramitacao = aux_tramitacao
break break
turno = None
if tramitacao:
turno = get_turno(tramitacao.turno)
# Verificar resultado # Verificar resultado
rv = o.registrovotacao_set.filter(materia=o.materia).first() rv = o.registrovotacao_set.filter(materia=o.materia).first()
rp = o.retiradapauta_set.filter(materia=o.materia).first() rp = o.retiradapauta_set.filter(materia=o.materia).first()
@ -1841,55 +1826,44 @@ def get_materias_ordem_do_dia(sessao_plenaria):
resultado = rp.tipo_de_retirada.descricao resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao resultado_observacao = rp.observacao
else: else:
if o.tipo_votacao == 4: resultado = _('Matéria lida') if o.tipo_votacao == 4 else _('Matéria não votada')
resultado = _('Matéria lida')
else:
resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
voto_sim = ""
voto_nao = ""
voto_abstencoes = ""
voto_nominal = [] voto_nominal = []
if o.tipo_votacao == 2: if o.tipo_votacao == 2:
votos = VotoParlamentar.objects.filter(ordem=o.id) for voto in VotoParlamentar.objects.filter(ordem=o.id):
for voto in votos: voto_nominal.append((voto.parlamentar.nome_completo, voto.voto))
aux_voto = (voto.parlamentar.nome_completo, voto.voto)
voto_nominal.append(aux_voto) voto = RegistroVotacao.objects.filter(ordem=o.id).last()
try: if voto:
voto = RegistroVotacao.objects.filter(ordem=o.id).last()
voto_sim = voto.numero_votos_sim voto_sim = voto.numero_votos_sim
voto_nao = voto.numero_votos_nao voto_nao = voto.numero_votos_nao
voto_abstencoes = voto.numero_abstencoes voto_abstencoes = voto.numero_abstencoes
except AttributeError: else:
voto_sim = " Não Informado" voto_sim = " Não Informado"
voto_nao = " Não Informado" voto_nao = " Não Informado"
voto_abstencoes = " Não Informado" voto_abstencoes = " Não Informado"
autoria = Autoria.objects.filter( materias_ordem.append({
materia_id=o.materia_id) 'ementa': o.materia.ementa,
autor = [str(x.autor) for x in autoria] 'ementa_observacao': o.observacao,
mat = {'ementa': ementa, 'titulo': o.materia,
'ementa_observacao': ementa_observacao, 'numero': o.numero_ordem,
'titulo': titulo, 'turno': get_turno(tramitacao.turno) if tramitacao else None,
'numero': numero, 'situacao': o.materia.materiaemtramitacao_set.first().tramitacao.status,
'turno': turno, 'resultado': resultado,
'resultado': resultado, 'resultado_observacao': resultado_observacao,
'resultado_observacao': resultado_observacao, 'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)],
'autor': autor, 'numero_protocolo': o.materia.numero_protocolo,
'numero_protocolo': o.materia.numero_protocolo, 'numero_processo': o.materia.numeracao_set.last(),
'numero_processo': o.materia.numeracao_set.last(), 'tipo_votacao': o.TIPO_VOTACAO_CHOICES[o.tipo_votacao],
'tipo_votacao': o.TIPO_VOTACAO_CHOICES[o.tipo_votacao], 'voto_sim': voto_sim,
'voto_sim': voto_sim, 'voto_nao': voto_nao,
'voto_nao': voto_nao, 'voto_abstencoes': voto_abstencoes,
'voto_abstencoes': voto_abstencoes, 'voto_nominal': voto_nominal,
'voto_nominal': voto_nominal, })
}
materias_ordem.append(mat)
context = {'materias_ordem': materias_ordem} return {'materias_ordem': materias_ordem}
return context
def get_oradores_ordemdia(sessao_plenaria): def get_oradores_ordemdia(sessao_plenaria):
@ -1957,13 +1931,9 @@ class ResumoView(DetailView):
context = self.get_context_data(object=self.object) context = self.get_context_data(object=self.object)
# Votos de Votação Nominal de Matérias Expediente # Votos de Votação Nominal de Matérias Expediente
materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter(
sessao_plenaria_id=self.object.id,
tipo_votacao=2).order_by('-materia')
votacoes = [] votacoes = []
for mevn in materias_expediente_votacao_nominal: for mevn in ExpedienteMateria.objects.filter(sessao_plenaria_id=self.object.id, tipo_votacao=2)\
.order_by('-materia'):
votos_materia = [] votos_materia = []
titulo_materia = mevn.materia titulo_materia = mevn.materia
registro = RegistroVotacao.objects.filter(expediente=mevn) registro = RegistroVotacao.objects.filter(expediente=mevn)
@ -1971,11 +1941,10 @@ class ResumoView(DetailView):
for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'): for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'):
votos_materia.append(vp) votos_materia.append(vp)
dados_votacao = { votacoes.append({
'titulo': titulo_materia, 'titulo': titulo_materia,
'votos': votos_materia 'votos': votos_materia
} })
votacoes.append(dados_votacao)
context.update({'votos_nominais_materia_expediente': votacoes}) context.update({'votos_nominais_materia_expediente': votacoes})
@ -2009,12 +1978,8 @@ class ResumoView(DetailView):
# ===================================================================== # =====================================================================
# Matérias Ordem do Dia # Matérias Ordem do Dia
# Votos de Votação Nominal de Matérias Ordem do Dia # Votos de Votação Nominal de Matérias Ordem do Dia
materias_ordem_dia_votacao_nominal = OrdemDia.objects.filter(
sessao_plenaria_id=self.object.id,
tipo_votacao=2).order_by('-materia')
votacoes_od = [] votacoes_od = []
for modvn in materias_ordem_dia_votacao_nominal: for modvn in OrdemDia.objects.filter(sessao_plenaria_id=self.object.id, tipo_votacao=2).order_by('-materia'):
votos_materia_od = [] votos_materia_od = []
t_materia = modvn.materia t_materia = modvn.materia
registro_od = RegistroVotacao.objects.filter(ordem=modvn) registro_od = RegistroVotacao.objects.filter(ordem=modvn)
@ -2022,11 +1987,10 @@ class ResumoView(DetailView):
for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'): for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'):
votos_materia_od.append(vp_od) votos_materia_od.append(vp_od)
dados_votacao_od = { votacoes_od.append({
'titulo': t_materia, 'titulo': t_materia,
'votos': votos_materia_od 'votos': votos_materia_od
} })
votacoes_od.append(dados_votacao_od)
context.update({'votos_nominais_materia_ordem_dia': votacoes_od}) context.update({'votos_nominais_materia_ordem_dia': votacoes_od})

19
sapl/templates/materia/config_etiqueta_materia.html

@ -0,0 +1,19 @@
{% extends "crud/form.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block base_content %}
<h1>Configuração Etiqueta Materia Legislativa</h1>
<form action="." method="post">
{% csrf_token %}
{{ form|crispy }}
<div class="row">
<div class="col-md-12">
<div class="form-group row justify-content-between">
<a href="{% url 'sapl.base:sistema' %}" class="btn btn-dark">Cancelar</a>
<input type="submit" name="salvar" value="Salvar" class="btn btn-primary float-right" id="submit-id-salvar" onclick="this.form.submit();this.disabled=true;">
</div>
</div>
</div>
</form>
{% endblock base_content %}

6
sapl/templates/materia/layouts.yaml

@ -157,3 +157,9 @@ MateriaLegislativaDetail:
- ementa - ementa
- indexacao - indexacao
- observacao - observacao
ConfigEtiquetaMateriaLegislativa:
{% trans 'Configurações de Etiqueta' %}:
- largura
- altura
- mostrar_em_arquivo

6
sapl/templates/materia/materialegislativa_detail.html

@ -10,6 +10,12 @@
{% endif %} {% endif %}
{% endblock sub_actions %} {% endblock sub_actions %}
{% block editions %}
{{ block.super }}
<a href="{% url 'sapl.relatorios:etiqueta_materia_legislativa' object.pk %}" class="btn btn-outline-primary">{% trans 'Etiqueta' %}</a>
{% endblock editions %}
{% block detail_content %} {% block detail_content %}
{{ block.super }} {{ block.super }}
{% if object.registrovotacao_set.exists %} {% if object.registrovotacao_set.exists %}

2
sapl/templates/materia/materialegislativa_filter.html

@ -1,6 +1,7 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags common_tags%} {% load crispy_forms_tags common_tags%}
{% load webpack_static from webpack_loader %}
{% block actions %} {% block actions %}
@ -47,6 +48,7 @@
<tr> <tr>
<td> <td>
<strong><a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}</strong></a> <strong><a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}</strong></a>
<a href="{% url 'sapl.relatorios:etiqueta_materia_legislativa' m.pk %}"><img src="{% webpack_static 'img/etiqueta.png' %}" alt="Etiqueta Individual"></a>
</br> </br>
<strong>Ementa:</strong>&nbsp;{{ m.ementa|dont_break_out }} <strong>Ementa:</strong>&nbsp;{{ m.ementa|dont_break_out }}
</br> </br>

172
sapl/templates/materia/materialegislativa_form.html

@ -1,111 +1,109 @@
{% extends "crud/form.html" %} {% extends "crud/form.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load common_tags %} {% load common_tags %}
{% block extra_js %} {% block extra_js %}
<script language="Javascript">
function recuperar_numero_ano() {
var tipo = $("#id_tipo").val()
var ano = $("#id_ano").val()
<script language="Javascript"> if (tipo){
$.get("/materia/recuperar-materia", { tipo: tipo, ano: ano },
function recuperar_numero_ano() { function (data, status) {
var tipo = $("#id_tipo").val() $("#id_numero").val(data.numero);
var ano = $("#id_ano").val() $("#id_ano").val(data.ano);
console.log(data);
if (tipo) { });
$.get("/materia/recuperar-materia",{tipo: tipo, ano: ano}, }
function(data, status) {
$("#id_numero").val(data.numero);
$("#id_ano").val(data.ano);
console.log(data)
});
} }
} $("#id_tipo, #id_ano").change(recuperar_numero_ano);
$("#id_tipo, #id_ano").change(recuperar_numero_ano);
function compare(a, b) { function compare(a, b) {
if (a.text < b.text) if (a.text < b.text)
return -1; return -1;
if (a.text > b.text) if (a.text > b.text)
return 1; return 1;
return 0; return 0;
} }
var modal_estilos = 'display: block;' var modal_estilos = 'display: block;'
+'width: 85%; max-width: 600px;' +'width: 85%; max-width: 600px;'
+'background: #fff; padding: 15px;' +'background: #fff; padding: 15px;'
+'border-radius: 5px;' +'border-radius: 5px;'
+'-webkit-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);' +'-webkit-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);'
+'-moz-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);' +'-moz-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);'
+'box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);' +'box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);'
+'position: fixed;' +'position: fixed;'
+'top: 50%; left: 50%;' +'top: 50%; left: 50%;'
+'transform: translate(-50%,-50%);' +'transform: translate(-50%,-50%);'
+'z-index: 99999999; text-align: center'; +'z-index: 99999999; text-align: center';
var fundo_modal_estilos = 'top: 0; right: 0;' var fundo_modal_estilos = 'top: 0; right: 0;'
+'bottom: 0; left: 0; position: fixed;' +'bottom: 0; left: 0; position: fixed;'
+'background-color: rgba(0, 0, 0, 0.6); z-index: 99999999;' +'background-color: rgba(0, 0, 0, 0.6); z-index: 99999999;'
+'display: none;'; +'display: none;';
var meu_modal = '<div id="fundo_modal" style="'+fundo_modal_estilos+'">' var meu_modal = '<div id="fundo_modal" style="'+fundo_modal_estilos+'">'
+'<div id="meu_modal" style="'+modal_estilos+'">' +'<div id="meu_modal" style="'+modal_estilos+'">'
+'<h2>Atenção! Ano de apresentação e ano da matéria são diferentes.</h2><br />' +'<h2>Atenção! Ano de apresentação e ano da matéria são diferentes.</h2><br />'
+'<button id="close_model_btn" type="button" class="btn btn-warning" data-dismiss="modal">' +'<button id="close_model_btn" type="button" class="btn btn-warning" data-dismiss="modal">'
+'Compreendo e quero continuar</button>' +'Compreendo e quero continuar</button>'
+'</div></div>'; +'</div></div>';
function verifica_ano(){ function verifica_ano() {
let ano = $("select#id_ano.select").val(); let ano = $("select#id_ano.select").val();
let data_apresentacao = $("input#id_data_apresentacao.dateinput").val(); let data_apresentacao = $("input#id_data_apresentacao.dateinput").val();
let ano_apresentacao = data_apresentacao.substr(data_apresentacao.length - 4); let ano_apresentacao = data_apresentacao.substr(data_apresentacao.length - 4);
if(ano && ano_apresentacao && ano_apresentacao != ano){ if (ano && ano_apresentacao && ano_apresentacao != ano){
$('#fundo_modal').fadeIn(); $('#fundo_modal').fadeIn();
}
} }
}
$(document).ready(function() { $(document).ready( function() {
$("#id_tipo_autor").change(function() { $("#id_tipo_autor, #id_data_apresentacao").change( function() {
var tipo_selecionado = $("#id_tipo_autor").val(); var tipo_selecionado = $("#id_tipo_autor").val();
var autor_selecionado = $("#id_autor").val(); var autor_selecionado = $("#id_autor").val();
$("#id_autor option").remove()
if (tipo_selecionado !== undefined && tipo_selecionado !== null) { $("#id_autor option").remove()
var json_data = {
if (tipo_selecionado !== undefined && tipo_selecionado !== null){
var json_data = {
tipo : tipo_selecionado, tipo : tipo_selecionado,
data_relativa : $("#id_data_apresentacao").val() data_relativa : $("#id_data_apresentacao").val()
}
$.getJSON("/api/autor/possiveis", json_data, function(data){
if (data) {
var results = data.sort(compare);
if (results.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
});
$("#id_autor").val(autor_selecionado);
} }
}); $.getJSON("/api/autor/possiveis", json_data, function(data) {
} if (data) {
}); var results = data.sort(compare);
$("#id_tipo_autor").trigger('change'); if (results.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
});
$("#id_autor").val(autor_selecionado);
}
});
}
});
$("#id_tipo_autor").trigger('change');
$("body").append(meu_modal); $("body").append(meu_modal);
$("#fundo_modal, #close_model_btn").click(function(){ $("#fundo_modal").hide(); }); $("#fundo_modal, #close_model_btn").click( function() { $("#fundo_modal").hide(); });
$("#meu_modal").click(function(e){ e.stopPropagation(); }); $("#meu_modal").click( function(e) { e.stopPropagation(); });
$("select#id_ano.select.form-control").change(function(){ $("select#id_ano.select.form-control").change( function() {
verifica_ano(); verifica_ano();
});
$("input#id_data_apresentacao.dateinput.form-control").change( function() {
verifica_ano();
});
}); });
$("input#id_data_apresentacao.dateinput.form-control").change(function(){ </script>
verifica_ano();
});
});
</script>
{% endblock %} {% endblock %}

3
sapl/templates/menu_tabelas_auxiliares.yaml

@ -119,6 +119,9 @@
- title: {% trans 'Assunto Matéria' %} - title: {% trans 'Assunto Matéria' %}
url: sapl.materia:assuntomateria_list url: sapl.materia:assuntomateria_list
css_class: btn btn-link css_class: btn btn-link
- title: {% trans 'Configuração Etiqueta Materia Legislativa' %}
url: sapl.materia:configEtiquetaMateriaLegislativaCrud
css_class: btn btn-link
- title: {% trans 'Módulo Normas Jurídicas' %} - title: {% trans 'Módulo Normas Jurídicas' %}
css_class: head_title css_class: head_title
children: children:

116
sapl/templates/norma/normajuridica_form.html

@ -10,20 +10,23 @@
var tipo_materia = $("#id_tipo_materia").val(); var tipo_materia = $("#id_tipo_materia").val();
var numero_materia = $("#id_numero_materia").val(); var numero_materia = $("#id_numero_materia").val();
var ano_materia = $("#id_ano_materia").val(); var ano_materia = $("#id_ano_materia").val();
var tipo = $('#id_tipo').val();
var ano = $('#id_ano').val();
var numero = $('#id_numero').val();
var ementa = $('#id_ementa').val();
if (tipo_materia && numero_materia && ano_materia) { if (tipo_materia && numero_materia && ano_materia) {
$.get("/sessao/recuperar-materia", $.get("/sessao/recuperar-materia", {
{tipo_materia: tipo_materia, tipo_materia: tipo_materia,
numero_materia: numero_materia, numero_materia: numero_materia,
ano_materia: ano_materia}, ano_materia: ano_materia
function(data, status) { }, (data, status) => {
$("#id_ementa").val(data.ementa); $("#id_fundo_confirmacao_mudanca_ementa_indexacao").fadeIn();
$("#id_indexacao").val(data.indexacao); $("#id_sim_mudanca_ementa_indexacao").click(() => {
} $("#id_ementa").val(data.ementa);
); $("#id_indexacao").val(data.indexacao);
$("#id_fundo_confirmacao_mudanca_ementa_indexacao").hide();
});
$("#id_nao_mudanca_ementa_indexacao").click(() => {
$("#id_fundo_confirmacao_mudanca_ementa_indexacao").hide();
});
});
} }
} }
var fields = ["#id_tipo_materia", "#id_numero_materia", "#id_ano_materia"] var fields = ["#id_tipo_materia", "#id_numero_materia", "#id_ano_materia"]
@ -36,12 +39,11 @@
var ano = $("#id_ano").val(); var ano = $("#id_ano").val();
if (tipo) { if (tipo) {
$.get("/norma/recuperar-numero-norma",{tipo: tipo, $.get("/norma/recuperar-numero-norma", { tipo: tipo, ano: ano },
ano: ano}, (data, status) => {
function(data, status) { $("#id_numero").val(data.numero);
$("#id_numero").val(data.numero); $("#id_ano").val(data.ano);
$("#id_ano").val(data.ano); });
});
} }
} }
var fields = ["#id_tipo", "#id_ano"]; var fields = ["#id_tipo", "#id_ano"];
@ -58,29 +60,57 @@
} }
}); });
var modal_estilos = 'display: block;' var modal_estilos = `
+'width: 85%; max-width: 600px;' display: block;
+'background: #fff; padding: 15px;' width: 85%;
+'border-radius: 5px;' max-width: 600px;
+'-webkit-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);' background: #fff;
+'-moz-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);' padding: 15px;
+'box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);' border-radius: 5px;
+'position: fixed;' -webkit-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);
+'top: 50%; left: 50%;' -moz-box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);
+'transform: translate(-50%,-50%);' box-shadow: 0px 6px 14px -2px rgba(0,0,0,0.75);
+'z-index: 99999999; text-align: center'; position: fixed;
top: 50%;
var fundo_modal_estilos = 'top: 0; right: 0;' left: 50%;
+'bottom: 0; left: 0; position: fixed;' transform: translate(-50%,-50%);
+'background-color: rgba(0, 0, 0, 0.6); z-index: 99999999;' z-index: 99999999;
+'display: none;'; text-align: center;
`;
var meu_modal = '<div id="fundo_modal" style="'+fundo_modal_estilos+'">'
+'<div id="meu_modal" style="'+modal_estilos+'">' var fundo_modal_estilos = `
+'<h2>Atenção! Ano de apresentação e ano da norma são diferentes.</h2><br />' top: 0;
+'<button id="close_model_btn" type="button" class="btn btn-warning" data-dismiss="modal">' right: 0;
+'Compreendo e quero continuar</button>' bottom: 0;
+'</div></div>'; left: 0;
position: fixed;
background-color: rgba(0, 0, 0, 0.6);
z-index: 99999999;
display: none;
`;
var meu_modal = `
<div id="fundo_modal" style="${fundo_modal_estilos}">
<div id="meu_modal" style="${modal_estilos}">
<h2>Atenção! Ano de apresentação e ano da norma são diferentes.</h2><br />
<button id="close_model_btn" type="button" class="btn btn-warning" data-dismiss="modal">
Compreendo e quero continuar
</button>
</div>
</div>
`;
const confirmacao_mudanca_ementa_indexacao = `
<div id="id_fundo_confirmacao_mudanca_ementa_indexacao" style="${fundo_modal_estilos}">
<div id="id_confirmacao_mudanca_ementa_indexacao" style="${modal_estilos}">
<h3>Houve à mudança de Matéria vinculada a norma.</h3>
<h3>Deseja atualizar a Ementa e a Indexação com a nova Matéria?</h3><br/>
<button type="submit" id="id_sim_mudanca_ementa_indexacao" class="btn btn-primary">Sim</button>
<button type="button" id="id_nao_mudanca_ementa_indexacao" class="btn btn-secondary" data-dismiss="modal">Não</button>
</div>
</div>
`;
function verifica_ano(){ function verifica_ano(){
let ano = $("select#id_ano.select").val(); let ano = $("select#id_ano.select").val();
@ -93,7 +123,7 @@
} }
$(document).ready(function() { $(document).ready(function() {
$("body").append(meu_modal); $("body").append(meu_modal, confirmacao_mudanca_ementa_indexacao);
$("#fundo_modal, #close_model_btn").click(function(){ $("#fundo_modal").hide(); }); $("#fundo_modal, #close_model_btn").click(function(){ $("#fundo_modal").hide(); });
$("#meu_modal").click(function(e){ e.stopPropagation(); }); $("#meu_modal").click(function(e){ e.stopPropagation(); });

3
sapl/templates/relatorios/blocos_sessao_plenaria/materias_expediente.html

@ -16,6 +16,9 @@
<dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt> <dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt>
<dt style="text-align: left;"><b>Turno:</b> {{materia.des_turno}}</dt> <dt style="text-align: left;"><b>Turno:</b> {{materia.des_turno}}</dt>
<dt style="text-align: left;"><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt> <dt style="text-align: left;"><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt>
{% if materia.situacao %}
<dt style="text-align: left;"><b>Situação: </b>{{materia.situacao}}</dt>
{% endif %}
</dl> </dl>
</td> </td>
<td style="width:60%"><div style="margin:10px">{{materia.txt_ementa}}</div></td> <td style="width:60%"><div style="margin:10px">{{materia.txt_ementa}}</div></td>

3
sapl/templates/relatorios/blocos_sessao_plenaria/materias_ordemdia.html

@ -16,6 +16,9 @@
<dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt> <dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt>
<dt style="text-align: left;"><b>Turno:</b> {{materia.des_turno}}</dt> <dt style="text-align: left;"><b>Turno:</b> {{materia.des_turno}}</dt>
<dt style="text-align: left;"><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt> <dt style="text-align: left;"><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt>
{% if materia.situacao %}
<dt style="text-align: left;"><b>Situação: </b>{{materia.situacao}}</dt>
{% endif %}
</dl> </dl>
</td> </td>
<td style="width:60%">{{materia.txt_ementa}}</td> <td style="width:60%">{{materia.txt_ementa}}</td>

40
sapl/templates/relatorios/etiqueta_materia_legislativa.html

@ -0,0 +1,40 @@
{% load i18n %}
{% load crispy_forms_tags %}
{% load common_tags %}
{% load static %}
<head>
<style>
@page{
margin: 0cm
}
div {page-break-inside: avoid;}
p {
font-size:4pt;
margin: 5px;
font-family: Georgia, Times, "Times New Roman";
}
img {
position: absolute;
bottom:0px;
left: 0px;
padding:10px;
height: 20px;
width: 90%;
}
</style>
</head>
<body>
<div>
<p><strong>Materia Legislativa - {{numero}}/{{ano}}</strong></p>
<p>Tipo: {{tipo.sigla}} - {{tipo.descricao}}</p>
<p>Data: {{data_apresentacao}}</p>
<p>Ementa: {{ementa}}</p>
<img src="{{barcode}}">
</div>
</body>

3
sapl/templates/sessao/blocos_ata/materias_expediente.html

@ -15,6 +15,9 @@
{% if m.turno %} {% if m.turno %}
Turno: {{m.turno}}, Turno: {{m.turno}},
{% endif %} {% endif %}
{% if m.situacao %}
Situação: {{m.situacao}},
{% endif %}
{% if m.tipo_votacao %} {% if m.tipo_votacao %}
Tipo: {{m.tipo_votacao}}, Tipo: {{m.tipo_votacao}},
Sim: {{ m.voto_sim }}, Sim: {{ m.voto_sim }},

3
sapl/templates/sessao/blocos_ata/materias_ordem_dia.html

@ -15,6 +15,9 @@
{% if m.turno %} {% if m.turno %}
Turno: {{m.turno}}, Turno: {{m.turno}},
{% endif %} {% endif %}
{% if m.situacao %}
Situação: {{m.situacao}},
{% endif %}
{% if m.tipo_votacao %} {% if m.tipo_votacao %}
Tipo: {{m.tipo_votacao}}, Tipo: {{m.tipo_votacao}},
Sim: {{ m.voto_sim }}, Sim: {{ m.voto_sim }},

5
sapl/templates/sessao/blocos_resumo/materias_expediente.html

@ -34,6 +34,11 @@
<br /> <br />
<b>Processo:</b> {{ m.numero_processo }} <b>Processo:</b> {{ m.numero_processo }}
{% endif %} {% endif %}
{% if m.situacao %}
<br />
<b>Situação:</b> {{ m.situacao }}
{% endif %}
</td> </td>
<td> <td>
{{m.ementa|dont_break_out}}<br/> {{m.ementa|dont_break_out}}<br/>

5
sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html

@ -35,6 +35,11 @@
<br /> <br />
<b>Processo:</b> {{ m.numero_processo }} <b>Processo:</b> {{ m.numero_processo }}
{% endif %} {% endif %}
{% if m.situacao %}
<br />
<b>Situação:</b> {{ m.situacao }}
{% endif %}
</td> </td>
<td>{{m.ementa|dont_break_out}}</b><br/>{{m.observacao|dont_break_out}}</td> <td>{{m.ementa|dont_break_out}}</b><br/>{{m.observacao|dont_break_out}}</td>
<td><b>{{m.resultado}}</b><br/>{{m.resultado_observacao}}</td> <td><b>{{m.resultado}}</b><br/>{{m.resultado_observacao}}</td>

17
sapl/templates/sessao/oradores_create.html

@ -0,0 +1,17 @@
{% extends "crud/form.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% load common_tags %}
{% block extra_js %}
<script type="text/javascript" >
$(document).ready(function(){
if("{{ultima_ordem}}" != "None"){
$("#id_numero_ordem").val({{ultima_ordem}}+1);
}
else{
$("#id_numero_ordem").val(1);
}
});
</script>
{% endblock extra_js %}
Loading…
Cancel
Save