You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

83 lines
2.6 KiB

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
import openpyxl
import csv
from django.template.loader import get_template
from xhtml2pdf import pisa
from django.shortcuts import render
from .models import inventario
@login_required
def generar_reporte_pdf(request):
# Obtener datos del inventario
inventarios = inventario.objects.all()
# Cargar la plantilla
template = get_template('pdf.html')
context = {'inventarios': inventarios}
# Renderizar la plantilla a HTML
html = template.render(context)
# Crear un objeto de respuesta PDF
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename="reporte.pdf"'
# Convertir HTML a PDF
pisa_status = pisa.CreatePDF(html, dest=response)
if pisa_status.err:
return HttpResponse(f'Error al generar PDF: {pisa_status.err}', status=500)
return response
@login_required
def generar_reporte_excel(request):
# Crear un nuevo libro de Excel
wb = openpyxl.Workbook()
ws = wb.active
ws.title = 'Reporte de Inventario'
# Encabezados
headers = ['ID', 'Bodega', 'Artículo', 'Cantidad', 'Precio']
ws.append(headers)
# Datos del inventario
for item in inventario.objects.all():
ws.append([item.id, item.bodega.nombre_bodega, item.articulo.nombre_articulo, item.cantidad, item.precio])
# Configurar la respuesta HTTP
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename="reporte_inventario.xlsx"'
# Guardar el archivo en la respuesta
wb.save(response)
return response
@login_required
def generar_reporte_csv(request):
# Configurar la respuesta HTTP
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="reporte_inventario.csv"'
writer = csv.writer(response)
# Encabezados
writer.writerow(['ID', 'Bodega', 'Artículo', 'Cantidad', 'Precio'])
# Datos del inventario
for item in inventario.objects.all():
writer.writerow([item.id, item.bodega.nombre_bodega, item.articulo.nombre_articulo, item.cantidad, item.precio])
return response
@login_required
def generar_grafico_chartjs(request):
inventarios = inventario.objects.all()
productos = [item.articulo.nombre_articulo for item in inventarios]
cantidades = [item.cantidad for item in inventarios]
return render(request, 'grafico_chartjs.html', {
'productos': productos,
'cantidades': cantidades,
})