diff --git a/public/userarea/historical_trf.php b/public/userarea/historical_trf.php index 69b9f75..4162091 100644 --- a/public/userarea/historical_trf.php +++ b/public/userarea/historical_trf.php @@ -982,7 +982,7 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { const cells = row.querySelectorAll('td'); let match = false; cells.forEach((cell, index) => { - if (index >= 1 && index <= 3) { + if (index >= 1 && index <= 4) { // Cerca in ID, main_field, importreferencecode, filename const text = cell.textContent.toLowerCase(); if (text.includes(filter)) { match = true; @@ -1026,6 +1026,18 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { } }); }); + + // Gestione eliminazione multipla + const bulkActionForm = document.getElementById('bulkActionForm'); + bulkActionForm.addEventListener('submit', function(e) { + const selectedCheckboxes = document.querySelectorAll('input[name="selected_ids[]"]:checked'); + if (selectedCheckboxes.length === 0) { + e.preventDefault(); + alert('Seleziona almeno un record da eliminare.'); + } else if (!confirm('Sicuro di voler eliminare i record selezionati?')) { + e.preventDefault(); + } + }); // Gestione input e celle espandibili const inputs = document.querySelectorAll('.cell-input'); @@ -1055,6 +1067,7 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { formData.append(name, input.value); }); formData.append('iddatadb', iddatadb); + formData.append('mapping', JSON.stringify()); fetch('save_edited_row.php', { method: 'POST', body: formData @@ -1069,7 +1082,7 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { cell.classList.add('flash-success'); }); setTimeout(() => cells.forEach(cell => cell.classList.remove('flash-success')), 500); - // Ricarica i dropdown dopo il salvataggio + alert('Salvataggio avvenuto con successo!'); setTimeout(populateDropdowns, 100); } else { alert('Errore durante il salvataggio: ' + data.message); @@ -1084,12 +1097,12 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { propagateButtons.forEach(button => { button.addEventListener('click', function() { if (this.hasAttribute('disabled')) return; - const columnIndex = this.getAttribute('data-column').replace('manual_', ''); + const column = this.getAttribute('data-column'); const input = this.previousElementSibling; const value = input.value; const gridTopCells = document.querySelector('.grid-top').querySelectorAll('.grid-cell'); const targetTopIndex = Array.from(gridTopCells).findIndex(cell => - cell.querySelector('.propagate-btn') === button + cell.querySelector('.propagate-btn[data-column="' + column + '"]') ); if (targetTopIndex !== -1) { const rows = document.querySelectorAll('.grid-row'); @@ -1098,9 +1111,11 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { if (cells.length > targetTopIndex) { const targetInput = cells[targetTopIndex].querySelector('input, select'); if (targetInput && !targetInput.hasAttribute('readonly')) { - if (targetInput.type === 'date') targetInput.value = value; - else if (targetInput.tagName === 'SELECT') targetInput.value = value; - else targetInput.value = value; + targetInput.value = value; + if (targetInput.tagName === 'SELECT') { + const event = new Event('change'); + targetInput.dispatchEvent(event); + } } } }); @@ -1213,49 +1228,71 @@ foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { }); // Gestione dropdown + const dropdownData = {}; async function populateDropdowns() { if () return; const dropdowns = document.querySelectorAll('.dropdown-select'); - if (dropdowns.length === 0) return; - const uniqueFieldIds = [...new Set(Array.from(dropdowns).map(d => d.getAttribute('data-field-id')))].filter(fieldId => fieldId); - if (uniqueFieldIds.length === 0) return; + console.log('Dropdown trovati:', dropdowns.length); + if (dropdowns.length === 0) { + console.warn('Nessun dropdown trovato con classe .dropdown-select'); + return; + } - try { - const response = await fetch(`get_customfield_values.php?field_ids=${uniqueFieldIds.join(',')}`); - const data = await response.json(); - if (data.error) { - console.error('Errore nel caricamento dei valori dei dropdown:', data.error); + const uniqueFieldIds = [...new Set(Array.from(dropdowns).map(d => d.getAttribute('data-field-id')))].filter(fieldId => fieldId); + console.log('Field IDs unici:', uniqueFieldIds); + const missingFieldIds = uniqueFieldIds.filter(fieldId => !dropdownData[fieldId]); + + if (missingFieldIds.length > 0) { + try { + const response = await fetch(`get_customfield_values.php?field_ids=${missingFieldIds.join(',')}`); + if (!response.ok) { + throw new Error(`Errore HTTP: ${response.status} ${response.statusText}`); + } + const data = await response.json(); + console.log('Risposta da get_customfield_values.php:', data); + + if (data.error) { + console.error('Errore dal server:', data.error); + dropdowns.forEach(dropdown => { + dropdown.innerHTML = ''; + }); + return; + } + + for (const fieldId of Object.keys(data)) { + dropdownData[fieldId] = data[fieldId] || []; + } + } catch (error) { + console.error('Errore nel fetch dei valori dei dropdown:', error); dropdowns.forEach(dropdown => { - dropdown.innerHTML = ''; + dropdown.innerHTML = ''; }); return; } - - dropdowns.forEach(dropdown => { - const fieldId = dropdown.getAttribute('data-field-id'); - const options = data[fieldId] || []; - const currentValue = dropdown.value; - - // Rimuovi opzioni esistenti (tranne il placeholder) - dropdown.innerHTML = ''; - - // Aggiungi nuove opzioni - options.forEach(option => { - const opt = document.createElement('option'); - opt.value = option.Value; - opt.textContent = option.Value; - if (currentValue === option.Value) { - opt.selected = true; - } - dropdown.appendChild(opt); - }); - }); - } catch (error) { - console.error('Errore nel fetch dei valori dei dropdown:', error); - dropdowns.forEach(dropdown => { - dropdown.innerHTML = ''; - }); } + + dropdowns.forEach(dropdown => { + const fieldId = dropdown.getAttribute('data-field-id'); + const mappingId = dropdown.getAttribute('data-mapping-id'); + const currentValue = dropdown.value || ''; + console.log(`Popolamento dropdown field_id=${fieldId}, mapping_id=${mappingId}, valore corrente=${currentValue}`); + + if (!fieldId || !dropdownData[fieldId]) { + dropdown.innerHTML = ''; + return; + } + + dropdown.innerHTML = ''; + dropdownData[fieldId].forEach(value => { + const option = document.createElement('option'); + option.value = value.IdCustomFieldsValue; + option.textContent = value.Valore; + if (currentValue === String(value.IdCustomFieldsValue)) { + option.selected = true; + } + dropdown.appendChild(option); + }); + }); } populateDropdowns(); saveButtons.forEach(btn => {