corregido el texto del error del tipo de libro y que se borre el error

This commit is contained in:
2025-06-27 08:38:23 +02:00
parent 33a196667e
commit 4a60bcdd61
8 changed files with 147 additions and 49 deletions

View File

@ -1585,7 +1585,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$modelPapelFormato = new PapelFormatoModel(); $modelPapelFormato = new PapelFormatoModel();
$modelCliente = new ClienteModel(); $modelCliente = new ClienteModel();
$presupuesto = $this->model->find($id); $presupuesto = $this->model->find($id);
$data = []; $data = [];
if ($presupuesto) { if ($presupuesto) {
@ -1695,7 +1694,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (intval($presupuesto->recoger_en_taller) == 1) { if (intval($presupuesto->recoger_en_taller) == 1) {
$data['direcciones']['entrega_taller'] = 1; $data['direcciones']['entrega_taller'] = 1;
} else { } else {
$data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id); $data['direcciones'] = $this->obtenerDireccionesEnvio($id);
} }
if (intval($presupuesto->estado_id) == 2) { if (intval($presupuesto->estado_id) == 2) {
@ -3398,39 +3397,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
} }
} }
protected function obtenerDireccionesEnvio($id, $cliente_id) protected function obtenerDireccionesEnvio($id)
{ {
$model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
$model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel'); $direcciones = $model->where('presupuesto_id', $id)
$direcciones = $model->where('presupuesto_id', $id)->asArray()->findAll(); ->where('is_ferro_prototipo', 0)->asArray()->findAll();
return $direcciones; return $direcciones;
}
$result = []; protected function obtenerDireccionesEnvioFerro($id)
$temp = []; {
for ($i = 0; $i < count($direcciones); $i++) { $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
$direccion_id = $model_direcciones->getIdForPresupuestoCliente( $direcciones = $model->where('presupuesto_id', $id)
$cliente_id, ->where('is_ferro_prototipo', 0)->asArray()->findAll();
$direcciones[$i]->att,
$direcciones[$i]->email, return $direcciones;
$direcciones[$i]->direccion,
$direcciones[$i]->cp,
$direcciones[$i]->pais_id,
$direcciones[$i]->telefono
);
if (count($direccion_id) > 0) {
$temp = $direcciones[$i]->toArray();
array_push($result, [
'id' => $temp['id'],
'unidades' => $temp['cantidad'],
'palets' => $temp['entregaPieCalle'],
]);
}
}
if (count($result) > 0)
return $result;
else
return [];
} }
protected function obtenerDatosPapel($presupuesto_id) protected function obtenerDatosPapel($presupuesto_id)
@ -3643,10 +3625,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($data as $servicio) { foreach ($data as $servicio) {
$id = "service_extra_" . $servicio->id; $id = "service_extra_" . $servicio->id;
$tarifa_excluyente = false;
if(str_contains(strtolower($servicio->nombre), 'ferro') || str_contains(strtolower($servicio->nombre), 'prototipo')) {
$tarifa_excluyente = true;
}
$atributo_excluyente = $tarifa_excluyente ? 'data-tarifa-extra-excluyente="1"' : '';
array_push( array_push(
$servicios, $servicios,
"<input class=\"calcular-presupuesto form-check-input\" type=\"checkbox\" id=\"{$id}\" "<input class=\"calcular-presupuesto form-check-input\" type=\"checkbox\" id=\"{$id}\"
name=\"{$id}\" value=\"1\" data-tarifa-id=\"{$servicio->id}\" data-tarifa-tipo=\"extra\" data-tarifa-nombre=\"{$servicio->nombre}\"> name=\"{$id}\" value=\"1\" data-tarifa-id=\"{$servicio->id}\" data-tarifa-tipo=\"extra\" data-tarifa-nombre=\"{$servicio->nombre}\"
{$atributo_excluyente}>
<label class=\"form-check-label\" for=\"{$id}\">{$servicio->nombre}</label>" <label class=\"form-check-label\" for=\"{$id}\">{$servicio->nombre}</label>"
); );
} }

View File

