comanda_movil.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. /**
  3. * Archivo para imprimir comandas desde app móvil
  4. * Recibe datos vía POST y los distribuye a las impresoras según cocina
  5. * Usa librería: mike42/escpos-php
  6. */
  7. if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  8. header("Access-Control-Allow-Origin: *");
  9. header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
  10. header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
  11. http_response_code(204);
  12. exit;
  13. }
  14. header("Access-Control-Allow-Origin: *");
  15. header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
  16. header("Access-Control-Allow-Headers: Content-Type, Authorization");
  17. header('Content-Type: application/json; charset=utf-8');
  18. error_reporting(E_ALL);
  19. ini_set('display_errors', 0);
  20. ini_set('log_errors', 1);
  21. ini_set('error_log', 'logs/error.log');
  22. require __DIR__ . '/vendor/autoload.php';
  23. use Mike42\Escpos\Printer;
  24. use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
  25. // Recibir datos
  26. $dataPrint = null;
  27. if(isset($_POST["dataPrint"])){
  28. if(is_string($_POST["dataPrint"])){
  29. $dataPrint = json_decode($_POST["dataPrint"], true);
  30. } else {
  31. $dataPrint = $_POST["dataPrint"];
  32. }
  33. }
  34. if(!$dataPrint){
  35. echo json_encode(['success' => false, 'status' => 'error', 'message' => 'No se recibieron datos para imprimir', 'errores' => []]);
  36. exit;
  37. }
  38. if (!isset($dataPrint['impresos']) || empty($dataPrint['impresos'])) {
  39. echo json_encode(['success' => false, 'status' => 'error', 'message' => 'No hay comandas para imprimir', 'errores' => []]);
  40. exit;
  41. }
  42. $impresos = $dataPrint['impresos'];
  43. $errores = array();
  44. $exitos = array();
  45. // Iterar sobre cada impresora/cocina
  46. foreach ($impresos as $nombreImpresora => $datosComanda) {
  47. try {
  48. // Crear connector según el nombre de la impresora
  49. $connector = new WindowsPrintConnector($nombreImpresora);
  50. $printer = new Printer($connector);
  51. // ENCABEZADO
  52. $printer->setJustification(Printer::JUSTIFY_CENTER);
  53. $printer->setTextSize(2, 2);
  54. $printer->text($datosComanda['cocina'] . "\n");
  55. $printer->setTextSize(1, 1);
  56. $printer->text(str_repeat("=", 45) . "\n");
  57. $printer->setEmphasis(true);
  58. $printer->text("ORDEN #" . (isset($datosComanda['num_orden']) ? $datosComanda['num_orden'] : $datosComanda['id_orden']) . "\n");
  59. $printer->setEmphasis(false);
  60. $printer->text(str_repeat("=", 45) . "\n");
  61. // INFORMACIÓN DE LA ORDEN
  62. $printer->setJustification(Printer::JUSTIFY_LEFT);
  63. $printer->setEmphasis(true);
  64. $printer->text("Fecha: ");
  65. $printer->setEmphasis(false);
  66. $printer->text(date('d/m/Y H:i', strtotime($datosComanda['fecha'])) . "\n");
  67. $printer->setEmphasis(true);
  68. $printer->text("Mesa: ");
  69. $printer->setEmphasis(false);
  70. $printer->text($datosComanda['mesa'] . "\n");
  71. /*
  72. $printer->setEmphasis(true);
  73. $printer->text("Mesero: ");
  74. $printer->setEmphasis(false);
  75. $printer->text($datosComanda['mesero'] . "\n");
  76. $printer->setEmphasis(true);
  77. $printer->text("Cliente: ");
  78. $printer->setEmphasis(false);
  79. $printer->text($datosComanda['cliente'] . "\n");*/
  80. $printer->setEmphasis(true);
  81. $printer->text("Servicio: ");
  82. $printer->setEmphasis(false);
  83. $printer->text($datosComanda['servicio'] . "\n");
  84. $printer->text(str_repeat("-", 45) . "\n");
  85. // PLATOS
  86. $printer->setEmphasis(true);
  87. $printer->text("PLATOS:\n");
  88. $printer->setEmphasis(false);
  89. $printer->text(str_repeat("-", 45) . "\n");
  90. foreach ($datosComanda['platos'] as $plato) {
  91. // $plato es un array con [cant, nombre, acompanamientos, notas]
  92. $cant = $plato[0];
  93. $nombre = $plato[1];
  94. $acompanamientos = isset($plato[2]) ? $plato[2] : '';
  95. $notas = isset($plato[3]) ? $plato[3] : '';
  96. // Cantidad y nombre del plato
  97. $printer->setEmphasis(true);
  98. $printer->setTextSize(1, 1);
  99. $printer->text(number_format($cant, 0) . "x " . $nombre . "\n");
  100. $printer->setEmphasis(false);
  101. // Acompañamientos
  102. if (!empty($acompanamientos)) {
  103. $printer->text(" " . $acompanamientos . "\n");
  104. }
  105. // Notas del plato
  106. if (!empty($notas)) {
  107. $printer->text(" Notas: " . $notas . "\n");
  108. }
  109. $printer->text("\n");
  110. }
  111. $printer->text(str_repeat("=", 45) . "\n");
  112. // NOTAS GENERALES DE LA ORDEN
  113. if (!empty($datosComanda['notas'])) {
  114. $printer->text("\n");
  115. $printer->setEmphasis(true);
  116. $printer->setTextSize(1, 1);
  117. $printer->text("*** NOTAS ***\n");
  118. $printer->setTextSize(1, 1);
  119. $printer->setEmphasis(false);
  120. $printer->text($datosComanda['notas'] . "\n");
  121. $printer->text(str_repeat("=", 45) . "\n");
  122. }
  123. $printer->feed(3);
  124. $printer->cut();
  125. $printer->close();
  126. $exitos[] = $nombreImpresora . " (" . $datosComanda['cocina'] . ")";
  127. } catch (Exception $e) {
  128. $errores[] = array(
  129. 'impresora' => $nombreImpresora,
  130. 'cocina' => isset($datosComanda['cocina']) ? $datosComanda['cocina'] : 'N/A',
  131. 'error' => $e->getMessage()
  132. );
  133. }
  134. }
  135. // Respuesta
  136. $response = array(
  137. 'success' => count($errores) == 0,
  138. 'status' => count($errores) == 0 ? 'success' : 'partial',
  139. 'exitos' => $exitos,
  140. 'errores' => $errores,
  141. 'total_impresos' => count($impresos),
  142. 'total_exitos' => count($exitos),
  143. 'total_errores' => count($errores),
  144. 'message' => count($errores) == 0
  145. ? 'Todas las comandas se imprimieron correctamente'
  146. : 'Algunas comandas no se pudieron imprimir'
  147. );
  148. echo json_encode($response);