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 return cleaned_data
class FichaPesquisaForm(forms.Form): class FichaPesquisaForm(forms.Form):
tipo_materia = forms.ModelChoiceField( tipo_materia = forms.ModelChoiceField(
label=TipoMateriaLegislativa._meta.verbose_name, label=TipoMateriaLegislativa._meta.verbose_name,
queryset=TipoMateriaLegislativa.objects.all(), queryset=TipoMateriaLegislativa.objects.all(),
required=False,
empty_label='Selecione') empty_label='Selecione')
data_inicial = forms.DateField( data_inicial = forms.DateField(
label='Data Inicial', label='Data Inicial',
required=False,
widget=forms.DateInput(format='%d/%m/%Y') widget=forms.DateInput(format='%d/%m/%Y')
) )
data_final = forms.DateField( data_final = forms.DateField(
label='Data Final', label='Data Final',
required=False,
widget=forms.DateInput(format='%d/%m/%Y') 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')) 'A Data Final não pode ser menor que a Data Inicial'))
return cleaned_data 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, DocumentoAcessorioCrud,
DocumentoAcessorioEmLoteView, DocumentoAcessorioEmLoteView,
ImpressosView, EtiquetaPesquisaView, ImpressosView, EtiquetaPesquisaView,
FichaPesquisaView, FichaPesquisaView, FichaSelecionaView,
LegislacaoCitadaCrud, MateriaAssuntoCrud, LegislacaoCitadaCrud, MateriaAssuntoCrud,
MateriaLegislativaCrud, MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView, MateriaLegislativaPesquisaView, MateriaTaView,
@ -38,7 +38,10 @@ urlpatterns_impressos = [
name='impressos_etiqueta'), name='impressos_etiqueta'),
url(r'^materia/impressos/ficha-pesquisa/$', url(r'^materia/impressos/ficha-pesquisa/$',
FichaPesquisaView.as_view(), 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 = [ urlpatterns_materia = [

89
sapl/materia/views.py

@ -1,3 +1,4 @@
import datetime as dt_generator
from datetime import datetime from datetime import datetime
from random import choice from random import choice
from string import ascii_letters, digits 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 import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect 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 import formats
from django.utils.translation import ugettext_lazy as _ 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
@ -47,7 +48,7 @@ from .email_utils import do_envia_email_confirmacao
from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
AdicionarVariasAutoriasFilterSet, DespachoInicialForm, AdicionarVariasAutoriasFilterSet, DespachoInicialForm,
DocumentoAcessorioForm, EtiquetaPesquisaForm, DocumentoAcessorioForm, EtiquetaPesquisaForm,
FichaPesquisaForm, MateriaAssuntoForm, FichaPesquisaForm, FichaSelecionaForm, MateriaAssuntoForm,
MateriaLegislativaFilterSet, MateriaSimplificadaForm, MateriaLegislativaFilterSet, MateriaSimplificadaForm,
PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm, PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm,
RelatoriaForm, TramitacaoEmLoteFilterSet, RelatoriaForm, TramitacaoEmLoteFilterSet,
@ -1751,9 +1752,8 @@ class ImpressosView(PermissionRequiredMixin, TemplateView):
permission_required = ('materia.can_access_impressos', ) permission_required = ('materia.can_access_impressos', )
def gerar_pdf_impressos(request, context): def gerar_pdf_impressos(request, context, template_name):
template = loader.get_template('materia/impressos/pdf.html', template = loader.get_template(template_name)
'materia/impressos/ficha_pdf.html')
html = template.render(RequestContext(request, context)) html = template.render(RequestContext(request, context))
response = HttpResponse(content_type="application/pdf") response = HttpResponse(content_type="application/pdf")
weasyprint.HTML( weasyprint.HTML(
@ -1797,7 +1797,9 @@ class EtiquetaPesquisaView(PermissionRequiredMixin, FormView):
context['materias'] = materias 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): class FichaPesquisaView(PermissionRequiredMixin, FormView):
form_class = FichaPesquisaForm form_class = FichaPesquisaForm
@ -1805,24 +1807,73 @@ class FichaPesquisaView(PermissionRequiredMixin, FormView):
permission_required = ('materia.can_access_impressos', ) permission_required = ('materia.can_access_impressos', )
def form_valid(self, form): 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( url = reverse('sapl.materia:impressos_ficha_seleciona')
'-data_apresentacao') url = url + '?tipo=%s&data_inicial=%s&data_final=%s' % (
tipo_materia, data_inicial, data_final)
if form.cleaned_data['tipo_materia']: return HttpResponseRedirect(url)
materias = materias.filter(tipo=form.cleaned_data['tipo_materia'])
if form.cleaned_data['data_inicial']: class FichaSelecionaView(PermissionRequiredMixin, FormView):
materias = materias.filter( form_class = FichaSelecionaForm
data_apresentacao__gte=form.cleaned_data['data_inicial'], template_name = 'materia/impressos/ficha_seleciona.html'
data_apresentacao__lte=form.cleaned_data['data_final']) 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: 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> <h2 class="legend">Ficha</h2>
<ul> <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> </ul>
{#<h2 class="legend">Guia de Remessa</h2>#} {#<h2 class="legend">Guia de Remessa</h2>#}

Loading…
Cancel
Save