correjidas cosas en cuanto a mostrar lomo. También añadido calculo de paginas pares

This commit is contained in:
2025-06-20 19:51:32 +02:00
parent 75ac2e0218
commit da0ca27c8c
5 changed files with 138 additions and 22 deletions

View File

@ -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_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_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 ($tipo == 'cosido' || $tipo == 'fresado') {
if ($lomo < $lomo_minimo_fresado_cosido) { if ($lomo < $lomo_minimo_fresado_cosido) {
$errors['status'] = 1; $errors['status'] = 1;
$errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a ' $errors['value'] = lang(
. $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . 'Presupuestos.errores.error_lomo_minimo',
"Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable."; [
lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
$lomo_minimo_fresado_cosido,
$lomo,
]
);
} }
if ($lomo > $lomo_maximo_fresado_cosido) { if ($lomo > $lomo_maximo_fresado_cosido) {
$errors['status'] = 1; $errors['status'] = 1;
$errors['value'] = 'No se pueden encuadernar con un lomo superior a ' $errors['value'] = lang(
. $lomo_maximo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . 'Presupuestos.errores.error_lomo_maximo',
"Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable."; [
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( $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; $noEnvioBase = model('App\Models\Clientes\ClienteModel')->find($cliente_id)->no_envio_base ?? false;
$tirada = $reqData['tirada'] ?? 0; $tirada = $reqData['tirada'] ?? 0;
$selectedTirada = $reqData['selectedTirada'] ?? -1; $selectedTirada = $reqData['selectedTirada'] ?? (is_array($tirada) ? $tirada[0] : $tirada);
$tamanio = $reqData['tamanio']; $tamanio = $reqData['tamanio'];
$paginas = $reqData['paginas'] ?? 0; $paginas = $reqData['paginas'] ?? 0;
$paginas_color = $reqData['paginasColor'] ?? 0; $paginas_color = $reqData['paginasColor'] ?? 0;
@ -566,7 +598,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
); );
$develoment_mode = getenv('SK_ENVIRONMENT') !== 'production'; $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 (array_key_exists('errors', $return_data)) {
if ($return_data['errors']->status == 1) { if ($return_data['errors']->status == 1) {
$return_data = [ $return_data = [
@ -2129,8 +2161,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($linea) > 0) { if (count($linea) > 0) {
$costeInterior += round(floatval($linea['total_impresion']), 2); $costeInterior += round(floatval($linea['total_impresion']), 2);
$peso_interior += round(floatval($linea['peso']), 2); $peso_interior += round(floatval($linea['peso']), 2);
$lomo += floatval($linea['mano']); if (intval($tirada[$t]) == intval($selected_tirada)) {
$info['lomo_interior'] += floatval($linea['mano']); $lomo += floatval($linea['mano']);
$info['lomo_interior'] += floatval($linea['mano']);
}
if ($extra_info) { if ($extra_info) {
$this->calcular_coste_linea( $this->calcular_coste_linea(
$linea, $linea,
@ -2189,8 +2223,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($interior as $linea) { foreach ($interior as $linea) {
if (count($linea) > 0) { if (count($linea) > 0) {
$costeInterior += round(floatval($linea['total_impresion']), 2); $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']); $peso_interior += floatval($linea['peso']);
$lomo += floatval($linea['mano']);
if ($extra_info) { if ($extra_info) {
$this->calcular_coste_linea( $this->calcular_coste_linea(
@ -2242,7 +2279,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($cubierta) > 0) { if (count($cubierta) > 0) {
$coste_cubierta += round(floatval($cubierta['total_impresion']), 2); $coste_cubierta += round(floatval($cubierta['total_impresion']), 2);
$peso_cubierta += round(floatval($cubierta['peso']), 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) { if ($extra_info) {
$this->calcular_coste_linea( $this->calcular_coste_linea(
@ -2486,6 +2526,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($guardas) > 0) { if (count($guardas) > 0) {
$coste_guardas += round(floatval($guardas['total_impresion']), 2); $coste_guardas += round(floatval($guardas['total_impresion']), 2);
$peso_guardas += round(floatval($guardas['peso']), 2); $peso_guardas += round(floatval($guardas['peso']), 2);
if (intval($tirada[$t]) == intval($selected_tirada)) {
$lomo += floatval($guardas['mano']);
}
if ($extra_info) { if ($extra_info) {
$this->calcular_coste_linea( $this->calcular_coste_linea(
@ -3081,8 +3124,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
)); ));
} }
$info['lomo_cubierta'] = round(floatval($lomo), 2); if (intval($tirada[$t]) == intval($selected_tirada)) {
$info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2); $info['lomo_cubierta'] = round(floatval($lomo), 2);
$info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2);
}
$return_data['info'] = $info; $return_data['info'] = $info;

View File

@ -31,6 +31,12 @@ return [
'libroWireoTapaBlanda' => "Wire-o Tapa Blanda", 'libroWireoTapaBlanda' => "Wire-o Tapa Blanda",
'libroGrapado' => "Grapado", 'libroGrapado' => "Grapado",
'cosido' => 'Cosido',
'fresado' => 'Fresado',
'espiral' => 'Espiral',
'wireo' => 'Wire-o',
'grapado' => 'Grapado',
'datosPresupuesto' => 'Datos generales del presupuesto', 'datosPresupuesto' => 'Datos generales del presupuesto',
'datosLibro' => 'Datos del libro', 'datosLibro' => 'Datos del libro',
'datosServicios' => 'Otros Servicios', '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.', '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.', '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' => '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.', 'tipo_libro' => 'Seleccione el tipo de libro que desea para el presupuesto.',
'decimal' => 'El campo {field} debe contener un número decimal.', 'decimal' => 'El campo {field} debe contener un número decimal.',
'integer' => 'El campo {field} debe contener un número entero.', 'integer' => 'El campo {field} debe contener un número entero.',
@ -451,7 +458,11 @@ return [
'noCubiertaSobrecubierta' => 'No se hay resultados para cubierta/sobrecubierta', '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', '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_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. <br>
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. <br>
Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.",
], ],
'resize_preview' => 'Refrescar vista esquema' 'resize_preview' => 'Refrescar vista esquema'

View File

@ -159,7 +159,7 @@
<label for="paginasColor" class="form-label"> <label for="paginasColor" class="form-label">
<?= lang('Presupuestos.paginasColor') ?> <?= lang('Presupuestos.paginasColor') ?>
</label> </label>
<input type="number" class="form-control calcular-presupuesto calcular-solapas input-paginas num-input" <input type="number" step="2" class="form-control calcular-presupuesto calcular-solapas input-paginas num-input"
id="paginasColor" name="paginasColor" step="1" value="0"> id="paginasColor" name="paginasColor" step="1" value="0">
<div class="form-text"> <div class="form-text">
@ -172,7 +172,7 @@
<label for="paginasNegro" class="form-label"> <label for="paginasNegro" class="form-label">
<?= lang('Presupuestos.paginasNegro') ?> <?= lang('Presupuestos.paginasNegro') ?>
</label> </label>
<input type="number" class="form-control calcular-presupuesto calcular-solapas input-paginas num-input" <input type="number" step="2" class="form-control calcular-presupuesto calcular-solapas input-paginas num-input"
id="paginasNegro" name="paginasNegro" step="1" value="32"> id="paginasNegro" name="paginasNegro" step="1" value="32">
<div class="form-text"> <div class="form-text">
@ -260,14 +260,14 @@
class="col-12 col-md-4 text-center mb-4 tipo-libro imagen-selector image-container"> class="col-12 col-md-4 text-center mb-4 tipo-libro imagen-selector image-container">
<img class="image-presupuesto" src="<?= site_url("assets/img/presupuestoCliente/espiral.png") ?>" <img class="image-presupuesto" src="<?= site_url("assets/img/presupuestoCliente/espiral.png") ?>"
alt="Espiral"> alt="Espiral">
<div class="form-text text-center">Espiral</div> <div class="form-text text-center">Espiral (a partir de 20 páginas)</div>
</div> </div>
<div id="wireo" <div id="wireo"
class="col-12 col-md-4 text-center mb-4 tipo-libro imagen-selector image-container"> class="col-12 col-md-4 text-center mb-4 tipo-libro imagen-selector image-container">
<img class="image-presupuesto" src="<?= site_url("assets/img/presupuestoCliente/wire-o.png") ?>" <img class="image-presupuesto" src="<?= site_url("assets/img/presupuestoCliente/wire-o.png") ?>"
alt="Wire-O"> alt="Wire-O">
<div class="form-text text-center">Wire-O</div> <div class="form-text text-center">Wire-O (a partir de 20 páginas)</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -211,13 +211,23 @@ class DatosGenerales {
if (this.paginasColor.val() == '' || isNaN(this.paginasColor.val()) || parseInt(this.paginasColor.val()) < 0) { if (this.paginasColor.val() == '' || isNaN(this.paginasColor.val()) || parseInt(this.paginasColor.val()) < 0) {
this.errores.push(window.translations["validation"].paginasColor); this.errores.push(window.translations["validation"].paginasColor);
this.paginasColor.addClass('is-invalid'); 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'); this.paginasColor.removeClass('is-invalid');
} }
if (this.paginasNegro.val() == '' || isNaN(this.paginasNegro.val()) || parseInt(this.paginasNegro.val()) < 0) { if (this.paginasNegro.val() == '' || isNaN(this.paginasNegro.val()) || parseInt(this.paginasNegro.val()) < 0) {
this.errores.push(window.translations["validation"].paginasNegro); this.errores.push(window.translations["validation"].paginasNegro);
this.paginasNegro.addClass('is-invalid'); 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'); this.paginasNegro.removeClass('is-invalid');
} }
if (this.paginas.val() == '' || isNaN(this.paginas.val()) || parseInt(this.paginas.val()) <= 0) { 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 // Para recalcular el presupuesto
$('#paginas').trigger('change'); $('#paginas').trigger('change');
} }
@ -680,6 +692,19 @@ class DatosGenerales {
this.domItem.find('#grapado').show(); 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 // Se configura dependiento si hay color o no
const lastLayoutColor = $('#negroEstandar').hasClass('d-none'); const lastLayoutColor = $('#negroEstandar').hasClass('d-none');
if (paginasColor == 0) { if (paginasColor == 0) {

View File

@ -186,8 +186,39 @@ class PresupuestoCliente {
this.#processResumenLateral(); this.#processResumenLateral();
$(".divTiradasPrecio").empty();
if (this.calcularPresupuesto) { 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') { if (event.target.id === 'divDirecciones') {
this.actualizarTiradasEnvio = false; this.actualizarTiradasEnvio = false;
@ -209,7 +240,7 @@ class PresupuestoCliente {
// buscar elementos dentro de #mainContainer que tengan la clase is-invalid // buscar elementos dentro de #mainContainer que tengan la clase is-invalid
const invalidElements = $('#mainContainer').find('.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 // si hay elementos inválidos, no se procede con el
return; return;
} }
@ -552,6 +583,9 @@ class PresupuestoCliente {
this.lc.val(parseFloat(response.info.lomo_cubierta).toFixed(2)); this.lc.val(parseFloat(response.info.lomo_cubierta).toFixed(2));
this.lsc.val(parseFloat(response.info.lomo_sobrecubierta).toFixed(2)); this.lsc.val(parseFloat(response.info.lomo_sobrecubierta).toFixed(2));
this.disenioCubierta.processMenuLateral();
$('.is-invalid').removeClass('is-invalid'); $('.is-invalid').removeClass('is-invalid');
const skAlert = document.getElementById('sk-alert'); const skAlert = document.getElementById('sk-alert');
skAlert.innerHTML = ''; skAlert.innerHTML = '';