let's test


       Ovidio Marinho Falcao Neto
                Web Developer
             [email protected]
          [email protected]
                 ITJP - itjp.net.br
               83   8826 9088 - Oi
               83   9334 0266 - Claro
                        Brasil




2012/9/22 Massimo Di Pierro <[email protected]>

> This is really nice. I would like to see it compares with fpdf (which now
> ships with web2py).
> I also suggest you post this example on web2pyslices so it does not get
> lost. It will be valuable to others.
> Here it will get lost.
>
> massimo
>
>
> On Saturday, 22 September 2012 07:21:41 UTC-5, Jose wrote:
>>
>> Hi
>>
>> This is PollyReport [1] y [2].
>>
>> You can use downloading PollyReport.py and copying the file to the
>> directory site-packages web2py or installed directly on the system.
>>
>> This is a small example based on the author's tutorial:
>>
>> Model
>>
>> tb_tiposclientes = db.define_table('**tiposclientes',
>>     Field('tipo', length=10),
>>     format='%(tipo)s'
>> )
>>
>> tb_clientes = db.define_table('clientes',
>>     Field('tipo', tb_tiposclientes),
>>     Field('nors', length=50),
>>     Field('domicilio'),
>>     format='%(nors)s'
>> )
>>
>> tb_ventas = db.define_table('ventas',
>>     Field('fecha', 'date'),
>>     Field('cliente', tb_clientes),
>>     Field('total', 'double'),
>> )
>>
>> if db(tb_clientes).isempty():
>>     from gluon.contrib.populate import populate
>>     tb_tiposclientes.insert(tipo='**AAAA')
>>     tb_tiposclientes.insert(tipo='**BBBB')
>>     tb_tiposclientes.insert(tipo='**CCCC')
>>     populate(tb_clientes,12)
>>     populate(tb_ventas,100)
>>
>>
>>
>> class Ventas(object):
>>     def iva(self):
>>         return self.ventas.total*0.21
>> tb_ventas.virtualfields.**append(Ventas())
>>
>>
>> Controlller
>>
>> import os
>> from reportlab.pdfgen.canvas import Canvas
>> from reportlab.lib.pagesizes import landscape, portrait, A4, A5
>> from PollyReports import *
>>
>> def ventas():
>>     import os
>>     import urllib2
>>     #import urlparse
>>     from cStringIO import StringIO
>>     from reportlab.lib.utils import ImageReader
>>
>>     rel_tipo = 
>> (tb_clientes.tipo==tb_**tiposclientes.id<http://tb_tiposclientes.id/>
>> )
>>     rel_cliente = 
>> (tb_ventas.cliente==tb_**clientes.id<http://tb_clientes.id/>
>> )
>>
>>     data = db(rel_tipo & rel_cliente).select(
>>             tb_tiposclientes.tipo,
>>             tb_clientes.nors,
>>             tb_ventas.fecha,
>>             tb_ventas.total,
>>             orderby=[tb_tiposclientes.**tipo|tb_clientes.nors]
>>             ).as_list()
>>
>>
>>     rpt = Report(data)
>>
>>     tiposclientes_tipo = lambda x: x['tiposclientes']['tipo']
>>     clientes_nors = lambda x: x['clientes']['nors']
>>     ventas_total = lambda x: x['ventas']['total']
>>     ventas_iva = lambda x: x['ventas']['iva']
>>     ventas_fecha = lambda x: x['ventas']['fecha']
>>
>>     data = urllib2.urlopen('http://www.**python.org/images/python-logo.**
>> gif').read( <http://www.python.org/images/python-logo.gif').read(>)
>>     buffer = StringIO(data)
>>     image = ImageReader(buffer)
>>
>>     #Titulo
>>     rpt.titleband = Band([
>>         Element((300, 0), ("Times-Bold", 26), text = "Informe de Ventas",
>> align="center"),
>>         Element((300, 25), ("Times-Bold", 18), text = "Período
>> 2010-2012", align="center"),
>>         #Image((36, 0), 120, 43, text='/home/jose/borro/**freebsd.jpg'),
>>
>>         Image((36, 0), 120, 43, text=image),
>>     ])
>>
>>     #Cabecera de página
>>     rpt.pageheader = Band([
>>         Element((36, 0), ("Times-Bold", 20), text = "Ventas"),
>>         Element((36, 24), ("Helvetica", 12), text = "Fecha"),
>>         Element((100, 24), ("Helvetica", 12), text = "Nombre o Razón
>> Social"),
>>         Element((500, 24), ("Helvetica", 12), text = "IVA", align =
>> "right"),
>>         Element((600, 24), ("Helvetica", 12), text = "Total", align =
>> "right"),
>>         Rule((36, 42), 7.5*75, thickness = 2),
>>     ])
>>
>>     #Cabecera de grupo (se agrupará por nombre de cliente)
>>     rpt.groupheaders = [
>>         #Agrupo primero por tipo de cliente
>>         Band([
>>             Rule((36, 20), 7.5*72),
>>             Element((36, 4), ("Helvetica-Bold", 13), getvalue =
>> tiposclientes_tipo, format = lambda x: "Clientes tipo %s" % x),
>>         ],
>>         getvalue = tiposclientes_tipo
>>         ),
>>
>>         #y luego por nombre de cliente
>>         Band([
>>             Rule((36, 20), 7.5*72),
>>             Element((36, 4), ("Helvetica-Bold", 12), getvalue =
>> clientes_nors),
>>         ],
>>         getvalue = clientes_nors
>>         )
>>     ]
>>
>>     #Pie de grupo (se sumariza por cliente)
>>     rpt.groupfooters = [
>>         #sumarizo por nombre de cliente
>>         Band([
>>             Rule((500, 4), 100),
>>             Element((36, 4), ("Helvetica-Bold", 12), getvalue =
>> clientes_nors, format = lambda x: "Total de %s" % x),
>>             SumElement((600, 4), ("Helvetica-Bold", 12), getvalue =
>> ventas_total, align = "right", format=lambda x:'$%0.2f'%x),
>>         ],
>>         getvalue = clientes_nors,
>>         ),
>>
>>         #sumarizo por tipo de cliente
>>         Band([
>>             Rule((500, 4), 100),
>>             Element((36, 4), ("Helvetica-Bold", 13), getvalue =
>> tiposclientes_tipo, format = lambda x: "Total para clientes tipo %s" % x),
>>             SumElement((600, 4), ("Helvetica-Bold", 12), getvalue =
>> ventas_total, align = "right", format=lambda x:'$%0.2f'%x),
>>         ],
>>         getvalue = tiposclientes_tipo,
>>         #Inserto una nueva página luego de sumarizar
>>         newpageafter = True,
>>         ),
>>     ]
>>
>>     #Detalle
>>     rpt.detailband = Band([
>>         Element((36, 0), ("Helvetica", 10), getvalue = ventas_fecha),
>>
>>         Element((500, 0), ("Helvetica", 10), getvalue = ventas_iva, align
>> = "right", format=lambda x:'$%0.2f'%x),
>>         Element((600, 0), ("Helvetica", 10), getvalue = ventas_total,
>> align = "right", format=lambda x:'$%0.2f'%x),
>>     ])
>>
>>     #Total de ventas
>>     rpt.reportfooter = Band([
>>         Rule((450, 4), 72),
>>         Element((400, 4), ("Helvetica-Bold", 12), text = "Total General"),
>>         SumElement((600, 4), ("Helvetica-Bold", 12), getvalue =
>> ventas_total, align = "right", format=lambda x:'$%0.2f'%x),
>>     ])
>>
>>     #Pie de página
>>     rpt.pagefooter = Band([
>>         Element((72*8, 0), ("Times-Bold", 18), text = "Ejemplo de Pie de
>> Página", align = "right"),
>>         Element((36, 16), ("Helvetica-Bold", 12), sysvar = "pagenumber",
>> format = lambda x: "Página %d" % x),
>>     ])
>>
>>     _buffer = StringIO()
>>
>>     canvas = Canvas(_buffer, pagesize=landscape(A4))
>>     canvas.setTitle('Prueba con url imagen')
>>     rpt.generate(canvas)
>>     canvas.save()
>>
>>     response.headers['Content-**Type']='application/pdf'
>>     response.headers['Content-**Disposition'] = 'attachment;
>> filename=ventas.pdf'
>>
>>     return _buffer.getvalue()
>>
>> attached the pdf output.
>>
>> José
>>
>> [1] 
>> https://github.com/**Solomoriah/PollyReports<https://github.com/Solomoriah/PollyReports>
>> [2] 
>> http://pypi.python.org/**pypi/PollyReports<http://pypi.python.org/pypi/PollyReports>
>>
>  --
>
>
>
>

-- 



Reply via email to