Browse Source

cria impresso de indice de normas

pull/1625/head
DTILegBG 8 years ago
parent
commit
b191431598
  1. 13
      sapl/materia/urls.py
  2. 58
      sapl/norma/forms.py
  3. 56
      sapl/norma/views.py
  4. 10
      sapl/templates/materia/impressos/impressos.html

13
sapl/materia/urls.py

@ -25,23 +25,28 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
TramitacaoEmLoteView, UnidadeTramitacaoCrud,
proposicao_texto, recuperar_materia)
from sapl.norma.views import NormaPesquisaView
from .apps import AppConfig
app_name = AppConfig.name
urlpatterns_impressos = [
url(r'^materia/impressos/$',
url(r'^relatorios/impressos/$',
ImpressosView.as_view(),
name='impressos'),
url(r'^materia/impressos/etiqueta-pesquisa/$',
url(r'^relatorios/impressos/etiqueta-pesquisa/$',
EtiquetaPesquisaView.as_view(),
name='impressos_etiqueta'),
url(r'^materia/impressos/ficha-pesquisa/$',
url(r'^relatorios/impressos/ficha-pesquisa/$',
FichaPesquisaView.as_view(),
name='impressos_ficha_pesquisa'),
url(r'^materia/impressos/ficha-seleciona/$',
url(r'^relatorios/impressos/ficha-seleciona/$',
FichaSelecionaView.as_view(),
name='impressos_ficha_seleciona'),
url(r'^relatorios/impressos/norma-pesquisa/$',
NormaPesquisaView.as_view(),
name='impressos_norma_pesquisa'),
]
urlpatterns_materia = [

58
sapl/norma/forms.py

@ -208,3 +208,61 @@ class NormaRelacionadaForm(ModelForm):
relacionada.norma_relacionada = self.cleaned_data['norma_relacionada']
relacionada.save()
return relacionada
class NormaPesquisaForm(forms.Form):
tipo_norma = forms.ModelChoiceField(
label=TipoNormaJuridica._meta.verbose_name,
queryset=TipoNormaJuridica.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')
)
def __init__(self, *args, **kwargs):
super(NormaPesquisaForm, self).__init__(*args, **kwargs)
row1 = to_row(
[('tipo_norma', 6),
('data_inicial', 3),
('data_final', 3)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
('Índice de Normas'),
row1,
form_actions(label='Pesquisar')
)
)
def clean(self):
cleaned_data = self.cleaned_data
# Verifica se algum campo de data foi preenchido
if cleaned_data['data_inicial'] or cleaned_data['data_final']:
# Então verifica se o usuário preencheu o Incial e mas não
# preencheu o Final, ou vice-versa
if (not cleaned_data['data_inicial'] or
not cleaned_data['data_final']):
raise ValidationError(_(
'Caso pesquise por data, os campos de Data Incial e ' +
'Data Final devem ser preenchidos obrigatoriamente'))
# Caso tenha preenchido, verifica se a data final é maior que
# a inicial
elif cleaned_data['data_final'] < cleaned_data['data_inicial']:
raise ValidationError(_(
'A Data Final não pode ser menor que a Data Inicial'))
return cleaned_data

56
sapl/norma/views.py

@ -6,6 +6,13 @@ from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import RedirectView
from django_filters.views import FilterView
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.http import HttpResponse, JsonResponse
from django.views.generic.edit import FormView
from django.views.generic import CreateView, ListView, TemplateView, UpdateView
from django.template import RequestContext, loader
import weasyprint
from sapl.base.models import AppConfig
from sapl.compilacao.views import IntegracaoTaView
@ -13,7 +20,7 @@ from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
MasterDetailCrud, make_pagination)
from sapl.utils import show_results_filter_set
from .forms import NormaFilterSet, NormaJuridicaForm, NormaRelacionadaForm
from .forms import NormaFilterSet, NormaJuridicaForm, NormaRelacionadaForm, NormaPesquisaForm
from .models import (AssuntoNorma, NormaJuridica, NormaRelacionada,
TipoNormaJuridica, TipoVinculoNormaJuridica)
@ -216,3 +223,50 @@ def recuperar_numero_norma(request):
{'numero': 1, 'ano': ano})
return response
class ImpressosView(PermissionRequiredMixin, TemplateView):
template_name = 'materia/impressos/impressos.html'
permission_required = ('materia.can_access_impressos', )
def gerar_pdf_impressos(request, context, template_name):
template = loader.get_template(template_name)
html = template.render(RequestContext(request, context))
response = HttpResponse(content_type="application/pdf")
weasyprint.HTML(
string=html,
base_url=request.build_absolute_uri()).write_pdf(
response)
return response
class NormaPesquisaView(PermissionRequiredMixin, FormView):
form_class = NormaPesquisaForm
template_name = 'materia/impressos/norma.html'
permission_required = ('materia.can_access_impressos', )
def form_valid(self, form):
context = {}
normas = NormaJuridica.objects.all()
if form.cleaned_data['tipo_norma']:
normas = normas.filter(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'])
context['quantidade'] = len(normas)
if context['quantidade'] > 2000:
normas = normas[:2000]
context['normas'] = normas
return gerar_pdf_impressos(self.request, context,
'materia/impressos/normas_pdf.html')

10
sapl/templates/materia/impressos/impressos.html

@ -10,15 +10,23 @@
<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>
<h2 class="legend">Ficha</h2>
</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>
{#<h2 class="legend">Guia de Remessa</h2>#}
{# <ul>#}

Loading…
Cancel
Save