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']); 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(); + } } 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 * 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); + } + + } } diff --git a/ci4/app/Entities/Configuracion/Maquina.php b/ci4/app/Entities/Configuracion/Maquina.php index 11b5496b..1ccdef6a 100755 --- a/ci4/app/Entities/Configuracion/Maquina.php +++ b/ci4/app/Entities/Configuracion/Maquina.php @@ -1,7 +1,12 @@ "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 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; + } } 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\'', 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", diff --git a/ci4/app/Services/MaquinaService.php b/ci4/app/Services/MaquinaService.php new file mode 100644 index 00000000..05737527 --- /dev/null +++ b/ci4/app/Services/MaquinaService.php @@ -0,0 +1,84 @@ +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 setMaquina(int $maquina_id): self + { + $this->maquina = $this->maquinaModel->find($maquina_id); + return $this; + } + public function duplicate(string $newName): ?Maquina + { + + $maquina_array = $this->maquina->toArray(); + $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; + $this->maquinaDefectoModel->insert($md); + + } + foreach ($maquina_papeles_impresion as $mpi) + { + unset($mpi['id']); + $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(); + } +} 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 @@