Ejemplo n.º 1
0
def reporte(request, datos, nombre, inicio, fin, categoria):
    ##Esta data nosotros la generaremos con django serán las consultas
    # esta siendo generado aleatoriamente todo lo saqué de un ejemplo de inter y lo fui modificando

    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename={}.pdf'.format(
        nombre)
    buffer = io.BytesIO()
    c = canvas.Canvas(buffer, pagesize=A4)
    w, h = A4
    max_rows_per_page = 25  #Aquí ponemos cuantos registros queremos por páginas
    # Margin.
    x_offset = 50
    y_offset = 150
    # Space between rows.
    padding = 15
    #Imagen
    c.drawImage(settings.MEDIA_ROOT + '/logo/logo.png',
                x_offset,
                h - 75,
                width=50,
                height=50)  #Aquí vamos a buscar la ubicación del logo

    #titulos
    periodo = "Periodo inicio: {} Periodo Fin: {}".format(inicio, fin)
    texto_pdf(c, h, w, "CiberCachada", 14, 65)
    texto_pdf(c, h, w, "Productos más vendidos", 12, 80)
    texto_pdf(c, h, w, periodo, 12, 95)
    if (categoria):
        data = [("Producto", "Cantidad", "Ganancia", "Inventario")
                ]  # Este es el encabezado
        for i in datos:
            data.append(
                (i['idProducto__nombre'], '{}'.format(i['cantidad__sum']),
                 '$ {}'.format(i['ganancia']), '{}'.format(i['inventario'])))
        xlist = [x + x_offset for x in [50, 200, 325, 440, 500]]
        ylist = [
            h - y_offset - i * padding for i in range(max_rows_per_page + 1)
        ]
    else:
        data = [("Producto", "Categoria", "Cantidad", "Ganancia", "Inventario")
                ]  # Este es el encabezado
        for i in datos:
            data.append(
                (i['idProducto__nombre'], i['idProducto__idCategoria__nombre'],
                 '{}'.format(i['cantidad__sum']), '$ {}'.format(i['ganancia']),
                 '{}'.format(i['inventario'])))
        xlist = [x + x_offset for x in [50, 200, 300, 370, 440, 500]]
        ylist = [
            h - y_offset - i * padding for i in range(max_rows_per_page + 1)
        ]

    #Aquí es donde inserta la data
    insert_data_pdf(data, max_rows_per_page, xlist, ylist, c, padding)

    c.save()
    pdf = buffer.getvalue()
    buffer.close()
    response.write(pdf)
    return response
Ejemplo n.º 2
0
def reporte(request, datos, nombre):
    ##Esta data nosotros la generaremos con django serán las consultas
    # esta siendo generado aleatoriamente todo lo saqué de un ejemplo de inter y lo fui modificando
    data = [("Fecha", "Usuario", "Acciones")]  # Este es el encabezado
    for i in datos:
        data.append(
            ('{}'.format(datetime.strftime(i.fecha,
                                           '%d/%m/%Y')), i.usuario, i.accion))

    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename={}.pdf'.format(
        nombre)
    buffer = io.BytesIO()
    c = canvas.Canvas(buffer, pagesize=A4)
    w, h = A4
    max_rows_per_page = 25  #Aquí ponemos cuantos registros queremos por páginas
    # Margin.
    x_offset = 50
    y_offset = 150
    # Space between rows.
    padding = 15
    #Imagen
    c.drawImage(settings.MEDIA_ROOT + '/logo/logo.png',
                x_offset,
                h - 75,
                width=50,
                height=50)  #Aquí vamos a buscar la ubicación del logo

    #titulos
    texto_pdf(c, h, w, "CiberCachada", 14, 65)
    texto_pdf(c, h, w, "Bitacora de Usuarios", 12, 80)

    xlist = [x + x_offset for x in [0, 75, 230, 500]]
    ylist = [h - y_offset - i * padding for i in range(max_rows_per_page + 1)]

    #Aquí es donde inserta la data
    insert_data_pdf(data, max_rows_per_page, xlist, ylist, c, padding)

    c.save()
    pdf = buffer.getvalue()
    buffer.close()
    response.write(pdf)
    return response