import 'dart:convert'; import 'package:csv/csv.dart'; import 'package:intl/intl.dart'; import 'package:path_provider/path_provider.dart'; import 'dart:io'; import 'package:path/path.dart' as p; import '../../models/models.dart'; Future exportarPedidosACSV(List pedidos, String fileName) async { List> rows = [ [ "Folio", "Cliente", "Producto", "Cantidad", "Precio Unitario", "Toppings", "Descuento (%)", "Estado", "Fecha", "Total con Descuento", "Tipo de Pago", "Cantidad Efectivo", "Cantidad Tarjeta", "Cantidad Transferencia" ] ]; for (var pedido in pedidos) { for (var producto in pedido.productos) { // Convertir toppings a una cadena de texto y calcular el total adicional de los toppings double totalToppingsPrecio = 0.0; String toppingsText = producto.toppings.isNotEmpty ? producto.toppings.map((t) { String toppingNombre = t.topping?.nombre ?? 'Topping no especificado'; double toppingPrecio = double.tryParse(t.topping?.precio ?? '0') ?? 0.0; if (toppingPrecio > 0) { toppingNombre += "(+\$${formatCurrency(toppingPrecio)})"; totalToppingsPrecio += toppingPrecio; } return toppingNombre; }).join(', ') : 'Sin toppings'; // Calcular el total con descuento para este producto double precioUnitario = double.tryParse(producto.producto?.precio ?? '0') ?? 0.0; double subtotal = (precioUnitario + totalToppingsPrecio) * (producto.cantidad ?? 1); double descuento = pedido.descuento?.toDouble() ?? 0.0; double precioDescuento = subtotal * (descuento / 100); double totalConDescuento = subtotal - precioDescuento; List row = [ pedido.folio, pedido.nombreCliente, producto.producto?.nombre ?? 'No especificado', producto.cantidad, formatCurrency(precioUnitario), toppingsText, descuento, pedido.estatus, pedido.peticion ?? '', formatCurrency(totalConDescuento), pedido.tipoPago ?? 'No especificado', formatCurrency(pedido.cantEfectivo ?? 0.0), formatCurrency(pedido.cantTarjeta ?? 0.0), formatCurrency(pedido.cantTransferencia ?? 0.0), ]; rows.add(row); } } String csv = const ListToCsvConverter().convert(rows); final directory = await getApplicationDocumentsDirectory(); final path = p.join(directory.path, fileName); final file = File(path); final utf8Csv = utf8.encode('\uFEFF' + csv); await file.writeAsBytes(utf8Csv, flush: true); print('Archivo CSV guardado en $path'); } String formatCurrency(double amount) { final format = NumberFormat("#,##0.00", "es_MX"); return format.format(amount); }