Browse Source

Fix #2599 (#2601)

Atualiza layout

Corrige ordem

Centraliza htmls de impressos form

Corrige formatação

Corrige formatações e variáveis

Corrige condições

Adiciona MateriaPesquisaSimplesForm

Adiciona MateriaPesquisaSimplesView

Adiciona html de materias pdf

Adiciona pesquisa de índice de matéria

Corrige variáveis

Corrige queryset

Corrige queryset

Altera ordenação das matérias

Corrige verificação de existencia de chave no dicionário
pull/2579/head
Vinícius Cantuária 6 years ago
committed by Edward
parent
commit
cf1fda6054
  1. 69
      sapl/materia/forms.py
  2. 6
      sapl/materia/urls.py
  3. 43
      sapl/materia/views.py
  4. 24
      sapl/norma/forms.py
  5. 31
      sapl/norma/views.py
  6. 4
      sapl/protocoloadm/views.py
  7. 7
      sapl/templates/materia/impressos/ficha.html
  8. 6
      sapl/templates/materia/impressos/ficha_seleciona.html
  9. 64
      sapl/templates/materia/impressos/impressos.html
  10. 0
      sapl/templates/materia/impressos/impressos_form.html
  11. 67
      sapl/templates/materia/impressos/materias_pdf.html
  12. 7
      sapl/templates/materia/impressos/norma.html
  13. 85
      sapl/templates/materia/impressos/normas_pdf.html

69
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

6
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'),

43
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)

24
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

31
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}

4
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):

7
sapl/templates/materia/impressos/ficha.html

@ -1,7 +0,0 @@
{% extends "crud/form.html" %}
{% load i18n crispy_forms_tags %}
{% block base_content %}
<h1 class="page-header">Impressos</h1>
{% crispy form %}
{% endblock base_content %}

6
sapl/templates/materia/impressos/ficha_seleciona.html

@ -1,6 +0,0 @@
{% extends "crud/form.html" %}
{% load i18n crispy_forms_tags %}
{% block base_content %}
{% crispy form %}
{% endblock base_content %}

64
sapl/templates/materia/impressos/impressos.html

