false, 'status' => 'error', 'message' => 'No se recibieron datos para imprimir', 'errores' => []]); exit; } if (!isset($dataPrint['impresos']) || empty($dataPrint['impresos'])) { echo json_encode(['success' => false, 'status' => 'error', 'message' => 'No hay comandas para imprimir', 'errores' => []]); exit; } $impresos = $dataPrint['impresos']; $errores = array(); $exitos = array(); // Iterar sobre cada impresora/cocina foreach ($impresos as $nombreImpresora => $datosComanda) { try { // Crear connector según el nombre de la impresora $connector = new WindowsPrintConnector($nombreImpresora); $printer = new Printer($connector); // ENCABEZADO $printer->setJustification(Printer::JUSTIFY_CENTER); $printer->setTextSize(2, 2); $printer->text($datosComanda['cocina'] . "\n"); $printer->setTextSize(1, 1); $printer->text(str_repeat("=", 45) . "\n"); $printer->setEmphasis(true); $printer->text("ORDEN #" . (isset($datosComanda['num_orden']) ? $datosComanda['num_orden'] : $datosComanda['id_orden']) . "\n"); $printer->setEmphasis(false); $printer->text(str_repeat("=", 45) . "\n"); // INFORMACIÓN DE LA ORDEN $printer->setJustification(Printer::JUSTIFY_LEFT); $printer->setEmphasis(true); $printer->text("Fecha: "); $printer->setEmphasis(false); $printer->text(date('d/m/Y H:i', strtotime($datosComanda['fecha'])) . "\n"); $printer->setEmphasis(true); $printer->text("Mesa: "); $printer->setEmphasis(false); $printer->text($datosComanda['mesa'] . "\n"); $printer->setEmphasis(true); $printer->text("Mesero: "); $printer->setEmphasis(false); $printer->text($datosComanda['mesero'] . "\n"); $printer->setEmphasis(true); $printer->text("Cliente: "); $printer->setEmphasis(false); $printer->text($datosComanda['cliente'] . "\n"); $printer->setEmphasis(true); $printer->text("Servicio: "); $printer->setEmphasis(false); $printer->text($datosComanda['servicio'] . "\n"); $printer->text(str_repeat("-", 45) . "\n"); // PLATOS $printer->setEmphasis(true); $printer->text("PLATOS:\n"); $printer->setEmphasis(false); $printer->text(str_repeat("-", 45) . "\n"); foreach ($datosComanda['platos'] as $plato) { // $plato es un array con [cant, nombre, acompanamientos, notas, precio] $cant = $plato[0]; $nombre = $plato[1]; $acompanamientos = isset($plato[2]) ? $plato[2] : ''; $notas = isset($plato[3]) ? $plato[3] : ''; $precio = isset($plato[4]) ? $plato[4] : 0; // Cantidad, nombre y precio del plato con tamaño configurable global $TAMANO_LETRA_PLATOS; $tamano = getTamanoTexto($TAMANO_LETRA_PLATOS); $printer->setEmphasis(true); $printer->setTextSize($tamano[0], $tamano[1]); $printer->text(number_format($cant, 0) . "x " . $nombre . " - $" . number_format($precio, 2) . "\n"); $printer->setEmphasis(false); $printer->setTextSize(1, 1); // Acompañamientos if (!empty($acompanamientos)) { $printer->text(" " . $acompanamientos . "\n"); } // Notas del plato if (!empty($notas)) { $printer->text(" Notas: " . $notas . "\n"); } $printer->text("\n"); } $printer->text(str_repeat("=", 45) . "\n"); // NOTAS GENERALES DE LA ORDEN if (!empty($datosComanda['notas'])) { global $TAMANO_LETRA_PLATOS; $tamano = getTamanoTexto($TAMANO_LETRA_PLATOS); $printer->text("\n"); $printer->setEmphasis(true); $printer->setTextSize(1, 1); $printer->text("*** NOTAS ***\n"); $printer->setEmphasis(false); $printer->setTextSize($tamano[0], $tamano[1]); $printer->text($datosComanda['notas'] . "\n"); $printer->setTextSize(1, 1); $printer->text(str_repeat("=", 45) . "\n"); } $printer->feed(3); $printer->cut(); $printer->getPrintConnector()->write("\x1B\x42" . chr(4) . chr(1)); $printer->close(); $exitos[] = $nombreImpresora . " (" . $datosComanda['cocina'] . ")"; } catch (Exception $e) { $errores[] = array( 'impresora' => $nombreImpresora, 'cocina' => isset($datosComanda['cocina']) ? $datosComanda['cocina'] : 'N/A', 'error' => $e->getMessage() ); } } // Respuesta $response = array( 'success' => count($errores) == 0, 'status' => count($errores) == 0 ? 'success' : 'partial', 'exitos' => $exitos, 'errores' => $errores, 'total_impresos' => count($impresos), 'total_exitos' => count($exitos), 'total_errores' => count($errores), 'message' => count($errores) == 0 ? 'Todas las comandas se imprimieron correctamente' : 'Algunas comandas no se pudieron imprimir' ); echo json_encode($response);