corregido el añadir cuando no es multienvio y select añadir lineas

This commit is contained in:
2025-04-24 18:40:10 +02:00
parent 4fd242d4d2
commit a1fd7075d6
2 changed files with 22 additions and 11 deletions

View File

@ -104,8 +104,8 @@ class LogisticaController extends BaseController
$query = LogisticaService::findLineaEnvioPorEnvio($this->request->getGet('envio')); $query = LogisticaService::findLineaEnvioPorEnvio($this->request->getGet('envio'));
if ($this->request->getGet("q")) { if ($this->request->getGet("q")) {
$query->groupStart() $query->groupStart()
->orLike("p.id", $this->request->getGet("q")) ->orLike("id", $this->request->getGet("q"))
->orLike("pr.titulo", $this->request->getGet("q")) ->orLike("name", $this->request->getGet("q"))
->groupEnd(); ->groupEnd();
} }

View File

@ -95,7 +95,9 @@ class LogisticaService
} }
$response_envio = LogisticaService::generateEnvio($result[0]->pedido_id); $direccion = $PresupuestoDireccionesModel->select('direccion')->where('presupuesto_id', $result[0]->presupuesto_id)
->first()->direccion;
$response_envio = LogisticaService::generateEnvio($result[0]->pedido_id, $direccion);
if ($response_envio['status'] == false) { if ($response_envio['status'] == false) {
$response = [ $response = [
'status' => false, 'status' => false,
@ -104,7 +106,7 @@ class LogisticaService
return $response; return $response;
} else { } else {
$response['data']->id_envio = $response_envio['data']['id_envio']; $response['data']->id_envio = $response_envio['data']['id_envio'];
$response['data']->multienvio = $response_envio['data']['multienvio']; $response['data']->multienvio = false;
} }
return $response; return $response;
@ -116,16 +118,16 @@ class LogisticaService
{ {
$db = \Config\Database::connect(); $db = \Config\Database::connect();
// 1. Obtener dirección del envío actual // 1. Dirección del envío actual
$envio = $db->table('envios')->select('direccion')->where('id', $envio_id)->get()->getRow(); $envio = $db->table('envios')->select('direccion')->where('id', $envio_id)->get()->getRow();
if (!$envio) { if (!$envio) {
return []; return $db->table('(SELECT NULL AS id, NULL AS name) AS empty')->where('1 = 0');
} }
$direccionNormalizada = str_replace(' ', '', strtolower(trim($envio->direccion))); $direccionNormalizada = str_replace(' ', '', strtolower(trim($envio->direccion)));
$direccionSQL = $db->escape($direccionNormalizada); $direccionSQL = $db->escape($direccionNormalizada);
// 2. Obtener los presupuesto_id asociados a esa dirección // 2. Obtener presupuestos con esa dirección
$presupuestosConEsaDireccion = $db->table('presupuesto_direcciones') $presupuestosConEsaDireccion = $db->table('presupuesto_direcciones')
->select('presupuesto_id') ->select('presupuesto_id')
->where("REPLACE(LOWER(TRIM(direccion)), ' ', '') = $direccionSQL", null, false) ->where("REPLACE(LOWER(TRIM(direccion)), ' ', '') = $direccionSQL", null, false)
@ -134,10 +136,10 @@ class LogisticaService
$presupuestoIds = array_column($presupuestosConEsaDireccion, 'presupuesto_id'); $presupuestoIds = array_column($presupuestosConEsaDireccion, 'presupuesto_id');
if (empty($presupuestoIds)) { if (empty($presupuestoIds)) {
return []; return $db->table('(SELECT NULL AS id, NULL AS name) AS empty')->where('1 = 0');
} }
// 3. Subconsulta principal con unidades pendientes // 3. Subconsulta principal
$subBuilder = $db->table('pedidos_linea pl') $subBuilder = $db->table('pedidos_linea pl')
->select(" ->select("
pl.id AS id, pl.id AS id,
@ -158,10 +160,18 @@ class LogisticaService
->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id')
->whereIn('pr.id', $presupuestoIds) ->whereIn('pr.id', $presupuestoIds)
->whereIn('p.estado', ['finalizado', 'produccion']) ->whereIn('p.estado', ['finalizado', 'produccion'])
->where("REPLACE(LOWER(TRIM(pd.direccion)), ' ', '') = $direccionSQL", null, false) ->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'); ->groupBy('pl.id');
// 4. Envolver y filtrar por unidades pendientes reales // 4. Envolver y filtrar por unidades pendientes
$builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub"); $builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub");
$builder->select('id, name'); $builder->select('id, name');
$builder->where('cantidad > unidades_enviadas'); $builder->where('cantidad > unidades_enviadas');
@ -175,6 +185,7 @@ class LogisticaService
public static function addLineaEnvio($envio_id = null, $pedido_id = null, $direccion = null) public static function addLineaEnvio($envio_id = null, $pedido_id = null, $direccion = null)
{ {
$db = \Config\Database::connect(); $db = \Config\Database::connect();