@ -1,45 +1,29 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% block actions %}
{% endblock %}
{% block detail_content %}
<div class="container-table">
<h1 class="page-header">Impressos</h1>
</br>
<h2 class="legend">Etiqueta</h2>
<ul>
<li><a href="{% url 'sapl.materia:impressos_etiqueta' %}">Pesquisar</a></li>
</ul>
</br>
<h2 class="legend">Capa Processo</h2>
<ul>
<li><a href="{% url 'sapl.materia:impressos_ficha_pesquisa' %}">Pesquisar</a></li>
</ul>
</br>
<h2 class="legend">Índice de Normas Jurídicas</h2>
<ul>
<li><a href="{% url 'sapl.materia:impressos_norma_pesquisa' %}">Pesquisar</a></li>
</ul>
</br>
<h2 class="legend">Capa Documento Administrativo</h2>
<ul>
<li><a href="{% url 'sapl.materia:impressos_ficha_pesquisa_adm' %}">Pesquisar</a></li>
</ul>
{#<h2 class="legend">Guia de Remessa</h2>#}
{# <ul>#}
{# <li><a href="{% url 'sapl.materia:impressos_guiaremessa' %}">Pesquisar</a></li>#}
{# </ul>#}
{##}
{#<h2 class="legend">Espelho</h2>#}
{# <ul>#}
{# <li><a href="{% url 'sapl.materia:impressos_espelho' %}">Pesquisar</a></li>#}
{# </ul>#}
<table class="table table-striped table-hover table-link-ordering">
<tr>
<th>Capa Documento Administrativo</th>
<td><a href="{% url 'sapl.materia:impressos_ficha_pesquisa_adm' %}">Pesquisar</a></td>
</tr>
<tr>
<th>Capa Processo</th>
<td><a href="{% url 'sapl.materia:impressos_ficha_pesquisa' %}">Pesquisar</a></td>
</tr>
<tr>
<th>Etiqueta</th>
<td><a href="{% url 'sapl.materia:impressos_etiqueta' %}">Pesquisar</a></td>
</tr>
<tr>
<th>Índice de Matérias Legislativas</th>
<td><a href="{% url 'sapl.materia:impressos_materia_pesquisa' %}">Pesquisar</a></td>
</tr>
<tr>
<th>Índice de Normas Jurídicas</th>
<td><a href="{% url 'sapl.materia:impressos_norma_pesquisa' %}">Pesquisar</a></td>
</tr>
</table>
</div>
{% endblock %}

0
sapl/templates/materia/impressos/etiqueta.html → sapl/templates/materia/impressos/impressos_form.html

67
sapl/templates/materia/impressos/materias_pdf.html

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<title>Impressos</title>
<meta charset="utf-8">
</head>
<body id="corpo">
{% if titulo %}
<div id="titulo">
<strong class="text_pdf">{{ titulo }}</strong>
</div>
{% endif %}
{% if quantidade > 2000 %}
<div>
<p class="alert_message"><b>Sua pesquisa retornou mais do que 2000 impressos.<br>
Por questões de performance, foram retornados apenas os primeiros 2000 resultados.</b></p>
</div>
{% endif %}
<table>
<thead>
<tr>
<th>Tipo, Número e Data</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for materia in materias %}
<tr>
<td id="tipo_numero_data">
<span class="text_pdf">{{ materia.tipo }} nº {{ materia.numero }}, de {{ materia.ano }}</span>
</td>
<td id="ementa">
<span class="text_pdf">{{ materia.ementa }}</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
<style type="text/css">
.text_pdf {
font-family: arial;
font-size: 70%;
}
#titulo {
font-size: xx-large;
text-align: center;
vertical-align:top;
}
#corpo {
margin-left:10px;
margin-right:-50px;
margin-top: -50px;
text-align: justify;
}
#tipo_numero_data {
width:200px;
vertical-align:top;
}
#ementa {
width:440px;
vertical-align:top;
}
</style>
</html>

7
sapl/templates/materia/impressos/norma.html

@ -1,7 +0,0 @@
{% extends "crud/form.html" %}
{% load i18n crispy_forms_tags %}
{% block base_content %}
<h1 class="page-header">Impressos</h1>
{% crispy form %}
{% endblock base_content %}

85
sapl/templates/materia/impressos/normas_pdf.html

@ -1,52 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<title>Impressos</title>
<meta charset="utf-8">
</head>
<style type="text/css">
.text_pdf{
font-family: arial;
font-size: 70%;
}
#titulo
{
font-size: xx-large;
text-align: center;
}
</style>
<body style="margin-left:10px;margin-right:-50px; margin-top: -50px; text-align: justify">
{% if quantidade > 2000 %}
<b><p class="alert_message">Sua pesquisa retornou mais do que 2000 impressos.</p><p class="alert_message">Por questões de performance, foram retornados apenas os 2000 primeiros.</p></b>
</br></br></br>
{% endif %}
<body id="corpo">
{% if titulo %}
<div id="titulo">
<td vertical-align:top;"><strong class="text_pdf">{{titulo}}</strong></td>
<strong class="text_pdf">{{ titulo }}</strong>
</div>
</br>
{% endif %}
{% if quantidade > 2000 %}
<div>
<p class="alert_message"><b>Sua pesquisa retornou mais do que 2000 impressos.<br>
Por questões de performance, foram retornados apenas os primeiros 2000 resultados.</b></p>
</div>
{% endif %}
{% for m in normas %}
<table>
<thead>
<tr>
<td style="width:200px; vertical-align:top;"><span class="text_pdf"> {{m.tipo}} nº </span><span class="text_pdf"> {{m.numero}}, de {{m.data|date:"d/m/Y" }} </span>
</td>
<td>
<th>Tipo, Número e Data</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for norma in normas %}
<tr>
<td id="tipo_numero_data">
<span class="text_pdf">{{ norma.tipo }} nº {{ norma.numero }}, de {{ norma.data|date:"d/m/Y" }}</span>
</td>
<td style="width:440px; vertical-align:top;"><span class="text_pdf">{{m.ementa}}</span>
<td id="ementa">
<span class="text_pdf">{{ norma.ementa }}</span>
</td>
</tr>
</table>
</br>
{% endfor %}
</tbody>
</table>
</body>
<style type="text/css">
.text_pdf {
font-family: arial;
font-size: 70%;
}
#titulo {
font-size: xx-large;
text-align: center;
vertical-align:top;
}
#corpo {
margin-left:10px;
margin-right:-50px;
margin-top: -50px;
text-align: justify;
}
#tipo_numero_data {
width:200px;
vertical-align:top;
}
#ementa {
width:440px;
vertical-align:top;
}
</style>
</html>
Loading…
Cancel
Save