diff --git a/ci4/app/Controllers/Tarifas/Tarifaextra.php b/ci4/app/Controllers/Tarifas/Tarifaextra.php new file mode 100755 index 00000000..c7379197 --- /dev/null +++ b/ci4/app/Controllers/Tarifas/Tarifaextra.php @@ -0,0 +1,248 @@ +viewData['pageTitle'] = lang('Tarifaextra.moduleTitle'); + // Se indica que este controlador trabaja con soft_delete + $this->soft_delete = true; + // Se indica el flag para los ficheros borrados + $this->delete_flag = 1; + + // Breadcrumbs + $this->viewData['breadcrumb'] = [ + ['title' => lang("App.menu_tarifas"), 'route' => "javascript:void(0);", 'active' => false], + ['title' => lang("App.menu_tarifaextra"), 'route' => site_url('tarifas/tarifaextra'), 'active' => true] + ]; + + parent::initController($request, $response, $logger); + + } + + public function index() + { + + $this->viewData['usingClientSideDataTable'] = true; + + $this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Tarifaextra.tarifaextra')]); + parent::index(); + + } + + public function add() + { + + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + + + if ($this->request->getPost('mostrar_en_presupuesto') == null) { + $sanitizedData['mostrar_en_presupuesto'] = false; + } + + $noException = true; + if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : + + + if ($this->canValidate()) : + try { + $successfulResult = $this->model->skipValidation(true)->save($sanitizedData); + } catch (\Exception $e) { + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['errorMessage'] = lang('Basic.global.formErr1', [lang('Basic.global.record')]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + endif; + + $thenRedirect = true; // Change this to false if you want your user to stay on the form after submission + endif; + if ($noException && $successfulResult) : + + $id = $this->model->db->insertID(); + + $message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.'; + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message); + else: + return $this->redirect2listView('successMessage', $message); + endif; + else: + $this->session->setFlashData('sweet-success', $message); + endif; + + endif; // $noException && $successfulResult + + endif; // ($requestMethod === 'post') + + $this->viewData['tarifaextraEntity'] = isset($sanitizedData) ? new TarifaextraEntity($sanitizedData) : new TarifaextraEntity(); + + $this->viewData['formAction'] = route_to('createTarifaextra'); + + $this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Tarifaextra.tarifaextra') . ' ' . lang('Basic.global.addNewSuffix'); + + + return $this->displayForm(__METHOD__); + } // end function add() + + public function edit($requestedId = null) + { + + // JJO + $session = session(); + + if ($requestedId == null) : + return $this->redirect2listView(); + endif; + $id = filter_var($requestedId, FILTER_SANITIZE_URL); + $tarifaextraEntity = $this->model->find($id); + + if ($tarifaextraEntity == false) : + $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Tarifaextra.tarifaextra')), $id]); + return $this->redirect2listView('errorMessage', $message); + endif; + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + + // JJO + if (isset($this->model->user_updated_id)) { + $sanitizedData['user_updated_id'] = $session->id_user; + } + if ($this->request->getPost('mostrar_en_presupuesto') == null) { + $sanitizedData['mostrar_en_presupuesto'] = false; + } + + $noException = true; + if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : + if ($this->canValidate()) : + try { + $successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData); + } catch (\Exception $e) { + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Tarifaextra.tarifaextra'))]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + + endif; + + $tarifaextraEntity->fill($sanitizedData); + + $thenRedirect = false; + endif; + if ($noException && $successfulResult) : + $id = $tarifaextraEntity->id ?? $id; + $message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.'; + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message); + else: + return $this->redirect2listView('successMessage', $message); + endif; + else: + $this->session->setFlashData('sweet-success', $message); + endif; + + endif; // $noException && $successfulResult + endif; // ($requestMethod === 'post') + + $this->viewData['tarifaextraEntity'] = $tarifaextraEntity; + + $this->viewData['formAction'] = route_to('updateTarifaextra', $id); + + $this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Tarifaextra.tarifaextra') . ' ' . lang('Basic.global.edit3'); + + + return $this->displayForm(__METHOD__, $id); + } // end function edit(...) + + + public function allItemsSelect() + { + if ($this->request->isAJAX()) { + $onlyActiveOnes = true; + $reqVal = $this->request->getPost('val') ?? 'id'; + $menu = $this->model->getAllForMenu($reqVal . ', nombre', 'nombre', $onlyActiveOnes, false); + $nonItem = new \stdClass; + $nonItem->id = ''; + $nonItem->nombre = '- ' . lang('Basic.global.None') . ' -'; + array_unshift($menu, $nonItem); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'menu' => $menu, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function menuItems() + { + if ($this->request->isAJAX()) { + $searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; + $reqId = goSanitize($this->request->getPost('id'))[0]; + $reqText = goSanitize($this->request->getPost('text'))[0]; + $onlyActiveOnes = false; + $columns2select = [$reqId ?? 'id', $reqText ?? 'nombre']; + $onlyActiveOnes = false; + $menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr); + $nonItem = new \stdClass; + $nonItem->id = ''; + $nonItem->text = '- ' . lang('Basic.global.None') . ' -'; + array_unshift($menu, $nonItem); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'menu' => $menu, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + +} diff --git a/ci4/app/Entities/Tarifas/TarifaextraEntity.php b/ci4/app/Entities/Tarifas/TarifaextraEntity.php new file mode 100755 index 00000000..2ff79cd9 --- /dev/null +++ b/ci4/app/Entities/Tarifas/TarifaextraEntity.php @@ -0,0 +1,33 @@ + null, + "nombre" => null, + "precio" => null, + "precio_min" => 0, + "importe_fijo" => 0, + "margen" => 0, + "mostrar_en_presupuesto" => 1, + "user_created_id" => 1, + "user_update_id" => 1, + "is_deleted" => 0, + "deleted_at" => null, + "created_at" => null, + "updated_at" => null, + ]; + protected $casts = [ + "precio" => "float", + "precio_min" => "float", + "importe_fijo" => "float", + "margen" => "float", + "mostrar_en_presupuesto" => "int", + "user_created_id" => "int", + "user_update_id" => "int", + "is_deleted" => "int", + ]; +} diff --git a/ci4/app/Language/es/App.php b/ci4/app/Language/es/App.php index 2cd814c2..ed5cb4c1 100755 --- a/ci4/app/Language/es/App.php +++ b/ci4/app/Language/es/App.php @@ -781,6 +781,7 @@ return [ "menu_tarifas" => "Tarifas", "menu_tarifapreimpresion" => "Preimpresión", + "menu_tarifaextra" => "Serv. Extra", "menu_tarifamanipulado" => "Manipulado", "menu_tarifaencuadernacion" => "Encuadernación", "menu_tarifapapelcompra" => "Papel compra", diff --git a/ci4/app/Models/Tarifas/TarifaextraModel.php b/ci4/app/Models/Tarifas/TarifaextraModel.php new file mode 100755 index 00000000..8a768177 --- /dev/null +++ b/ci4/app/Models/Tarifas/TarifaextraModel.php @@ -0,0 +1,130 @@ + [ + "label" => "Tarifaextra.nombre", + "rules" => "trim|required|max_length[255]", + ], + "precio" => [ + "label" => "Tarifaextra.precio", + "rules" => "required|decimal", + ], + "precio_min" => [ + "label" => "Tarifaextra.precioMin", + "rules" => "required|decimal", + ], + "importe_fijo" => [ + "label" => "Tarifaextra.importeFijo", + "rules" => "required|decimal", + ], + "margen" => [ + "label" => "Tarifaextra.margen", + "rules" => "required|decimal", + ], + ]; + + protected $validationMessages = [ + "nombre" => [ + "max_length" => "Tarifaextra.validation.nombre.max_length", + "required" => "Tarifaextra.validation.nombre.required", + ], + "precio" => [ + "decimal" => "Tarifaextra.validation.precio.decimal", + "required" => "Tarifaextra.validation.precio.required", + ], + "precio_min" => [ + "required" => "Tarifaextra.validation.precio_min.required", + "decimal" => "Tarifaextra.validation.precio_min.decimal", + ], + "importe_fijo" => [ + "required" => "Tarifaextra.validation.importe_fijo.required", + "decimal" => "Tarifaextra.validation.importe_fijo.decimal", + ], + "margen" => [ + "required" => "Tarifaextra.validation.margen.required", + "decimal" => "Tarifaextra.validation.margen.decimal", + ], + ]; + + public function getServiciosPreimpresionSelector() + { + /* + Todos los servicios de extra activas que se pueden usar en presupuestos + */ + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id as value, t1.nombre AS label" + ) + ->where("t1.is_deleted", 0) + ->where("t1.mostrar_en_presupuesto", 1); + + return $builder->orderBy("t1.nombre", "asc")->get()->getResultObject(); + } + + public function getTarifaPresupuestoPreimpresion($tarifa_id){ + + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS tarifa_extra_id, t1.nombre AS tarifa_extra_nombre, t1.precio AS precio, t1.margen AS margen" + ) + ->where("t1.is_deleted", 0); + //->where("t1.mostrar_en_presupuesto", 1) + + $builder->where('t1.id =', $tarifa_id); + + return $builder->get()->getResultObject(); + } + + public function getNombreTarifaPreimpresion($id=-1) + { + /* + Todos los servicios de encuadernacion activas que se pueden usar en presupuestos + */ + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.nombre AS nombre" + ) + ->where("t1.id", $id) + ->where("t1.is_deleted", 0); + + return $builder->orderBy("t1.nombre", "asc")->get()->getResultObject(); + } + +} diff --git a/ci4/app/Views/themes/backend/vuexy/main/menu.php b/ci4/app/Views/themes/backend/vuexy/main/menu.php index b5184543..b747c669 100755 --- a/ci4/app/Views/themes/backend/vuexy/main/menu.php +++ b/ci4/app/Views/themes/backend/vuexy/main/menu.php @@ -1,4 +1,4 @@ - +