mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
166 lines
6.5 KiB
PHP
166 lines
6.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Config\Services;
|
|
|
|
class LogisticaService
|
|
{
|
|
public static function findPedidoOrISBN($search)
|
|
{
|
|
$modelPedido = model('App\Models\Pedidos\PedidoModel');
|
|
|
|
$search = trim($search);
|
|
$searchClean = str_replace('-', '', $search);
|
|
$modelPedido = model('App\Models\Pedidos\PedidoModel');
|
|
|
|
$builder = $modelPedido->builder();
|
|
$builder->select('pedidos.id as pedido_id, pedidos_linea.id as linea_id, 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->groupStart()
|
|
->where('pedidos.id', $search)
|
|
->whereIn('pedidos.estado', ['finalizado'])
|
|
->orWhere("REPLACE(presupuestos.isbn, '-', '')", $searchClean)
|
|
->groupEnd();
|
|
|
|
$result = $builder->get()->getResult();
|
|
|
|
if (empty($result)) {
|
|
$response = [
|
|
'status' => false,
|
|
'message' => lang('Logistica.errors.notFound'),
|
|
];
|
|
return $response;
|
|
}
|
|
|
|
$PresupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
|
|
$numDirecciones = $PresupuestoDireccionesModel->where('presupuesto_id', $result[0]->presupuesto_id)
|
|
->countAllResults();
|
|
if ($numDirecciones == 0) {
|
|
$response = [
|
|
'status' => false,
|
|
'message' => lang('Logistica.errors.noAddresses'),
|
|
];
|
|
return $response;
|
|
}
|
|
|
|
// detectar si el pedido tiene los albaranes generados
|
|
$AlbaranModel = model('App\Models\Pedidos\AlbaranModel');
|
|
$numAlbaranes = $AlbaranModel->where('pedido_id', $result[0]->pedido_id)
|
|
->countAllResults();
|
|
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $result[0],
|
|
];
|
|
|
|
if($numAlbaranes == 0){
|
|
$user = auth()->user()->id;
|
|
$AlbaranModel->generarAlbaranes($result[0]->pedido_id, [$result[0]->presupuesto_id], $user);
|
|
$response['data']->createAlbaran = true;
|
|
}
|
|
|
|
$response_envio = LogisticaService::generateEnvio($result[0]->pedido_id);
|
|
if($response_envio['status'] == false){
|
|
$response = [
|
|
'status' => false,
|
|
'message' => $response_envio['message'],
|
|
];
|
|
return $response;
|
|
}
|
|
else{
|
|
$response['data']->id_envio = $response_envio['data']['id_envio'];
|
|
$response['data']->multienvio = $response_envio['data']['multienvio'];
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
|
|
|
|
private static function generateEnvio($pedido_id){
|
|
|
|
// Se obtiene los datos de att, direccion, ciudad, cp, telefono, pais_id
|
|
$AlbaranModel = model('App\Models\Pedidos\AlbaranModel');
|
|
$lineasAlbaran = $AlbaranModel->where('pedido_id', $pedido_id)
|
|
->join('albaranes_lineas', 'albaranes_lineas.albaran_id = albaranes.id')
|
|
->join('pedidos', 'pedidos.id = albaranes.pedido_id')
|
|
->where('pedidos.estado', 'finalizado')
|
|
->countAllResults();
|
|
|
|
$multienvio = false;
|
|
|
|
if($lineasAlbaran == 0){
|
|
return [
|
|
'status' => false,
|
|
'message' => lang('Logistica.errors.noAlbaranes'),
|
|
];
|
|
}
|
|
if($lineasAlbaran > 1){
|
|
$multienvio = true;
|
|
}
|
|
if(!$multienvio){
|
|
// solo hay una dirección, se obtiene de los albaranes
|
|
|
|
$datosEnvio = $AlbaranModel
|
|
->select('albaranes.att_albaran as att, albaranes.direccion_albaran as direccion,
|
|
presupuesto_direcciones.provincia as ciudad, presupuesto_direcciones.cp as cp, presupuesto_direcciones.telefono as telefono, presupuesto_direcciones.email as email,
|
|
presupuesto_direcciones.pais_id as pais_id, albaranes_lineas.cantidad as cantidad, albaranes_lineas.cajas as cajas')
|
|
->where('albaranes.pedido_id', $pedido_id)
|
|
->where('albaranes_lineas.cajas !=', null)
|
|
->join('albaranes_lineas', 'albaranes_lineas.albaran_id = albaranes.id')
|
|
->join('presupuesto_direcciones', 'presupuesto_direcciones.presupuesto_id = albaranes.presupuesto_id')
|
|
->first();
|
|
|
|
// se genera un nuevo envio con estos datos
|
|
$EnvioModel = model('App\Models\Logistica\EnvioModel');
|
|
$EnvioModel->set('att', $datosEnvio->att);
|
|
$EnvioModel->set('direccion', $datosEnvio->direccion);
|
|
$EnvioModel->set('ciudad', $datosEnvio->ciudad);
|
|
$EnvioModel->set('cp', $datosEnvio->cp);
|
|
$EnvioModel->set('telefono', $datosEnvio->telefono);
|
|
$EnvioModel->set('email', $datosEnvio->email);
|
|
$EnvioModel->set('pais_id', $datosEnvio->pais_id);
|
|
$EnvioModel->set('cantidad', $datosEnvio->cantidad);
|
|
$EnvioModel->set('cajas', $datosEnvio->cajas);
|
|
$EnvioModel->set('created_at', date('Y-m-d H:i:s'));
|
|
$EnvioModel->set('updated_at', date('Y-m-d H:i:s'));
|
|
$EnvioModel->insert();
|
|
$idEnvio = $EnvioModel->insertID();
|
|
|
|
// se genera la linea de envio
|
|
$EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel');
|
|
$EnvioLineasModel->set('envio_id', $idEnvio);
|
|
$EnvioLineasModel->set('pedido_id', $pedido_id);
|
|
$EnvioLineasModel->set('unidades_envio', $datosEnvio->cantidad);
|
|
$EnvioLineasModel->set('unidades_total', $datosEnvio->cantidad);
|
|
$EnvioLineasModel->set('cajas', $datosEnvio->cajas);
|
|
$EnvioLineasModel->set('unidades_cajas', $datosEnvio->cajas);
|
|
$EnvioLineasModel->set('created_at', date('Y-m-d H:i:s'));
|
|
$EnvioLineasModel->set('updated_at', date('Y-m-d H:i:s'));
|
|
$EnvioLineasModel->set('created_by', auth()->user()->id);
|
|
$EnvioLineasModel->set('updated_by', auth()->user()->id);
|
|
$EnvioLineasModel->insert();
|
|
|
|
return [
|
|
'status' => true,
|
|
'data' => [
|
|
'id_envio' => $idEnvio,
|
|
'multienvio' => false,
|
|
],
|
|
];
|
|
|
|
}
|
|
|
|
if(empty($datosEnvio)){
|
|
return [
|
|
'status' => false,
|
|
'message' => lang('Logistica.errors.noAddresses'),
|
|
];
|
|
}
|
|
|
|
}
|
|
}
|