trabajando en albaranes. Voy a quitar las cajas

This commit is contained in:
2025-04-20 20:02:14 +02:00
parent 65c9b34f56
commit 61abcb3dbd
18 changed files with 345 additions and 1654 deletions

View File

@ -86,45 +86,51 @@ class LogisticaService
public static function findLineaEnvioPorEnvio(int $envio_id)
{
$db = \Config\Database::connect();
$subCliente = $db->table('envios')
->select('cliente_id')
->where('id', $envio_id)
->getCompiledSelect();
$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 - (
CONCAT('[', p.id, '] - ', pr.titulo) AS name,
pl.id AS 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
AND pr.cliente_id = ($subCliente)
) 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
");
AND pr.cliente_id = ($subCliente)
)
) 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('pedidos_linea pl', '1=1'); // para incluir líneas sin envío aún
$builder->join('pedidos p', 'p.id = pl.pedido_id');
$builder->join('presupuestos pr', 'pr.id = pl.presupuesto_id');
$builder->where('p.estado', 'finalizado');
$builder->where('e_main.id', $envio_id);
$builder->where('p.estado', 'finalizado');
$builder->where("pr.cliente_id = ($subCliente)", null, false);
$builder->groupBy('pl.id');
$builder->having('unidades_enviadas < pl.cantidad', null, false);
$builder->having('unidades_pendientes >', 0);
$builder->orderBy('name', 'ASC');
return $builder;
}
public static function addLineaEnvio($envio_id = null, $pedido_id = null, $direccion = null)
{
$modelPedido = model('App\Models\Pedidos\PedidoModel');
@ -183,10 +189,10 @@ class LogisticaService
return [
'status' => true,
'data' => [
'unidades_envio' => $result[0]->unidades_envio,
'unidades_enviadas' => $result[0]->unidades_enviadas,
'total_unidades' => $result[0]->total_unidades,
]
'unidades_envio' => $result[0]->unidades_envio,
'unidades_enviadas' => $result[0]->unidades_enviadas,
'total_unidades' => $result[0]->total_unidades,
]
];
}
@ -211,7 +217,8 @@ class LogisticaService
presupuesto_direcciones.email,
presupuesto_direcciones.pais_id,
presupuesto_direcciones.cantidad - IFNULL(SUM(envios_lineas.unidades_envio), 0) as cantidad,
presupuesto_direcciones.cantidad as cantidad_total
presupuesto_direcciones.cantidad as cantidad_total,
presupuestos.cliente_id as cliente_id
')
->join('pedidos_linea', 'pedidos_linea.presupuesto_id = presupuesto_direcciones.presupuesto_id')
->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id')
@ -225,6 +232,7 @@ class LogisticaService
// se genera un nuevo envio con estos datos
$EnvioModel = model('App\Models\Logistica\EnvioModel');
$EnvioModel->set('cliente_id', $datosEnvio->cliente_id);
$EnvioModel->set('att', $datosEnvio->att);
$EnvioModel->set('direccion', $datosEnvio->direccion);
$EnvioModel->set('ciudad', $datosEnvio->ciudad);
@ -261,9 +269,9 @@ class LogisticaService
return [
'status' => true,
'data' => [
'id_envio' => $idEnvio,
'multienvio' => false,
],
'id_envio' => $idEnvio,
'multienvio' => false,
],
];
}