alforro

Factura Guggiari

Nov 22nd, 2020 (edited)
436
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from django.shortcuts import render
  2. from reportlab.lib.units import cm
  3. from django.http import HttpResponse
  4. from io import BytesIO
  5. from reportlab.pdfgen import canvas
  6.  
  7. A5 = (21.0*cm, 14.8*cm)
  8. # Create your views here.
  9.  
  10.  
  11. def imprimir(req, data = {}):
  12.     import locale
  13.     locale.setlocale(locale.LC_ALL, 'es_PY.UTF-8')
  14.  
  15.     def contenido(canvas, factura):
  16.         from reportlab.lib.colors import darkblue, black
  17.         line = 0.4
  18.         canvas.setFillColor(black)
  19.         canvas.setStrokeColor(black)
  20.         canvas.setFont("Helvetica", 5)
  21.  
  22.         def cabecera(col,row):
  23.             if factura['condicion_venta'] == 'CONTADO':
  24.                 contado = 7.8
  25.             else:
  26.                 contado = 9.5
  27.             canvas.drawString(col + 2.5 * cm, row, factura['fecha'])
  28.             canvas.drawString(col + contado * cm, row, 'X')
  29.             row -= line * cm
  30.             canvas.drawString(col + 3 * cm, row, factura['razon_social'])
  31.             row -= line*cm
  32.             canvas.drawString(col + 3.2 * cm, row, factura['ruc_ci'])
  33.             canvas.drawString(col + 7.5 * cm, row, factura['nota_nro'])
  34.             row -= line * cm
  35.             canvas.drawString(col + 2 * cm, row, factura['direccion'])
  36.             canvas.drawString(col + 6.7 * cm, row, factura['telefono'])
  37.             return row
  38.         def detalles(col,row):
  39.             for producto in factura['productos']:
  40.                 if producto['iva_tipo']=='0':
  41.                     iva_pos = 6.8
  42.                 elif producto['iva_tipo']=='5':
  43.                     iva_pos = 7.7
  44.                 else:
  45.                     iva_pos = 9
  46.                 canvas.drawString(col + 0.6 * cm, row, producto['cantidad'])
  47.                 canvas.drawString(col + 1.5 * cm, row, producto['descripcion'])
  48.                 canvas.drawString(col + 5.6 * cm, row, producto['precio'])
  49.                 canvas.drawString(col + iva_pos * cm, row, producto['iva_numero'])
  50.                 row -= line * cm
  51.             return row
  52.         def pie(col,row):
  53.             canvas.drawString(col + 6.5 * cm, row, factura['exentas'])
  54.             canvas.drawString(col + 7.6 * cm, row, factura['gravadas_5'])
  55.             canvas.drawString(col + 8.8 * cm, row, factura['gravadas_10'])
  56.             row -= line * cm
  57.             canvas.drawString(col + 2 * cm, row, factura['total'])
  58.             row -= line*cm
  59.             canvas.drawString(col + 3.1 * cm, row, factura['total'])
  60.             canvas.drawString(col + 5.1 * cm, row, factura['total'])
  61.             canvas.drawString(col + 8 * cm, row, factura['total'])
  62.             return row
  63.         row = cabecera(col= 0 * cm,row = 11.7 * cm)
  64.         row = cabecera(col= 10.5 * cm, row= 11.7 * cm)
  65.         row = detalles(col=0 * cm, row=9.3* cm)
  66.         row = detalles(col=10.5 * cm, row=9.3* cm)
  67.         row = pie(col= 0 * cm, row= 2.1 * cm)
  68.         row = pie(col= 10.5 * cm, row= 2.1 * cm)
  69.            
  70.     response = HttpResponse(content_type='application/pdf')
  71.     buffer = BytesIO()
  72.     p = canvas.Canvas(buffer, pagesize=A5)
  73.     factura = {
  74.         'fecha' : '20/11/2020',
  75.         'razon_social' : 'Juan Bernardo Duarte',
  76.         'ruc_ci': '4653346-0',
  77.         'direccion': 'san lorenzo 2020 c/ luque',
  78.         'condicion_venta': 'CREDITO',
  79.         'nota_nro':'000001',
  80.         'telefono':'0961849365',
  81.         'exentas': '9.999.999',
  82.         'gravadas_5': '9.999.999',
  83.         'gravadas_10': '9.999.999',
  84.         'total':'9.999.999',
  85.         'iva_5':'9.999.999',
  86.         'iva_10': '9.999.999',
  87.         'iva_total':'9.999.999',
  88.         'productos': [
  89.             {
  90.                 'cantidad': '1',
  91.                 'descripcion': 'producto numero 1',
  92.                 'precio': '9.999.999',
  93.                 'iva_tipo':'0',
  94.                 'iva_numero': '9.999.999'
  95.             },
  96.                         {
  97.                 'cantidad': '20',
  98.                 'descripcion': 'producto numero 2 iva 5%',
  99.                 'precio': '9.999.999',
  100.                 'iva_tipo':'5',
  101.                 'iva_numero': '499.999'
  102.             },            {
  103.                 'cantidad': '5',
  104.                 'descripcion': 'producto numero 3 iva 10%',
  105.                 'precio': '9.999.999',
  106.                 'iva_tipo':'10',
  107.                 'iva_numero': '909090'
  108.             }
  109.  
  110.         ]
  111.  
  112.     }
  113.     contenido(p,factura)
  114.     p.save()
  115.     pdf = buffer.getvalue()
  116.     buffer.close()
  117.     response.write(pdf)
  118.     return response
  119.  
RAW Paste Data