Browse Source

Fix #1436

pull/1469/head
Mariana Mendes 8 years ago
parent
commit
fcaf94133d
  1. 26
      sapl/materia/forms.py
  2. 7
      sapl/materia/urls.py
  3. 89
      sapl/materia/views.py
  4. 82
      sapl/templates/materia/impressos/etiqueta_pdf.html
  5. 144
      sapl/templates/materia/impressos/ficha_pdf.html
  6. 6
      sapl/templates/materia/impressos/ficha_seleciona.html
  7. 2
      sapl/templates/materia/impressos/impressos.html

26
sapl/materia/forms.py

@ -1679,22 +1679,20 @@ class EtiquetaPesquisaForm(forms.Form):
return cleaned_data
class FichaPesquisaForm(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')
)
@ -1734,3 +1732,25 @@ class FichaPesquisaForm(forms.Form):
'A Data Final não pode ser menor que a Data Inicial'))
return cleaned_data
class FichaSelecionaForm(forms.Form):
materia = forms.ChoiceField(
widget=forms.RadioSelect,
choices=[(m.id, m.__str__()) for m in MateriaLegislativa.objects.all()],
label='')
def __init__(self, *args, **kwargs):
super(FichaSelecionaForm, self).__init__(*args, **kwargs)
row1 = to_row(
[('materia', 12)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
('Selecione a ficha que deseja imprimir'),
row1,
form_actions(save_label='Gerar Impresso')
)
)

7
sapl/materia/urls.py

