From 819f297e9067384eb9fb7457ed732232eb841aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Mon, 23 Jun 2025 18:33:46 +0200 Subject: [PATCH] =?UTF-8?q?a=C3=B1adido=20checkeo=20de=20lomo=20en=20presu?= =?UTF-8?q?puesto=20admin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci4/app/Config/Routes/PresupuestosRoutes.php | 2 + .../Presupuestos/Presupuestoadmin.php | 12 ++ ci4/app/Language/es/Presupuestos.php | 4 +- ci4/app/Services/PresupuestoService.php | 129 +++++++++++++++--- .../admin/viewPresupuestoadminForm.php | 1 + .../presupuestoAdmin/presupuestoAdminEdit.js | 48 +++---- .../presupuestoAdmin/sections/datosLibro.js | 4 +- .../sections/lineasPresupuesto.js | 37 ++++- 8 files changed, 189 insertions(+), 48 deletions(-) diff --git a/ci4/app/Config/Routes/PresupuestosRoutes.php b/ci4/app/Config/Routes/PresupuestosRoutes.php index 4097a69e..16929334 100755 --- a/ci4/app/Config/Routes/PresupuestosRoutes.php +++ b/ci4/app/Config/Routes/PresupuestosRoutes.php @@ -17,6 +17,8 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos $routes->post('allmenuitems', 'Presupuestoadmin::allItemsSelect', ['as' => 'select2ItemsOfPresupuestoAdmin']); $routes->post('menuitems', 'Presupuestoadmin::menuItems', ['as' => 'menuItemsOfPresupuestoAdmin']); + $routes->get('checklomointerior', 'Presupuestoadmin::checkLomo'); + $routes->get('cargar/(:any)', 'Presupuestoadmin::cargar/$1'); $routes->post('comparadorinterior', 'Presupuestoadmin::obtenerComparadorInterior'); $routes->post('comparadorexteriores', 'Presupuestoadmin::obtenerComparadorExteriores'); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index a69fad38..11a5668f 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -1841,6 +1841,18 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } } + public function checkLomo() + { + if ($this->request->isAJAX()) { + $tipo_impresion_id = $this->request->getGet('tipo_impresion_id'); + $lomo = $this->request->getGet('lomo') ?? 0; + $response = PresupuestoService::check_lomo_interior($tipo_impresion_id, $lomo); + return $this->respond($response); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + public function reprintPresupuesto() { diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index e8ee484c..c5d50698 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -459,9 +459,9 @@ return [ 'errorPresupuesto' => 'Se ha producido un error al calcular el presupuesto. Póngase en contacto con el administrador', 'error_sobrecubierta_sin_solapas' => 'Debe seleccionar "sobrecubierta" en los datos del libro para introducir el ancho de solapa', 'error_faja_sin_solapas' => 'Debe seleccionar "faja" en los datos del libro para introducir el ancho de solapa', - 'error_lomo_maximo' => "No se pueden encuadernar libros {0} con un lomo superior a {1} mm. El lomo actual es de {2} mm.
+ 'error_lomo_maximo' => "No se pueden encuadernar libros {0} con un lomo interior superior a {1} mm. El lomo actual es de {2} mm.
Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.", - 'error_lomo_minimo' => "No se pueden encuadernar libros {0} con un lomo inferior a {1} mm. El lomo actual es de {2} mm.
+ 'error_lomo_minimo' => "No se pueden encuadernar libros {0} con un lomo interior inferior a {1} mm. El lomo actual es de {2} mm.
Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.", ], 'resize_preview' => 'Refrescar vista esquema' diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index a27bf71e..b4d6b89f 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -2079,15 +2079,14 @@ class PresupuestoService extends BaseService if ($tirada == 1) { $merma = 0; - } - else if ($tirada > intval($POD)) { + } else if ($tirada > intval($POD)) { $merma = $tirada * 0.1; } else { $merma_lineas = []; foreach ($formas_lineas_interior as $formas_linea) { if ($formas_linea > $tirada) array_push($merma_lineas, $formas_linea - $tirada); - else{ + else { $total_pliegos = ceil($tirada / $formas_linea); $total_formas = $total_pliegos * $formas_linea; array_push($merma_lineas, $total_formas - $tirada); @@ -2127,27 +2126,25 @@ class PresupuestoService extends BaseService $presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado'); $presupuesto->is_duplicado = 1; $presupuesto->estado_id = 1; - if($is_reimpresion && boolval($copy_files)){ + if ($is_reimpresion && boolval($copy_files)) { $presupuesto->inc_rei = "reimpresion"; $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel'); $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first(); - if($pedido_linea){ - $text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id . - "\n================================================\n"; - $presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat ; - } - } - else if($is_reimpresion){ - $presupuesto->inc_rei = null; - $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel'); - $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first(); - if($pedido_linea){ - $text = "DUPLICADO [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id . + if ($pedido_linea) { + $text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id . "\n================================================\n"; $presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat; } - } - else{ + } else if ($is_reimpresion) { + $presupuesto->inc_rei = null; + $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel'); + $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first(); + if ($pedido_linea) { + $text = "DUPLICADO [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id . + "\n================================================\n"; + $presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat; + } + } else { $presupuesto->inc_rei = null; } $new_id = $modelPresupuesto->insert($presupuesto); @@ -2192,7 +2189,7 @@ class PresupuestoService extends BaseService $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); - if (boolval($copy_files)== true) { + if (boolval($copy_files) == true) { $presupuestoFilesModel = model('App\Models\Presupuestos\PresupuestoFicheroModel'); $presupuestoFilesModel->copyFiles($presupuesto->id, $new_id); } @@ -2200,7 +2197,7 @@ class PresupuestoService extends BaseService return [ 'success' => true, 'id' => $new_id, - 'message' => lang('Presupuestos.presupuestoGenerado'), + 'message' => lang('Presupuestos.presupuestoGenerado'), ]; } catch (\Exception $e) { @@ -2210,4 +2207,96 @@ class PresupuestoService extends BaseService ]; } } + + public static function check_lomo_interior($tipo_impresion_id, $lomo = 0) + { + $lomo_maximo = 0; + $lomo_minimo = 0; + if ($lomo == 0) { + return [ + 'status' => true, + 'message' => 'Lomo interior 0' + ]; + } + switch ($tipo_impresion_id) { + case 1: // Fresado + case 2: + case 3: // Cosido + case 4: + $lomo_minimo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value); + $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value); + if ($lomo != 0 && $lomo < $lomo_minimo) { + return [ + 'status' => false, + 'message' => lang( + 'Presupuestos.errores.error_lomo_minimo', + [ + lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'), + $lomo_minimo, + $lomo, + ] + ) + ]; + } else if ($lomo != 0 && $lomo > $lomo_maximo) { + return [ + 'status' => false, + 'message' => lang( + 'Presupuestos.errores.error_lomo_maximo', + [ + lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'), + $lomo_maximo, + $lomo, + ] + ) + ]; + + } + break; + case 5: // Espiral + case 6: + $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value); + if ($lomo != 0 && $lomo > $lomo_maximo) { + return [ + 'status' => false, + 'message' => lang( + 'Presupuestos.errores.error_lomo_maximo', + [ + lang('Presupuestos.espiral'), + $lomo_maximo, + $lomo, + ] + ) + ]; + } + break; + case 7: // Wire-O + case 8: + $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_wireo')->value); + $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value); + if ($lomo != 0 && $lomo > $lomo_maximo) { + return [ + 'status' => false, + 'message' => lang( + 'Presupuestos.errores.error_lomo_maximo', + [ + lang('Presupuestos.wireo'), + $lomo_maximo, + $lomo, + ] + ) + ]; + } + break; + default: + return [ + 'status' => true, + 'message' => 'Lomo valido' + ]; + } + + return [ + 'status' => true, + 'message' => 'Lomo valido' + ]; + } } diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php index 04f5421c..86e386c6 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php @@ -14,6 +14,7 @@ +
getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?> diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js index 7073c1b8..7bbc0fa8 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js @@ -354,7 +354,7 @@ class PresupuestoAdminEdit { // Ejecutar los pasos de forma secuencial si están habilitados if (update_lineas) { $(document).trigger('update-lineas-presupuesto'); - await waitForEvent('update-lineas-presupuesto-completed'); + await waitForEvent('update-lineas-presupuesto-completed'); } if (update_servicios) { @@ -698,30 +698,30 @@ class PresupuestoAdminEdit { buttonsStyling: false }).then((result) => { if (result.isDenied || result.isConfirmed) { - new Ajax('/presupuestoadmin/reprint', - { id: id, duplicateFiles: result.isConfirmed ? 1 : 0 }, {}, - function (response) { - if (response.success === true) { - Swal.fire({ - text: response.message, - icon: 'success', - confirmButtonColor: '#3085d6', - confirmButtonText: 'Ok', - customClass: { - confirmButton: 'btn btn-primary me-1', - }, - buttonsStyling: false - }) - window.open('/presupuestoadmin/edit/' + response.id, '_blank'); - } else { - popErrorAlert(response.mensaje); + new Ajax('/presupuestoadmin/reprint', + { id: id, duplicateFiles: result.isConfirmed ? 1 : 0 }, {}, + function (response) { + if (response.success === true) { + Swal.fire({ + text: response.message, + icon: 'success', + confirmButtonColor: '#3085d6', + confirmButtonText: 'Ok', + customClass: { + confirmButton: 'btn btn-primary me-1', + }, + buttonsStyling: false + }) + window.open('/presupuestoadmin/edit/' + response.id, '_blank'); + } else { + popErrorAlert(response.mensaje); + } + }, + function (error) { + popErrorAlert(error); } - }, - function (error) { - popErrorAlert(error); - } - ).post(); - } + ).post(); + } }); } diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js index 14ac7ff7..8b8ad994 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js @@ -577,6 +577,8 @@ class DatosLibro { update_tiradas_alternativas: true }); + this.actualizarLimitesPaginas(); + } } @@ -775,7 +777,7 @@ class DatosLibro { case 6: case 7: // Wire-O case 8: - min = 1; + min = 20; max = null; // Sin límite superior break; case 21: // Grapado diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js index d1134621..edbf24e3 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js @@ -485,7 +485,9 @@ class LineasPresupuesto { if (lp.tipo == 'lp_guardas') lp['paginas_impresion'] = lp.paginas_impresion; - }); + }) + + this.checkLomo(); } async guardarLineasPresupuesto() { @@ -1723,6 +1725,39 @@ class LineasPresupuesto { this.table.columns.adjust(); + this.checkLomo(); + + } + + checkLomo() { + + let lomo = 0.0; + + for (let i = 0; i < this.table.rows().count(); i++) { + + var rowData = this.table.row(i).data(); + if (rowData.row_id !== 'lp_cubierta' && rowData.row_id !== 'lp_sobrecubierta' && rowData.row_id !== 'lp_guardas' && rowData.row_id !== 'lp_faja') { + if (rowData.lomo && rowData.lomo !== null && rowData.lomo !== '') { + lomo += parseFloat(rowData.lomo); + } + } + } + new Ajax('/presupuestoadmin/checklomointerior', + { tipo_impresion_id: $("#tipo_impresion_id").val(), lomo: lomo}, {}, + function (response) { + if (response.status !== true) { + popErrorAlert(response.message, 'sk-alert-lomo', false); + $(window).scrollTop(0); + } + else{ + popAlert2Hide('sk-alert-lomo'); + } + }, + function (error) { + popErrorAlert(error.statusText? error.statusText : error); + } + ).get(); + }