added fill dropdown and save id
This commit is contained in:
parent
a14aa6eb98
commit
434bb0d993
@ -31,6 +31,6 @@ Content-Length: 51
|
|||||||
< strict-transport-security: max-age=2592000
|
< strict-transport-security: max-age=2592000
|
||||||
< x-powered-by: ASP.NET
|
< x-powered-by: ASP.NET
|
||||||
< x-content-type-options: nosniff
|
< x-content-type-options: nosniff
|
||||||
< date: Wed, 30 Jul 2025 13:38:07 GMT
|
< date: Tue, 19 Aug 2025 14:32:20 GMT
|
||||||
<
|
<
|
||||||
* Connection #0 to host 93.43.5.102 left intact
|
* Connection #0 to host 93.43.5.102 left intact
|
||||||
|
|||||||
@ -15,11 +15,11 @@
|
|||||||
* [HTTP/2] [1] [:scheme: https]
|
* [HTTP/2] [1] [:scheme: https]
|
||||||
* [HTTP/2] [1] [:authority: 93.43.5.102]
|
* [HTTP/2] [1] [:authority: 93.43.5.102]
|
||||||
* [HTTP/2] [1] [:path: /limsapi/api/odata/CustomField(1083)?$expand=CustomFieldsValues]
|
* [HTTP/2] [1] [:path: /limsapi/api/odata/CustomField(1083)?$expand=CustomFieldsValues]
|
||||||
* [HTTP/2] [1] [authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjQ5MiIsIlhhZlNlY3VyaXR5QXV0aFBhc3NlZCI6IlhhZlNlY3VyaXR5QXV0aFBhc3NlZCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiJXZWJBcGlVc2VyIiwiWGFmU2VjdXJpdHkiOiJYYWZTZWN1cml0eSIsIlhhZkxvZ29uUGFyYW1zIjoicTFZS0xVNHQ4a3ZNVFZXeVVncFBUWElzeUFRSktPa29CU1FXRjVmbkY2VUF4Y3RUa3hJTE1rdUI0Z2FHU3JVQSIsImV4cCI6MTc1Mzg4OTg4NywiaXNzIjoiTXkiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQyMDAifQ.fka4MClGYcSJycwopdVtHtp-59VPTCgT_waRi8qdLmE]
|
* [HTTP/2] [1] [authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjQ5MiIsIlhhZlNlY3VyaXR5QXV0aFBhc3NlZCI6IlhhZlNlY3VyaXR5QXV0aFBhc3NlZCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiJXZWJBcGlVc2VyIiwiWGFmU2VjdXJpdHkiOiJYYWZTZWN1cml0eSIsIlhhZkxvZ29uUGFyYW1zIjoicTFZS0xVNHQ4a3ZNVFZXeVVncFBUWElzeUFRSktPa29CU1FXRjVmbkY2VUF4Y3RUa3hJTE1rdUI0Z2FHU3JVQSIsImV4cCI6MTc1NTYyMTE0MCwiaXNzIjoiTXkiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQyMDAifQ.QXZJ_P9AAh0NrjhCTdqeZWmiGVSRThcHTlNGIOOlE3M]
|
||||||
* [HTTP/2] [1] [accept: application/json]
|
* [HTTP/2] [1] [accept: application/json]
|
||||||
> GET /limsapi/api/odata/CustomField(1083)?$expand=CustomFieldsValues HTTP/2
|
> GET /limsapi/api/odata/CustomField(1083)?$expand=CustomFieldsValues HTTP/2
|
||||||
Host: 93.43.5.102
|
Host: 93.43.5.102
|
||||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjQ5MiIsIlhhZlNlY3VyaXR5QXV0aFBhc3NlZCI6IlhhZlNlY3VyaXR5QXV0aFBhc3NlZCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiJXZWJBcGlVc2VyIiwiWGFmU2VjdXJpdHkiOiJYYWZTZWN1cml0eSIsIlhhZkxvZ29uUGFyYW1zIjoicTFZS0xVNHQ4a3ZNVFZXeVVncFBUWElzeUFRSktPa29CU1FXRjVmbkY2VUF4Y3RUa3hJTE1rdUI0Z2FHU3JVQSIsImV4cCI6MTc1Mzg4OTg4NywiaXNzIjoiTXkiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQyMDAifQ.fka4MClGYcSJycwopdVtHtp-59VPTCgT_waRi8qdLmE
|
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjQ5MiIsIlhhZlNlY3VyaXR5QXV0aFBhc3NlZCI6IlhhZlNlY3VyaXR5QXV0aFBhc3NlZCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiJXZWJBcGlVc2VyIiwiWGFmU2VjdXJpdHkiOiJYYWZTZWN1cml0eSIsIlhhZkxvZ29uUGFyYW1zIjoicTFZS0xVNHQ4a3ZNVFZXeVVncFBUWElzeUFRSktPa29CU1FXRjVmbkY2VUF4Y3RUa3hJTE1rdUI0Z2FHU3JVQSIsImV4cCI6MTc1NTYyMTE0MCwiaXNzIjoiTXkiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQyMDAifQ.QXZJ_P9AAh0NrjhCTdqeZWmiGVSRThcHTlNGIOOlE3M
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
|
|
||||||
< HTTP/2 200
|
< HTTP/2 200
|
||||||
@ -30,6 +30,6 @@ Accept: application/json
|
|||||||
< odata-version: 4.0
|
< odata-version: 4.0
|
||||||
< x-powered-by: ASP.NET
|
< x-powered-by: ASP.NET
|
||||||
< x-content-type-options: nosniff
|
< x-content-type-options: nosniff
|
||||||
< date: Wed, 30 Jul 2025 13:38:08 GMT
|
< date: Tue, 19 Aug 2025 14:32:20 GMT
|
||||||
<
|
<
|
||||||
* Connection #0 to host 93.43.5.102 left intact
|
* Connection #0 to host 93.43.5.102 left intact
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -5,3 +5,4 @@
|
|||||||
2025-07-04 10:42:49 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
2025-07-04 10:42:49 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
||||||
2025-07-04 10:44:13 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
2025-07-04 10:44:13 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
||||||
2025-07-04 10:48:07 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
2025-07-04 10:48:07 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
||||||
|
2025-08-19 16:29:25 - Autenticazione fallita: HTTP 400, Errore cURL: , Risposta: {"title":"Bad Request","status":400,"detail":"Cannot persist the object. It was modified or deleted (purged) by another application.","instance":"POST /api/authentication/authenticate","errorCode":"96bfc1252b"}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -78,3 +78,7 @@ https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
|||||||
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
|
https://93.43.5.102/limsapi/api/odata/SchemaCustomField
|
||||||
|
|||||||
@ -42,6 +42,46 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
<?php include('cssinclude.php'); ?>
|
<?php include('cssinclude.php'); ?>
|
||||||
<title>Configure Template <?= htmlspecialchars($template['name'], ENT_QUOTES, 'UTF-8'); ?></title>
|
<title>Configure Template <?= htmlspecialchars($template['name'], ENT_QUOTES, 'UTF-8'); ?></title>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
|
||||||
|
<style>
|
||||||
|
.dropdown-select {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid #ced4da;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
appearance: none;
|
||||||
|
background: white url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="%23333"><path d="M7.293 4.293a1 1 0 011.414 0L10 6.586l1.293-1.293a1 1 0 111.414 1.414l-2 2a1 1 0 01-1.414 0l-2-2a1 1 0 010-1.414z"/></svg>') no-repeat right 5px center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-select:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #80bdff;
|
||||||
|
box-shadow: 0 0 5px rgba(0, 123, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
#loading-overlay {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
z-index: 9999;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loading-overlay div {
|
||||||
|
color: white;
|
||||||
|
font-size: 24px;
|
||||||
|
padding: 20px;
|
||||||
|
background: #333;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -116,7 +156,13 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
<?php if ($mapping['data_type'] === 'SceltaMultipla'): ?>
|
||||||
|
<select class="form-select dropdown-select manual-default" data-id="<?php echo $mapping['id']; ?>" data-field-id="<?php echo $mapping['field_id']; ?>" data-manual-default="<?php echo htmlspecialchars($mapping['manual_default'] ?? ''); ?>" style="display:<?php echo $mapping['is_manual'] ? 'block' : 'none'; ?>">
|
||||||
|
<option value="">Seleziona...</option>
|
||||||
|
</select>
|
||||||
|
<?php else: ?>
|
||||||
<input type="text" class="form-control manual-default" placeholder="Default value" value="<?php echo htmlspecialchars($mapping['manual_default'] ?? ''); ?>" style="display:<?php echo $mapping['is_manual'] ? 'block' : 'none'; ?>" data-field-id="<?php echo $mapping['field_id']; ?>">
|
<input type="text" class="form-control manual-default" placeholder="Default value" value="<?php echo htmlspecialchars($mapping['manual_default'] ?? ''); ?>" style="display:<?php echo $mapping['is_manual'] ? 'block' : 'none'; ?>" data-field-id="<?php echo $mapping['field_id']; ?>">
|
||||||
|
<?php endif; ?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
@ -138,6 +184,7 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php include('jsinclude.php'); ?>
|
<?php include('jsinclude.php'); ?>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
let availableXlsColumns = <?php echo json_encode($xlsHeaders); ?> || [];
|
let availableXlsColumns = <?php echo json_encode($xlsHeaders); ?> || [];
|
||||||
let usedColumnsFromDB = <?php echo json_encode($usedColumnsFromDB); ?> || [];
|
let usedColumnsFromDB = <?php echo json_encode($usedColumnsFromDB); ?> || [];
|
||||||
@ -180,8 +227,8 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
type: 'array'
|
type: 'array'
|
||||||
});
|
});
|
||||||
let sheet = workbook.Sheets[workbook.SheetNames[0]];
|
let sheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||||
let rowIndex = parseInt(document.getElementById('headerRow').textContent) || 1; // Usa header_row dal template
|
let rowIndex = parseInt(document.getElementById('headerRow').textContent) || 1;
|
||||||
let startColumn = parseInt(document.getElementById('startColumn').textContent) || 1; // Usa start_column come numero
|
let startColumn = parseInt(document.getElementById('startColumn').textContent) || 1;
|
||||||
|
|
||||||
let sheetData = XLSX.utils.sheet_to_json(sheet, {
|
let sheetData = XLSX.utils.sheet_to_json(sheet, {
|
||||||
header: 1,
|
header: 1,
|
||||||
@ -189,7 +236,7 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
raw: false,
|
raw: false,
|
||||||
range: 0
|
range: 0
|
||||||
});
|
});
|
||||||
console.log("Dati della riga " + rowIndex + ":", sheetData[rowIndex - 1]); // Debug: stampa la riga delle intestazioni
|
console.log("Dati della riga " + rowIndex + ":", sheetData[rowIndex - 1]);
|
||||||
if (!sheetData[rowIndex - 1]) {
|
if (!sheetData[rowIndex - 1]) {
|
||||||
document.getElementById('schemaFieldsBody').querySelectorAll('select.xls-columns').forEach(select => {
|
document.getElementById('schemaFieldsBody').querySelectorAll('select.xls-columns').forEach(select => {
|
||||||
select.innerHTML = '<option value="">Nessuna intestazione trovata</option>';
|
select.innerHTML = '<option value="">Nessuna intestazione trovata</option>';
|
||||||
@ -197,11 +244,10 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Estrai le intestazioni a partire dalla colonna specificata, includendo le vuote
|
|
||||||
let headers = sheetData[rowIndex - 1].slice(startColumn - 1).map(header => header === undefined ? "" : header);
|
let headers = sheetData[rowIndex - 1].slice(startColumn - 1).map(header => header === undefined ? "" : header);
|
||||||
console.log("Intestazioni estratte:", headers); // Debug: stampa le intestazioni estratte
|
console.log("Intestazioni estratte:", headers);
|
||||||
availableXlsColumns = [...headers];
|
availableXlsColumns = [...headers];
|
||||||
usedColumnsFromDB = []; // Resetta le colonne usate dopo un nuovo caricamento
|
usedColumnsFromDB = [];
|
||||||
saveXlsHeaders(headers);
|
saveXlsHeaders(headers);
|
||||||
updateXlsDropdowns();
|
updateXlsDropdowns();
|
||||||
};
|
};
|
||||||
@ -229,18 +275,18 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
let usedColumns = Array.from(document.querySelectorAll('select.xls-columns'))
|
let usedColumns = Array.from(document.querySelectorAll('select.xls-columns'))
|
||||||
.filter(select => select.style.display === 'block' && select.value)
|
.filter(select => select.style.display === 'block' && select.value)
|
||||||
.map(select => select.value)
|
.map(select => select.value)
|
||||||
.concat(usedColumnsFromDB); // Aggiunge le colonne già salvate nel DB
|
.concat(usedColumnsFromDB);
|
||||||
|
|
||||||
document.querySelectorAll('select.xls-columns').forEach(select => {
|
document.querySelectorAll('select.xls-columns').forEach(select => {
|
||||||
let currentValue = select.value || select.dataset.currentXls || '';
|
let currentValue = select.value || select.dataset.currentXls || '';
|
||||||
let options = availableXlsColumns
|
let options = availableXlsColumns
|
||||||
.filter(col => !usedColumns.includes(col) || col === currentValue) // Esclude colonne già usate, tranne la corrente
|
.filter(col => !usedColumns.includes(col) || col === currentValue)
|
||||||
.map(col => `<option value="${col}" ${col === currentValue ? 'selected' : ''}>${col}</option>`)
|
.map(col => `<option value="${col}" ${col === currentValue ? 'selected' : ''}>${col}</option>`)
|
||||||
.join('');
|
.join('');
|
||||||
select.innerHTML = '<option value="">Select XLS Column</option>' + options;
|
select.innerHTML = '<option value="">Select XLS Column</option>' + options;
|
||||||
select.dataset.currentXls = currentValue;
|
select.dataset.currentXls = currentValue;
|
||||||
if (currentValue && !options.includes(currentValue)) {
|
if (currentValue && !options.includes(currentValue)) {
|
||||||
select.value = ''; // Reset se il valore non è più valido
|
select.value = '';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -250,6 +296,70 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
let schemaId = <?php echo json_encode($template['idschema'] ?? 0); ?>;
|
let schemaId = <?php echo json_encode($template['idschema'] ?? 0); ?>;
|
||||||
let isSchemajsonEmpty = <?php echo json_encode($isSchemajsonEmpty); ?>;
|
let isSchemajsonEmpty = <?php echo json_encode($isSchemajsonEmpty); ?>;
|
||||||
|
|
||||||
|
// Crea l'overlay di caricamento
|
||||||
|
const loadingOverlay = document.createElement('div');
|
||||||
|
loadingOverlay.id = 'loading-overlay';
|
||||||
|
loadingOverlay.innerHTML = '<div>Loading Dropdown Options...</div>';
|
||||||
|
document.body.appendChild(loadingOverlay);
|
||||||
|
|
||||||
|
async function populateDropdowns() {
|
||||||
|
const dropdowns = document.querySelectorAll('.dropdown-select');
|
||||||
|
if (dropdowns.length === 0) return;
|
||||||
|
|
||||||
|
const dropdownData = {};
|
||||||
|
|
||||||
|
// Recupera i dati solo per i field_id univoci
|
||||||
|
const uniqueFieldIds = [...new Set(Array.from(dropdowns).map(d => d.getAttribute('data-field-id')))].filter(fieldId => fieldId);
|
||||||
|
for (const fieldId of uniqueFieldIds) {
|
||||||
|
if (!dropdownData[fieldId]) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`get_customfield_values.php?field_id=${fieldId}`);
|
||||||
|
const data = await response.json();
|
||||||
|
if (data.error) {
|
||||||
|
console.error('Errore per field_id', fieldId, ':', data.error);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dropdownData[fieldId] = data.CustomFieldsValues || [];
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Errore nel fetch per field_id', fieldId, ':', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Popola tutti i dropdown con i dati recuperati
|
||||||
|
dropdowns.forEach(dropdown => {
|
||||||
|
const fieldId = dropdown.getAttribute('data-field-id');
|
||||||
|
const manualDefault = dropdown.getAttribute('data-manual-default') || '';
|
||||||
|
if (!fieldId || !dropdownData[fieldId]) {
|
||||||
|
dropdown.innerHTML = '<option value="">Errore nel caricamento</option>';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dropdown.innerHTML = '<option value="">Seleziona...</option>';
|
||||||
|
dropdownData[fieldId].forEach(value => {
|
||||||
|
const option = document.createElement('option');
|
||||||
|
option.value = value.IdCustomFieldsValue;
|
||||||
|
option.textContent = value.Valore;
|
||||||
|
if (manualDefault === String(value.IdCustomFieldsValue)) {
|
||||||
|
option.selected = true;
|
||||||
|
}
|
||||||
|
dropdown.appendChild(option);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carica i dropdown con overlay
|
||||||
|
async function loadDropdownsWithOverlay() {
|
||||||
|
console.log('Inizio caricamento tendine');
|
||||||
|
loadingOverlay.style.display = 'flex';
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 500));
|
||||||
|
await populateDropdowns();
|
||||||
|
console.log('Caricamento tendine completato');
|
||||||
|
loadingOverlay.style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
loadDropdownsWithOverlay();
|
||||||
|
|
||||||
async function loadClientAndSchemaNames() {
|
async function loadClientAndSchemaNames() {
|
||||||
if (<?php echo json_encode($template['idclient'] ?? 0); ?> > 0) {
|
if (<?php echo json_encode($template['idclient'] ?? 0); ?> > 0) {
|
||||||
let response = await fetch(`get_clienti.php?id=<?php echo $template['idclient']; ?>`);
|
let response = await fetch(`get_clienti.php?id=<?php echo $template['idclient']; ?>`);
|
||||||
@ -347,7 +457,6 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
let mappedColumn = tr.querySelector('.mapped-column');
|
let mappedColumn = tr.querySelector('.mapped-column');
|
||||||
let removeBtn = tr.querySelector('.remove-xls');
|
let removeBtn = tr.querySelector('.remove-xls');
|
||||||
|
|
||||||
// Aggiungi dinamicamente mappedColumn e removeBtn se non esistono
|
|
||||||
if (!mappedColumn) {
|
if (!mappedColumn) {
|
||||||
mappedColumn = document.createElement('span');
|
mappedColumn = document.createElement('span');
|
||||||
mappedColumn.className = 'mapped-column';
|
mappedColumn.className = 'mapped-column';
|
||||||
@ -362,7 +471,6 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
removeBtn.setAttribute('data-id', mappingId);
|
removeBtn.setAttribute('data-id', mappingId);
|
||||||
tr.querySelector('td:nth-child(4)').appendChild(removeBtn);
|
tr.querySelector('td:nth-child(4)').appendChild(removeBtn);
|
||||||
|
|
||||||
// Aggiungi l'event listener per il nuovo pulsante
|
|
||||||
removeBtn.addEventListener('click', function(e) {
|
removeBtn.addEventListener('click', function(e) {
|
||||||
let tr = e.target.closest('tr');
|
let tr = e.target.closest('tr');
|
||||||
let xlsSelect = tr.querySelector('.xls-columns');
|
let xlsSelect = tr.querySelector('.xls-columns');
|
||||||
@ -391,12 +499,25 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById('schemaFieldsBody').addEventListener('change', function(event) {
|
||||||
|
if (event.target.classList.contains('manual-default') && event.target.tagName === 'SELECT') {
|
||||||
|
let tr = event.target.closest('tr');
|
||||||
|
let mappingId = event.target.getAttribute('data-id');
|
||||||
|
let xlsSelect = tr.querySelector('.xls-columns');
|
||||||
|
console.log("Manual default dropdown changed:", {
|
||||||
|
id: mappingId,
|
||||||
|
value: event.target.value
|
||||||
|
});
|
||||||
|
saveMapping(mappingId, 'manual', event.target.value, xlsSelect.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById('schemaFieldsBody').addEventListener('input', function(event) {
|
document.getElementById('schemaFieldsBody').addEventListener('input', function(event) {
|
||||||
if (event.target.classList.contains('manual-default')) {
|
if (event.target.classList.contains('manual-default') && event.target.tagName === 'INPUT') {
|
||||||
let tr = event.target.closest('tr');
|
let tr = event.target.closest('tr');
|
||||||
let mappingId = tr.querySelector('.mapping-select').getAttribute('data-id');
|
let mappingId = tr.querySelector('.mapping-select').getAttribute('data-id');
|
||||||
let xlsSelect = tr.querySelector('.xls-columns');
|
let xlsSelect = tr.querySelector('.xls-columns');
|
||||||
console.log("Manual default changed:", {
|
console.log("Manual default input changed:", {
|
||||||
id: mappingId,
|
id: mappingId,
|
||||||
value: event.target.value
|
value: event.target.value
|
||||||
});
|
});
|
||||||
@ -448,8 +569,8 @@ $xlsHeaders = $template['xls_headers'] ? json_decode($template['xls_headers'], t
|
|||||||
console.log("Save response:", data);
|
console.log("Save response:", data);
|
||||||
if (!data.success) console.error("❌ Error saving mapping:", data.message);
|
if (!data.success) console.error("❌ Error saving mapping:", data.message);
|
||||||
if (data.success && excelColumn) {
|
if (data.success && excelColumn) {
|
||||||
usedColumnsFromDB = usedColumnsFromDB.filter(col => col !== excelColumn); // Rimuovi dalla lista se salvata
|
usedColumnsFromDB = usedColumnsFromDB.filter(col => col !== excelColumn);
|
||||||
usedColumnsFromDB.push(excelColumn); // Aggiungi la nuova colonna usata
|
usedColumnsFromDB.push(excelColumn);
|
||||||
updateXlsDropdowns();
|
updateXlsDropdowns();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user