finalizar envio ok

This commit is contained in:
2025-04-22 22:20:03 +02:00
parent 2cfe03b2ec
commit 5ac1e3d4c1
10 changed files with 481 additions and 116 deletions

View File

@ -1,6 +1,7 @@
<?php
namespace App\Services;
use App\Services\ProductionService;
use Config\Services;
@ -282,6 +283,73 @@ class LogisticaService
'message' => lang('Logistica.errors.noAddresses'),
];
}
}
public static function finalizarEnvio($envio_id)
{
// 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');
$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 ($cantidad_enviada + $linea->unidades_envio == $linea->unidades_total) {
$otModel = model('App\Models\OrdenTrabajo\OrdenTrabajoModel');
$ot = $otModel->where('pedido_id', $linea->pedido_id)
->first();
$ps = (new ProductionService())->init($ot->id);
$ps->updateOrdenTrabajoDate([
"name" => "envio_at",
"envio_at" => date('Y-m-d H:i:s')
]);
}
}
$EnvioModel->update($envio_id, ['finalizado'=> 1]);
return [
'status' => true,
'message' => lang('Logistica.success.finalizado'),
];
}
}