added order column
This commit is contained in:
@@ -58,6 +58,7 @@ $stmt = $pdo->prepare("
|
|||||||
SELECT
|
SELECT
|
||||||
id,
|
id,
|
||||||
field_id,
|
field_id,
|
||||||
|
field_order,
|
||||||
excel_column,
|
excel_column,
|
||||||
json_node,
|
json_node,
|
||||||
is_manual,
|
is_manual,
|
||||||
@@ -79,6 +80,7 @@ $stmt = $pdo->prepare("
|
|||||||
is_visible_parts
|
is_visible_parts
|
||||||
FROM template_mapping
|
FROM template_mapping
|
||||||
WHERE template_id = ?
|
WHERE template_id = ?
|
||||||
|
ORDER BY field_order ASC, id ASC
|
||||||
");
|
");
|
||||||
$stmt->execute([$id]);
|
$stmt->execute([$id]);
|
||||||
$mappings = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$mappings = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
@@ -205,28 +207,37 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Type */
|
/* Type */
|
||||||
|
/* Order */
|
||||||
#schemaFieldsTable th:nth-child(5),
|
#schemaFieldsTable th:nth-child(5),
|
||||||
#schemaFieldsTable td:nth-child(5) {
|
#schemaFieldsTable td:nth-child(5) {
|
||||||
|
width: 70px;
|
||||||
|
text-align: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Type */
|
||||||
|
#schemaFieldsTable th:nth-child(6),
|
||||||
|
#schemaFieldsTable td:nth-child(6) {
|
||||||
width: 120px;
|
width: 120px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mapping = wide but NOT insane */
|
/* Mapping = wide but NOT insane */
|
||||||
#schemaFieldsTable th:nth-child(6),
|
#schemaFieldsTable th:nth-child(7),
|
||||||
#schemaFieldsTable td:nth-child(6) {
|
#schemaFieldsTable td:nth-child(7) {
|
||||||
width: 380px;
|
width: 380px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Default Value = wider */
|
/* Default Value = wider */
|
||||||
#schemaFieldsTable th:nth-child(7),
|
#schemaFieldsTable th:nth-child(8),
|
||||||
#schemaFieldsTable td:nth-child(7) {
|
#schemaFieldsTable td:nth-child(8) {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* selects fill the cell */
|
/* selects fill the cell */
|
||||||
#schemaFieldsTable td:nth-child(6) .form-select,
|
#schemaFieldsTable td:nth-child(7) .form-select,
|
||||||
#schemaFieldsTable td:nth-child(7) .form-control,
|
#schemaFieldsTable td:nth-child(8) .form-control,
|
||||||
#schemaFieldsTable td:nth-child(7) .form-select {
|
#schemaFieldsTable td:nth-child(8) .form-select {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,6 +358,7 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
<th style="width:45px; text-align:center;">Import</th>
|
<th style="width:45px; text-align:center;">Import</th>
|
||||||
<th style="width:45px; text-align:center;">Parts</th>
|
<th style="width:45px; text-align:center;">Parts</th>
|
||||||
<th style="width:320px;">Title</th>
|
<th style="width:320px;">Title</th>
|
||||||
|
<th style="width:70px; text-align:center;">Order</th>
|
||||||
<th style="width:120px;">Type</th>
|
<th style="width:120px;">Type</th>
|
||||||
<th><?php echo $sourceType === 'API' ? 'JSON Mapping' : 'Mapping'; ?></th>
|
<th><?php echo $sourceType === 'API' ? 'JSON Mapping' : 'Mapping'; ?></th>
|
||||||
<th>Default Value</th>
|
<th>Default Value</th>
|
||||||
@@ -383,6 +395,12 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
|
<td class="text-center">
|
||||||
|
<?php echo (int)($mapping['field_order'] ?? 9999); ?>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td><?php echo htmlspecialchars($mapping['data_type'] ?? 'N/A'); ?></td>
|
||||||
|
|
||||||
<td><?php echo htmlspecialchars($mapping['data_type'] ?? 'N/A'); ?></td>
|
<td><?php echo htmlspecialchars($mapping['data_type'] ?? 'N/A'); ?></td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
@@ -1737,7 +1755,7 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
mappedColumn = document.createElement('span');
|
mappedColumn = document.createElement('span');
|
||||||
mappedColumn.className = 'mapped-column';
|
mappedColumn.className = 'mapped-column';
|
||||||
mappedColumn.style.marginLeft = '5px';
|
mappedColumn.style.marginLeft = '5px';
|
||||||
tr.querySelector('td:nth-child(6)').appendChild(mappedColumn);
|
tr.querySelector('td:nth-child(7)').appendChild(mappedColumn);
|
||||||
}
|
}
|
||||||
if (!removeBtn) {
|
if (!removeBtn) {
|
||||||
removeBtn = document.createElement('button');
|
removeBtn = document.createElement('button');
|
||||||
@@ -1745,7 +1763,7 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
removeBtn.textContent = 'X';
|
removeBtn.textContent = 'X';
|
||||||
removeBtn.style.marginLeft = '5px';
|
removeBtn.style.marginLeft = '5px';
|
||||||
removeBtn.setAttribute('data-id', mappingId);
|
removeBtn.setAttribute('data-id', mappingId);
|
||||||
tr.querySelector('td:nth-child(6)').appendChild(removeBtn);
|
tr.querySelector('td:nth-child(7)').appendChild(removeBtn);
|
||||||
|
|
||||||
removeBtn.addEventListener('click', function(e) {
|
removeBtn.addEventListener('click', function(e) {
|
||||||
let tr = e.target.closest('tr');
|
let tr = e.target.closest('tr');
|
||||||
@@ -1791,7 +1809,7 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
mappedJsonNode = document.createElement('span');
|
mappedJsonNode = document.createElement('span');
|
||||||
mappedJsonNode.className = 'mapped-json-node';
|
mappedJsonNode.className = 'mapped-json-node';
|
||||||
mappedJsonNode.style.marginLeft = '5px';
|
mappedJsonNode.style.marginLeft = '5px';
|
||||||
tr.querySelector('td:nth-child(6)').appendChild(mappedJsonNode);
|
tr.querySelector('td:nth-child(7)').appendChild(mappedJsonNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!removeJsonBtn) {
|
if (!removeJsonBtn) {
|
||||||
@@ -1800,7 +1818,7 @@ $apiSampleJson = $template['api_sample_json'] ?? '';
|
|||||||
removeJsonBtn.textContent = 'X';
|
removeJsonBtn.textContent = 'X';
|
||||||
removeJsonBtn.style.marginLeft = '5px';
|
removeJsonBtn.style.marginLeft = '5px';
|
||||||
removeJsonBtn.setAttribute('data-id', mappingId);
|
removeJsonBtn.setAttribute('data-id', mappingId);
|
||||||
tr.querySelector('td:nth-child(6)').appendChild(removeJsonBtn);
|
tr.querySelector('td:nth-child(7)').appendChild(removeJsonBtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
mappedJsonNode.textContent = event.target.value ? `(${event.target.value})` : '';
|
mappedJsonNode.textContent = event.target.value ? `(${event.target.value})` : '';
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
require_once dirname(__DIR__, 2) . '/vendor/autoload.php';
|
||||||
|
require_once dirname(__FILE__) . '/class/VisualLimsApiClient.class.php';
|
||||||
|
require_once dirname(__FILE__) . '/include/headscript.php';
|
||||||
|
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
ini_set('display_errors', '0');
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$db = DBHandlerSelect::getInstance();
|
||||||
|
$pdo = $db->getConnection();
|
||||||
|
|
||||||
|
$api = VisualLimsApiClient::getInstance();
|
||||||
|
|
||||||
|
// Get all schemas currently used in template_mapping
|
||||||
|
$stmtSchemas = $pdo->query("
|
||||||
|
SELECT DISTINCT schema_id
|
||||||
|
FROM template_mapping
|
||||||
|
WHERE schema_id IS NOT NULL
|
||||||
|
AND schema_id > 0
|
||||||
|
ORDER BY schema_id ASC
|
||||||
|
");
|
||||||
|
|
||||||
|
$schemaIds = $stmtSchemas->fetchAll(PDO::FETCH_COLUMN);
|
||||||
|
|
||||||
|
if (empty($schemaIds)) {
|
||||||
|
throw new Exception('No schema_id found in template_mapping');
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmtUpdate = $pdo->prepare("
|
||||||
|
UPDATE template_mapping
|
||||||
|
SET field_order = ?
|
||||||
|
WHERE schema_id = ?
|
||||||
|
AND field_id = ?
|
||||||
|
");
|
||||||
|
|
||||||
|
$summary = [];
|
||||||
|
$totalUpdated = 0;
|
||||||
|
|
||||||
|
foreach ($schemaIds as $schemaId) {
|
||||||
|
$schemaId = (int)$schemaId;
|
||||||
|
|
||||||
|
$endpoint = "SchemaCustomField($schemaId)?\$expand=SchemiCustomFieldsDettagli(\$expand=CustomField)";
|
||||||
|
$data = $api->get($endpoint);
|
||||||
|
|
||||||
|
if (empty($data['SchemiCustomFieldsDettagli']) || !is_array($data['SchemiCustomFieldsDettagli'])) {
|
||||||
|
$summary[] = [
|
||||||
|
'schema_id' => $schemaId,
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'No SchemiCustomFieldsDettagli found'
|
||||||
|
];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$schemaUpdated = 0;
|
||||||
|
$notFound = [];
|
||||||
|
|
||||||
|
foreach ($data['SchemiCustomFieldsDettagli'] as $detail) {
|
||||||
|
$order = intval($detail['Ordine'] ?? 9999);
|
||||||
|
$fieldId = intval($detail['CustomField']['IdCustomField'] ?? 0);
|
||||||
|
|
||||||
|
if ($fieldId <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmtUpdate->execute([
|
||||||
|
$order,
|
||||||
|
$schemaId,
|
||||||
|
$fieldId
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($stmtUpdate->rowCount() > 0) {
|
||||||
|
$schemaUpdated++;
|
||||||
|
$totalUpdated++;
|
||||||
|
} else {
|
||||||
|
$notFound[] = [
|
||||||
|
'field_id' => $fieldId,
|
||||||
|
'order' => $order,
|
||||||
|
'label' => $detail['CustomField']['Titolo'] ?? ''
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary[] = [
|
||||||
|
'schema_id' => $schemaId,
|
||||||
|
'success' => true,
|
||||||
|
'updated' => $schemaUpdated,
|
||||||
|
'not_found_count' => count($notFound),
|
||||||
|
'not_found' => $notFound
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'success' => true,
|
||||||
|
'schemas_processed' => count($schemaIds),
|
||||||
|
'total_updated' => $totalUpdated,
|
||||||
|
'summary' => $summary
|
||||||
|
], JSON_PRETTY_PRINT);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
http_response_code(500);
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'success' => false,
|
||||||
|
'message' => $e->getMessage()
|
||||||
|
], JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
require_once dirname(__DIR__, 2) . '/vendor/autoload.php';
|
||||||
|
require_once dirname(__FILE__) . '/class/VisualLimsApiClient.class.php';
|
||||||
|
require_once dirname(__FILE__) . '/include/headscript.php';
|
||||||
|
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
ini_set('display_errors', '0');
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$schemaId = isset($_GET['schema_id']) && is_numeric($_GET['schema_id'])
|
||||||
|
? intval($_GET['schema_id'])
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
if ($schemaId <= 0) {
|
||||||
|
throw new Exception('Missing or invalid schema_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$api = VisualLimsApiClient::getInstance();
|
||||||
|
|
||||||
|
$endpoint = "SchemaCustomField($schemaId)?\$expand=SchemiCustomFieldsDettagli(\$expand=CustomField)";
|
||||||
|
$data = $api->get($endpoint);
|
||||||
|
|
||||||
|
if (empty($data['SchemiCustomFieldsDettagli']) || !is_array($data['SchemiCustomFieldsDettagli'])) {
|
||||||
|
throw new Exception('No SchemiCustomFieldsDettagli found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = DBHandlerSelect::getInstance();
|
||||||
|
$pdo = $db->getConnection();
|
||||||
|
|
||||||
|
$updated = 0;
|
||||||
|
$notFound = [];
|
||||||
|
|
||||||
|
$stmt = $pdo->prepare("
|
||||||
|
UPDATE template_mapping
|
||||||
|
SET field_order = ?
|
||||||
|
WHERE schema_id = ?
|
||||||
|
AND field_id = ?
|
||||||
|
");
|
||||||
|
|
||||||
|
foreach ($data['SchemiCustomFieldsDettagli'] as $detail) {
|
||||||
|
$order = intval($detail['Ordine'] ?? 9999);
|
||||||
|
$fieldId = intval($detail['CustomField']['IdCustomField'] ?? 0);
|
||||||
|
|
||||||
|
if ($fieldId <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmt->execute([
|
||||||
|
$order,
|
||||||
|
$schemaId,
|
||||||
|
$fieldId
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($stmt->rowCount() > 0) {
|
||||||
|
$updated++;
|
||||||
|
} else {
|
||||||
|
$notFound[] = [
|
||||||
|
'field_id' => $fieldId,
|
||||||
|
'order' => $order,
|
||||||
|
'label' => $detail['CustomField']['Titolo'] ?? ''
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'success' => true,
|
||||||
|
'schema_id' => $schemaId,
|
||||||
|
'updated' => $updated,
|
||||||
|
'not_found' => $notFound
|
||||||
|
]);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
http_response_code(500);
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'success' => false,
|
||||||
|
'message' => $e->getMessage()
|
||||||
|
]);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user