Merge branch 'feat/sk-18' into 'main'

Feat/sk 18

See merge request jjimenez/safekat!486
This commit is contained in:
Alvaro
2025-01-22 16:45:33 +00:00
10 changed files with 220 additions and 10 deletions

View File

@ -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']);

View File

@ -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();
}
}

View File

@ -42,7 +42,14 @@ class Validation extends BaseConfig
// --------------------------------------------------------------------
// Rules
// --------------------------------------------------------------------
/**
* Maquina duplicate validation
*
* @var array
*/
public array $maquina_duplicate = [
"name" => "required|string"
];
/**
* PapelImpresion duplicate validation
*

View File

@ -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);
}
}
}

View File

@ -1,7 +1,12 @@
<?php
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
{
@ -64,4 +69,34 @@ class Maquina extends \CodeIgniter\Entity\Entity
"user_created_id" => "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;
}
}

View File

@ -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\'',

View File

@ -42,7 +42,7 @@ class MaquinasCallesModel extends \App\Models\BaseModel
protected $validationRules = [
"formas" => [
"rules" => "required|int",
"rules" => "required|integer",
],
"internas" => [
"rules" => "required|decimal",

View File

@ -0,0 +1,84 @@
<?php
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;
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 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();
}
}

View File

@ -10,7 +10,7 @@
<div class="card-header">
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
</div><!--//.card-header -->
<form id="maquinaForm" class="card-body" method="post" action="<?= $formAction ?>">
<form id="maquinaForm" class="card-body" method="post" action="<?= $formAction ?>" data-id="<?= $maquina->id ?>">
<?= csrf_field() ?>
<div class="card-body">
<?= view("themes/_commonPartialsBs/_alertBoxes") ?>
@ -19,12 +19,39 @@
</div><!-- /.card-body -->
<div class="py-4">
<input type="submit"
class="btn btn-primary float-start me-sm-3 me-1"
name="save"
value="<?= lang("Basic.global.Save") ?>"
class="btn btn-primary me-sm-3 me-1"
name="save"
value="<?= lang("Basic.global.Save") ?>"
/>
<?= anchor(route_to("maquinaList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary float-start"]) ?>
<button type="button" id="btn-maquina-duplicate" class="btn btn-danger me-sm-3 me-1"><i class="ti ti-xs ti-copy"></i><?= lang("Basic.global.Duplicate") ?></button>
<?= anchor(route_to("maquinaList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary"]) ?>
</div><!-- /.card-footer -->
<div class="modal fade" id="modalMaquinaDuplicate" tabindex="-1" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3><?= lang('Basic.global.Duplicate') ?></h3>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="col-md-12">
<label for="duplicated_name"><?= lang("Maquinas.nombre") ?></label>
<input type="text" id="duplicated_name" name="name" class="form-control" placeholder="<?=lang("Maquinas.namePlaceholderDuplicated")?>">
<div class="invalid-feedback d-none">
</div>
</div>
</div>
<div class="modal-footer">
<div class="d-flex align-items-center justify-content-end gap-2">
<button type="button" id="btn-new-maquina-duplicate" class="btn-primary btn btn-md"><?= lang('Basic.global.Save') ?></button>
<button type="button" class="btn-secondary btn btn-md" data-bs-dismiss="modal"><?= lang('Basic.global.Cancel') ?></button>
</div>
</div>
</div>
</div>
</div>
</form>
</div><!-- //.card -->
</div><!--//.col -->
@ -817,6 +844,7 @@
<?= $this->section('additionalExternalJs') ?>
<script type="module" src="<?= site_url('assets/js/safekat/pages/maquinas/duplicate.js') ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/dataTables.buttons.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.html5.min.js") ?>"></script>

View File

@ -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()
})
})
})