diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 2d7aefc5..e7d0628c 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -784,7 +784,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->post("fa/tareas/finish", 'Ordentrabajo::update_orden_trabajo_fa_tareas'); $routes->post('maquinas/ots','Ordentrabajo::store_maquina_ordenes_trabajo'); $routes->post('maquinas/ots/estado','Ordentrabajo::update_maquina_ordenes_trabajo_estado'); - + /**DELETES */ $routes->delete("portada/(:num)", 'Ordentrabajo::delete_orden_trabajo_portada/$1'); @@ -837,6 +837,9 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func /** DATATABLE */ $routes->get('maquinas/tareas/datatable/(:alpha)/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_datatable/$1/$2', ['as' => 'viewMaquinistaMaquinaTareaDatatable']); $routes->get('maquinas/tareas/aplazadas/datatable/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_aplazada_datatable/$1', ['as' => 'viewMaquinistaMaquinaTareaAplazadaDatatable']); + + /** POST */ + $routes->post('maquinas/tareas/printLabels', 'Ordentrabajo::printPackagingLabels'); }); }); }); diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index e2b1cee1..fa55a063 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -11,6 +11,8 @@ use App\Models\OrdenTrabajo\OrdenTrabajoTarea; use App\Models\OrdenTrabajo\OrdenTrabajoUser; use App\Models\Presupuestos\PresupuestoModel; use App\Models\Usuarios\UserModel; +use App\Services\EtiquetasTitulosService; +use App\Services\ImpresoraEtiquetaService; use App\Services\ProductionService; use CodeIgniter\Files\File; use CodeIgniter\HTTP\RequestInterface; @@ -22,6 +24,7 @@ use Exception; use Hermawan\DataTables\DataTable; use Psr\Log\LoggerInterface; + class Ordentrabajo extends BaseController { protected $format = 'json'; @@ -627,10 +630,19 @@ class Ordentrabajo extends BaseController public function maquinista_maquina_tarea_view(int $orden_trabajo_tarea_id) { + $modelImpresoras = model('App\Models\Configuracion\ImpresoraEtiquetaModel'); + $impresoras = $modelImpresoras->select('id, name') + ->where('deleted_at', null) + ->where('tipo', 1) + ->orderBy('name', 'asc') + ->findAll(); + $impresoras = array_map(fn($impresora) => $impresora->toArray(), $impresoras); $otTareaEntity = $this->otTarea->find($orden_trabajo_tarea_id); $this->viewData['ot_tarea'] = $otTareaEntity; $this->viewData['ot'] = $otTareaEntity->orden_trabajo(); $this->viewData['presupuesto'] = $this->viewData['ot']->presupuesto(); + + $this->viewData['impresoras'] = $impresoras; $this->viewData['breadcrumb'] = [ ['title' => lang("Produccion.maquinista.maquinas"), 'route' => route_to("viewProduccionMaquinistaMaquinas"), 'active' => false], ['title' => $otTareaEntity->maquina_actual()->nombre, 'route' => route_to("viewProduccionMaquinaTareasList", $otTareaEntity?->maquina_actual()?->id), 'active' => true], @@ -892,4 +904,36 @@ class Ordentrabajo extends BaseController return $this->response->setJSON($responseData); } + + public function printPackagingLabels(){ + + $ot_id = $this->request->getPost('ot_id') ?? null; + $unidades_caja = $this->request->getPost('unidades_caja') ?? null; + $impresora_id = $this->request->getPost('impresora_id') ?? null; + + if ($ot_id == null || $impresora_id == null) { + return [ + 'status' => false, + 'message' => lang('Logistica.errors.errorMissingData') + ]; + } + + $modelImpresora = model('App\Models\Configuracion\ImpresoraEtiquetaModel'); + $impresora = $modelImpresora->select('id, name, ip, port, user, pass') + ->where('deleted_at', null) + ->where('id', $impresora_id) + ->orderBy('name', 'asc') + ->first(); + if ($impresora == null) { + return $this->response->setJSON([ + 'status' => false, + 'message' => 'Impresora no válida' + ]); + } + + $printerService = new ImpresoraEtiquetaService(); + $result = $printerService->generateEtiquetasEmbalaje($ot_id, $unidades_caja, $impresora); + + return $this->response->setJSON($result); + } } diff --git a/ci4/app/Services/ImpresoraEtiquetaService.php b/ci4/app/Services/ImpresoraEtiquetaService.php index 9f884c09..46f4cd9f 100755 --- a/ci4/app/Services/ImpresoraEtiquetaService.php +++ b/ci4/app/Services/ImpresoraEtiquetaService.php @@ -134,6 +134,87 @@ class ImpresoraEtiquetaService extends BaseService return $xml->saveXML(); } + public function generateEtiquetasEmbalaje($ot_id, $ejemplares_caja, $printer) + { + $data = [ + "printer" => $printer->name, + "header" => [ + "_FORMAT" => "E:PEDIDO.ZPL", + "_QUANTITY" => 1, + "_PRINBTERNAME" => $printer->name, + "_JOBNAME" => "LBL101" + ], + ]; + + $ot_model = model('App\Models\OrdenTrabajo\OrdenTrabajoModel'); + $datos = $ot_model->select(' + ordenes_trabajo.total_tirada as unidades, + clientes.nombre as cliente, + presupuestos.titulo as titulo, + presupuestos.isbn as isbn, + presupuestos.referencia_cliente as referencia_cliente, + pedidos.id as pedido + ') + ->join('pedidos', 'ordenes_trabajo.pedido_id = pedidos.id') + ->join('pedidos_linea', 'pedidos.id = pedidos_linea.pedido_id') + ->join('presupuestos', 'pedidos_linea.presupuesto_id = presupuestos.id') + ->join('clientes', 'presupuestos.cliente_id = clientes.id') + ->where('ordenes_trabajo.id', $ot_id) + ->first(); + $cajas = ceil($datos->unidades / $ejemplares_caja); + $cantidad = 0; + + for( $i = 1; $i <= $cajas; $i++) { + $data["labels"][] = [ + "cliente" => $datos->cliente, + "titulo" => $datos->titulo, + "cantidad" => $cantidad + $ejemplares_caja <= $datos->unidades ? $ejemplares_caja : $datos->unidades-$cantidad, + "tirada" => $datos->unidades, + "cajas" => $cajas, + "ean" => str_replace("-", "", $datos->isbn), + "nombre" => null, + "direccion" => null, + "notas" => "", + "refcliente" => $datos->referencia_cliente, + "npedido" => $datos->pedido + ]; + + $cantidad += $ejemplares_caja; + } + + $servicioImpresora = new ImpresoraEtiquetaService(); + $xml = $servicioImpresora->createEtiqueta($data); + if ($xml == null) { + return [ + 'status' => false, + 'message' => lang('Logistica.errors.noEtiquetas'), + ]; + } + $sk_environment = getenv('SK_ENVIRONMENT'); + if ($sk_environment == 'production') { + + $status = $servicioImpresora->sendToImpresoraEtiqueta("ETIQUETA", $xml, $printer); + if ($status) { + return [ + 'status' => true, + 'message' => lang('Logistica.success.imprimirEtiquetas'), + 'data' => $xml + ]; + } else { + return [ + 'status' => false, + 'message' => lang('Logistica.errors.noEtiquetas'), + ]; + } + + } else { + return [ + 'status' => true, + 'message' => lang('Logistica.success.imprimirEtiquetas'), + 'data' => $xml + ]; + } + } public function sendToImpresoraEtiqueta(string $name, string $content, ImpresoraEtiquetaEntity $impresoraEtiqueta): bool diff --git a/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php b/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php index 735f1d6f..096ce7d9 100644 --- a/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php +++ b/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php @@ -11,7 +11,7 @@
OT ID
-Clicks presupuesto
diff --git a/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php index 82b23e5a..66d37d4d 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php @@ -6,6 +6,9 @@ = $this->section('content'); ?>