diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
index 33f4d3b26..e5caec886 100644
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -2396,3 +2396,72 @@ class ExcluirTramitacaoEmLote(forms.Form):
form_actions(label='Excluir')
)
)
+
+
+class MateriaPesquisaSimplesForm(forms.Form):
+ tipo_materia = forms.ModelChoiceField(
+ label=TipoMateriaLegislativa._meta.verbose_name,
+ queryset=TipoMateriaLegislativa.objects.all(),
+ required=False,
+ empty_label='Selecione')
+
+ data_inicial = forms.DateField(
+ label='Data Inicial',
+ required=False,
+ widget=forms.DateInput(format='%d/%m/%Y')
+ )
+
+ data_final = forms.DateField(
+ label='Data Final',
+ required=False,
+ widget=forms.DateInput(format='%d/%m/%Y')
+ )
+
+ titulo = forms.CharField(
+ label='Título do Relatório',
+ required=False,
+ max_length=150)
+
+ logger = logging.getLogger(__name__)
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ row1 = to_row(
+ [('tipo_materia', 6),
+ ('data_inicial', 3),
+ ('data_final', 3)])
+
+ row2 = to_row(
+ [('titulo', 12)])
+
+ self.helper = SaplFormHelper()
+ self.helper.layout = Layout(
+ Fieldset(
+ 'Índice de Materias',
+ row1, row2,
+ form_actions(label='Pesquisar')
+ )
+ )
+
+ def clean(self):
+ super().clean()
+
+ if not self.is_valid():
+ return self.cleaned_data
+
+ cleaned_data = self.cleaned_data
+ data_inicial = cleaned_data['data_inicial']
+ data_final = cleaned_data['data_final']
+
+ if data_inicial or data_final:
+ if not (data_inicial and data_final):
+ self.logger.error("Caso pesquise por data, os campos de Data Inicial e "
+ "Data Final devem ser preenchidos obrigatoriamente")
+ raise ValidationError(_('Caso pesquise por data, os campos de Data Inicial e '
+ 'Data Final devem ser preenchidos obrigatoriamente'))
+ elif data_inicial > data_final:
+ self.logger.error("Data Final ({}) menor que a Data Inicial ({}).".format(data_final, data_inicial))
+ raise ValidationError(_('A Data Final não pode ser menor que a Data Inicial'))
+
+ return cleaned_data
diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py
index aea49d89d..962dc2cff 100644
--- a/sapl/materia/urls.py
+++ b/sapl/materia/urls.py
@@ -25,7 +25,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
TipoProposicaoCrud, TramitacaoCrud,
TramitacaoEmLoteView, UnidadeTramitacaoCrud,
proposicao_texto, recuperar_materia,
- ExcluirTramitacaoEmLoteView, RetornarProposicao)
+ ExcluirTramitacaoEmLoteView, RetornarProposicao,
+ MateriaPesquisaSimplesView)
from sapl.norma.views import NormaPesquisaSimplesView
from sapl.protocoloadm.views import (FichaPesquisaAdmView, FichaSelecionaAdmView)
@@ -49,6 +50,9 @@ urlpatterns_impressos = [
url(r'^materia/impressos/norma-pesquisa/$',
NormaPesquisaSimplesView.as_view(),
name='impressos_norma_pesquisa'),
+ url(r'^materia/impressos/materia-pesquisa/$',
+ MateriaPesquisaSimplesView.as_view(),
+ name='impressos_materia_pesquisa'),
url(r'^materia/impressos/ficha-pesquisa-adm/$',
FichaPesquisaAdmView.as_view(),
name= 'impressos_ficha_pesquisa_adm'),
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
index b08368db8..d5be4770d 100644
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -41,7 +41,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm,
ConfirmarProposicaoForm,
DevolverProposicaoForm, LegislacaoCitadaForm,
OrgaoForm, ProposicaoForm, TipoProposicaoForm,
- TramitacaoForm, TramitacaoUpdateForm)
+ TramitacaoForm, TramitacaoUpdateForm, MateriaPesquisaSimplesForm)
from sapl.norma.models import LegislacaoCitada
from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo
@@ -2291,13 +2291,10 @@ class ImpressosView(PermissionRequiredMixin, TemplateView):
def gerar_pdf_impressos(request, context, template_name):
template = loader.get_template(template_name)
html = template.render(context, request)
-
- pdf = weasyprint.HTML(string=html, base_url=request.build_absolute_uri()
- ).write_pdf()
+ pdf = weasyprint.HTML(string=html, base_url=request.build_absolute_uri()).write_pdf()
response = HttpResponse(pdf, content_type='application/pdf')
- response['Content-Disposition'] = (
- 'inline; filename="relatorio_impressos.pdf"')
+ response['Content-Disposition'] = 'inline; filename="relatorio_impressos.pdf"'
response['Content-Transfer-Encoding'] = 'binary'
return response
@@ -2305,7 +2302,7 @@ def gerar_pdf_impressos(request, context, template_name):
class EtiquetaPesquisaView(PermissionRequiredMixin, FormView):
form_class = EtiquetaPesquisaForm
- template_name = 'materia/impressos/etiqueta.html'
+ template_name = 'materia/impressos/impressos_form.html'
permission_required = ('materia.can_access_impressos', )
def form_valid(self, form):
@@ -2346,7 +2343,7 @@ class EtiquetaPesquisaView(PermissionRequiredMixin, FormView):
class FichaPesquisaView(PermissionRequiredMixin, FormView):
form_class = FichaPesquisaForm
- template_name = 'materia/impressos/ficha.html'
+ template_name = 'materia/impressos/impressos_form.html'
permission_required = ('materia.can_access_impressos', )
def form_valid(self, form):
@@ -2364,7 +2361,7 @@ class FichaPesquisaView(PermissionRequiredMixin, FormView):
class FichaSelecionaView(PermissionRequiredMixin, FormView):
logger = logging.getLogger(__name__)
form_class = FichaSelecionaForm
- template_name = 'materia/impressos/ficha_seleciona.html'
+ template_name = 'materia/impressos/impressos_form.html'
permission_required = ('materia.can_access_impressos', )
def get_context_data(self, **kwargs):
@@ -2461,3 +2458,31 @@ class ExcluirTramitacaoEmLoteView(PermissionRequiredMixin, FormView):
tramitacao.delete()
return redirect(self.get_success_url())
+
+
+class MateriaPesquisaSimplesView(PermissionRequiredMixin, FormView):
+ form_class = MateriaPesquisaSimplesForm
+ template_name = 'materia/impressos/impressos_form.html'
+ permission_required = ('materia.can_access_impressos', )
+
+ def form_valid(self, form):
+ template_materia = 'materia/impressos/materias_pdf.html'
+
+ kwargs = {}
+ if form.cleaned_data.get('tipo_materia'):
+ kwargs.update({'tipo': form.cleaned_data['tipo_materia']})
+
+ if form.cleaned_data.get('data_inicial'):
+ kwargs.update({'data__gte': form.cleaned_data['data_inicial'],
+ 'data__lte': form.cleaned_data['data_final']})
+
+ materias = MateriaLegislativa.objects.filter(**kwargs).order_by('-numero', 'ano')
+
+ quantidade_materias = materias.count()
+ materias = materias[:2000] if quantidade_materias > 2000 else materias
+
+ context = {'quantidade': quantidade_materias,
+ 'titulo': form.cleaned_data['titulo'],
+ 'materias': materias}
+
+ return gerar_pdf_impressos(self.request, context, template_materia)
diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py
index 5f5e0aa37..12eee547f 100644
--- a/sapl/norma/forms.py
+++ b/sapl/norma/forms.py
@@ -392,7 +392,7 @@ class NormaPesquisaSimplesForm(forms.Form):
logger = logging.getLogger(__name__)
def __init__(self, *args, **kwargs):
- super(NormaPesquisaSimplesForm, self).__init__(*args, **kwargs)
+ super().__init__(*args, **kwargs)
row1 = to_row(
[('tipo_norma', 6),
@@ -405,36 +405,30 @@ class NormaPesquisaSimplesForm(forms.Form):
self.helper = SaplFormHelper()
self.helper.layout = Layout(
Fieldset(
- ('Índice de Normas'),
+ 'Índice de Normas',
row1, row2,
form_actions(label='Pesquisar')
)
)
def clean(self):
- super(NormaPesquisaSimplesForm, self).clean()
+ super().clean()
if not self.is_valid():
return self.cleaned_data
cleaned_data = self.cleaned_data
-
data_inicial = cleaned_data['data_inicial']
data_final = cleaned_data['data_final']
- if (data_inicial and data_final and
- data_inicial > data_final):
- self.logger.error("Data Final ({}) menor que a Data Inicial ({}).".format(
- data_final, data_inicial))
- raise ValidationError(_(
- 'A Data Final não pode ser menor que a Data Inicial'))
- else:
- condicao1 = data_inicial and not data_final
- condicao2 = not data_inicial and data_final
- if condicao1 or condicao2:
+ if data_inicial or data_final:
+ if not(data_inicial and data_final):
self.logger.error("Caso pesquise por data, os campos de Data Inicial e "
"Data Final devem ser preenchidos obrigatoriamente")
- raise ValidationError(_('Caso pesquise por data, os campos de Data Inicial e ' +
+ raise ValidationError(_('Caso pesquise por data, os campos de Data Inicial e '
'Data Final devem ser preenchidos obrigatoriamente'))
+ elif data_inicial > data_final:
+ self.logger.error("Data Final ({}) menor que a Data Inicial ({}).".format(data_final, data_inicial))
+ raise ValidationError(_('A Data Final não pode ser menor que a Data Inicial'))
return cleaned_data
diff --git a/sapl/norma/views.py b/sapl/norma/views.py
index 1d0f9b28e..336c16933 100644
--- a/sapl/norma/views.py
+++ b/sapl/norma/views.py
@@ -345,12 +345,10 @@ class ImpressosView(PermissionRequiredMixin, TemplateView):
def gerar_pdf_impressos(request, context, template_name):
template = loader.get_template(template_name)
html = template.render(context, request)
- pdf = weasyprint.HTML(string=html, base_url=request.build_absolute_uri()
- ).write_pdf()
+ pdf = weasyprint.HTML(string=html, base_url=request.build_absolute_uri()).write_pdf()
response = HttpResponse(pdf, content_type='application/pdf')
- response['Content-Disposition'] = (
- 'inline; filename="relatorio_impressos.pdf"')
+ response['Content-Disposition'] = 'inline; filename="relatorio_impressos.pdf"'
response['Content-Transfer-Encoding'] = 'binary'
return response
@@ -358,29 +356,28 @@ def gerar_pdf_impressos(request, context, template_name):
class NormaPesquisaSimplesView(PermissionRequiredMixin, FormView):
form_class = NormaPesquisaSimplesForm
- template_name = 'materia/impressos/norma.html'
+ template_name = 'materia/impressos/impressos_form.html'
permission_required = ('materia.can_access_impressos', )
def form_valid(self, form):
- normas = NormaJuridica.objects.all().order_by(
- 'numero')
template_norma = 'materia/impressos/normas_pdf.html'
titulo = form.cleaned_data['titulo']
- if form.cleaned_data['tipo_norma']:
- normas = normas.filter(tipo=form.cleaned_data['tipo_norma'])
+ kwargs = {}
+ if form.cleaned_data.get('tipo_norma'):
+ kwargs.update({'tipo': form.cleaned_data['tipo_norma']})
- if form.cleaned_data['data_inicial']:
- normas = normas.filter(
- data__gte=form.cleaned_data['data_inicial'],
- data__lte=form.cleaned_data['data_final'])
+ if form.cleaned_data.get('data_inicial'):
+ kwargs.update({'data__gte': form.cleaned_data['data_inicial'],
+ 'data__lte': form.cleaned_data['data_final']})
- qtd_resultados = len(normas)
- if qtd_resultados > 2000:
- normas = normas[:2000]
+ normas = NormaJuridica.objects.filter(**kwargs).order_by('-numero', 'ano')
- context = {'quantidade': qtd_resultados,
+ quantidade_normas = normas.count()
+ normas = normas[:2000] if quantidade_normas > 2000 else normas
+
+ context = {'quantidade': quantidade_normas,
'titulo': titulo,
'normas': normas}
diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py
index c232ce265..c40a905ea 100755
--- a/sapl/protocoloadm/views.py
+++ b/sapl/protocoloadm/views.py
@@ -1152,7 +1152,7 @@ class ImpressosView(PermissionRequiredMixin, TemplateView):
class FichaPesquisaAdmView(PermissionRequiredMixin, FormView):
form_class = FichaPesquisaAdmForm
- template_name = 'materia/impressos/ficha.html'
+ template_name = 'materia/impressos/impressos_form.html'
permission_required = ('materia.can_access_impressos', )
def form_valid(self, form):
@@ -1170,7 +1170,7 @@ class FichaPesquisaAdmView(PermissionRequiredMixin, FormView):
class FichaSelecionaAdmView(PermissionRequiredMixin, FormView):
logger = logging.getLogger(__name__)
form_class = FichaSelecionaAdmForm
- template_name = 'materia/impressos/ficha_seleciona.html'
+ template_name = 'materia/impressos/impressos_form.html'
permission_required = ('materia.can_access_impressos', )
def get_context_data(self, **kwargs):
diff --git a/sapl/templates/materia/impressos/ficha.html b/sapl/templates/materia/impressos/ficha.html
deleted file mode 100644
index 03d1c8580..000000000
--- a/sapl/templates/materia/impressos/ficha.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% extends "crud/form.html" %}
-{% load i18n crispy_forms_tags %}
-
-{% block base_content %}
-
- {% crispy form %}
-{% endblock base_content %}
diff --git a/sapl/templates/materia/impressos/ficha_seleciona.html b/sapl/templates/materia/impressos/ficha_seleciona.html
deleted file mode 100644
index 818b7c3a3..000000000
--- a/sapl/templates/materia/impressos/ficha_seleciona.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{% extends "crud/form.html" %}
-{% load i18n crispy_forms_tags %}
-
-{% block base_content %}
- {% crispy form %}
-{% endblock base_content %}
diff --git a/sapl/templates/materia/impressos/impressos.html b/sapl/templates/materia/impressos/impressos.html
index 5f6001027..2191a8c80 100644
--- a/sapl/templates/materia/impressos/impressos.html
+++ b/sapl/templates/materia/impressos/impressos.html
@@ -1,45 +1,29 @@
{% extends "crud/detail.html" %}
{% load i18n %}
-
-
-{% block actions %}
-{% endblock %}
-
-
{% block detail_content %}
-
-
-
-
-Etiqueta
-
-
-
-Capa Processo
-
-
-Índice de Normas Jurídicas
-
-
-Capa Documento Administrativo
-
-
-{#Guia de Remessa
#}
-{# #}
-{##}
-{#Espelho
#}
-{# #}
-
+
{% endblock %}
diff --git a/sapl/templates/materia/impressos/etiqueta.html b/sapl/templates/materia/impressos/impressos_form.html
similarity index 100%
rename from sapl/templates/materia/impressos/etiqueta.html
rename to sapl/templates/materia/impressos/impressos_form.html
diff --git a/sapl/templates/materia/impressos/materias_pdf.html b/sapl/templates/materia/impressos/materias_pdf.html
new file mode 100644
index 000000000..71e59277e
--- /dev/null
+++ b/sapl/templates/materia/impressos/materias_pdf.html
@@ -0,0 +1,67 @@
+
+
+
+ Impressos
+
+
+
+ {% if titulo %}
+
+ {{ titulo }}
+
+ {% endif %}
+
+ {% if quantidade > 2000 %}
+
+
Sua pesquisa retornou mais do que 2000 impressos.
+ Por questões de performance, foram retornados apenas os primeiros 2000 resultados.
+
+ {% endif %}
+
+
+
+
+ | Tipo, Número e Data |
+ Ementa |
+
+
+
+ {% for materia in materias %}
+
+ |
+ {{ materia.tipo }} nº {{ materia.numero }}, de {{ materia.ano }}
+ |
+
+ {{ materia.ementa }}
+ |
+
+ {% endfor %}
+
+
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/materia/impressos/norma.html b/sapl/templates/materia/impressos/norma.html
deleted file mode 100644
index 03d1c8580..000000000
--- a/sapl/templates/materia/impressos/norma.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% extends "crud/form.html" %}
-{% load i18n crispy_forms_tags %}
-
-{% block base_content %}
-
- {% crispy form %}
-{% endblock base_content %}
diff --git a/sapl/templates/materia/impressos/normas_pdf.html b/sapl/templates/materia/impressos/normas_pdf.html
index 4c0509168..ebd201d98 100644
--- a/sapl/templates/materia/impressos/normas_pdf.html
+++ b/sapl/templates/materia/impressos/normas_pdf.html
@@ -1,52 +1,67 @@
+
+ Impressos
+
+
+
+ {% if titulo %}
+
+ {{ titulo }}
+
+ {% endif %}
-
- Impressos
-
-
+ {% if quantidade > 2000 %}
+
+
Sua pesquisa retornou mais do que 2000 impressos.
+ Por questões de performance, foram retornados apenas os primeiros 2000 resultados.
+
+ {% endif %}
-
-
-
-
-{% if quantidade > 2000 %}
- Sua pesquisa retornou mais do que 2000 impressos.
Por questões de performance, foram retornados apenas os 2000 primeiros.
-
-{% endif %}
-
-
-
{{titulo}} |
-
-
-
-
-{% for m in normas %}
-
-
- | {{m.tipo}} nº {{m.numero}}, de {{m.data|date:"d/m/Y" }}
- |
-
- |
- {{m.ementa}}
- |
-
-
-
-
-{% endfor %}
-
-
-
-
+
+
+
+ | Tipo, Número e Data |
+ Ementa |
+
+
+
+ {% for norma in normas %}
+
+ |
+ {{ norma.tipo }} nº {{ norma.numero }}, de {{ norma.data|date:"d/m/Y" }}
+ |
+
+ {{ norma.ementa }}
+ |
+
+ {% endfor %}
+
+
+
+
+
\ No newline at end of file