mirror of https://github.com/interlegis/sigi.git
Breno Teixeira
12 years ago
16 changed files with 884 additions and 41 deletions
@ -0,0 +1,541 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from reportlab.lib.pagesizes import A4 |
|||
from reportlab.lib.units import cm |
|||
from reportlab.lib.enums import TA_CENTER, TA_RIGHT |
|||
from geraldo import Report, DetailBand, Label, ObjectValue, ManyElements, \ |
|||
ReportGroup, ReportBand, landscape, SubReport, BAND_WIDTH,SystemField |
|||
|
|||
from sigi.apps.relatorios.reports import ReportDefault |
|||
|
|||
from geraldo.graphics import Image |
|||
|
|||
def string_to_cm(texto): |
|||
tamanho = 0 |
|||
minEspeciais = { |
|||
'f':0.1, |
|||
'i':0.05, |
|||
'j':0.05, |
|||
'l':0.05, |
|||
'm':0.2, |
|||
'r':0.1, |
|||
't':0.15, |
|||
} |
|||
maiuEspeciais = { |
|||
'I':0.05, |
|||
'J':0.15, |
|||
'L':0.15, |
|||
'P':0.15, |
|||
} |
|||
for c in texto: |
|||
if c > 'a' and c<'z': |
|||
if c in minEspeciais: |
|||
tamanho += minEspeciais[c] |
|||
else: |
|||
tamanho += 0.17 |
|||
else: |
|||
if c in maiuEspeciais: |
|||
tamanho += maiuEspeciais[c] |
|||
else: |
|||
tamanho += 0.2 |
|||
return tamanho |
|||
|
|||
class ParlamentaresLabels(Report): |
|||
""" |
|||
Usage example:: |
|||
|
|||
>>> from geraldo.generators import PDFGenerator |
|||
>>> queryset = CasaLegislativa.objects.filter(municipio__uf__sigla='MG') |
|||
>>> report = LabelsReport(queryset) |
|||
>>> report.generate_by(PDFGenerator, filename='./inline-detail-report.pdf') |
|||
|
|||
""" |
|||
formato = '' |
|||
y = 2 |
|||
largura_etiqueta = 7 |
|||
altura_etiqueta = 3.3 |
|||
tamanho_fonte = 6.4 |
|||
altura_dados = 0.3 #logradouro, bairro, municipio, cep |
|||
delta = start = 0.5 |
|||
|
|||
def __init__(self, queryset, formato): |
|||
super(ParlamentaresLabels, self).__init__(queryset=queryset) |
|||
self.formato = formato |
|||
self.page_size = A4 |
|||
|
|||
if formato == '3x9_etiqueta': |
|||
self.margin_top = 0.0*cm |
|||
self.margin_bottom = 0.0*cm |
|||
self.margin_left = -1*cm |
|||
self.margin_right = 0.0*cm |
|||
self.delta = 0.4 # espaçamento entre as "strings/linhas" da etiqueta |
|||
self.start = 0.2 # valor entre a margin top e a etiqueta |
|||
else: |
|||
self.margin_top = 0.8*cm |
|||
self.margin_bottom = 0.8*cm |
|||
self.margin_left = 0.4*cm |
|||
self.margin_right = 0.4*cm |
|||
self.largura_etiqueta = 9.9 |
|||
self.altura_etiqueta = 5.6 |
|||
self.tamanho_fonte = 11 |
|||
self.altura_dados = 0.5 |
|||
self.y = 0.5 |
|||
|
|||
my_elements = [ |
|||
Label( |
|||
text='A Sua Excelência o(a) Senhor(a)', |
|||
top=(self.start + self.delta)*cm, left=self.y*cm, width=(self.largura_etiqueta-self.y)*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='nome_completo', |
|||
top=(self.start + 2*self.delta)*cm, left=self.y*cm, width=(self.largura_etiqueta-self.y)*cm, |
|||
get_value=lambda instance: |
|||
instance.nome_completo or "" |
|||
), |
|||
ObjectValue( |
|||
attribute_name='logradouro', |
|||
top=(self.start + 3*self.delta)*cm, left=self.y*cm, width=(self.largura_etiqueta-self.y)*cm, |
|||
get_value=lambda instance: |
|||
logradouro_parlamentar(instance) |
|||
), |
|||
ObjectValue( |
|||
attribute_name='bairro', |
|||
top=(self.start + 4*self.delta)*cm, left=self.y*cm, width=(self.largura_etiqueta-self.y)*cm, |
|||
get_value=lambda instance: |
|||
bairro_parlamentar(instance) |
|||
), |
|||
ObjectValue( |
|||
attribute_name='municipio', |
|||
top=(self.start + 5*self.delta)*cm, left=self.y*cm, width=(self.largura_etiqueta-self.y)*cm, |
|||
get_value=lambda instance: |
|||
municipio_parlamentar(instance) |
|||
), |
|||
ObjectValue( |
|||
attribute_name='cep', |
|||
top=(self.start + 6*self.delta)*cm, left=self.y*cm, width=(self.largura_etiqueta-self.y)*cm, |
|||
get_value=lambda instance: |
|||
cep_parlamentar(instance) |
|||
), |
|||
] |
|||
self.band_detail = DetailBand(width=(self.largura_etiqueta)*cm, height=(self.altura_etiqueta)*cm, margin_left = 0, margin_top = 0, margin_bottom=0.0*cm, margin_right = 0, elements=my_elements,display_inline=True, default_style={'fontName': 'Helvetica', 'fontSize': self.tamanho_fonte}) |
|||
|
|||
def logradouro_parlamentar(instance): |
|||
try: |
|||
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.logradouro |
|||
except: |
|||
return "<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" |
|||
|
|||
def bairro_parlamentar(instance): |
|||
try: |
|||
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.bairro |
|||
except: |
|||
return "<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" |
|||
|
|||
def municipio_parlamentar(instance): |
|||
try: |
|||
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.municipio |
|||
except: |
|||
return "<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" |
|||
|
|||
def cep_parlamentar(instance): |
|||
try: |
|||
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.cep |
|||
except: |
|||
return "<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" |
|||
|
|||
|
|||
class CasasLegislativasReport(ReportDefault): |
|||
title = u'Relatório de Casas Legislativas' |
|||
height = 80*cm |
|||
page_size = landscape(A4) |
|||
|
|||
class band_page_header(ReportDefault.band_page_header): |
|||
|
|||
label_top = ReportDefault.band_page_header.label_top |
|||
label_left = [0.3,1,5.5,11,17,22] |
|||
elements = list(ReportDefault.band_page_header.elements) |
|||
|
|||
elements = [ |
|||
Image(filename= ReportDefault.band_page_header.BASE_DIR + '/media/images/logo-interlegis.jpg', |
|||
left=23.5*cm,right=1*cm,top=0.1*cm,bottom=1*cm, |
|||
width=4.2*cm,height=3*cm, |
|||
), |
|||
Image(filename= ReportDefault.band_page_header.BASE_DIR + '/media/images/logo-senado.png', |
|||
left=1*cm,right=1*cm,top=0.1*cm,bottom=1*cm, |
|||
width=3*cm,height=3*cm, |
|||
), |
|||
Label(text="SENADO FEDERAL",top=1*cm,left=0,width=BAND_WIDTH, |
|||
style={'fontName': 'Helvetica-Bold','fontSize':14, 'alignment': TA_CENTER} |
|||
), |
|||
Label(text="SINTER - Secretaria Especial do Interlegis",top=1.5*cm,left=0,width=BAND_WIDTH, |
|||
style={'fontName': 'Helvetica-Bold','fontSize':13, 'alignment': TA_CENTER} |
|||
), |
|||
SystemField( |
|||
expression='%(report_title)s',top=2.5*cm,left=0,width=BAND_WIDTH, |
|||
style={'fontName': 'Helvetica-Bold','fontSize':14, 'alignment': TA_CENTER} |
|||
), |
|||
Label( |
|||
text="UF", |
|||
left=label_left[0]*cm, |
|||
top=label_top, |
|||
), |
|||
Label( |
|||
text="Municipio", |
|||
left=label_left[1]*cm, |
|||
top=label_top, |
|||
), |
|||
Label( |
|||
text="Presidente", |
|||
left=label_left[2]*cm, |
|||
top=label_top, |
|||
), |
|||
Label( |
|||
text="Endereço", |
|||
left=label_left[3]*cm, |
|||
top=label_top, |
|||
), |
|||
Label( |
|||
text="Endereço na Internet", |
|||
left=label_left[4]*cm, |
|||
top=label_top, |
|||
), |
|||
Label( |
|||
text="Email", |
|||
left=label_left[5]*cm, |
|||
top=label_top, |
|||
), |
|||
|
|||
|
|||
] |
|||
|
|||
|
|||
|
|||
class band_page_footer(ReportDefault.band_page_footer): |
|||
pass |
|||
|
|||
class band_detail(ReportDefault.band_detail): |
|||
|
|||
label_left = [0.3,1,5.5,11,17,22] |
|||
|
|||
elements=[ |
|||
ObjectValue( |
|||
attribute_name='municipio.uf.sigla', |
|||
left=label_left[0]*cm, |
|||
width=1*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='municipio.nome', |
|||
left=label_left[1]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='presidente', |
|||
left=label_left[2]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='logradouro', |
|||
left=label_left[3]*cm, |
|||
get_value=lambda instance: instance.logradouro + ' - '+ instance.bairro, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='pagina_web', |
|||
left=label_left[4]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='email', |
|||
left=label_left[5]*cm, |
|||
), |
|||
|
|||
] |
|||
|
|||
groups = [ |
|||
ReportGroup(attribute_name='municipio.uf', |
|||
band_header=ReportBand( |
|||
height=0.7*cm, |
|||
elements= [ |
|||
ObjectValue(attribute_name='municipio.uf') |
|||
], |
|||
borders={'top': True}, |
|||
) |
|||
) |
|||
] |
|||
|
|||
|
|||
class InfoCasaLegislativa(ReportDefault): |
|||
title = u'Casa legislativa' |
|||
class band_summary(ReportBand): |
|||
pass |
|||
class band_page_footer(ReportBand): |
|||
height = 1*cm |
|||
|
|||
elements = [ |
|||
SystemField(expression=u'%(now:%d/%m/%Y)s às %(now:%H:%M)s', top=0.3*cm), |
|||
] |
|||
|
|||
class band_detail(ReportDefault.band_detail): |
|||
|
|||
posicao_left = [ |
|||
0,1.3, #Tipo |
|||
0,1.8, #Regiao |
|||
5.5,6.8, #U.F. |
|||
0,2.3, #Municipio |
|||
0,2.4, #Endereco |
|||
0,1.6, #Bairro |
|||
0,1.3, #CEP |
|||
0,1.6, #CNPJ |
|||
0,2.3, #Telefone |
|||
0,2.7, #Presidente |
|||
] |
|||
posicao_top = [ |
|||
0.5, #Tipo |
|||
1.3, #Regiao |
|||
1.3, #U.F. |
|||
2.1, #Municipio |
|||
2.9, #Logradouro |
|||
3.7, #Bairro |
|||
4.5, #CEP |
|||
5.3, #CNPJ |
|||
6.1, #Telefone |
|||
6.9, #Presidente |
|||
] |
|||
|
|||
height=30*cm |
|||
|
|||
display_inline = True |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':14} |
|||
|
|||
elements = [ |
|||
|
|||
Label( |
|||
text="Tipo: ", |
|||
left=posicao_left[0]*cm, |
|||
top=posicao_top[0]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='tipo.nome', |
|||
left=posicao_left[1]*cm, |
|||
top=posicao_top[0]*cm, |
|||
width=6*cm, |
|||
), |
|||
Label( |
|||
text="Região: ", |
|||
left=posicao_left[2]*cm, |
|||
top=posicao_top[1]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='municipio.uf.regiao', |
|||
left=posicao_left[3]*cm, |
|||
top=posicao_top[1]*cm, |
|||
get_value=lambda instance: |
|||
{'SL': 'Sul','SD': 'Sudeste','CO': 'Centro-Oeste','NE': 'Nordeste','NO': 'Norte',} |
|||
[instance.municipio.uf.regiao] |
|||
), |
|||
Label( |
|||
text="U.F.: ", |
|||
left=posicao_left[4]*cm, |
|||
top=posicao_top[2]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='municipio.uf', |
|||
left=posicao_left[5]*cm, |
|||
top=posicao_top[2]*cm, |
|||
), |
|||
Label( |
|||
text="Município: ", |
|||
left=posicao_left[6]*cm, |
|||
top=posicao_top[3]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='municipio.nome', |
|||
left=posicao_left[7]*cm, |
|||
top=posicao_top[3]*cm, |
|||
width=20*cm, |
|||
), |
|||
# Linha 3 |
|||
Label( |
|||
text="Endereço: ", |
|||
left=posicao_left[8]*cm, |
|||
top=posicao_top[4]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='logradouro', |
|||
left=posicao_left[9]*cm, |
|||
top=posicao_top[4]*cm, |
|||
width=20*cm, |
|||
), |
|||
Label( |
|||
text="Bairro: ", |
|||
left=posicao_left[10]*cm, |
|||
top=posicao_top[5]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='bairro', |
|||
left=posicao_left[11]*cm, |
|||
top=posicao_top[5]*cm, |
|||
), |
|||
Label( |
|||
text="CEP: ", |
|||
left=posicao_left[12]*cm, |
|||
top=posicao_top[6]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='cep', |
|||
left=posicao_left[13]*cm, |
|||
top=posicao_top[6]*cm, |
|||
), |
|||
Label( |
|||
text="CNPJ: ", |
|||
left=posicao_left[14]*cm, |
|||
top=posicao_top[7]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='cnpj', |
|||
left=posicao_left[15]*cm, |
|||
top=posicao_top[7]*cm, |
|||
), |
|||
Label( |
|||
text="Telefone: ", |
|||
left=posicao_left[16]*cm, |
|||
top=posicao_top[8]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='telefone', |
|||
left=posicao_left[17]*cm, |
|||
top=posicao_top[8]*cm, |
|||
), |
|||
Label( |
|||
text="Presidente: ", |
|||
left=posicao_left[18]*cm, |
|||
top=posicao_top[9]*cm, |
|||
), |
|||
ObjectValue( |
|||
attribute_name='presidente', |
|||
left=posicao_left[19]*cm, |
|||
top=posicao_top[9]*cm, |
|||
width=20*cm, |
|||
), |
|||
] |
|||
# Telefones |
|||
tel_top = 2*cm |
|||
tel_left = [0,3,5] |
|||
# Contato |
|||
cont_top = 2*cm |
|||
cont_left = [0,6,9] |
|||
# Convenios |
|||
convenio_top = 2*cm |
|||
convenio_left = [0,1.8,4.5,8,10.5,13,15.5,18] |
|||
subreports = [ |
|||
# Telefones |
|||
SubReport( |
|||
queryset_string = '%(object)s.telefones.all()', |
|||
band_header = ReportBand( |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':12 }, |
|||
height=2.5*cm, |
|||
elements = [ |
|||
Label( |
|||
text="Telefone(s)", |
|||
style = {'fontSize':14,'alignment': TA_CENTER}, |
|||
width=BAND_WIDTH, |
|||
top=1*cm, |
|||
), |
|||
Label(text="Número",left=tel_left[0]*cm,top=tel_top), |
|||
Label(text="Tipo",left=tel_left[1]*cm,top=tel_top), |
|||
Label(text="Nota",left=tel_left[2]*cm,top=tel_top), |
|||
], |
|||
borders = {'bottom': True}, |
|||
), |
|||
band_detail = ReportBand( |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':11}, |
|||
height=0.5*cm, |
|||
elements= [ |
|||
ObjectValue(attribute_name='__unicode__',left=tel_left[0]*cm), |
|||
ObjectValue(attribute_name='tipo',left=tel_left[1]*cm, |
|||
get_value = lambda instance: |
|||
{'F':'Fixo','M':u'Móvel','X':'Fax','I':'Indefinido'}[instance.tipo], |
|||
), |
|||
ObjectValue(attribute_name='nota',left=tel_left[2]*cm), |
|||
], |
|||
#borders = {'all':True}, |
|||
), |
|||
), |
|||
#Contatos |
|||
SubReport( |
|||
queryset_string = '%(object)s.funcionario_set.all()', |
|||
band_header = ReportBand( |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':12 }, |
|||
height=2.5*cm, |
|||
elements = [ |
|||
Label( |
|||
text="Contato(s)", |
|||
style = {'fontSize':14,'alignment': TA_CENTER}, |
|||
width=BAND_WIDTH, |
|||
top=1*cm, |
|||
), |
|||
Label(text="Nome",left=cont_left[0]*cm,top=cont_top), |
|||
Label(text="Nota",left=cont_left[1]*cm,top=cont_top), |
|||
Label(text="E-mail",left=cont_left[2]*cm,top=cont_top), |
|||
], |
|||
borders = {'bottom': True,'top':True}, |
|||
), |
|||
band_detail = ReportBand( |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':11}, |
|||
height=0.5*cm, |
|||
elements= [ |
|||
ObjectValue(attribute_name='nome',left=cont_left[0]*cm), |
|||
ObjectValue(attribute_name='nota',left=cont_left[1]*cm), |
|||
ObjectValue(attribute_name='email',left=cont_left[2]*cm), |
|||
], |
|||
#borders = {'all':True}, |
|||
), |
|||
), |
|||
#Convenios |
|||
SubReport( |
|||
queryset_string = '%(object)s.convenio_set.all()', |
|||
band_header = ReportBand( |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':12 }, |
|||
height=2.5*cm, |
|||
elements=[ |
|||
Label( |
|||
text="Convênio(s)", |
|||
style = {'fontSize':14,'alignment': TA_CENTER}, |
|||
width=BAND_WIDTH, |
|||
top=1*cm, |
|||
), |
|||
Label(text="Projeto",left=convenio_left[0]*cm,top=convenio_top), |
|||
Label(text="Nº Convenio",left=convenio_left[1]*cm,top=convenio_top), |
|||
Label(text="Nº Processo SF",left=convenio_left[2]*cm,top=convenio_top), |
|||
Label(text="Adesão",left=convenio_left[3]*cm,top=convenio_top), |
|||
Label(text="Convênio",left=convenio_left[4]*cm,top=convenio_top), |
|||
Label(text="Equipada",left=convenio_left[5]*cm,top=convenio_top), |
|||
Label(text="Data D.O.",left=convenio_left[6]*cm,top=convenio_top), |
|||
], |
|||
borders = {'bottom': True} |
|||
), |
|||
band_detail = ReportBand( |
|||
default_style = {'fontName': 'Helvetica', 'fontSize':11}, |
|||
height=0.5*cm, |
|||
elements=[ |
|||
ObjectValue(attribute_name='projeto.sigla',left=convenio_left[0]*cm), |
|||
ObjectValue(attribute_name='num_convenio',left=convenio_left[1]*cm), |
|||
ObjectValue(attribute_name='num_processo_sf',left=convenio_left[2]*cm), |
|||
ObjectValue(attribute_name='data_adesao',left=convenio_left[3]*cm, |
|||
get_value=lambda instance: |
|||
instance.data_adesao.strftime('%d/%m/%Y') if instance.data_adesao != None else '-' |
|||
), |
|||
ObjectValue(attribute_name='data_retorno_assinatura',left=convenio_left[4]*cm, |
|||
get_value=lambda instance: |
|||
instance.data_retorno_assinatura.strftime('%d/%m/%Y') if instance.data_retorno_assinatura != None else '-' |
|||
), |
|||
ObjectValue(attribute_name='data_termo_aceite',left=convenio_left[5]*cm, |
|||
get_value=lambda instance: |
|||
instance.data_termo_aceite.strftime('%d/%m/%Y') if instance.data_termo_aceite != None else '-' |
|||
), |
|||
ObjectValue(attribute_name='data_pub_diario',left=convenio_left[6]*cm, |
|||
get_value=lambda instance: |
|||
instance.data_pub_diario.strftime('%d/%m/%Y') if instance.data_pub_diario != None else '-' |
|||
), |
|||
], |
|||
#borders = {'all':True}, |
|||
), |
|||
) |
|||
] |
|||
|
|||
|
@ -0,0 +1,78 @@ |
|||
{% extends "admin/carrinho.html" %} |
|||
{% load adminmedia admin_list i18n %} |
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
{% include "admin/tabs_style.html" %} |
|||
|
|||
|
|||
{% endblock %} |
|||
|
|||
{% block title %}Parlamentares no Carrinho | SIGI{% endblock %} |
|||
{% block content_title %}<h1>Parlamentares no Carrinho</h1>{% endblock %} |
|||
|
|||
{% block mensagem%} |
|||
<ul class="messagelist"> |
|||
{%if carIsEmpty%} |
|||
<li class="warning">O carrinho está vazio, sendo assim todas as casas entram na lista para exportação de acordo com os filtros aplicados.</li> |
|||
{%else%} |
|||
<li>{{paginas.paginator.count}}Parlamentares no carrinho.</li> |
|||
{%endif%} |
|||
</ul> |
|||
{% endblock %} |
|||
|
|||
{% block action %}deleta_itens_carrinho{% endblock %} |
|||
|
|||
{% block tabela %} |
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
{%if not carIsEmpty%} |
|||
<th class="sorted ascending"><!-- <input type="checkbox" id="action-toggle" style="display: inline;">--> |
|||
</th> |
|||
{% endif %} |
|||
<th class="sorted ascending">Nome</th> |
|||
<th class="sorted ascending">Nome parlamentar</th> |
|||
<th class="sorted ascending">Sexo</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for parlamentar in paginas.object_list %} |
|||
<tr class="{% cycle 'row1' 'row2' %}"> |
|||
{%if not carIsEmpty%} |
|||
<th><input type="checkbox" name="_selected_action" |
|||
value="{{parlamentar.id}}" class="action-select" /></th> |
|||
{% endif %} |
|||
<td style="text-align: left;">{{parlamentar.nome_completo}}</td> |
|||
<td>{{parlamentar.nome_parlamentar}}</td> |
|||
<td>{{parlamentar.get_sexo_display}}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{% endblock %} |
|||
|
|||
{% block botoes %} |
|||
<div id="tabs"> |
|||
<ul> |
|||
<li><a href="#tabs-1">Etiqueta</a></li> |
|||
</ul> |
|||
|
|||
<div id="tabs-1"> |
|||
<form action="../labels/{{query_str}}" method="post">{% csrf_token %} |
|||
<fieldset><legend>Formato da Etiqueta</legend> |
|||
<ul class="formato_etiqueta"> |
|||
<li><input type="radio" name="tamanho_etiqueta" |
|||
value="2x5_etiqueta"><label>2x5</label></li> |
|||
<li><input type="radio" name="tamanho_etiqueta" |
|||
value="3x9_etiqueta" checked="checked"><label>3x9</label></li> |
|||
|
|||
</ul> |
|||
</fieldset> |
|||
<ul class="botoes"> |
|||
<li><input type="submit" value="Gerar Etiqueta" /></li> |
|||
</ul> |
|||
</form> |
|||
|
|||
</div> |
|||
|
|||
{% endblock %} |
@ -0,0 +1,14 @@ |
|||
{% extends "admin/change_form.html" %} |
|||
{% load i18n reporting_tags %} |
|||
|
|||
{% block object-tools %} |
|||
{% if change %}{% if not is_popup %} |
|||
<ul class="object-tools"> |
|||
<li><a href="report_complete/">Relatório</a></li> |
|||
<li><a href="labels/">Etiqueta</a></li> |
|||
<li><a href="labels_sem_presidente/">Etiqueta sem presidente</a></li> |
|||
<li><a href="history/" class="historylink">{% trans "History" %}</a></li> |
|||
{% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%} |
|||
</ul> |
|||
{% endif %}{% endif %} |
|||
{% endblock %} |
@ -0,0 +1,9 @@ |
|||
{% extends "admin/change_list.html" %} |
|||
{% load adminmedia admin_list i18n reporting_tags %} |
|||
|
|||
{% block object-tools %} |
|||
<ul class="object-tools"> |
|||
<li><a href="#">Casas sem Processo de Convênio</a></li> |
|||
</ul> |
|||
|
|||
{% endblock %} |
@ -0,0 +1,149 @@ |
|||
# coding: utf-8 |
|||
import datetime |
|||
import csv |
|||
import ho.pisa as pisa |
|||
|
|||
from django.template import Context, loader |
|||
from django.core.paginator import Paginator, InvalidPage, EmptyPage |
|||
from django.conf import settings |
|||
from django.shortcuts import render_to_response, get_list_or_404 |
|||
from django.http import HttpResponse, HttpResponseRedirect |
|||
from django.views.decorators.csrf import csrf_protect |
|||
from django.template import RequestContext |
|||
|
|||
from sigi.apps.parlamentares.models import Parlamentar |
|||
from sigi.apps.parlamentares.reports import ParlamentaresLabels |
|||
|
|||
from geraldo.generators import PDFGenerator |
|||
|
|||
|
|||
def adicionar_parlamentar_carrinho(request,queryset=None,id=None): |
|||
if request.method == 'POST': |
|||
ids_selecionados = request.POST.getlist('_selected_action') |
|||
if not request.session.has_key('carrinho_parlametar'): |
|||
request.session['carrinho_parlamentar'] = ids_selecionados |
|||
else: |
|||
lista = request.session['carrinho_parlamentar'] |
|||
# Verifica se id já não está adicionado |
|||
for id in ids_selecionados: |
|||
if not id in lista: |
|||
lista.append(id) |
|||
request.session['carrinho_parlamentar'] = lista |
|||
|
|||
|
|||
@csrf_protect |
|||
def visualizar_carrinho(request): |
|||
|
|||
qs = carrinhoOrGet_for_qs(request) |
|||
|
|||
paginator = Paginator(qs, 100) |
|||
|
|||
# Make sure page request is an int. If not, deliver first page. |
|||
# Esteja certo de que o `page request` é um inteiro. Se não, mostre a primeira página. |
|||
try: |
|||
page = int(request.GET.get('page', '1')) |
|||
except ValueError: |
|||
page = 1 |
|||
|
|||
# Se o page request (9999) está fora da lista, mostre a última página. |
|||
try: |
|||
paginas = paginator.page(page) |
|||
except (EmptyPage, InvalidPage): |
|||
paginas = paginator.page(paginator.num_pages) |
|||
|
|||
carrinhoIsEmpty = not(request.session.has_key('carrinho_parlamentares')) |
|||
|
|||
return render_to_response('parlamentares/carrinho.html', |
|||
{"ADMIN_MEDIA_PREFIX":settings.ADMIN_MEDIA_PREFIX, |
|||
'MEDIA_URL':settings.MEDIA_URL, |
|||
'carIsEmpty':carrinhoIsEmpty, |
|||
'paginas':paginas, |
|||
'query_str':'?'+request.META['QUERY_STRING']}, |
|||
context_instance=RequestContext(request)) |
|||
|
|||
|
|||
def carrinhoOrGet_for_qs(request): |
|||
""" |
|||
Verifica se existe parlamentares na sessão se não verifica get e retorna qs correspondente. |
|||
""" |
|||
if request.session.has_key('carrinho_parlamentar'): |
|||
ids = request.session['carrinho_parlamentar'] |
|||
qs = Parlamentar.objects.filter(pk__in=ids) |
|||
else: |
|||
qs = Parlamentar.objects.all() |
|||
if request.GET: |
|||
qs = get_for_qs(request.GET,qs) |
|||
return qs |
|||
|
|||
|
|||
def query_ordena(qs,o,ot): |
|||
list_display = ('nome_completo',) |
|||
|
|||
aux = list_display[(int(o)-1)] |
|||
if ot =='asc': |
|||
qs = qs.order_by(aux) |
|||
else: |
|||
qs = qs.order_by("-"+aux) |
|||
return qs |
|||
|
|||
|
|||
def get_for_qs(get,qs): |
|||
""" |
|||
Verifica atributos do GET e retorna queryset correspondente |
|||
""" |
|||
kwargs = {} |
|||
for k,v in get.iteritems(): |
|||
if not (k == 'page' or k == 'pop' or k == 'q'): |
|||
if not k == 'o': |
|||
if k == "ot": |
|||
qs = query_ordena(qs,get["o"],get["ot"]) |
|||
else: |
|||
kwargs[str(k)] = v |
|||
qs = qs.filter(**kwargs) |
|||
return qs |
|||
|
|||
|
|||
def deleta_itens_carrinho(request): |
|||
""" |
|||
Deleta itens selecionados do carrinho |
|||
""" |
|||
if request.method == 'POST': |
|||
ids_selecionados = request.POST.getlist('_selected_action') |
|||
if request.session.has_key('carrinho_parlamentar'): |
|||
lista = request.session['carrinho_parlamentar'] |
|||
for item in ids_selecionados: |
|||
lista.remove(item) |
|||
if lista: |
|||
request.session['carrinho_parlamentar'] = lista |
|||
else: |
|||
del lista; |
|||
del request.session['carrinho_parlamentar'] |
|||
|
|||
return HttpResponseRedirect('.') |
|||
|
|||
|
|||
def labels_report(request, id=None, formato='3x9_etiqueta'): |
|||
""" TODO: adicionar suporte para resultado de pesquisa do admin. |
|||
""" |
|||
|
|||
if request.POST: |
|||
if request.POST.has_key('tipo_etiqueta'): |
|||
tipo = request.POST['tipo_etiqueta'] |
|||
if request.POST.has_key('tamanho_etiqueta'): |
|||
formato = request.POST['tamanho_etiqueta'] |
|||
|
|||
|
|||
if id: |
|||
qs = Parlamentar.objects.filter(pk=id) |
|||
else: |
|||
qs = carrinhoOrGet_for_qs(request) |
|||
|
|||
if not qs: |
|||
return HttpResponseRedirect('../') |
|||
|
|||
response = HttpResponse(mimetype='application/pdf') |
|||
response['Content-Disposition'] = 'attachment; filename=casas.pdf' |
|||
report = ParlamentaresLabels(queryset=qs, formato=formato) |
|||
report.generate_by(PDFGenerator, filename=response) |
|||
|
|||
return response |
@ -0,0 +1,14 @@ |
|||
{% extends "admin/change_form.html" %} |
|||
{% load i18n reporting_tags %} |
|||
|
|||
{% block object-tools %} |
|||
{% if change %}{% if not is_popup %} |
|||
<ul class="object-tools"> |
|||
<li><a href="report_complete/">Relatório</a></li> |
|||
<li><a href="labels/">Etiqueta</a></li> |
|||
<li><a href="labels_sem_presidente/">Etiqueta sem presidente</a></li> |
|||
<li><a href="history/" class="historylink">{% trans "History" %}</a></li> |
|||
{% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%} |
|||
</ul> |
|||
{% endif %}{% endif %} |
|||
{% endblock %} |
@ -0,0 +1,14 @@ |
|||
{% extends "admin/change_list.html" %} |
|||
{% load adminmedia admin_list i18n reporting_tags %} |
|||
|
|||
{% block object-tools %} |
|||
<ul class="object-tools"> |
|||
<li><a onclick="return showRelatedObjectLookupPopup(this);" href="carrinho/{{query_str}}">Carrinho / Exportar</a></li> |
|||
<li> |
|||
<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink"> |
|||
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} |
|||
</a> |
|||
</li> |
|||
</ul> |
|||
|
|||
{% endblock %} |
Loading…
Reference in new issue