From 2fb8c97fd8eae394e47ecb519633434b96612f6a Mon Sep 17 00:00:00 2001 From: imnavajas Date: Mon, 15 Apr 2024 15:27:12 +0200 Subject: [PATCH 01/12] Cambiado esquema de deteccion, ahora no se lleva memoria, solo ser cosciente de que algo ha cambiado --- .../_datosPresupuestoItems.php | 2 +- .../viewCosidotapablandaForm.php | 112 +++++++++++++----- 2 files changed, 85 insertions(+), 29 deletions(-) diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoItems.php index 2745c180..9aa9fefe 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoItems.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoItems.php @@ -173,4 +173,4 @@ - \ No newline at end of file + diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php index 71c11fdb..2e24d20e 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php @@ -214,6 +214,49 @@ section("additionalInlineJs") ?> +$(window).on('load', function() { + + // Detectar cambios en inputs de texto + $('input[type="text"]').on('input', function() { + console.log("El campo de texto con ID '" + $(this).attr('id') + "' ha cambiado."); + }); + + // Detectar cambios en inputs de texto + $('input[type="number"]').on('input', function() { + console.log("El campo de texto con ID '" + $(this).attr('id') + "' ha cambiado."); + }); + + // Detectar cambios en select + $('select').change(function() { + console.log("El campo select con ID '" + $(this).attr('id') + "' ha cambiado."); + }); + + // Detectar cambios en checkboxes + $('input[type="checkbox"]').change(function() { + console.log("El checkbox con ID '" + $(this).attr('id') + "' ha cambiado."); + }); + + // Detectar cambios en textareas + $('textarea').on('input', function() { + console.log("El textarea con ID '" + $(this).attr('id') + "' ha cambiado."); + }); + + // Detectar cambios en otros tipos de input (por ejemplo, radio buttons) + $('input[type="radio"]').change(function() { + console.log("El radio button con ID '" + $(this).attr('id') + "' ha cambiado."); + }); + + // Detectar cambios en otros tipos de input (por ejemplo, radio buttons) + $('input:not([type])').on('input', function() { + console.log("El valor de un input sin tipo ha cambiado: " + $(this).val()); + }); + +}); + + + +/* + // Obtener todos los campos de entrada del formulario const formInputs = document.querySelectorAll('input, textarea, select'); @@ -223,35 +266,41 @@ const originalValues = {}; // Guardar los valores originales - formInputs.forEach(function(input) { - if (input.type === 'checkbox') { - originalValues[input.id] = input.checked; - } else { - originalValues[input.id] = input.tagName.toLowerCase() === 'select' - ? $(input).val() // jQuery para obtener el valor de un select2 - : input.value; - } - }); + function saveOriginalValues(inputs) { + inputs.forEach(input => { + if (!input.id) return; + + if (input.type === 'checkbox') { + originalValues[input.id] = input.checked; + } else { + originalValues[input.id] = input.tagName.toLowerCase() === 'select' + ? $(input).val() // jQuery para obtener el valor de un select2 + : input.value; + } + }); + } // Agregar un evento de cambio a cada campo de entrada - formInputs.forEach(function(input) { - if (input.tagName.toLowerCase() === 'select' && $(input).data('select2')) { - // Para elementos select2 - $(input).on('change', function() { - verificarCambios(); - }); - } else { - // Para otros tipos de campos - input.addEventListener('input', function() { - verificarCambios(); - }); - } - }); + function addChangeEvent(inputs) { + inputs.forEach(input => { + if (!input.id) return; + + if (input.tagName.toLowerCase() === 'select' && $(input).data('select2')) { + // Para elementos select2 + $(input).on('change', verificarCambios); + } else { + // Para otros tipos de campos + input.addEventListener('input', verificarCambios); + } + }); + } function verificarCambios() { // Verificar si hay cambios con respecto a los originales - var cambiosDetectados = Array.from(formInputs).some(function(input) { + let cambiosDetectados = Array.from(formInputs).some(input => { + if (!input.id) return false; + return input.type === 'checkbox' ? input.checked !== originalValues[input.id] : input.tagName.toLowerCase() === 'select' @@ -259,12 +308,10 @@ : input.value !== originalValues[input.id]; }); + console.log(cambiosDetectados); + // Mostrar alerta solo si hay cambios - if (cambiosDetectados) { - showBreadCrumbSaveButton(true); - }else{ - showBreadCrumbSaveButton(false); - } + showBreadCrumbSaveButton(cambiosDetectados); } $('#bc-save').on( "click", function() { @@ -272,7 +319,16 @@ $('#saveForm').click() } ); + // Llamar a funciones principales + saveOriginalValues(formInputs); + addChangeEvent(formInputs); +*/ + + $('#bc-save').on( "click", function() { + //showBreadCrumbSaveButton(false); + $('#saveForm').click() + } ); endSection() ?> From 258e7d38a00ec8e73bad26235b2cf6821fbb99fc Mon Sep 17 00:00:00 2001 From: imnavajas Date: Wed, 17 Apr 2024 15:14:06 +0200 Subject: [PATCH 02/12] Arreglado el mostrar automaticamente el boton de guardar en presupuestos, corregidos bugs de checkboxes tambien --- .../themes/_commonPartialsBs/_alertBoxes.php | 2 +- .../cosidotapablanda/_datosEnvios.js | 1 + .../cosidotapablanda/_datosServiciosItems.js | 22 +++-- .../_tiradasAlternativasItems.js | 2 + .../viewCosidotapablandaForm.php | 98 +++---------------- .../themes/backend/vuexy/main/breadcrumbs.php | 2 +- .../backend/vuexy/main/defaultlayout.php | 1 + 7 files changed, 33 insertions(+), 95 deletions(-) diff --git a/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php b/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php index 9c195cfb..6f0ddc22 100755 --- a/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php +++ b/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php @@ -22,7 +22,7 @@ if (session()->has('error')) { -section('additionalInlineJs') ?> +section('globalJsFunctions') ?> function popAlert(message, alertClass, alertIcon, containerId = 'sk-alert'){ var htmlString = ` diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios.js b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios.js index 9557bf8c..a7e48a22 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios.js +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios.js @@ -220,6 +220,7 @@ $(document).on('click', '.delete-add-row', function(e) { update_resumen: true, update_tiradas_alternativas: true }) + showBreadCrumbSaveButton(true); }) diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js index a8860fa7..c403406c 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js @@ -2,7 +2,6 @@ * Seccion para las funciones generales de la pagina ***************************************************************************************/ - $('.nav-servicios button').on('shown.bs.tab', function(){ $("#tableOfServiciosEncuadernacion").DataTable().columns.adjust(); $("#tableOfServiciosPreimpresion").DataTable().columns.adjust(); @@ -16,6 +15,7 @@ $('#serv_default').on('click', function(){ get_tarifas_enc('default').then( get_tarifas_manipulado('default') ) + showBreadCrumbSaveButton(true); }) // Delete row @@ -73,6 +73,7 @@ $(document).on('click', '.btn-delete-serv', function(e) { update_tiradas_alternativas: true }) //updateTotales(false, true, false) + showBreadCrumbSaveButton(true); }); @@ -369,6 +370,8 @@ $('#insertar_serv_acabado').on('click', function(){ popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-acabado-alert'); } check_serv_acabado_error(); + showBreadCrumbSaveButton(true); + }) @@ -1298,13 +1301,16 @@ function servicioFerro(){ } $('#insertar_serv_preimpresion').on('click', function(){ - const tarifa_text = $('#add_servicio_preimpresion_list').select2('data')[0].text.trim() - - if( $('#add_servicio_preimpresion_list').select2('data')[0].text.trim().length > 0){ - if($('#tableOfServiciosPreimpresion tr > td:contains(' + tarifa_text + ')').length == 0) - get_tarifas_preimpresion($('#add_servicio_preimpresion_list').select2('data')[0].id); - else{ - popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-preimpresion-alert') + + let data = $('#add_servicio_preimpresion_list').select2('data'); + if (data.length > 0) { + const tarifa_text = data[0].text.trim(); + if (tarifa_text.length > 0) { + if ($('#tableOfServiciosPreimpresion tr > td:contains(' + tarifa_text + ')').length == 0) + get_tarifas_preimpresion(data[0].id); + else { + popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-preimpresion-alert'); + } } } check_serv_preimpresion_error() diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js index 5314410f..912bbd85 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js @@ -61,6 +61,7 @@ $('#add_tirada_alt').on('click', function () { const tirada_alt = parseInt($('#tirada_alt').val()); add_tirada_alternativa(tirada_alt); + showBreadCrumbSaveButton(true); }); @@ -274,6 +275,7 @@ $(document).on('click', '.btn-delete-tirada', function (e) { tableTiradas.row(row) .remove() .draw(); + showBreadCrumbSaveButton(true); }) diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php index 2e24d20e..13af1fbd 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php @@ -218,117 +218,45 @@ $(window).on('load', function() { // Detectar cambios en inputs de texto $('input[type="text"]').on('input', function() { - console.log("El campo de texto con ID '" + $(this).attr('id') + "' ha cambiado."); + showBreadCrumbSaveButton(true); }); // Detectar cambios en inputs de texto $('input[type="number"]').on('input', function() { - console.log("El campo de texto con ID '" + $(this).attr('id') + "' ha cambiado."); + showBreadCrumbSaveButton(true); }); // Detectar cambios en select $('select').change(function() { - console.log("El campo select con ID '" + $(this).attr('id') + "' ha cambiado."); + showBreadCrumbSaveButton(true); }); // Detectar cambios en checkboxes $('input[type="checkbox"]').change(function() { - console.log("El checkbox con ID '" + $(this).attr('id') + "' ha cambiado."); + showBreadCrumbSaveButton(true); }); // Detectar cambios en textareas $('textarea').on('input', function() { - console.log("El textarea con ID '" + $(this).attr('id') + "' ha cambiado."); + showBreadCrumbSaveButton(true); }); - // Detectar cambios en otros tipos de input (por ejemplo, radio buttons) + // Detectar cambios en otros tipos de input $('input[type="radio"]').change(function() { - console.log("El radio button con ID '" + $(this).attr('id') + "' ha cambiado."); + showBreadCrumbSaveButton(true); }); - // Detectar cambios en otros tipos de input (por ejemplo, radio buttons) + // Detectar cambios en otros tipos de input $('input:not([type])').on('input', function() { - console.log("El valor de un input sin tipo ha cambiado: " + $(this).val()); + showBreadCrumbSaveButton(true); }); }); - - -/* - - // Obtener todos los campos de entrada del formulario - const formInputs = document.querySelectorAll('input, textarea, select'); - - //console.log(formInputs) - - // Crear un objeto para almacenar los valores originales - const originalValues = {}; - - // Guardar los valores originales - function saveOriginalValues(inputs) { - inputs.forEach(input => { - if (!input.id) return; - - if (input.type === 'checkbox') { - originalValues[input.id] = input.checked; - } else { - originalValues[input.id] = input.tagName.toLowerCase() === 'select' - ? $(input).val() // jQuery para obtener el valor de un select2 - : input.value; - } - }); - } - - - // Agregar un evento de cambio a cada campo de entrada - function addChangeEvent(inputs) { - inputs.forEach(input => { - if (!input.id) return; - - if (input.tagName.toLowerCase() === 'select' && $(input).data('select2')) { - // Para elementos select2 - $(input).on('change', verificarCambios); - } else { - // Para otros tipos de campos - input.addEventListener('input', verificarCambios); - } - }); - } - - function verificarCambios() { - // Verificar si hay cambios con respecto a los originales - let cambiosDetectados = Array.from(formInputs).some(input => { - if (!input.id) return false; - - return input.type === 'checkbox' - ? input.checked !== originalValues[input.id] - : input.tagName.toLowerCase() === 'select' - ? $(input).val() !== originalValues[input.id] - : input.value !== originalValues[input.id]; - }); - - console.log(cambiosDetectados); - - // Mostrar alerta solo si hay cambios - showBreadCrumbSaveButton(cambiosDetectados); - } - - $('#bc-save').on( "click", function() { - showBreadCrumbSaveButton(false); - $('#saveForm').click() - } ); - - // Llamar a funciones principales - saveOriginalValues(formInputs); - addChangeEvent(formInputs); - -*/ - - $('#bc-save').on( "click", function() { - //showBreadCrumbSaveButton(false); - $('#saveForm').click() - } ); +$('#bc-save').on( "click", function() { + showBreadCrumbSaveButton(false); + $('#saveForm').click() +} ); endSection() ?> diff --git a/ci4/app/Views/themes/backend/vuexy/main/breadcrumbs.php b/ci4/app/Views/themes/backend/vuexy/main/breadcrumbs.php index 99fa8a46..732cac8f 100755 --- a/ci4/app/Views/themes/backend/vuexy/main/breadcrumbs.php +++ b/ci4/app/Views/themes/backend/vuexy/main/breadcrumbs.php @@ -39,7 +39,7 @@ -section('additionalInlineJs') ?> +section('globalJsFunctions') ?> function showBreadCrumbSaveButton(showIt = false){ if(showIt === true){ diff --git a/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php b/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php index ae2649f7..5b9294a5 100755 --- a/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php +++ b/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php @@ -346,6 +346,7 @@ if (isset($global_js_variables)) {