diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 1e606ede..5698a9e6 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -774,7 +774,7 @@ $routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], functi $routes->get('print/label/test', 'LogisticaController::print_test_label'); $routes->get('panel', 'LogisticaController::panel', ['as' => 'LogisticaPanel']); $routes->get('selectEnvios/(:any)', 'LogisticaController::selectorEnvios/$1', ['as' => 'selectEnvios']); - + $routes->get('buscar/(:any)', 'LogisticaController::searchPedidoOrISBN/$1', ['as' => 'buscarPedidoOrISBN']); }); /* diff --git a/ci4/app/Controllers/Logistica/LogisticaController.php b/ci4/app/Controllers/Logistica/LogisticaController.php index 7813babd..98dff187 100644 --- a/ci4/app/Controllers/Logistica/LogisticaController.php +++ b/ci4/app/Controllers/Logistica/LogisticaController.php @@ -4,6 +4,7 @@ namespace App\Controllers\Logistica; use App\Controllers\BaseController; use App\Services\ImpresoraEtiquetaService; +use App\Services\LogisticaService; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; @@ -70,28 +71,14 @@ class LogisticaController extends BaseController public function searchPedidoOrISBN($search = ""){ - $modelPedido = model('App\Models\Pedidos\PedidoModel'); - - $search = trim($search); - $searchClean = str_replace('-', '', $search); - $modelPedido = model('App\Models\Pedidos\PedidoModel'); - - // Builder con joins - $builder = $modelPedido->builder(); - $builder->select('pedidos.*'); - $builder->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id', 'left'); - $builder->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id', 'left'); - - // Agrupar condiciones: por ID exacto o por ISBN sin guiones - $builder->groupStart() - ->where('pedidos.id', $search) - ->orWhere("REPLACE(presupuestos.isbn, '-', '')", $searchClean) - ->groupEnd(); - - $result = $builder->get()->getResult(); - $response = [ - 'status' => true, - 'data' => $result, - ]; + if(empty($search)){ + $result = [ + 'status' => false, + 'message' => lang('Logistica.errors.noDataToFind'), + ]; + return $this->response->setJSON($result); + } + $result = LogisticaService::findPedidoOrISBN($search); + return $this->response->setJSON($result); } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index 5039d115..5fe536da 100644 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -382,6 +382,16 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController 'descripcion' => $linea_pedido->concepto ]); + // se actualiza el totalizador del pedido + $total_tirada = $pedidoModel + ->selectSum('cantidad') + ->where('pedido_id', $idPedido) + ->first()->cantidad; + $pedidoModel = model('App\Models\Pedidos\PedidoModel'); + $pedidoModel->update($idPedido, [ + 'total_tirada' => $total_tirada + ]); + // se actualiza la factura $linea_pedido = $this->model->generarLineaPedido($id, true, $idPedido)[0]; $facturaLineaModel = model('App\Models\Facturas\FacturaLineaModel'); diff --git a/ci4/app/Language/es/Logistica.php b/ci4/app/Language/es/Logistica.php index f7799770..d358bb66 100644 --- a/ci4/app/Language/es/Logistica.php +++ b/ci4/app/Language/es/Logistica.php @@ -26,4 +26,10 @@ return [ 'finalizado' => 'Finalizado', 'acciones' => 'Acciones', 'backToPanel' => 'Volver al panel', + + 'errors' => [ + 'noDataToFind' => 'No se ha introducido ningún dato para buscar', + 'notFound' => 'No se encuentra el pedido o ISBN', + 'noAddresses' => 'El pedido no tiene direcciones de envío', + ], ]; \ No newline at end of file diff --git a/ci4/app/Services/LogisticaService.php b/ci4/app/Services/LogisticaService.php new file mode 100644 index 00000000..bb4a193c --- /dev/null +++ b/ci4/app/Services/LogisticaService.php @@ -0,0 +1,67 @@ +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; + } + + return $response; + } +} diff --git a/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php b/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php index 5dedb86f..aecb0c00 100644 --- a/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php +++ b/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php @@ -11,6 +11,8 @@