voy a añadir grupos de cajas

This commit is contained in:
2025-04-18 10:36:06 +02:00
parent 3949607a3c
commit 15f6d0d675
5 changed files with 125 additions and 56 deletions

View File

@ -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');
});
/*

View File

@ -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);
}

View File

@ -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',

View File

@ -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");
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->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->having('IFNULL(SUM(envios_lineas.unidades_envio), 0) < pedidos_linea.cantidad', null, false);
$builder->where('pedidos.estado', 'finalizado');
$builder->where('presupuesto_direcciones.direccion', $direccion);
$builder->where('pedidos.id', $pedido_id);
return $builder;
$result = $builder->get()->getResultObject();
}
}
/*$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',
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,
]);
}
$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');
return [
'status' => true,
'data' => [
'unidades_envio' => $result[0]->unidades_envio,
'unidades_enviadas' => $result[0]->unidades_enviadas,
'total_unidades' => $result[0]->total_unidades,
]
];
}
$builder->groupBy('pedidos_linea.id');
$builder->having('IFNULL(SUM(envios_lineas.unidades_envio), 0) < cantidad_linea', null, false);
$builder->where('pedidos.estado', 'finalizado');
$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,7 +215,9 @@ 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();
@ -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
]);

View File

@ -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}`);
}
},