From da0ca27c8c933e52dacf8547b1eb0f26e5f645bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Fri, 20 Jun 2025 19:51:32 +0200 Subject: [PATCH] =?UTF-8?q?correjidas=20cosas=20en=20cuanto=20a=20mostrar?= =?UTF-8?q?=20lomo.=20Tambi=C3=A9n=20a=C3=B1adido=20calculo=20de=20paginas?= =?UTF-8?q?=20pares?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presupuestos/Presupuestocliente.php | 74 +++++++++++++++---- ci4/app/Language/es/Presupuestos.php | 13 +++- .../cliente/items/_datosGenerales.php | 8 +- .../presupuestoCliente/datosGenerales.js | 29 +++++++- .../presupuestoCliente/presupuestoCliente.js | 36 ++++++++- 5 files changed, 138 insertions(+), 22 deletions(-) diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 21448a82..a06f93a9 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -419,20 +419,52 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ]; $lomo_minimo_fresado_cosido = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value); $lomo_maximo_fresado_cosido = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value); + $lomo_maximo_espiral = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value); + $lomo_maximo_wireo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_wireo')->value); if ($tipo == 'cosido' || $tipo == 'fresado') { if ($lomo < $lomo_minimo_fresado_cosido) { $errors['status'] = 1; - $errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a ' - . $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . - "Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable."; + $errors['value'] = lang( + 'Presupuestos.errores.error_lomo_minimo', + [ + lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'), + $lomo_minimo_fresado_cosido, + $lomo, + ] + ); } if ($lomo > $lomo_maximo_fresado_cosido) { $errors['status'] = 1; - $errors['value'] = 'No se pueden encuadernar con un lomo superior a ' - . $lomo_maximo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . - "Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable."; + $errors['value'] = lang( + 'Presupuestos.errores.error_lomo_maximo', + [ + lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'), + $lomo_maximo_fresado_cosido, + $lomo, + ] + ); } + } else if ($tipo == 'espiral' && $lomo > $lomo_maximo_espiral) { + $errors['status'] = 1; + $errors['value'] = lang( + 'Presupuestos.errores.error_lomo_maximo', + [ + lang('Presupuestos.espiral'), + $lomo_maximo_espiral, + $lomo, + ] + ); + } else if ($tipo == 'wireo' && $lomo > $lomo_maximo_wireo) { + $errors['status'] = 1; + $errors['value'] = lang( + 'Presupuestos.errores.error_lomo_maximo', + [ + lang('Presupuestos.wireo'), + $lomo_maximo_wireo, + $lomo, + ] + ); } $data = (object) array( @@ -469,7 +501,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $noEnvioBase = model('App\Models\Clientes\ClienteModel')->find($cliente_id)->no_envio_base ?? false; $tirada = $reqData['tirada'] ?? 0; - $selectedTirada = $reqData['selectedTirada'] ?? -1; + $selectedTirada = $reqData['selectedTirada'] ?? (is_array($tirada) ? $tirada[0] : $tirada); $tamanio = $reqData['tamanio']; $paginas = $reqData['paginas'] ?? 0; $paginas_color = $reqData['paginasColor'] ?? 0; @@ -566,7 +598,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ); $develoment_mode = getenv('SK_ENVIRONMENT') !== 'production'; - $return_data = $this->calcular_presupuesto($datos_presupuesto, 0, $develoment_mode); //TRUE FOR DEBUG + $return_data = $this->calcular_presupuesto($datos_presupuesto, $selectedTirada, $develoment_mode); //TRUE FOR DEBUG if (array_key_exists('errors', $return_data)) { if ($return_data['errors']->status == 1) { $return_data = [ @@ -2129,8 +2161,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (count($linea) > 0) { $costeInterior += round(floatval($linea['total_impresion']), 2); $peso_interior += round(floatval($linea['peso']), 2); - $lomo += floatval($linea['mano']); - $info['lomo_interior'] += floatval($linea['mano']); + if (intval($tirada[$t]) == intval($selected_tirada)) { + $lomo += floatval($linea['mano']); + $info['lomo_interior'] += floatval($linea['mano']); + } if ($extra_info) { $this->calcular_coste_linea( $linea, @@ -2189,8 +2223,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController foreach ($interior as $linea) { if (count($linea) > 0) { $costeInterior += round(floatval($linea['total_impresion']), 2); + if (intval($tirada[$t]) == intval($selected_tirada)) { + $info['lomo_interior'] += floatval($linea['mano']); + $lomo += floatval($linea['mano']); + } $peso_interior += floatval($linea['peso']); - $lomo += floatval($linea['mano']); if ($extra_info) { $this->calcular_coste_linea( @@ -2242,7 +2279,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (count($cubierta) > 0) { $coste_cubierta += round(floatval($cubierta['total_impresion']), 2); $peso_cubierta += round(floatval($cubierta['peso']), 2); - $lomo += floatval($cubierta['mano']); + if (intval($tirada[$t]) == intval($selected_tirada)) { + $lomo += floatval($cubierta['mano']); + } + if ($extra_info) { $this->calcular_coste_linea( @@ -2486,6 +2526,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (count($guardas) > 0) { $coste_guardas += round(floatval($guardas['total_impresion']), 2); $peso_guardas += round(floatval($guardas['peso']), 2); + if (intval($tirada[$t]) == intval($selected_tirada)) { + $lomo += floatval($guardas['mano']); + } if ($extra_info) { $this->calcular_coste_linea( @@ -3081,8 +3124,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController )); } - $info['lomo_cubierta'] = round(floatval($lomo), 2); - $info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2); + if (intval($tirada[$t]) == intval($selected_tirada)) { + $info['lomo_cubierta'] = round(floatval($lomo), 2); + $info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2); + } + $return_data['info'] = $info; diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index 54741c39..e8ee484c 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -31,6 +31,12 @@ return [ 'libroWireoTapaBlanda' => "Wire-o Tapa Blanda", 'libroGrapado' => "Grapado", + 'cosido' => 'Cosido', + 'fresado' => 'Fresado', + 'espiral' => 'Espiral', + 'wireo' => 'Wire-o', + 'grapado' => 'Grapado', + 'datosPresupuesto' => 'Datos generales del presupuesto', 'datosLibro' => 'Datos del libro', 'datosServicios' => 'Otros Servicios', @@ -390,6 +396,7 @@ return [ 'paginasColor' => 'El número de páginas a color debe ser un número entero mayor o igual que 0.', 'paginasNegro' => 'El número de páginas en negro debe ser un número entero mayor o igual que 0.', 'paginas' => 'El total de páginas tiene que ser mayor que 0.', + 'paginas_pares' => 'El número de páginas debe ser par.', 'tipo_libro' => 'Seleccione el tipo de libro que desea para el presupuesto.', 'decimal' => 'El campo {field} debe contener un número decimal.', 'integer' => 'El campo {field} debe contener un número entero.', @@ -451,7 +458,11 @@ return [ 'noCubiertaSobrecubierta' => 'No se hay resultados para cubierta/sobrecubierta', '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_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.
+ 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.
+ 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/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php index 59c71a3b..01febb89 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php @@ -159,7 +159,7 @@ -
@@ -172,7 +172,7 @@ -
@@ -260,14 +260,14 @@ class="col-12 col-md-4 text-center mb-4 tipo-libro imagen-selector image-container"> " alt="Espiral"> -
Espiral
+
Espiral (a partir de 20 páginas)
" alt="Wire-O"> -
Wire-O
+
Wire-O (a partir de 20 páginas)
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js index 5c64f64c..fee7ab5d 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js @@ -211,13 +211,23 @@ class DatosGenerales { if (this.paginasColor.val() == '' || isNaN(this.paginasColor.val()) || parseInt(this.paginasColor.val()) < 0) { this.errores.push(window.translations["validation"].paginasColor); this.paginasColor.addClass('is-invalid'); - } else { + } + else if (parseInt(this.paginasColor.val()) % 2 != 0) { + this.errores.push(window.translations["validation"].paginas_pares); + this.paginasColor.addClass('is-invalid'); + } + else { this.paginasColor.removeClass('is-invalid'); } if (this.paginasNegro.val() == '' || isNaN(this.paginasNegro.val()) || parseInt(this.paginasNegro.val()) < 0) { this.errores.push(window.translations["validation"].paginasNegro); this.paginasNegro.addClass('is-invalid'); - } else { + } + else if (parseInt(this.paginasNegro.val()) % 2 != 0) { + this.errores.push(window.translations["validation"].paginas_pares); + this.paginasNegro.addClass('is-invalid'); + } + else { this.paginasNegro.removeClass('is-invalid'); } if (this.paginas.val() == '' || isNaN(this.paginas.val()) || parseInt(this.paginas.val()) <= 0) { @@ -637,6 +647,8 @@ class DatosGenerales { } } + this.validate(false); + // Para recalcular el presupuesto $('#paginas').trigger('change'); } @@ -680,6 +692,19 @@ class DatosGenerales { this.domItem.find('#grapado').show(); } + if( totalPaginas < 20){ + this.domItem.find('#espiral').removeClass('selected'); + this.domItem.find('#espiral').find('.image-presupuesto').removeClass('selected'); + this.domItem.find('#espiral').hide(); + this.domItem.find('#wireo').removeClass('selected'); + this.domItem.find('#wireo').find('.image-presupuesto').removeClass('selected'); + this.domItem.find('#wireo').hide(); + } + else { + this.domItem.find('#espiral').show(); + this.domItem.find('#wireo').show(); + } + // Se configura dependiento si hay color o no const lastLayoutColor = $('#negroEstandar').hasClass('d-none'); if (paginasColor == 0) { diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js index 858bfb40..21daec53 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js @@ -186,8 +186,39 @@ class PresupuestoCliente { this.#processResumenLateral(); + $(".divTiradasPrecio").empty(); + if (this.calcularPresupuesto) { + const element = $('.fv-plugins-bootstrap5.fv-plugins-framework.active'); + + switch (element.attr('id')) { + case 'datos-generales': + if(!this.datosGenerales.validate(false)) { + return; + } + break; + + case 'interior-libro': + if(!this.disenioInterior.validate(false)) { + return; + } + break; + case 'cubierta-libro': + if(!this.disenioCubierta.validate(false)) { + return; + } + break; + case 'direcciones-libro': + if(!this.direcciones.validate(false)) { + return; + } + break; + + default: + break; + } + if (event.target.id === 'divDirecciones') { this.actualizarTiradasEnvio = false; @@ -209,7 +240,7 @@ class PresupuestoCliente { // buscar elementos dentro de #mainContainer que tengan la clase is-invalid const invalidElements = $('#mainContainer').find('.is-invalid'); - if(invalidElements.length > 0) { + if (invalidElements.length > 0) { // si hay elementos inválidos, no se procede con el return; } @@ -552,6 +583,9 @@ class PresupuestoCliente { this.lc.val(parseFloat(response.info.lomo_cubierta).toFixed(2)); this.lsc.val(parseFloat(response.info.lomo_sobrecubierta).toFixed(2)); + + this.disenioCubierta.processMenuLateral(); + $('.is-invalid').removeClass('is-invalid'); const skAlert = document.getElementById('sk-alert'); skAlert.innerHTML = '';