diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 49b5fe10..da335ade 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -781,6 +781,7 @@ $routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], functi $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']); + $routes->get('datatableEnvios', 'LogisticaController::datatable_envios'); }); /* diff --git a/ci4/app/Controllers/Logistica/LogisticaController.php b/ci4/app/Controllers/Logistica/LogisticaController.php index 98dff187..53776b1c 100644 --- a/ci4/app/Controllers/Logistica/LogisticaController.php +++ b/ci4/app/Controllers/Logistica/LogisticaController.php @@ -8,6 +8,7 @@ use App\Services\LogisticaService; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; +use Hermawan\DataTables\DataTable; class LogisticaController extends BaseController { @@ -69,16 +70,45 @@ class LogisticaController extends BaseController return view(static::$viewPath . 'viewLogisticaSelectEnvios', $viewData); } - public function searchPedidoOrISBN($search = ""){ + public function searchPedidoOrISBN($search = "") + { - if(empty($search)){ + if (empty($search)) { $result = [ 'status' => false, 'message' => lang('Logistica.errors.noDataToFind'), ]; - return $this->response->setJSON($result); + return $this->response->setJSON($result); } $result = LogisticaService::findPedidoOrISBN($search); - return $this->response->setJSON($result); + return $this->response->setJSON($result); + } + + public function datatable_envios() + { + $model = model('App\Models\Logistica\EnvioModel'); + $q = $model->getDatatableQuery(); + + + $result = DataTable::of($q) + ->edit( + "finalizado", + function ($row, $meta) { + if ($row->finalizado == 1) + return ''; + else + return ''; + } + ) + ->add("action", callback: function ($q) { + + return ' +
+ +
+ '; + }); + + return $result->toJson(returnAsObject: true); } } diff --git a/ci4/app/Language/es/Logistica.php b/ci4/app/Language/es/Logistica.php index d358bb66..e3fa7838 100644 --- a/ci4/app/Language/es/Logistica.php +++ b/ci4/app/Language/es/Logistica.php @@ -26,10 +26,13 @@ return [ 'finalizado' => 'Finalizado', 'acciones' => 'Acciones', 'backToPanel' => 'Volver al panel', - + 'no' => 'No', + 'si' => 'Sí', + 'errors' => [ + 'noAlbaranes' => 'No se han encontrado albaranes para este pedido', 'noDataToFind' => 'No se ha introducido ningún dato para buscar', - 'notFound' => 'No se encuentra el pedido o ISBN', + 'notFound' => 'No se encuentra el pedido o ISBN, o el pedido aún no se ha finalizado', '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 index 5104bc8f..7d102ee5 100644 --- a/ci4/app/Services/LogisticaService.php +++ b/ci4/app/Services/LogisticaService.php @@ -62,43 +62,104 @@ class LogisticaService $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 function generateEnvio($pedido){ + private static function generateEnvio($pedido_id){ // Se obtiene los datos de att, direccion, ciudad, cp, telefono, pais_id - $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel'); - $lineasPedido = $modelPedidoLinea->where('pedido_id', $pedido->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; - ->findAll(); - if(empty($lineasPedido)){ + + if($lineasAlbaran == 0){ return [ 'status' => false, - 'message' => lang('Logistica.errors.noLines'), + 'message' => lang('Logistica.errors.noAlbaranes'), ]; } - if(count($lineasPedido) > 1){ + if($lineasAlbaran > 1){ $multienvio = true; } if(!$multienvio){ // solo hay una dirección, se obtiene de los albaranes - $AlbaranModel = model('App\Models\Pedidos\AlbaranModel'); + $datosEnvio = $AlbaranModel ->select('albaranes.att_albaran as att, albaranes.direccion_albaran as direccion, - presupuestos_direcciones.ciudad as ciudad, presupuestos_direcciones.cp as cp, presupuestos_direcciones.telefono as telefono, - presupuestos_direcciones.pais_id as pais_id, albaranes_linea.cantidad as cantidad, albaranes_linea.cajas as cajas') - ->where('albaranes.pedido_id', $pedido->id) - ->where('albaranes_linea.cajas !=', null) - ->join('albaranes_linea', 'albaranes_linea.albaran_id = albaranes.id') - ->join('presupuestos_direcciones', 'presupuestos_direcciones.id = albaran.presupuesto_id') + 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'), + ]; + } } } diff --git a/httpdocs/assets/js/safekat/pages/logistica/envio.js b/httpdocs/assets/js/safekat/pages/logistica/envio.js index 5c48cebb..9dcfb3c8 100644 --- a/httpdocs/assets/js/safekat/pages/logistica/envio.js +++ b/httpdocs/assets/js/safekat/pages/logistica/envio.js @@ -11,7 +11,10 @@ $(()=>{ {}, {}, function(response) { - if(response.data.createAlbaran){ + if(!response.status){ + popErrorAlert(response.message); + } + if(response.data && response.data.createAlbaran){ Swal.fire({ title: 'Atención!', @@ -31,11 +34,62 @@ $(()=>{ }, function(xhr, status, error) { - popErrorAlert(error.responseJSON.message); + if(status == 'error' && typeof(error)== 'string') + popErrorAlert(error); + else + popErrorAlert(error.responseJSON.message); } ).get(); } }); + + const tableEnvios = $('#tableOfEnvios').DataTable({ + processing: true, + serverSide: true, + autoWidth: true, + responsive: true, + scrollX: true, + orderCellsTop: true, + lengthMenu: [5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500], + pageLength: 50, + "dom": 'lBrtip', + "ajax": { + "url": "/logistica/datatableEnvios", + }, + "columns": [ + { "data": "id" }, + { "data": "pedidos" }, + { "data": "num_lineas" }, + { "data": "att" }, + { "data": "direccion" }, + { "data": "ciudad" }, + { "data": "pais" }, + { "data": "cp" }, + { "data": "email" }, + { "data": "telefono" }, + { + "data": "finalizado", + "className": "text-center", + }, + { "data": "action" } + + ], + "language": { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + "columnDefs": [ + { + orderable: false, + searchable: false, + targets: [11] + }, + ], + "order": [[0, "desc"]], + }); + + $(document).on('click', '.btn-edit', function (e) { + window.location.href = '/logistica/envio/' + $(this).attr('data-id'); + }); }); \ No newline at end of file