Browse Source

Soportar datos enviados desde cliente vía jQuery

David Gómez 2 tháng trước cách đây
mục cha
commit
b89ac9e86c
3 tập tin đã thay đổi với 64 bổ sung13 xóa
  1. 35 8
      comanda.php
  2. 12 1
      factura_electronica.php
  3. 17 4
      precuenta.php

+ 35 - 8
comanda.php

@@ -21,22 +21,49 @@ use Mike42\Escpos\Printer;
 use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
 use Mike42\Escpos\EscposImage;
 
-$dataComanda = json_decode($_POST["dataComanda"]);
+// Recibir datos - puede venir como JSON string o como objeto serializado por jQuery
+$dataComanda = null;
+
+if(isset($_POST["dataComanda"])){
+    if(is_string($_POST["dataComanda"])){
+        $dataComanda = json_decode($_POST["dataComanda"]);
+    } else {
+        $dataComanda = json_decode(json_encode($_POST["dataComanda"]));
+    }
+} elseif(isset($_POST["dataPrint"])){
+    if(is_string($_POST["dataPrint"])){
+        $dataComanda = json_decode($_POST["dataPrint"]);
+    } else {
+        $dataComanda = json_decode(json_encode($_POST["dataPrint"]));
+    }
+}
 
 if($dataComanda){
+    // Verificar si tiene productos_cocina ya generados
+    if(isset($dataComanda->productos_cocina) && is_array($dataComanda->productos_cocina) && count($dataComanda->productos_cocina) > 0){
+        $productosPorCocina = $dataComanda->productos_cocina;
+    } else {
+        // Si no tiene productos_cocina, retornar error silencioso (no hay nada que imprimir en cocina)
+        echo json_encode(array('status' => 'success', 'message' => 'No hay productos para cocina'));
+        exit;
+    }
+    
     // Datos generales
-    $fecha = $dataComanda->fecha;
-    $numeroOrden = $dataComanda->numero_orden ?? "N/A";
-    $mesa = $dataComanda->mesa ?? "N/A";
-    $mesero = $dataComanda->mesero ?? "";
+    $fecha = $dataComanda->fecha ?? date("d-m-Y H:i:s");
+    $numeroOrden = $dataComanda->numero_orden ?? ($dataComanda->referencia ?? "N/A");
+    
+    // Extraer número de orden si viene con formato V-, C-, D-
+    if(isset($numeroOrden) && is_string($numeroOrden)){
+        $numeroOrden = str_replace(array("V-", "C-", "D-"), "", $numeroOrden);
+    }
+    
+    $mesa = $dataComanda->mesa_orden ?? ($dataComanda->mesa ?? "N/A");
+    $mesero = $dataComanda->mesero ?? ($dataComanda->vendedor ?? "");
     $cliente = $dataComanda->cliente ?? "";
     $servicio = $dataComanda->servicio ?? "";
     $notas = $dataComanda->notas ?? "";
     $observaciones = $dataComanda->observaciones ?? "";
     
-    // Productos agrupados por cocina
-    $productosPorCocina = $dataComanda->productos_cocina; // Array de objetos con: cocina, impresor, ancho, productos[]
-    
     $resultados = [];
     
     // Imprimir una comanda por cada cocina

+ 12 - 1
factura_electronica.php

@@ -23,7 +23,18 @@ use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
 use Mike42\Escpos\EscposImage;
 use Mike42\Escpos\PrintConnectors\FilePrintConnector;
 
-$dataPrint = json_decode($_POST["dataPrint"]);
+// Recibir datos - puede venir como JSON string o como objeto serializado por jQuery
+$dataPrint = null;
+
+if(isset($_POST["dataPrint"])){
+    // Si es string JSON, decodificar
+    if(is_string($_POST["dataPrint"])){
+        $dataPrint = json_decode($_POST["dataPrint"]);
+    } else {
+        // Si jQuery ya lo deserializó como array, convertir a objeto
+        $dataPrint = json_decode(json_encode($_POST["dataPrint"]));
+    }
+}
 
 if($dataPrint){
     //Printer Name

+ 17 - 4
precuenta.php

@@ -67,8 +67,15 @@ function printTextBold($printer, $label, $value) {
 
 // Get data from POST
 $dataPrint = null;
+
 if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["dataPrint"])) {
-    $dataPrint = json_decode($_POST["dataPrint"]);
+    // Si es string JSON, decodificar
+    if(is_string($_POST["dataPrint"])){
+        $dataPrint = json_decode($_POST["dataPrint"]);
+    } else {
+        // Si jQuery ya lo deserializó como array, convertir a objeto
+        $dataPrint = json_decode(json_encode($_POST["dataPrint"]));
+    }
 }
 
 if ($dataPrint) {
@@ -134,12 +141,18 @@ if ($dataPrint) {
             
             // Imprimir acompañamientos si existen
             if (isset($producto->acompanamientos) && $producto->acompanamientos != "") {
-                $printer->text("      CON: " . strtoupper($producto->acompanamientos) . "\n");
+                $printer->setEmphasis(true);
+                $printer->text("      CON: ");
+                $printer->setEmphasis(false);
+                $printer->text(strtoupper($producto->acompanamientos) . "\n");
             }
             
             // Imprimir notas si existen
             if (isset($producto->notas) && $producto->notas != "") {
-                $printer->text("      * " . strtoupper($producto->notas) . "\n");
+                $printer->setEmphasis(true);
+                $printer->text("      NOTA: ");
+                $printer->setEmphasis(false);
+                $printer->text(strtoupper($producto->notas) . "\n");
             }
         }
         
@@ -166,7 +179,7 @@ if ($dataPrint) {
         if (isset($dataPrint->notas_orden) && $dataPrint->notas_orden != "") {
             $printer->setJustification(Printer::JUSTIFY_LEFT);
             $printer->setEmphasis(true);
-            $printer->text("NOTAS ORDEN: \n");
+            $printer->text("NOTAS ORDEN:\n");
             $printer->setEmphasis(false);
             $notasLines = wordwrap($dataPrint->notas_orden, 48, "\n", true);
             foreach (explode("\n", $notasLines) as $linea) {