From 15f6d0d675109c9c22f5430c78f1ebe2d8c0ebc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Fri, 18 Apr 2025 10:36:06 +0200 Subject: [PATCH] =?UTF-8?q?voy=20a=20a=C3=B1adir=20grupos=20de=20cajas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci4/app/Config/Routes.php | 1 + .../Logistica/LogisticaController.php | 23 ++- ci4/app/Language/es/Logistica.php | 1 + ci4/app/Services/LogisticaService.php | 154 ++++++++++++------ .../js/safekat/pages/logistica/envio.js | 2 +- 5 files changed, 125 insertions(+), 56 deletions(-) diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 7b31629b..a139d54e 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -785,6 +785,7 @@ $routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], functi $routes->get('datatableLineasEnvios/(:num)', 'LogisticaController::datatable_enviosEdit/$1'); $routes->get('envio/(:num)', 'LogisticaController::editEnvio/$1'); $routes->get('selectAddLinea', 'LogisticaController::selectAddEnvioLinea'); + $routes->get('addLineaEnvio', 'LogisticaController::addEnvioLinea'); }); /* diff --git a/ci4/app/Controllers/Logistica/LogisticaController.php b/ci4/app/Controllers/Logistica/LogisticaController.php index 27d101d8..93242261 100644 --- a/ci4/app/Controllers/Logistica/LogisticaController.php +++ b/ci4/app/Controllers/Logistica/LogisticaController.php @@ -80,14 +80,14 @@ class LogisticaController extends BaseController ]; return $this->response->setJSON($result); } - $result = LogisticaService::findPedidoOrISBN($search, $envio_id); + $result = LogisticaService::findPedidoOrISBN($search); return $this->response->setJSON($result); } public function selectAddEnvioLinea(){ if ($this->request->isAJAX()) { - $query = LogisticaService::findLineaEnvio($this->request->getGet('direccion'))->orderBy("nombre", "asc"); + $query = LogisticaService::findLineaEnvioPorEnvio($this->request->getGet('envio'))->orderBy("name", "asc"); if ($this->request->getGet("q")) { $query->groupStart() ->orLike("pedidos.id", $this->request->getGet("q")) @@ -95,7 +95,24 @@ class LogisticaController extends BaseController ->groupEnd(); } - return $this->response->setJSON($query->get()->getResultObject()); + $result = $query->get()->getResultObject(); + + return $this->response->setJSON($result); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function addEnvioLinea(){ + + if ($this->request->isAJAX()) { + $pedido_id = $this->request->getGet('pedido_id'); + $envio_id = $this->request->getGet('envio_id'); + $envioModel = model('App\Models\Logistica\EnvioModel'); + $direccion = $envioModel->find($envio_id)->direccion; + + $result = LogisticaService::addLineaEnvio($envio_id, $pedido_id, $direccion); + return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } diff --git a/ci4/app/Language/es/Logistica.php b/ci4/app/Language/es/Logistica.php index 501049f3..223ea607 100644 --- a/ci4/app/Language/es/Logistica.php +++ b/ci4/app/Language/es/Logistica.php @@ -12,6 +12,7 @@ return [ 'envioSimpleMultiple' => 'Envío simple/múltiple', 'nuevoEnvio' => 'Nuevo envío', 'buscadorPedidosTitle' => 'Código Pedido o ISBN', + 'buscadorPedidosTitle2' => 'Código Pedido o título', 'listadoEnvios' => 'Listado de envíos', 'idEnvio' => 'ID Envío', 'numeroPedidos' => 'Nº Pedidos', diff --git a/ci4/app/Services/LogisticaService.php b/ci4/app/Services/LogisticaService.php index e219e765..2e24af50 100644 --- a/ci4/app/Services/LogisticaService.php +++ b/ci4/app/Services/LogisticaService.php @@ -83,65 +83,113 @@ class LogisticaService } - public static function findLineaEnvio($direccion){ + public static function findLineaEnvioPorEnvio(int $envio_id) + { + $db = \Config\Database::connect(); + $builder = $db->table('envios e_main'); + + $builder->select(" + CONCAT('[', p.id, '] - ', pr.titulo) AS name, + p.id AS id, + pl.id AS linea_id, + pl.cantidad, + ( + 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 e.direccion = e_main.direccion + ) AS unidades_enviadas, + (pl.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 e2.direccion = e_main.direccion + )) AS unidades_pendientes + "); + + $builder->join('envios_lineas el_main', 'el_main.envio_id = e_main.id'); + $builder->join('pedidos p', 'p.id = el_main.pedido_id'); + $builder->join('pedidos_linea pl', 'pl.pedido_id = p.id'); + $builder->join('presupuestos pr', 'pr.id = pl.presupuesto_id'); + + $builder->where('p.estado', 'finalizado'); + $builder->where('e_main.id', $envio_id); + + $builder->groupBy('pl.id'); + $builder->having('unidades_enviadas < pl.cantidad', null, false); + $builder->orderBy('name', 'ASC'); + + return $builder; + } + + public static function addLineaEnvio($envio_id = null, $pedido_id = null, $direccion = null) + { $modelPedido = model('App\Models\Pedidos\PedidoModel'); $builder = $modelPedido->builder(); $builder->select(" - CONCAT( - '[' , - pedidos.id, ']', - ' - ', - presupuestos.titulo, - ) as name, - pedidos.id as pedido_id"); - - $builder->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id', 'left'); - $builder->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id', 'left'); - $builder->join('envios_lineas', 'envios_lineas.pedido_id = pedidos_linea.pedido_id', 'left'); - $builder->join('presupuesto_direcciones', 'presupuesto_direcciones.id = envios_lineas.presupuesto_direcciones_id', 'left'); - - $builder->groupBy('pedidos_linea.id'); - $builder->having('IFNULL(SUM(envios_lineas.unidades_envio), 0) < cantidad_linea', null, false); - $builder->where('pedidos.estado', 'finalizado'); - $builder->where('presupuesto_direcciones.direccion', $direccion); - - return $builder; - - } - - - - } - - /*$builder->select([ - 'pedidos.id as pedido_id', - 'pedidos_linea.id as linea_id', - 'pedidos_linea.cantidad as total_unidades', - 'IFNULL(( - SELECT SUM(t_sub.unidades_envio) - FROM " . envios_lineas . " t_sub - JOIN envios e ON e.id = t_sub.envio_id - WHERE e.finalizado = 1 - AND t_sub.pedido_id = t1.pedido_id - AND t_sub.presupuesto_direcciones_id = t1.presupuesto_direcciones_id - ), 0) as unidades_enviadas', - 'cantidad_linea - IFNULL(SUM(envios_lineas.unidades_envio), 0) as unidades_envio', - 'presupuestos.id as presupuesto_id', - ]); + pedidos.id as pedido_id, + pedidos_linea.id as linea_id, + pedidos_linea.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 = pedidos.id + AND e.finalizado = 1 + AND TRIM(e.direccion) = '" . addslashes(trim($direccion)) . "' + ) as unidades_enviadas, + pedidos_linea.cantidad - IFNULL(SUM(envios_lineas.unidades_envio), 0) as unidades_envio, + presupuestos.id as presupuesto_id + "); $builder->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id', 'left'); $builder->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id', 'left'); $builder->join('envios_lineas', 'envios_lineas.pedido_id = pedidos_linea.pedido_id', 'left'); $builder->groupBy('pedidos_linea.id'); - $builder->having('IFNULL(SUM(envios_lineas.unidades_envio), 0) < cantidad_linea', null, false); + $builder->having('IFNULL(SUM(envios_lineas.unidades_envio), 0) < pedidos_linea.cantidad', null, false); $builder->where('pedidos.estado', 'finalizado'); + $builder->where('pedidos.id', $pedido_id); + + $result = $builder->get()->getResultObject(); + + if (empty($result)) { + return [ + 'status' => false, + 'message' => lang('Logistica.errors.notFound'), + ]; + } else { + $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); + $EnvioLineasModel->save([ + 'envio_id' => $envio_id, + 'pedido_id' => $result[0]->pedido_id, + 'unidades_envio' => $result[0]->unidades_envio, + 'unidades_total' => $result[0]->total_unidades, + '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' => $result[0]->presupuesto_id, + ]); + } + + return [ + 'status' => true, + 'data' => [ + 'unidades_envio' => $result[0]->unidades_envio, + 'unidades_enviadas' => $result[0]->unidades_enviadas, + 'total_unidades' => $result[0]->total_unidades, + ] + ]; + } - $result = $builder->get()->getResult(); - */ private static function generateEnvio($pedido_id, $multienvio = false) @@ -154,7 +202,7 @@ class LogisticaService $datosEnvio = $presupuestoDireccionesModel ->select(' - presupuesto_direcciones.id as presupuesto_direcciones_id, + presupuestos.id as presupuesto_id, presupuesto_direcciones.att, presupuesto_direcciones.direccion, presupuesto_direcciones.provincia as ciudad, @@ -167,12 +215,14 @@ class LogisticaService ') ->join('pedidos_linea', 'pedidos_linea.presupuesto_id = presupuesto_direcciones.presupuesto_id') ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') - ->join('envios_lineas', 'envios_lineas.pedido_id = pedidos.id AND envios_lineas.presupuesto_direcciones_id = presupuesto_direcciones.id', 'left') + ->join('presupuestos', 'pedidos_linea.presupuesto_id = presupuestos.id') + ->join('envios_lineas', 'envios_lineas.pedido_id = pedidos.id', 'left') + ->join('envios', 'envios.id = envios_lineas.envio_id', 'left') ->where('pedidos.id', $pedido_id) ->groupBy('presupuesto_direcciones.id') // Necesario por el uso de SUM ->first(); - + // se genera un nuevo envio con estos datos $EnvioModel = model('App\Models\Logistica\EnvioModel'); $EnvioModel->set('att', $datosEnvio->att); @@ -203,7 +253,7 @@ class LogisticaService 'updated_at' => date('Y-m-d H:i:s'), 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, - 'presupuesto_direcciones_id' => (int) $datosEnvio->presupuesto_direcciones_id + 'presupuesto_id' => (int) $datosEnvio->presupuesto_id ]); @@ -211,9 +261,9 @@ class LogisticaService return [ 'status' => true, 'data' => [ - 'id_envio' => $idEnvio, - 'multienvio' => false, - ], + 'id_envio' => $idEnvio, + 'multienvio' => false, + ], ]; } diff --git a/httpdocs/assets/js/safekat/pages/logistica/envio.js b/httpdocs/assets/js/safekat/pages/logistica/envio.js index 75b25796..0a9d1c27 100644 --- a/httpdocs/assets/js/safekat/pages/logistica/envio.js +++ b/httpdocs/assets/js/safekat/pages/logistica/envio.js @@ -16,7 +16,7 @@ $(()=>{ } if(response.data){ - window.open(`${urlObj.origin}` + '/logistica/envio/' + response.id); + window.open(`${window.location.origin}/logistica/envio/${response.data.id_envio}`); } },