diff --git a/.gitignore b/.gitignore index 2d42bcbe..2740fefd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ ci4/.env .vscode/ -./xdebug.log \ No newline at end of file +xdebug.log \ No newline at end of file diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 351c5438..1aaf1de3 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -788,7 +788,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return $this->respond([ 'status' => $id, - 'url' => site_url('presupuestocliente/list'), + 'url' => site_url('presupuestos/presupuestocliente/edit'), 'message' => lang('Basic.global.saveSuccess', [lang('Basic.global.record')]), $csrfTokenName => $newTokenHash ]); @@ -797,6 +797,89 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } + public function get_files(){ + + // Check if the request is a POST request + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + + $presupuesto_id = $this->request->getPost()['presupuesto_id'] ?? 0; + + $model = model('App\Models\Presupuestos\PresupuestoFicheroModel'); + $files = $model->getFiles($presupuesto_id); + + $result = []; + + foreach ($files as $file) { + + $size = filesize($file->file_path); + $splitPath = explode("presupuestos/", $file->file_path); + + // se crea un objeto con el nombre del fichero y el tamaño + $obj = (object) array( + 'name' => $file->nombre, + 'size' => $size, + 'hash' => $splitPath[1] ?? $file->file_path); + + + // se añade el objeto al array + array_push($result, $obj); + } + + return json_encode($result); + } + } + + public function upload_files(){ + + $model = model('App\Models\Presupuestos\PresupuestoFicheroModel'); + + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + + $presupuesto_id = $_POST['presupuesto_id']; + $old_files = json_decode($_POST['oldFiles']); + + // Comprobar si se han subido archivos + if (!empty($_FILES['file']) || !empty($old_files)) { + + + // Borrar los archivos existentes del presupuesto + $model->deleteFiles($presupuesto_id, $old_files); + + if (!empty($_FILES['file'])){ + $files = $_FILES['file']; + + // Iterar sobre los archivos + for ($i = 0; $i < count($files['name']); $i++) { + // Aquí puedes acceder a las propiedades del archivo + $name = $files['name'][$i]; + $extension = explode('.', $files['name'][$i])[1]; + $tmp_name = $files['tmp_name'][$i]; + + $new_name = $model->saveFileInBBDD($presupuesto_id, $name, $extension, auth()->id()); + + // Se sube el fichero + // Pero primero se comprueba que la carpeta presupuestos exista + if (!is_dir(WRITEPATH . 'uploads/presupuestos')) { + mkdir(WRITEPATH . 'uploads/presupuestos', 0777, true); + } + + if(!is_null($new_name)){ + move_uploaded_file($tmp_name, WRITEPATH . 'uploads/presupuestos/' . $new_name); + } + } + } + } + else{ + // Borrar los archivos existentes del presupuesto + $model->deleteFiles($presupuesto_id); + } + } + return json_encode(['message' => 'Archivos subidos correctamente']); + } + + + + /*********************** * @@ -1479,7 +1562,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - protected function calcular_coste_linea($linea, &$totalPapel, &$margenPapel, &$sumForFactor, &$totalImpresion, &$margenImpresion) { if (count($linea) == 0) @@ -1676,14 +1758,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController protected function obtenerPaginasColor($presupuestoEntity) { $comparador_data = json_decode($presupuestoEntity->comparador_json_data); - if (property_exists($comparador_data, 'color')) { - $presupuestoEntity->paginasColor = $comparador_data->color->paginas; + if(!is_null($comparador_data)){ + if (property_exists($comparador_data, 'color')) { + $presupuestoEntity->paginasColor = $comparador_data->color->paginas; + } + if (property_exists($comparador_data, 'colorhq')) { + $presupuestoEntity->paginasColor = $comparador_data->colorhq->paginas; + } else { + $presupuestoEntity->paginasColor = 0; + } } - if (property_exists($comparador_data, 'colorhq')) { - $presupuestoEntity->paginasColor = $comparador_data->colorhq->paginas; - } else { + else $presupuestoEntity->paginasColor = 0; - } } protected function obtenerTiradas($presupuestoEntity) diff --git a/ci4/app/Controllers/Sistema/Intranet.php b/ci4/app/Controllers/Sistema/Intranet.php new file mode 100644 index 00000000..48cb27a5 --- /dev/null +++ b/ci4/app/Controllers/Sistema/Intranet.php @@ -0,0 +1,37 @@ +setContentType($mime_type); + + // Set the output + $response->setBody(file_get_contents($resource_path)); + + // Send the response to the browser + $response->send(); + } + + } + +} \ No newline at end of file diff --git a/ci4/app/Entities/Presupuestos/PresupuestoFicheroEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoFicheroEntity.php new file mode 100644 index 00000000..8948c1e8 --- /dev/null +++ b/ci4/app/Entities/Presupuestos/PresupuestoFicheroEntity.php @@ -0,0 +1,19 @@ + null, + "presupuesto_id" => null, + "nombre" => null, + "file_path" => null, + "upload_by" => null, + "upload_at" => null, + ]; + protected $casts = [ + "presupuesto_id" => "int", + ]; +} diff --git a/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php b/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php new file mode 100644 index 00000000..46ab3db6 --- /dev/null +++ b/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php @@ -0,0 +1,89 @@ +generateFileHash($filename) . '.' . $extension; + + $this->db->table($this->table . " t1") + ->set('presupuesto_id', $presupuesto_id) + ->set('nombre', $filename) + ->set('file_path', WRITEPATH . 'uploads/presupuestos/' . $new_filename) + ->set('upload_by', $user_id) + ->set('upload_at', date('Y-m-d H:i:s')) + ->insert(); + + return $new_filename; + } catch (\Exception $e) { + return null; + } + } + + public function deleteFiles($presupuesto_id, $old_files = []){ + + $files = $this->db + ->table($this->table . " t1") + ->where('presupuesto_id', $presupuesto_id)->get()->getResult(); + if($files){ + foreach($files as $file){ + + // se comprueba que el $file->nombre no sea igual a ninguno de los elementos del array $old_files + if (!in_array($file->nombre, $old_files)) { + if (file_exists($file->file_path)) { + unlink($file->file_path); + } + + $this->db + ->table($this->table . " t1") + ->where('presupuesto_id', $presupuesto_id) + ->where('nombre', $file->nombre) + ->delete(); + } + } + } + } + + + public function getFiles($presupuesto_id){ + return $this->db + ->table($this->table . " t1") + ->where('presupuesto_id', $presupuesto_id)->get()->getResult(); + } + + + /** + * Función para convertir el nombre y extensión de un fichero en un hash único + * usando cifrado simétrico. + * + * @param string $filename Nombre del fichero con extensión + * @return string Hash encriptado del fichero + */ + private function generateFileHash($filename) { + return hash('sha256', $filename); + } + + +} diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php index 8bdcfd46..45d3720d 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php @@ -145,10 +145,29 @@ echo ''; endforeach; endif; - echo ''; echo ''; endif; ?> + + estado_id==2): ?> +