impresoraEtiquetaService = service('impresora_etiqueta'); $this->locale = session()->get('lang'); $this->viewData['pageTitle'] = lang('Logistica.logistica'); // Breadcrumbs $this->viewData['breadcrumb'] = [ ['title' => lang("App.menu_logistica"), 'route' => route_to("LogisticaPanel"), 'active' => false], ]; parent::initController($request, $response, $logger); } public function print_test_label() { $etiquetaData = $this->impresoraEtiquetaService->test(); $responseMessage = $etiquetaData["status"] ? "OK" : "ERROR"; return $this->response->setJSON(["message" => $responseMessage, "data" => $etiquetaData, "status" => $etiquetaData["status"]]); } public function panel() { $viewData = [ 'currentModule' => static::$controllerSlug, 'boxTitle' => lang('Logistica.panel'), 'pageSubTitle' => 'Panel', 'usingServerSideDataTable' => true, ]; $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class return view(static::$viewPath . 'viewPanelLogistica', $viewData); } public function gestionEnvios() { $viewData = [ 'currentModule' => static::$controllerSlug, 'boxTitle' => lang('Logistica.gestionEnvios'), 'usingServerSideDataTable' => true, ]; $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class return view(static::$viewPath . 'viewLogisticaSelectEnvios', $viewData); } public function findForNewEnvio() { if ($this->request->isAJAX()) { $query = LogisticaService::findForNewEnvio(); if ($this->request->getGet("q")) { $query->groupStart() ->orLike("id", $this->request->getGet("q")) ->orLike("name", $this->request->getGet("q")) ->groupEnd(); } $result = $query->orderBy("name", "asc")->get()->getResultObject(); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } } public function selectDireccionForEnvio(){ if ($this->request->isAJAX()) { $pedido_id = $this->request->getGet('pedido_id'); if($pedido_id == null || $pedido_id == 0){ return []; } $searchVal = $this->request->getGet("q") ?? ""; $result = LogisticaService::findDireccionesNewEnvio($pedido_id, $searchVal); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } } public function generarEnvio() { if ($this->request->isAJAX()) { $pedido_id = $this->request->getPost('pedido_id'); $direccion = $this->request->getPost('direccion'); $result = LogisticaService::generateEnvio($pedido_id, $direccion); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } } public function selectAddEnvioLinea() { if ($this->request->isAJAX()) { $query = LogisticaService::findLineaEnvioPorEnvio($this->request->getGet('envio')); if ($this->request->getGet("q")) { $query->groupStart() ->orLike("id", $this->request->getGet("q")) ->orLike("name", $this->request->getGet("q")) ->groupEnd(); } $result = $query->orderBy("name", "asc")->get()->getResultObject(); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } } public function addEnvioLinea() { if ($this->request->isAJAX()) { $pedido_id = $this->request->getGet('pedido_id'); $envio_id = $this->request->getGet('envio_id'); $envioModel = model('App\Models\Logistica\EnvioModel'); $direccion = $envioModel->find($envio_id)->direccion; $result = LogisticaService::addLineaEnvio($envio_id, $pedido_id, $direccion); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } } public function datatable_envios() { $otsFilter = $this->request->getGetPost('otsFilter'); $model = model('App\Models\Logistica\EnvioModel'); $q = $model->getDatatableQuery(); if (!empty($otsFilter)) { $q->groupStart(); $q->like('t5.id', $otsFilter); $q->groupEnd(); } $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); } public function editEnvio($id = null) { if (empty($id)) { return redirect()->to(base_url('logistica/selectEnvios/simple'))->with('error', lang('Logistica.errors.noEnvio')); } $model = model('App\Models\Logistica\EnvioModel'); $envioEntity = $model->select('envios.*, lg_paises.nombre as pais') ->join('lg_paises', 'lg_paises.id = envios.pais_id', 'left') ->where('envios.id', $id) ->first(); if (empty($envioEntity)) { return redirect()->to(base_url('logistica/selectEnvios/simple'))->with('error', lang('Logistica.errors.noEnvio')); } $modelProveedor = model('App\Models\Compras\ProveedorModel'); $proveedor = $modelProveedor->select('id, nombre') ->where('deleted_at', null) ->where('id', $envioEntity->proveedor_id) ->orderBy('nombre', 'asc') ->first(); if(!empty($proveedor)){ $envioEntity->proveedor_nombre = $proveedor->nombre; } $viewData = [ 'currentModule' => static::$controllerSlug, 'boxTitle' => '' . ' ' . lang('Logistica.envio') . ' [' . $envioEntity->id . ']: ' . $envioEntity->direccion, 'usingServerSideDataTable' => true, 'envioEntity' => $envioEntity, ]; $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class return view(static::$viewPath . 'viewEnvioEditForm', $viewData); } public function updateCajasEnvio() { if ($this->request->isAJAX()) { $id = $this->request->getPost('id'); $cajas = $this->request->getPost('cajas'); $model = model('App\Models\Logistica\EnvioModel'); $result = $model->update($id, [ 'cajas' => $cajas, ]); return $this->response->setJSON([ "status" => $result, ]); } else { return $this->failUnauthorized('Invalid request', 403); } } public function finalizarEnvio() { if ($this->request->isAJAX()) { $id = $this->request->getPost('id') ?? null; $finalizar_ots = $this->request->getPost('finalizar_ots') ?? false; $result = LogisticaService::finalizarEnvio($id, $finalizar_ots); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); } } public function datatable_enviosEdit($idEnvio) { $model = model('App\Models\Logistica\EnvioLineaModel'); $q = $model->getDatatableQuery($idEnvio); $result = DataTable::of($q) ->add( "rowSelected", callback: function ($q) { return ''; } ) ->edit( "pedido", function ($row, $meta) { return '' . $row->pedido . ''; } ) ->edit( "presupuesto", function ($row, $meta) { return '' . $row->presupuesto . ''; } )->edit( "unidadesEnvio", function ($row, $meta) { if($row->finalizado == 1){ return $row->unidadesEnvio; } return ''; } ); return $result->toJson(returnAsObject: true); } public function setCajaLinea() { if ($this->request->isAJAX()) { $id = $this->request->getPost('id'); $caja = $this->request->getPost('caja'); $model = model('App\Models\Logistica\EnvioLineaModel'); $result = $model->update($id, [ 'cajas' => $caja, ]); return $this->response->setJSON([ "status" => $result, ]); } else { return $this->failUnauthorized('Invalid request', 403); } } public function deleteLineas() { if ($this->request->isAJAX()) { $ids = $this->request->getPost('ids'); $model = model('App\Models\Logistica\EnvioLineaModel'); $result = $model->delete($ids); return $this->response->setJSON([ "status" => $result, ]); } else { return $this->failUnauthorized('Invalid request', 403); } } public function updateLineaEnvio() { $id = $this->request->getPost('id'); $fieldName = $this->request->getPost('name'); $fieldValue = $this->request->getPost('value'); if (!$id || !$fieldName || ($fieldName=='unidades_envio' && !$fieldValue)) { return $this->response->setJSON([ 'status' => false, 'message' => 'Datos inválidos' ]); } $model = model('App\Models\Logistica\EnvioLineaModel'); $updated = $model->update($id, [ "" . $fieldName => $fieldValue==""? null: $fieldValue, ]); return $this->response->setJSON([ 'status' => $updated, 'message' => $updated ? 'Actualizado' : 'Error al actualizar' ]); } public function updateCodigoSeguimiento() { $id = $this->request->getPost('id'); $fieldValue = $this->request->getPost('codigo_seguimiento'); if (!$id) { return $this->response->setJSON([ 'status' => false, 'message' => 'Datos inválidos' ]); } $model = model('App\Models\Logistica\EnvioModel'); $updated = $model->update($id, [ "codigo_seguimiento" => $fieldValue==""? null: $fieldValue, ]); return $this->response->setJSON([ 'status' => $updated, 'message' => $updated ? 'Actualizado' : 'Error al actualizar' ]); } public function updateProveedorEnvio() { $id = $this->request->getPost('id'); $fieldValue = $this->request->getPost('proveedor_id'); if (!$id) { return $this->response->setJSON([ 'status' => false, 'message' => 'Datos inválidos' ]); } $model = model('App\Models\Logistica\EnvioModel'); $updated = $model->update($id, [ "proveedor_id" => $fieldValue==""? null: $fieldValue, ]); return $this->response->setJSON([ 'status' => $updated, 'message' => $updated ? 'Actualizado' : 'Error al actualizar' ]); } public function saveComments() { $id = $this->request->getPost('id'); $comments = $this->request->getPost('comentarios'); if (!$id || !$comments) { return $this->response->setJSON([ 'status' => false, 'message' => 'Datos inválidos' ]); } $model = model('App\Models\Logistica\EnvioModel'); $updated = $model->update($id, [ 'comentarios' => $comments, ]); return $this->response->setJSON([ 'status' => $updated, 'message' => $updated ? 'Actualizado' : 'Error al actualizar' ]); } }