@ -9,7 +9,7 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
DocumentoAcessorioCrud,
DocumentoAcessorioEmLoteView,
ImpressosView, EtiquetaPesquisaView,
FichaPesquisaView,
FichaPesquisaView, FichaSelecionaView,
LegislacaoCitadaCrud, MateriaAssuntoCrud,
MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView,
@ -38,7 +38,10 @@ urlpatterns_impressos = [
name='impressos_etiqueta'),
url(r'^materia/impressos/ficha-pesquisa/$',
FichaPesquisaView.as_view(),
name='impressos_ficha'),
name='impressos_ficha_pesquisa'),
url(r'^materia/impressos/ficha-seleciona/$',
FichaSelecionaView.as_view(),
name='impressos_ficha_seleciona'),
]
urlpatterns_materia = [

89
sapl/materia/views.py

@ -1,3 +1,4 @@
import datetime as dt_generator
from datetime import datetime
from random import choice
from string import ascii_letters, digits
@ -13,7 +14,7 @@ from django.core.urlresolvers import reverse
from django.http import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect
from django.template import RequestContext, loader
from django.template import loader, RequestContext
from django.utils import formats
from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, ListView, TemplateView, UpdateView
@ -47,7 +48,7 @@ from .email_utils import do_envia_email_confirmacao
from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
AdicionarVariasAutoriasFilterSet, DespachoInicialForm,
DocumentoAcessorioForm, EtiquetaPesquisaForm,
FichaPesquisaForm, MateriaAssuntoForm,
FichaPesquisaForm, FichaSelecionaForm, MateriaAssuntoForm,
MateriaLegislativaFilterSet, MateriaSimplificadaForm,
PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm,
RelatoriaForm, TramitacaoEmLoteFilterSet,
@ -1751,9 +1752,8 @@ class ImpressosView(PermissionRequiredMixin, TemplateView):
permission_required = ('materia.can_access_impressos', )
def gerar_pdf_impressos(request, context):
template = loader.get_template('materia/impressos/pdf.html',
'materia/impressos/ficha_pdf.html')
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(
@ -1797,7 +1797,9 @@ class EtiquetaPesquisaView(PermissionRequiredMixin, FormView):
context['materias'] = materias
return gerar_pdf_impressos(self.request, context)
return gerar_pdf_impressos(self.request, context,
'materia/impressos/etiqueta_pdf.html')
class FichaPesquisaView(PermissionRequiredMixin, FormView):
form_class = FichaPesquisaForm
@ -1805,24 +1807,73 @@ class FichaPesquisaView(PermissionRequiredMixin, FormView):
permission_required = ('materia.can_access_impressos', )
def form_valid(self, form):
context = {}
tipo_materia = form.data['tipo_materia']
data_inicial = form.data['data_inicial']
data_final = form.data['data_final']
materias = MateriaLegislativa.objects.all().order_by(
'-data_apresentacao')
url = reverse('sapl.materia:impressos_ficha_seleciona')
url = url + '?tipo=%s&data_inicial=%s&data_final=%s' % (
tipo_materia, data_inicial, data_final)
if form.cleaned_data['tipo_materia']:
materias = materias.filter(tipo=form.cleaned_data['tipo_materia'])
return HttpResponseRedirect(url)
if form.cleaned_data['data_inicial']:
materias = materias.filter(
data_apresentacao__gte=form.cleaned_data['data_inicial'],
data_apresentacao__lte=form.cleaned_data['data_final'])
class FichaSelecionaView(PermissionRequiredMixin, FormView):
form_class = FichaSelecionaForm
template_name = 'materia/impressos/ficha_seleciona.html'
permission_required = ('materia.can_access_impressos', )
context['quantidade'] = len(materias)
def string_to_datetime(self, date):
return dt_generator.date(
day=int(date[0]),
month=int(date[1]),
year=int(date[2]))
def get_context_data(self, **kwargs):
if ('tipo' not in self.request.GET or
'data_inicial' not in self.request.GET or
'data_final' not in self.request.GET):
return HttpResponseRedirect(reverse(
'sapl.materia:impressos_ficha_pesquisa'))
context = super(FichaSelecionaView, self).get_context_data(
**kwargs)
tipo = self.request.GET['tipo']
data_inicial = self.request.GET['data_inicial']
data_final = self.request.GET['data_final']
data_inicial = self.string_to_datetime(
data_inicial.split('/'))
data_final = self.string_to_datetime(
data_final.split('/'))
materia_list = MateriaLegislativa.objects.filter(
tipo=tipo,
data_apresentacao__range=(data_inicial, data_final))
context['quantidade'] = len(materia_list)
materia_list = materia_list[:20]
context['form'].fields['materia'].choices = [(m.id, m.__str__()) for m in materia_list]
if context['quantidade'] > 20:
materias = materias[:20]
messages.info(self.request, _('Sua pesquisa retornou mais do que '
'20 impressos. Por questões de performance, foram retornados '
'apenas os 20 primeiros. Caso queira outros, tente fazer uma '
'pesquisa mais específica'))
context['materias'] = materias
return context
def form_valid(self, form):
context = {}
try:
materia = MateriaLegislativa.objects.get(
id=form.data['materia'])
except ObjectDoesNotExist:
pass
context['materia'] = materia
context['despachos'] = materia.despachoinicial_set.all().values_list(
'comissao__nome', flat=True)
return gerar_pdf_impressos(self.request, context)
return gerar_pdf_impressos(self.request, context, 'materia/impressos/ficha_pdf.html')

82
sapl/templates/materia/impressos/etiqueta_pdf.html

@ -0,0 +1,82 @@
<!DOCTYPE html>
<html>
<head>
<title>Impressos</title>
<meta charset="utf-8">
</head>
<style type="text/css">
.text_pdf{
font-family: verdana;
font-size: 77%;
}
.alert_message{
font-family: verdana;
font-size: 77%;
color: red;
@media print {
p {page-break-inside: avoid;}
}
}
</style>
<body style="margin-left:80px;margin-right:80px; margin-top: -50px">
{% if quantidade > 30 %}
<b><p class="alert_message">Sua pesquisa retornou mais do que 20 impressos.</p><p class="alert_message">Por questões de performance, foram retornados apenas os 20 primeiros. Caso queira outros, tente fazer uma pesquisa mais específica</p></b>
</br></br></br>
{% endif %}
{% for m in materias %}
<div style="page-break-inside: avoid;">
<justify>
<!-- Informa o processo -->
{% if m.numeracao_set.first %}
<strong class="text_pdf">PROCESSO: {{ m.numeracao_set.first.numero_materia }}</strong>
&nbsp;
{% else %}
<strong class="text_pdf">PROCESSO: {{ m.numero }}</strong>
&nbsp;
{% endif %}
<!-- Informa o tipo da matéria -->
<strong class="text_pdf">{{m.tipo.sigla}}:</strong> <span class="text_pdf"> {{m.numero}}/{{m.ano}} </span> &nbsp;
<!-- Informa o campo Pref ??? #TODO -->
<strong class="text_pdf">Pref:</strong>
{% if m.numeracao_set.first %}
<span class="text_pdf">{{ m.numeracao_set.first.numero_materia }}</span>
{% endif %} </br
<!-- Informa a Data de Entrada -->
<strong class="text_pdf">DATA DE ENTRADA:</strong> <span class="text_pdf"> {{m.data_apresentacao}}</span></br>
<!-- Lista os autores -->
{% if m.autoria_set.all %}
<strong class="text_pdf">Autores:</strong>
{% for a in m.autoria_set.all %}
{% if not forloop.first %}
, &nbsp;&nbsp; <span class="text_pdf">{{a.autor}}</span>
{% else %}
&nbsp;<span class="text_pdf">{{a.autor}}</span>
{% endif %}
{% endfor %}
</br>
{% endif %}
<!-- Ementa -->
<strong class="text_pdf">EMENTA:</strong> <span class="text_pdf">{{m.ementa}}</span>
</div>
</justify>
</br>
</br>
</br>
</br>
</br>
{% endfor %}
</body>

144
sapl/templates/materia/impressos/ficha_pdf.html

@ -0,0 +1,144 @@
<!DOCTYPE html>
<html><head>
<link rel="stylesheet" href="basicsstyles.css" type="text/css" media="screen">
<link rel="stylesheet" href="printstyles.css" type="text/css" media="print">
<style type="text/css" media="all">
body
{
font-size: small;
font-family: Arial;
line-height: 175%;
background-color: transparent;
margin: 5pt 5pt 0pt 0pt;
}
#voltar
{
position: absolute;
top: 50pt;
left: 500pt;
}
#ementa_texto
{
font-family: Arial;
line-height: 175%;
border-style: none;
text-align: justify;
padding: 0pt 5pt 0pt 0pt;
line-height: 140%;
font-size: small;
}
#ficha_menor
{
background-color: transparent;
margin: -2pt 20pt 0pt 0pt;
position: relative;
width: 285pt;
height: 370pt;
}
#titulo
{
font-size: medium;
text-align: center;
}
#ficha_maior
{
background-color: #9eddee;
margin:0pt;
position: relative;
width: 285pt;
height: 370pt;
}
#despacho_inicial
{
font-family: Arial;
border-style: none;
text-align: justify;
font-size: small;
}
@media print {
#voltar { display: none; }
}
</style>
<body style="margin-left:80px;margin-right:80px; margin-top: -50px">
<div style="page-break-inside: avoid;">
<justify>
<div id="titulo">
<!-- Informa o processo -->
{% if materia.numeracao_set.first %}
<strong class="text_pdf">PROCESSO Nº: {{ materia.numeracao_set.first.numero_materia }}</strong><br><br>
&nbsp;
{% else %}
<strong class="text_pdf">PROCESSO Nº: {{ materia.numero }}</strong><br><br>
&nbsp;
{% endif %}
</div>
<!-- Informa o tipo da matéria -->
<strong class="text_pdf">{{materia.tipo}}:</strong> <span class="text_pdf"> {{materia.numero}}/{{materia.ano}} </span><br>
<!-- Informa a Data de Entrada -->
<strong class="text_pdf">Data de entrada:</strong> <span class="text_pdf"> {{materia.data_apresentacao}}</span></br>
<table border=0>
<td height="60pt" valign=top>
<div id="ementa_texto">
<!-- Lista os autores -->
{% if materia.autoria_set.all %}
<strong class="text_pdf">Autor:</strong>
{% for a in materia.autoria_set.all %}
{% if not forloop.first %}
<span class="text_pdf">{{a.autor}}</span><br>
{% else %}
<span class="text_pdf">{{a.autor}}</span><br>
{% endif %}
{% endfor %}
</br>
{% endif %}
</div>
</td>
</table>
<br><br><br>
<!-- Ementa -->
<table border=0>
<td height="160pt">
<div id="ementa_texto">
<strong class="text_pdf">Ementa:</strong> <span class="text_pdf">{{materia.ementa}}</span>
</div>
</td>
</table>
<br><br><br>
<table border=0>
<td height="100pt">
<div id="despacho_inicial">
<strong class="text_pdf">Despacho Inicial:</strong>
{% for despacho in despachos %}
<br> <span class="text_pdf">{{despacho}}</span>
{% endfor %}
</div>
</td>
</table>
<br>
<strong></strong><br>
<strong>________________NORMA JURIDICA_________________</strong><br><br>
<strong>_________________________________________________</strong>
</div>
</justify>
</body>

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

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

2
sapl/templates/materia/impressos/impressos.html

@ -17,7 +17,7 @@
<h2 class="legend">Ficha</h2>
<ul>
<li><a href="{% url 'sapl.materia:impressos_ficha' %}">Pesquisar</a></li>
<li><a href="{% url 'sapl.materia:impressos_ficha_pesquisa' %}">Pesquisar</a></li>
</ul>
{#<h2 class="legend">Guia de Remessa</h2>#}

Loading…
Cancel
Save