From d427ed308d80001541c5857e0a94078644eea742 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 16:54:49 +0100 Subject: [PATCH 01/11] maquina duplicate --- ci4/app/Entities/Configuracion/Maquina.php | 26 ++++++++++ ci4/app/Services/MaquinaService.php | 60 ++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 ci4/app/Services/MaquinaService.php diff --git a/ci4/app/Entities/Configuracion/Maquina.php b/ci4/app/Entities/Configuracion/Maquina.php index 11b5496b..0aeb2046 100755 --- a/ci4/app/Entities/Configuracion/Maquina.php +++ b/ci4/app/Entities/Configuracion/Maquina.php @@ -1,6 +1,9 @@ "int", "user_updated_id" => "int", ]; + + public function papeles_impresion() : ?array + { + $m = model(MaquinasPapelesImpresionModel::class); + return $m->asArray()->where('maquina_id',$this->attributes['id'])->findAll(); + } + public function maquina_defecto(): ?array + { + $m = model(MaquinasDefectoModel::class); + return $m->asArray()->where('maquina_id',$this->attributes['id'])->findAll(); + } + public function maquina_calles() : ?array + { + $m = model(MaquinasCallesModel::class); + return $m->asArray()->where('maquina_id',$this->attributes['id'])->findAll(); + } + public function withAll() : self + { + $this->attributes['papeles_impresion'] = $this->papeles_impresion(); + $this->attributes['maquina_calles'] = $this->maquina_calles(); + $this->attributes['maquina_defecto'] = $this->maquina_defecto(); + return $this; + } } diff --git a/ci4/app/Services/MaquinaService.php b/ci4/app/Services/MaquinaService.php new file mode 100644 index 00000000..b384b7d7 --- /dev/null +++ b/ci4/app/Services/MaquinaService.php @@ -0,0 +1,60 @@ +maquinaModel = model(MaquinaModel::class); + + } + public function setMaquinaEntity(Maquina $maquinaEntity): self + { + $this->maquina = $maquinaEntity; + return $this; + } + public function duplicate(string $newName): ?Maquina + { + + $maquina_array = $this->maquina->toArray(); + $maquinaDuplicatedId = $this->maquinaModel->insert($maquina_array); + $maquina_array['nombre'] = $newName; + $maquinaWithAllRelations = $this->maquina->withAll()->toArray(); + + $maquina_defecto = $maquinaWithAllRelations['maquina_defecto']; + $maquina_papeles_impresion = $maquinaWithAllRelations['papeles_impresion']; + $maquina_calles = $maquinaWithAllRelations['maquina_calles']; + + foreach ($maquina_defecto as $md) + { + unset($md['id']); + $md['maquina_id'] = $maquinaDuplicatedId; + } + foreach ($maquina_papeles_impresion as $mpi) + { + unset($mpi['id']); + $mpi['maquina_id'] = $maquinaDuplicatedId; + } + foreach ($maquina_calles as $mc) + { + unset($mc['id']); + $mc['maquina_id'] = $maquinaDuplicatedId; + } + + return $this->maquinaModel->find($maquinaDuplicatedId)->withAll(); + } +} From 18c267ce046f93bceff510cfd6901605f99aa085 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:39:39 +0100 Subject: [PATCH 02/11] int is not a valid validation rule, changed to integer --- ci4/app/Models/Configuracion/MaquinasCallesModel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci4/app/Models/Configuracion/MaquinasCallesModel.php b/ci4/app/Models/Configuracion/MaquinasCallesModel.php index 817be4d3..df4538ef 100755 --- a/ci4/app/Models/Configuracion/MaquinasCallesModel.php +++ b/ci4/app/Models/Configuracion/MaquinasCallesModel.php @@ -42,7 +42,7 @@ class MaquinasCallesModel extends \App\Models\BaseModel protected $validationRules = [ "formas" => [ - "rules" => "required|int", + "rules" => "required|integer", ], "internas" => [ "rules" => "required|decimal", From 93c350ed5c78e873f43b7e193679f821d350251c Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:42:51 +0100 Subject: [PATCH 03/11] add duplicate route for maquinas --- ci4/app/Config/Routes.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 6f8aa601..0b535831 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -46,6 +46,7 @@ $routes->group('tarifas', ['namespace' => 'App\Controllers\Tarifas'], function ( $routes->post('encuadernacion', 'TarifaMaquinas::add_tarifa_encuadernacion_maquina_with_tarea'); $routes->post('extra', 'TarifaMaquinas::add_tarifa_extra_maquina_with_tarea'); + $routes->delete('acabado/(:num)', 'TarifaMaquinas::delete_tarifa_acabado_maquina_with_tarea/$1'); $routes->delete('manipulado/(:num)', 'TarifaMaquinas::delete_tarifa_manipulado_maquina_with_tarea/$1'); $routes->delete('preimpresion/(:num)', 'TarifaMaquinas::delete_tarifa_preimpresion_maquina_with_tarea/$1'); @@ -309,6 +310,8 @@ $routes->group('maquinas', ['namespace' => 'App\Controllers\Configuracion'], fun $routes->post('datatable', 'Maquinas::datatable', ['as' => 'dataTableOfMaquinas']); $routes->post('allmenuitems', 'Maquinas::allItemsSelect', ['as' => 'select2ItemsOfMaquinas']); $routes->post('menuitems', 'Maquinas::menuItems', ['as' => 'menuItemsOfMaquinas']); + $routes->post('duplicate/(:num)', 'Maquinas::duplicate/$1',['as' => 'duplicateMaquina']); + $routes->get('select', 'Maquinas::select', ['as' => 'selectMaquinas']); }); $routes->resource('maquinas', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Maquinas', 'except' => 'show,new,create,update']); From 36a0f018aeabfef3870873b3cd1ebd945bd97943 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:42:59 +0100 Subject: [PATCH 04/11] add maquina service --- ci4/app/Config/Services.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ci4/app/Config/Services.php b/ci4/app/Config/Services.php index df2d881e..8d209990 100755 --- a/ci4/app/Config/Services.php +++ b/ci4/app/Config/Services.php @@ -3,6 +3,7 @@ namespace Config; use App\Services\FTPService; +use App\Services\MaquinaService; use App\Services\PapelImpresionService; use CodeIgniter\Config\BaseService; use App\Services\ProductionService; @@ -43,4 +44,8 @@ class Services extends BaseService { return new PapelImpresionService(); } + public static function maquina() + { + return new MaquinaService(); + } } From 92298cf5f1d6a53e3fed513a405f3c7f643addee Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:43:07 +0100 Subject: [PATCH 05/11] add maquina_duplicate rule --- ci4/app/Config/Validation.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ci4/app/Config/Validation.php b/ci4/app/Config/Validation.php index c097a621..1c8614bf 100755 --- a/ci4/app/Config/Validation.php +++ b/ci4/app/Config/Validation.php @@ -42,7 +42,14 @@ class Validation extends BaseConfig // -------------------------------------------------------------------- // Rules // -------------------------------------------------------------------- - + /** + * Maquina duplicate validation + * + * @var array + */ + public array $maquina_duplicate = [ + "name" => "required|string" + ]; /** * PapelImpresion duplicate validation * From eb692a121e85bc4c140eb0ff03854ad6fce4686f Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:43:16 +0100 Subject: [PATCH 06/11] add duplicate method --- .../Controllers/Configuracion/Maquinas.php | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/ci4/app/Controllers/Configuracion/Maquinas.php b/ci4/app/Controllers/Configuracion/Maquinas.php index 406f44f8..bb7fb49b 100755 --- a/ci4/app/Controllers/Configuracion/Maquinas.php +++ b/ci4/app/Controllers/Configuracion/Maquinas.php @@ -9,6 +9,8 @@ use App\Models\Collection; use App\Entities\Configuracion\Maquina; use App\Models\Configuracion\MaquinaModel; +use App\Services\MaquinaService; +use CodeIgniter\Validation\Validation; class Maquinas extends \App\Controllers\BaseResourceController { @@ -26,18 +28,19 @@ class Maquinas extends \App\Controllers\BaseResourceController protected static $viewPath = 'themes/vuexy/form/configuracion/maquinas/'; protected $indexRoute = 'maquinaList'; - + protected MaquinaService $maquinaService; + protected Validation $validation; public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) { $this->viewData['pageTitle'] = lang('Maquinas.moduleTitle'); $this->viewData['usingSweetAlert'] = true; - + $this->maquinaService = service('maquina'); + $this->validation = service('validation'); // 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; - $this->viewData = ['usingServerSideDataTable' => true]; // JJO // Breadcrumbs (IMN) @@ -385,6 +388,19 @@ class Maquinas extends \App\Controllers\BaseResourceController ]; return $tipoOptions; } + public function duplicate(int $maquina_id) + { + $bodyData = $this->request->getPost(); + $validated = $this->validation->run($bodyData,'maquina_duplicate'); + if($validated){ + $this->maquinaService->setMaquina($maquina_id); + $duplicated = $this->maquinaService->duplicate($bodyData['name']); + return $this->response->setJSON(["data" => $duplicated]); + }else{ + return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); + } + + } } From 3bcd9466c636c3490481451cad30913b3c5f52e7 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:43:28 +0100 Subject: [PATCH 07/11] add method to get relations --- ci4/app/Entities/Configuracion/Maquina.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ci4/app/Entities/Configuracion/Maquina.php b/ci4/app/Entities/Configuracion/Maquina.php index 0aeb2046..1ccdef6a 100755 --- a/ci4/app/Entities/Configuracion/Maquina.php +++ b/ci4/app/Entities/Configuracion/Maquina.php @@ -4,7 +4,9 @@ namespace App\Entities\Configuracion; use App\Models\Configuracion\MaquinasCallesModel; use App\Models\Configuracion\MaquinasDefectoModel; use App\Models\Configuracion\MaquinasPapelesImpresionModel; +use App\Models\Configuracion\MaquinasTarifasImpresionModel; use CodeIgniter\Entity; +use PhpParser\Node\Expr\Cast\Array_; class Maquina extends \CodeIgniter\Entity\Entity { @@ -83,11 +85,18 @@ class Maquina extends \CodeIgniter\Entity\Entity $m = model(MaquinasCallesModel::class); return $m->asArray()->where('maquina_id',$this->attributes['id'])->findAll(); } + public function tarifas_impresion() : ?array + { + $m = model(MaquinasTarifasImpresionModel::class); + return $m->asArray()->where('maquina_id',$this->attributes['id'])->findAll(); + } public function withAll() : self { $this->attributes['papeles_impresion'] = $this->papeles_impresion(); $this->attributes['maquina_calles'] = $this->maquina_calles(); $this->attributes['maquina_defecto'] = $this->maquina_defecto(); + $this->attributes['tarifas_impresion'] = $this->tarifas_impresion(); + return $this; } } From 1a05fe762ae54f2cc75f46f4b18fe2b4b00c9aed Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:43:42 +0100 Subject: [PATCH 08/11] add new translations --- ci4/app/Language/es/Maquinas.php | 1 + 1 file changed, 1 insertion(+) diff --git a/ci4/app/Language/es/Maquinas.php b/ci4/app/Language/es/Maquinas.php index 3ee7b210..6971e9fa 100755 --- a/ci4/app/Language/es/Maquinas.php +++ b/ci4/app/Language/es/Maquinas.php @@ -43,6 +43,7 @@ return [ 'velocidad' => 'Velocidad', 'velocidadCorte' => 'Velocidad Corte', 'maquina_tarea' => 'Máquina tarea', + 'namePlaceholderDuplicated' => "Inserte el nombre de la máquina a duplicar ...", 'validation' => [ 'alto_menor_alto_impresion' => 'El campo \'Alto impresión\' debe ser menor que \'Alto\'', 'ancho_menor_ancho_impresion' => '\'Ancho Impresión\' debe ser menor que \'Ancho\'', From bc02e3f2bbbbb70adac43f496ee661c881d18ea3 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:44:05 +0100 Subject: [PATCH 09/11] add MaquinaService class --- ci4/app/Services/MaquinaService.php | 36 ++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/ci4/app/Services/MaquinaService.php b/ci4/app/Services/MaquinaService.php index b384b7d7..05737527 100644 --- a/ci4/app/Services/MaquinaService.php +++ b/ci4/app/Services/MaquinaService.php @@ -4,6 +4,10 @@ namespace App\Services; use App\Entities\Configuracion\Maquina; use App\Models\Configuracion\MaquinaModel; +use App\Models\Configuracion\MaquinasCallesModel; +use App\Models\Configuracion\MaquinasDefectoModel; +use App\Models\Configuracion\MaquinasPapelesImpresionModel; +use App\Models\Configuracion\MaquinasTarifasImpresionModel; use CodeIgniter\Config\BaseService; @@ -16,45 +20,65 @@ class MaquinaService extends BaseService protected Maquina $maquina; protected MaquinaModel $maquinaModel; + protected MaquinasDefectoModel $maquinaDefectoModel; + protected MaquinasCallesModel $maquinaCalleModel; + protected MaquinasPapelesImpresionModel $maquinaPapelesImpresionModel; + protected MaquinasTarifasImpresionModel $maquinaTarifaImpresionModel; public function __construct() { $this->maquinaModel = model(MaquinaModel::class); + $this->maquinaDefectoModel = model(MaquinasDefectoModel::class); + $this->maquinaCalleModel = model(MaquinasCallesModel::class); + $this->maquinaPapelesImpresionModel = model(MaquinasPapelesImpresionModel::class); + $this->maquinaTarifaImpresionModel = model(MaquinasTarifasImpresionModel::class); + } - public function setMaquinaEntity(Maquina $maquinaEntity): self + public function setMaquina(int $maquina_id): self { - $this->maquina = $maquinaEntity; + $this->maquina = $this->maquinaModel->find($maquina_id); return $this; } public function duplicate(string $newName): ?Maquina { $maquina_array = $this->maquina->toArray(); - $maquinaDuplicatedId = $this->maquinaModel->insert($maquina_array); $maquina_array['nombre'] = $newName; + $maquinaDuplicatedId = $this->maquinaModel->insert($maquina_array); $maquinaWithAllRelations = $this->maquina->withAll()->toArray(); $maquina_defecto = $maquinaWithAllRelations['maquina_defecto']; $maquina_papeles_impresion = $maquinaWithAllRelations['papeles_impresion']; $maquina_calles = $maquinaWithAllRelations['maquina_calles']; + $maquina_tarifas_impresion = $maquinaWithAllRelations['tarifas_impresion']; + foreach ($maquina_defecto as $md) { unset($md['id']); - $md['maquina_id'] = $maquinaDuplicatedId; + $md['maquina_id'] = $maquinaDuplicatedId; + $this->maquinaDefectoModel->insert($md); + } foreach ($maquina_papeles_impresion as $mpi) { unset($mpi['id']); - $mpi['maquina_id'] = $maquinaDuplicatedId; + $mpi['maquina_id'] = $maquinaDuplicatedId; + $this->maquinaPapelesImpresionModel->insert($mpi); } foreach ($maquina_calles as $mc) { unset($mc['id']); $mc['maquina_id'] = $maquinaDuplicatedId; + $this->maquinaCalleModel->insert($mc); + } + foreach ($maquina_tarifas_impresion as $mti) + { + unset($mti['id']); + $mti['maquina_id'] = $maquinaDuplicatedId; + $this->maquinaTarifaImpresionModel->insert($mti); } - return $this->maquinaModel->find($maquinaDuplicatedId)->withAll(); } } From e37dbe85a26f2baf0d851798bb3f0fe704a88143 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:44:16 +0100 Subject: [PATCH 10/11] add duplicate button and modal form --- .../maquinas/viewMaquinaForm.php | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaForm.php b/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaForm.php index e2f6c63c..13ac995d 100644 --- a/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaForm.php +++ b/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaForm.php @@ -10,7 +10,7 @@

-
+
@@ -19,12 +19,39 @@
" + class="btn btn-primary me-sm-3 me-1" + name="save" + value="" /> - "btn btn-secondary float-start"]) ?> + + + "btn btn-secondary"]) ?>
+
@@ -817,6 +844,7 @@ section('additionalExternalJs') ?> + From ecd280928ee3a1100e60d2b94fd4725f2f4dc084 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 22 Jan 2025 17:44:46 +0100 Subject: [PATCH 11/11] add js duplicate functionality --- .../js/safekat/pages/maquinas/duplicate.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 httpdocs/assets/js/safekat/pages/maquinas/duplicate.js diff --git a/httpdocs/assets/js/safekat/pages/maquinas/duplicate.js b/httpdocs/assets/js/safekat/pages/maquinas/duplicate.js new file mode 100644 index 00000000..4b3a0b65 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/maquinas/duplicate.js @@ -0,0 +1,31 @@ +import Ajax from "../../components/ajax.js" +import Modal from "../../components/modal.js"; +$(() => { + let maquinaId = $("#maquinaForm").data("id"); + const uri = '/maquinas/duplicate/' + maquinaId; + let modalPapelDuplicate = new Modal($("#modalMaquinaDuplicate")) + $("#btn-maquina-duplicate").on("click", (event) => { + $("#duplicated_name").removeClass("is-valid").removeClass("is-invalid") + modalPapelDuplicate.toggle(); + $("#btn-new-maquina-duplicate").on("click", () => { + let name = $("#duplicated_name").val() + const ajax = new Ajax(uri, + { name: name }, + null, + (response) => { + modalPapelDuplicate.toggle(); + $("#btn-new-maquina-duplicate").off(); + $("#duplicated_name").addClass("is-valid").removeClass('d-none'); + $("#duplicated_name").val("") + window.open('/maquinas/edit/' + response.data.id) + + }, + (error) => { + $("#duplicated_name").removeClass("is-valid").addClass("is-invalid") + } + ) + ajax.post() + + }) + }) +}) \ No newline at end of file