@ -42,8 +42,8 @@ return [
'papelFormatoAncho' => 'Width', 'papelFormatoAncho' => 'Width',
'papelFormatoAlto' => 'Height', 'papelFormatoAlto' => 'Height',
'cosido' => 'Sewn', 'cosido' => 'Sewn',
'ferro' => 'Ferro', 'ferro' => 'Blueline proof',
'ferroDigital' => 'Digital Ferro', 'ferroDigital' => 'Digital Blueline proof',
'prototipo' => 'Prototype', 'prototipo' => 'Prototype',
'imagenesBnInterior' => 'B/W pictures inside', 'imagenesBnInterior' => 'B/W pictures inside',
'recogerEnTaller' => 'Pick up in workshop', 'recogerEnTaller' => 'Pick up in workshop',

View File

@ -396,7 +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.',
'tipo_libro' => 'Seleccione el tipo de libro que desea para el presupuesto.', 'tipo_libro' => 'Seleccione el tipo de encuadernación 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.',
'requerido' => 'El campo {field} es obligatorio.', 'requerido' => 'El campo {field} es obligatorio.',

View File

@ -21,6 +21,8 @@ return [
'costePrecio' => 'Coste/Precio', 'costePrecio' => 'Coste/Precio',
'saveDirection' => 'Guardar en direcciones de cliente', 'saveDirection' => 'Guardar en direcciones de cliente',
'entregaPieCalle' => 'Entrega a pie de calle (enviado en palets)', 'entregaPieCalle' => 'Entrega a pie de calle (enviado en palets)',
'sameAddPrincipal' => 'Usar la dirección principal del presupuesto',
'sameAddFP1' => 'Usar la dirección del ferro/prototipo 1',
'validation' => [ 'validation' => [
'ejemplares_envio' => 'El número de ejemplares enviados no coincide con la tirada', 'ejemplares_envio' => 'El número de ejemplares enviados no coincide con la tirada',
'max_length' => 'Max. valor caracteres alcanzado', 'max_length' => 'Max. valor caracteres alcanzado',

View File

@ -283,12 +283,12 @@
<div class="col-sm-3 form-check form-switch mb-2 d-flex align-items-center gap-2"> <div class="col-sm-3 form-check form-switch mb-2 d-flex align-items-center gap-2">
<input class="calcular-presupuesto form-check-input" type="checkbox" id="retractilado" <input class="calcular-presupuesto form-check-input" type="checkbox" id="retractilado"
name="retractilado" value="1"> name="retractilado" value="1">
<label class="form-check-label" for="ferro">Retractilado</label> <label class="form-check-label" for="retractilado">Retractilado</label>
</div> </div>
<div class="col-sm-3 form-check form-switch mb-2 d-flex align-items-center gap-2"> <div class="col-sm-3 form-check form-switch mb-2 d-flex align-items-center gap-2">
<input class="calcular-presupuesto form-check-input" type="checkbox" id="retractilado5" <input class="calcular-presupuesto form-check-input" type="checkbox" id="retractilado5"
name="retractilado5" value="1"> name="retractilado5" value="1">
<label class="form-check-label" for="ferro">Retractilado de 5</label> <label class="form-check-label" for="retractilado5">Retractilado de 5</label>
</div> </div>
<?php foreach ($serviciosExtra as $servicio): ?> <?php foreach ($serviciosExtra as $servicio): ?>
@ -300,7 +300,7 @@
<div class="col-sm-3 form-check form-switch mb-2 d-flex align-items-center gap-2"> <div class="col-sm-3 form-check form-switch mb-2 d-flex align-items-center gap-2">
<input class="calcular-presupuesto form-check-input" type="checkbox" id="marcapaginas" <input class="calcular-presupuesto form-check-input" type="checkbox" id="marcapaginas"
name="marcapaginas" value="1"> name="marcapaginas" value="1">
<label class="form-check-label" for="ferro">Marcapáginas</label> <label class="form-check-label" for="marcapaginas">Marcapáginas</label>
</div> </div>
</div> </div>

View File

@ -62,7 +62,82 @@
</div> </div>
</div> </div>
<div id="divDirecciones" class="calcular-presupuesto col-sm-12 d-flex flex-column align-items-center div-direcciones"> <div id="divDirecciones"
class="calcular-presupuesto col-sm-12 d-flex flex-column align-items-center div-direcciones">
</div>
</div>
<div id="direccionesFerroPrototipo" class="col-sm-12 d-flex flex-column align-items-center d-none">
<div class="col-sm-8 mb-3 d-flex flex-column align-items-center">
<h3 class="mb-1 fw-bold"> Dirección de envío ferro/prototipo</h3>
</div><!--//.mb-3 -->
<div class="row mb-3 justify-content-center div-direcciones-fp1">
<div class="col-sm-9 mb-3">
<label for="direcciones" class="form-label">Mis direcciones</label>
<select id="direccionesFP1" name="direcciones" class="form-control select2bs2"
style="width: 100%;"></select>
</div>
<div class="col-sm-3 mb-3 mt-auto mb-0">
<button id="insertarDireccionFP1" type="button"
class="btn btn-secondary waves-effect waves-light">Insertar</button>
</div>
</div>
<div class="row mb-3 justify-content-center">
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="sameAddPrincipalFP1" name="sameAddPrincipalFP1"
value="1">
<label class="form-check-label"
for="sameAddPrincipalFP1"><?= lang('PresupuestosDirecciones.sameAddPrincipal') ?></label>
</div>
</div>
<div id="divDireccionesFerroPrototipo"
class="calcular-presupuesto col-sm-12 d-flex flex-column align-items-center div-direcciones-ferro-prototipo">
</div>
</div>
<div id="direccionesFerroPrototipo2" class="col-sm-12 d-flex flex-column align-items-center d-none">
<div class="col-sm-8 mb-3 d-flex flex-column align-items-center">
<h3 class="mb-1 fw-bold"> Dirección de envío ferro/prototipo 2</h3>
</div><!--//.mb-3 -->
<div class="row mb-3 justify-content-center div-direcciones">
<div class="col-sm-6 mb-3">
<label for="direcciones" class="form-label">Mis direcciones</label>
<select id="direccionesFP1" name="direcciones" class="form-control select2bs2"
style="width: 100%;"></select>
</div>
<div class="col-sm-3 mb-3 mt-auto mb-0">
<button id="insertarDireccionFP1" type="button"
class="btn btn-secondary waves-effect waves-light">Insertar</button>
</div>
</div>
<div class="row mb-3 justify-content-center">
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="sameAddPrincipalFP2" name="sameAddPrincipalFP2"
value="1">
<label class="form-check-label"
for="sameAddPrincipalFP2"><?= lang('PresupuestosDirecciones.sameAddPrincipal') ?></label>
</div>
</div>
<div class="row mb-3 justify-content-center">
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="sameAddFP1" name="sameAddFP1" value="1">
<label class="form-check-label"
for="sameAddFP1"><?= lang('PresupuestosDirecciones.sameAddFP1') ?></label>
</div>
</div>
<div id="divDireccionesFerroPrototipo2"
class="calcular-presupuesto col-sm-12 d-flex flex-column align-items-center div-direcciones-ferro-prototipo">
</div> </div>
</div> </div>

View File

@ -17,9 +17,10 @@ class ConfigVariableDatatable
init(){ init(){
this.datatable = this.datatableItem.DataTable({ this.datatable = this.datatableItem.DataTable({
processing: true, processing: true,
dom: 'Brtip', dom: 'Blrtip',
serverSide: true, serverSide: true,
lengthMenu: [ 25, 50, 100, 200 ],
pageLength: 50,
language: { language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
}, },

View File

@ -103,6 +103,34 @@ class DatosGenerales {
this.pagColorConsecutivas.on('change', this.#handPaginasConsecutivas.bind(this)); this.pagColorConsecutivas.on('change', this.#handPaginasConsecutivas.bind(this));
this.papelDiferente.on('change', this.#handlePapelDiferente.bind(this)); this.papelDiferente.on('change', this.#handlePapelDiferente.bind(this));
// check ferro y prototipo
this.domItem.on('change', 'input[type="checkbox"][data-tarifa-extra-excluyente="1"]', (e) => {
if (!this.cargando) {
const current = $(e.target);
if (current.is(':checked')) {
this.domItem.find('input[type="checkbox"][data-tarifa-extra-excluyente="1"]')
.not(current)
.prop('checked', false);
if ((current.data('tarifa-nombre')?.toString().toLowerCase() || '').includes('2')) {
$('#direccionesFerroPrototipo2').removeClass('d-none');
}
$('#direccionesFerroPrototipo').removeClass('d-none');
}
else {
if (this.domItem.find('input[type="checkbox"][data-tarifa-extra-excluyente="1"]').prop('checked').length === 0) {
$('#direccionesFerroPrototipo').addClass('d-none');
$('#divDireccionesFerroPrototipo').empty();
$('#direccionesFerroPrototipo2').addClass('d-none');
$('#divDireccionesFerroPrototipo2').empty();
}
}
}
});
$('.tirada-presupuesto').on('change', () => { $('.tirada-presupuesto').on('change', () => {
@ -110,7 +138,7 @@ class DatosGenerales {
this.removeError(window.translations["validation"].tirada_integer_greatherThan_0); this.removeError(window.translations["validation"].tirada_integer_greatherThan_0);
this.removeError(window.translations["validation"].tirada_pod_nopod); this.removeError(window.translations["validation"].tirada_pod_nopod);
} }
else{ else {
this.addErrors(); this.addErrors();
} }
let tiradas = self.getTiradas(); let tiradas = self.getTiradas();
@ -141,7 +169,7 @@ class DatosGenerales {
if (this.validateCliente()) { if (this.validateCliente()) {
this.removeError(window.translations["validation"].cliente); this.removeError(window.translations["validation"].cliente);
} }
else{ else {
this.addErrors(); this.addErrors();
} }
}); });
@ -210,6 +238,8 @@ class DatosGenerales {
this.domItem.find('#divTipoLibro').addClass('is-invalid'); this.domItem.find('#divTipoLibro').addClass('is-invalid');
noError = false; noError = false;
} }
return noError;
} }
validatePaginas() { validatePaginas() {
@ -658,7 +688,7 @@ class DatosGenerales {
this.removeError(window.translations["validation"].papelFormatoAncho); this.removeError(window.translations["validation"].papelFormatoAncho);
this.removeError(window.translations["validation"].papelFormatoAlto); this.removeError(window.translations["validation"].papelFormatoAlto);
} }
else{ else {
this.addErrors(); this.addErrors();
} }
} }
@ -730,11 +760,11 @@ class DatosGenerales {
} }
} }
if(this.validateTipoLibro()) { if (this.validateTipoLibro()) {
this.removeError(window.translations["validation"].tipo_libro); this.removeError(window.translations["validation"].tipo_libro);
this.removeError(window.translations["validation"].paginas_multiplo_4); this.removeError(window.translations["validation"].paginas_multiplo_4);
} }
else{ else {
this.addErrors(); this.addErrors();
} }
@ -829,13 +859,13 @@ class DatosGenerales {
} }
$('.calcular-lomo').trigger('change'); $('.calcular-lomo').trigger('change');
if(this.validatePaginas()) { if (this.validatePaginas()) {
this.removeError(window.translations["validation"].paginas); this.removeError(window.translations["validation"].paginas);
this.removeError(window.translations["validation"].paginasColor); this.removeError(window.translations["validation"].paginasColor);
this.removeError(window.translations["validation"].paginasNegro); this.removeError(window.translations["validation"].paginasNegro);
this.removeError(window.translations["validation"].paginas_pares); this.removeError(window.translations["validation"].paginas_pares);
} }
else{ else {
this.addErrors(); this.addErrors();
} }
} }
@ -955,7 +985,7 @@ class DatosGenerales {
</ul>`; </ul>`;
popErrorAlert(message, 'sk-alert', false); popErrorAlert(message, 'sk-alert', false);
} }
else{ else {
skAlert.innerHTML = ''; skAlert.innerHTML = '';
} }
} }