table('envios')->select('direccion')->where('id', $envio_id)->get()->getRow(); if (!$envio) { return $db->table('(SELECT NULL AS id, NULL AS name) AS empty')->where('1 = 0'); } $direccionNormalizada = str_replace(' ', '', strtolower(trim($envio->direccion))); $direccionSQL = $db->escape($direccionNormalizada); // 2. Obtener presupuestos con esa dirección $presupuestosConEsaDireccion = $db->table('presupuesto_direcciones') ->select('presupuesto_id') ->where("REPLACE(LOWER(TRIM(direccion)), ' ', '') = $direccionSQL", null, false) ->get() ->getResultArray(); $presupuestoIds = array_column($presupuestosConEsaDireccion, 'presupuesto_id'); if (empty($presupuestoIds)) { return $db->table('(SELECT NULL AS id, NULL AS name) AS empty')->where('1 = 0'); } // 3. Subconsulta principal $subBuilder = $db->table('pedidos_linea pl') ->select(" ot.id AS id, CONCAT('[', ot.id, '] - ', pr.titulo) AS name, ( SELECT IFNULL(SUM(el.unidades_envio), 0) FROM envios_lineas el JOIN envios e ON e.id = el.envio_id WHERE el.pedido_id = p.id AND el.presupuesto_id = pr.id AND REPLACE(LOWER(TRIM(e.direccion)), ' ', '') = $direccionSQL AND (e.finalizado = 1 OR e.id = $envio_id) ) AS unidades_enviadas, pd.cantidad AS cantidad ") ->join('pedidos p', 'p.id = pl.pedido_id') ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') ->join('orden_trabajo_dates ot_dates', 'ot_dates.orden_trabajo_id = ot.id') ->whereIn('pr.id', $presupuestoIds) ->whereIn('p.estado', ['finalizado', 'produccion']) ->where('p.fecha_encuadernado IS NOT NULL') ->where('DATE(p.fecha_encuadernado) <=', date('Y-m-d')) ->where("NOT EXISTS ( SELECT 1 FROM envios_lineas el WHERE el.envio_id = $envio_id AND el.pedido_id = p.id AND el.presupuesto_id = pr.id GROUP BY el.pedido_id, el.presupuesto_id HAVING SUM(el.unidades_envio) >= pd.cantidad )", null, false) ->groupBy('pl.id'); // 4. Envolver y filtrar por unidades pendientes $builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub"); $builder->select('id, name'); $builder->where('cantidad > unidades_enviadas'); $builder->orderBy('name', 'ASC'); return $builder; } public static function findNextEnvios(int $envio_id) { $db = \Config\Database::connect(); // 1. Dirección del envío actual $envio = $db->table('envios')->select('direccion')->where('id', $envio_id)->get()->getRow(); if (!$envio) { return $db->table('(SELECT NULL AS id, NULL AS name) AS empty')->where('1 = 0'); } $direccionNormalizada = str_replace(' ', '', strtolower(trim($envio->direccion))); $direccionSQL = $db->escape($direccionNormalizada); // 2. Obtener presupuestos con esa dirección $presupuestosConEsaDireccion = $db->table('presupuesto_direcciones') ->select('presupuesto_id') ->where("REPLACE(LOWER(TRIM(direccion)), ' ', '') = $direccionSQL", null, false) ->get() ->getResultArray(); $presupuestoIds = array_column($presupuestosConEsaDireccion, 'presupuesto_id'); if (empty($presupuestoIds)) { return $db->table('(SELECT NULL AS id, NULL AS name) AS empty')->where('1 = 0'); } $hoy = date('Y-m-d'); $sieteDiasDespues = date('Y-m-d', strtotime('+7 days')); // 3. Subconsulta principal $subBuilder = $db->table('pedidos_linea pl') ->select(" ot.id AS ot, DATE(p.fecha_encuadernado) as fechaEncuadernado, ( SELECT IFNULL(SUM(el.unidades_envio), 0) FROM envios_lineas el JOIN envios e ON e.id = el.envio_id WHERE el.pedido_id = p.id AND el.presupuesto_id = pr.id AND REPLACE(LOWER(TRIM(e.direccion)), ' ', '') = $direccionSQL AND (e.finalizado = 1 OR e.id = $envio_id) ) AS unidades_enviadas, pd.cantidad AS cantidad ") ->join('pedidos p', 'p.id = pl.pedido_id') ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') ->join('orden_trabajo_dates ot_dates', 'ot_dates.orden_trabajo_id = ot.id') ->whereIn('pr.id', $presupuestoIds) ->whereIn('p.estado', ['finalizado', 'produccion']) ->where('p.fecha_encuadernado IS NOT NULL') ->where('DATE(p.fecha_encuadernado) >=', $hoy) ->where('DATE(p.fecha_encuadernado) <=', $sieteDiasDespues) ->where("NOT EXISTS ( SELECT 1 FROM envios_lineas el WHERE el.envio_id = $envio_id AND el.pedido_id = p.id AND el.presupuesto_id = pr.id GROUP BY el.pedido_id, el.presupuesto_id HAVING SUM(el.unidades_envio) >= pd.cantidad )", null, false) ->groupBy('pl.id'); // 4. Envolver y filtrar por unidades pendientes $builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub"); $builder->select('ot, fechaEncuadernado'); $builder->where('cantidad > unidades_enviadas'); return $builder; } public static function findForNewEnvio() { $db = \Config\Database::connect(); // 3. Subconsulta principal $subBuilder = $db->table('pedidos_linea pl') ->select(" ot.id AS id, CONCAT('[', ot.id, '] - ', pr.titulo) AS name, ( SELECT IFNULL(SUM(el.unidades_envio), 0) FROM envios_lineas el JOIN envios e ON e.id = el.envio_id WHERE el.pedido_id = p.id AND el.presupuesto_id = pr.id AND e.finalizado = 1 AND e.tipo_envio = 'estandar' ) AS unidades_enviadas, pd.cantidad AS cantidad ") ->join('pedidos p', 'p.id = pl.pedido_id') ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') ->whereIn('p.estado', ['finalizado', 'produccion']) ->where('p.fecha_encuadernado IS NOT NULL') ->where('DATE(p.fecha_encuadernado) <=', date('Y-m-d')) ->groupBy('pl.id'); // 4. Envolver y filtrar por unidades pendientes $builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub"); $builder->select('id, name'); $builder->where('cantidad > unidades_enviadas'); return $builder; } public static function findForNewEnvioFerro() { $db = \Config\Database::connect(); // 3. Subconsulta principal $subBuilder = $db->table('pedidos_linea pl') ->select(" ot.id AS id, CONCAT('[', ot.id, '] - ', pr.titulo) AS name, p.id as pedido_id, pr.id as presupuesto_id ") ->join('pedidos p', 'p.id = pl.pedido_id') ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') ->join('orden_trabajo_dates ot_dates', 'ot_dates.orden_trabajo_id = ot.id') ->whereIn('p.estado', ['finalizado', 'produccion']) ->where('ot_dates.pendiente_ferro_at IS NOT NULL') ->where('pd.is_ferro_prototipo', 1) ->groupBy('pl.id'); // 4. Envolver y filtrar por unidades pendientes $builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub"); $builder->select('id, name'); $builder->orderBy('name', 'ASC'); $builder->where(" NOT EXISTS ( SELECT 1 FROM envios e INNER JOIN envios_lineas le ON le.envio_id = e.id WHERE e.tipo_envio = 'ferro_prototipo' AND (le.pedido_id = sub.pedido_id OR le.presupuesto_id = sub.presupuesto_id) ) ", null, false); return $builder; } public static function findDireccionesNewEnvio($ot_id, $searchVal = "") { $direcciones = []; $counter = 1; $PresupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $dirs = $PresupuestoDireccionesModel->select('direccion') ->join('presupuestos pr', 'pr.id=presupuesto_direcciones.presupuesto_id') ->join('pedidos_linea pl', 'pl.presupuesto_id = pr.id') ->join('pedidos p', 'pl.pedido_id=p.id') ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') ->where('ot.id', $ot_id) ->where("presupuesto_direcciones.is_ferro_prototipo", 0); if ($searchVal != "") { $dirs = $dirs->groupStart() ->Like("id", $searchVal) ->groupEnd(); } $dirs = $dirs->orderBy('direccion', 'asc')->findAll(); foreach ($dirs as $key => $direccion) { $modelEnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $unidades_en_direccion = $modelEnvioLineasModel->select('SUM(envios_lineas.unidades_envio) as unidades_enviadas, envios_lineas.unidades_total') ->join('envios', 'envios.id = envios_lineas.envio_id') ->join('pedidos_linea', 'pedidos_linea.pedido_id = envios_lineas.pedido_id') ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') ->join('ordenes_trabajo', 'ordenes_trabajo.pedido_id = pedidos.id') ->where('ordenes_trabajo.id', $ot_id) ->where('envios.direccion', $direccion->direccion) ->where('envios.finalizado', 1) ->groupBy('ordenes_trabajo.pedido_id')->get()->getResult(); if (count($unidades_en_direccion) == 0 || $unidades_en_direccion[0]->unidades_enviadas < $unidades_en_direccion[0]->unidades_total) { array_push( $direcciones, (object) [ "id" => $counter, 'name' => $direccion->direccion ] ); $counter++; } } return $direcciones; } public static function addLineaEnvio($envio_id = null, $pedido_id = null, $direccion = null) { $db = \Config\Database::connect(); $direccionNormalizada = strtolower(trim($direccion)); // 1. Obtener presupuesto_id y cantidad desde presupuesto_direcciones $builder = $db->table('pedidos_linea pl') ->select(" p.id AS pedido_id, pl.id AS linea_id, pr.id AS presupuesto_id, pd.cantidad AS total_unidades, ( SELECT IFNULL(SUM(el.unidades_envio), 0) FROM envios_lineas el JOIN envios e ON e.id = el.envio_id WHERE el.pedido_id = p.id AND el.presupuesto_id = pr.id AND TRIM(LOWER(e.direccion)) = '$direccionNormalizada' AND (e.finalizado = 1 OR e.id = $envio_id) ) AS unidades_enviadas, ( pd.cantidad - ( SELECT IFNULL(SUM(el2.unidades_envio), 0) FROM envios_lineas el2 JOIN envios e2 ON e2.id = el2.envio_id WHERE el2.pedido_id = p.id AND el2.presupuesto_id = pr.id AND TRIM(LOWER(e2.direccion)) = '$direccionNormalizada' AND (e2.finalizado = 1 OR e2.id = $envio_id) ) ) AS unidades_envio ") ->join('pedidos p', 'p.id = pl.pedido_id') ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') ->where('pd.is_ferro_prototipo', 0) ->where('p.id', $pedido_id) ->whereIn('p.estado', ['finalizado', 'produccion']) ->where("TRIM(LOWER(pd.direccion)) = '$direccionNormalizada'", null, false) ->groupBy('pl.id'); $result = $builder->get()->getResultObject(); if (empty($result)) { return [ 'status' => false, 'message' => lang('Logistica.errors.notFound'), ]; } $r = $result[0]; // 2. Insertar solo si hay unidades a enviar if ($r->unidades_envio > 0) { $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $EnvioLineasModel->save([ 'envio_id' => $envio_id, 'pedido_id' => $r->pedido_id, 'presupuesto_id' => $r->presupuesto_id, 'unidades_envio' => $r->unidades_envio, 'unidades_total' => $r->total_unidades, 'cajas' => null, 'unidades_cajas' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, ]); } return [ 'status' => true, 'data' => [ 'unidades_envio' => $r->unidades_envio, 'unidades_enviadas' => $r->unidades_enviadas, 'total_unidades' => $r->total_unidades, ] ]; } public static function generateEnvio($ot_id, $direccion = null) { $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $direccionNormalizada = strtolower(trim($direccion)); $datosEnvio = $presupuestoDireccionesModel ->select(" presupuestos.id as presupuesto_id, presupuesto_direcciones.att, presupuesto_direcciones.direccion, presupuesto_direcciones.provincia as ciudad, presupuesto_direcciones.cp, presupuesto_direcciones.telefono, presupuesto_direcciones.email, presupuesto_direcciones.pais_id, presupuesto_direcciones.cantidad as cantidad_total, presupuestos.cliente_id as cliente_id, ordenes_trabajo.pedido_id as pedido_id, ( presupuesto_direcciones.cantidad - IFNULL(( SELECT SUM(el.unidades_envio) FROM envios_lineas el JOIN envios e ON e.id = el.envio_id WHERE el.pedido_id = pedidos.id AND el.presupuesto_id = presupuestos.id AND e.direccion LIKE " . $presupuestoDireccionesModel->db->escape("%$direccion%") . " AND e.finalizado = 1 ), 0) ) as cantidad ") ->join('pedidos_linea', 'pedidos_linea.presupuesto_id = presupuesto_direcciones.presupuesto_id') ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') ->join('presupuestos', 'pedidos_linea.presupuesto_id = presupuestos.id') ->join('ordenes_trabajo', 'ordenes_trabajo.pedido_id = pedidos.id') ->where('ordenes_trabajo.id', $ot_id) ->where('presupuesto_direcciones.is_ferro_prototipo', 0) ->like('presupuesto_direcciones.direccion', $direccion) ->groupBy('presupuesto_direcciones.id') ->first(); // Validación si no hay datos o no quedan unidades if (empty($datosEnvio) || $datosEnvio->cantidad <= 0) { return [ 'status' => false, 'message' => lang('Logistica.errors.noAddresses') . ' o no hay unidades pendientes.', ]; } // Crear envío $EnvioModel = model('App\Models\Logistica\EnvioModel'); $EnvioModel->set([ 'cliente_id' => $datosEnvio->cliente_id, 'att' => $datosEnvio->att, 'direccion' => $datosEnvio->direccion, 'ciudad' => $datosEnvio->ciudad, 'cp' => $datosEnvio->cp, 'telefono' => $datosEnvio->telefono, 'email' => $datosEnvio->email, 'pais_id' => $datosEnvio->pais_id, 'cantidad' => $datosEnvio->cantidad, 'cajas' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); $EnvioModel->insert(); $idEnvio = $EnvioModel->insertID(); // Crear línea de envío $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $EnvioLineasModel->save([ 'envio_id' => $idEnvio, 'pedido_id' => $datosEnvio->pedido_id, 'unidades_envio' => $datosEnvio->cantidad, 'unidades_total' => $datosEnvio->cantidad_total, 'cajas' => 1, 'unidades_cajas' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, 'presupuesto_id' => (int) $datosEnvio->presupuesto_id ]); return [ 'status' => true, 'data' => [ 'id_envio' => $idEnvio, ], ]; } public static function generateEnvioFerro($ot_id) { $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $datosEnvio = $presupuestoDireccionesModel ->select(" presupuestos.id as presupuesto_id, presupuesto_direcciones.att, presupuesto_direcciones.direccion, presupuesto_direcciones.provincia as ciudad, presupuesto_direcciones.cp, presupuesto_direcciones.telefono, presupuesto_direcciones.email, presupuesto_direcciones.pais_id, presupuesto_direcciones.cantidad as cantidad_total, presupuestos.cliente_id as cliente_id, ordenes_trabajo.pedido_id as pedido_id, ") ->join('pedidos_linea', 'pedidos_linea.presupuesto_id = presupuesto_direcciones.presupuesto_id') ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') ->join('presupuestos', 'pedidos_linea.presupuesto_id = presupuestos.id') ->join('ordenes_trabajo', 'ordenes_trabajo.pedido_id = pedidos.id') ->where('ordenes_trabajo.id', $ot_id) ->where('presupuesto_direcciones.is_ferro_prototipo', 1) ->where(" NOT EXISTS ( SELECT 1 FROM envios e INNER JOIN envios_lineas el ON el.envio_id = e.id WHERE e.tipo_envio = 'ferro_prototipo' AND (el.pedido_id = pedidos.id OR el.presupuesto_id = presupuestos.id) ) ", null, false) // <= Esta es la parte nueva, importante ->groupBy('presupuesto_direcciones.id') ->first(); // Validación si no hay datos o no quedan unidades if (empty($datosEnvio)) { return [ 'status' => false, 'message' => lang('Logistica.errors.noAddresses') ]; } // Crear envío $EnvioModel = model('App\Models\Logistica\EnvioModel'); $EnvioModel->set([ 'cliente_id' => $datosEnvio->cliente_id, 'att' => $datosEnvio->att, 'direccion' => $datosEnvio->direccion, 'ciudad' => $datosEnvio->ciudad, 'cp' => $datosEnvio->cp, 'telefono' => $datosEnvio->telefono, 'email' => $datosEnvio->email, 'pais_id' => $datosEnvio->pais_id, 'cantidad' => 1, 'cajas' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'tipo_envio' => 'ferro_prototipo', ]); $EnvioModel->insert(); $idEnvio = $EnvioModel->insertID(); // Crear línea de envío $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $EnvioLineasModel->save([ 'envio_id' => $idEnvio, 'pedido_id' => $datosEnvio->pedido_id, 'unidades_envio' => 1, 'unidades_total' => 1, 'cajas' => 1, 'unidades_cajas' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, 'presupuesto_id' => (int) $datosEnvio->presupuesto_id ]); return [ 'status' => true, 'data' => [ 'id_envio' => $idEnvio, ], ]; } public static function finalizarEnvio($envio_id, $finalizar_ot = false) { // hay que comprobar que para todas las lineas de envio de este envio // se ha enviado toda la cantidad teniendo en cuenta otros envios $EnvioModel = model('App\Models\Logistica\EnvioModel'); $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $ots = []; $envio = $EnvioModel->find($envio_id); if (empty($envio)) { return [ 'status' => false, 'message' => lang('Logistica.errors.noEnvio'), ]; } $lineasEnvio = $EnvioLineasModel->where('envio_id', $envio_id) ->findAll(); if (empty($lineasEnvio)) { return [ 'status' => false, 'message' => lang('Logistica.errors.noEnvioLineas'), ]; } foreach ($lineasEnvio as $linea) { $pedido = model('App\Models\Pedidos\PedidoModel')->find($linea->pedido_id); if (empty($pedido)) { return [ 'status' => false, 'message' => lang('Logistica.errors.notFound'), ]; } $cantidad_enviada = $EnvioLineasModel->select('SUM(envios_lineas.unidades_envio) as unidades_enviadas') ->where('envios_lineas.pedido_id', $linea->pedido_id) ->where('envios_lineas.envio_id !=', $envio_id) ->where('envios.finalizado', 1) ->join('envios', 'envios.id = envios_lineas.envio_id') ->get()->getResult(); if ( count($cantidad_enviada) == 0 || empty($cantidad_enviada[0]->unidades_enviadas) || $cantidad_enviada[0]->unidades_enviadas == null ) { $cantidad_enviada = 0; } else { $cantidad_enviada = $cantidad_enviada[0]->unidades_enviadas; } if ($envio->tipo_envio == 'ferro_prototipo') { $otModel = model('App\Models\OrdenTrabajo\OrdenTrabajoModel'); $ot = $otModel->where('pedido_id', $linea->pedido_id) ->first(); $ps = (new ProductionService())->init($ot->id); $ps->updateOrdenTrabajoDate([ "name" => "ferro_en_cliente_at", "ferro_en_cliente_at" => date('Y-m-d H:i:s') ]); } else { if ($cantidad_enviada + $linea->unidades_envio == $pedido->total_tirada) { $otModel = model('App\Models\OrdenTrabajo\OrdenTrabajoModel'); $ot = $otModel->where('pedido_id', $linea->pedido_id) ->first(); $ps = (new ProductionService())->init($ot->id); $date = $ps->getOrdenTrabajo()->dates()->embalaje_at; if (is_null($date) || empty($date)) { $ps->updateOrdenTrabajoDate([ "name" => "embalaje_at", "embalaje_at" => date('Y-m-d H:i:s') ]); } $ps->updateOrdenTrabajoDate([ "name" => "envio_at", "envio_at" => date('Y-m-d H:i:s') ]); if ($finalizar_ot) { $ps->updateOrdenTrabajo( [ "estado" => 'F' ] ); array_push($ots, $ot->id); } } } } $EnvioModel->update($envio_id, ['finalizado' => 1]); $data_return = [ 'status' => true, 'message' => lang('Logistica.success.finalizado'), ]; if ($finalizar_ot) { $data_return['message'] = lang('Logistica.success.finalizadoOTs', [ 'ots' => implode(', ', $ots) ]); $data_return['ots'] = $ots; } return $data_return; } public static function ficharEmbalaje($ids = null) { if (is_null($ids) || empty($ids) || count($ids) == 0) { return [ 'status' => false, 'message' => lang('Logistica.errors.noLineas'), ]; } for ($index = 0; $index < count($ids); $index++) { $ps = (new ProductionService())->init($ids[$index]); $ps->updateOrdenTrabajoDate([ "name" => "embalaje_at", "embalaje_at" => date('Y-m-d') ]); } return [ 'status' => true, 'message' => lang('Logistica.success.successFicharEmbalaje'), ]; } public static function generateEtiquetasTitulos($envio, $lineas, $printer, $cajas) { $data = [ "printer" => $printer->name, "header" => [ "_FORMAT" => "E:PEDIDO.ZPL", "_QUANTITY" => 1, "_PRINBTERNAME" => $printer->name, "_JOBNAME" => "LBL101" ], ]; foreach ($lineas as $linea) { $data["labels"][] = [ "cliente" => $envio->cliente, "titulo" => "[" . $linea->pedido_id . "] - " . $linea->titulo, "cantidad" => $linea->unidades_envio, "tirada" => $linea->unidades_total, "cajas" => $cajas, "ean" => null, "nombre" => $envio->att, "direccion" => $envio->direccion, "notas" => "", "refcliente" => $linea->refcliente, "npedido" => $linea->pedido_id ]; } $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 ]; } } }