158 lines
6.8 KiB
PHP
158 lines
6.8 KiB
PHP
<?php
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
ini_set('log_errors', 1);
|
|
ini_set('error_log', __DIR__ . '/import_debug.log');
|
|
if (!file_exists(__DIR__ . '/import_debug.log')) {
|
|
file_put_contents(__DIR__ . '/import_debug.log', "Inizio importazione alle " . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
|
|
}
|
|
|
|
// Log iniziale
|
|
error_log("Inizio importazione alle " . date('Y-m-d H:i:s'));
|
|
|
|
include('include/headscript.php');
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['template_id']) || !isset($_POST['selected_rows']) || !isset($_POST['filename'])) {
|
|
header("Location: xlstemplates_grid.php?status=error&message=" . urlencode("Richiesta non valida"));
|
|
exit;
|
|
}
|
|
$template_id = intval($_POST['template_id']);
|
|
$selected_rows = $_POST['selected_rows'];
|
|
$columns = json_decode($_POST['columns'], true); // Header dell'XLS
|
|
$rows = json_decode($_POST['rows'], true); // Dati dell'XLS
|
|
$newFilename = htmlspecialchars($_POST['filename']);
|
|
|
|
$_SESSION['template_id'] = $template_id;
|
|
$_SESSION['selected_rows'] = $selected_rows;
|
|
$_SESSION['columns'] = $columns;
|
|
$_SESSION['rows'] = $rows;
|
|
$_SESSION['filename'] = $newFilename;
|
|
|
|
error_log("Received Data - Template ID: $template_id, Selected Rows: " . json_encode($selected_rows));
|
|
error_log("Columns: " . json_encode($columns));
|
|
error_log("Rows: " . json_encode($rows));
|
|
|
|
$user_id = $iduserlogin ?? 1; // Default a 1 se non definito
|
|
|
|
$db = DBHandlerSelect::getInstance();
|
|
$pdo = $db->getConnection();
|
|
|
|
// Genera un UUID univoco per importreferencecode
|
|
$importReferenceCode = date('YmdHis') . '-' . uniqid();
|
|
|
|
// Recupera tutti i mapping dal template
|
|
$stmt = $pdo->prepare("SELECT id, excel_column, data_type, is_required, manual_default, is_manual, field_label, field_id, main_field FROM template_mapping WHERE template_id = ?");
|
|
$stmt->execute([$template_id]);
|
|
$allMappings = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
if (empty($allMappings)) {
|
|
header("Location: import_xls.php?id=$template_id&status=error&message=" . urlencode("Nessun mapping trovato per il template"));
|
|
exit;
|
|
}
|
|
|
|
// Trova il campo main_field
|
|
$mainFieldMapping = null;
|
|
foreach ($allMappings as $mapping) {
|
|
if ($mapping['main_field'] == 1) {
|
|
$mainFieldMapping = $mapping;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Inserisci le righe selezionate in datadb (solo campi generici con templateid)
|
|
$insertedIds = [];
|
|
foreach ($selected_rows as $rowIndex) {
|
|
$row = $rows[$rowIndex];
|
|
$values = [
|
|
$template_id, // templateid
|
|
$importReferenceCode, // importreferencecode
|
|
$newFilename, // filename_import
|
|
'i', // status
|
|
$user_id, // user_id
|
|
null, // limscode
|
|
date('Y-m-d') // importdate
|
|
];
|
|
$sql = "INSERT INTO datadb (templateid, importreferencecode, filename_import, status, user_id, limscode, importdate) VALUES (?, ?, ?, ?, ?, ?, ?)";
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute($values);
|
|
|
|
$iddatadb = $pdo->lastInsertId();
|
|
$insertedIds[] = $iddatadb;
|
|
|
|
// Inserisci tutti i campi (automatici e manuali) in import_data_details
|
|
foreach ($allMappings as $mapping) {
|
|
$fieldValue = null;
|
|
if (!$mapping['is_manual']) { // Campi automatici dall'XLS
|
|
$excelColumn = trim($mapping['excel_column']);
|
|
$excelColumnIndex = array_search($excelColumn, array_map('trim', $columns));
|
|
if ($excelColumnIndex !== false && isset($row[$excelColumnIndex]) && $row[$excelColumnIndex] !== '') {
|
|
$fieldValue = $row[$excelColumnIndex];
|
|
error_log("Found Excel column '$excelColumn' at index $excelColumnIndex, value: " . var_export($fieldValue, true));
|
|
} else {
|
|
$fieldValue = $mapping['manual_default'] ?? '';
|
|
error_log("Excel column '$excelColumn' not found or empty, using default: " . var_export($fieldValue, true));
|
|
}
|
|
switch ($mapping['data_type']) {
|
|
case 'INT':
|
|
$fieldValue = is_numeric($fieldValue) ? (int)$fieldValue : ($mapping['manual_default'] ?? 0);
|
|
break;
|
|
case 'DATE':
|
|
$fieldValue = !empty($fieldValue) ? date('Y-m-d', strtotime($fieldValue)) : ($mapping['manual_default'] === 'today' ? date('Y-m-d') : ($mapping['manual_default'] ?? ''));
|
|
break;
|
|
case 'CHAR':
|
|
$fieldValue = !empty($fieldValue) ? substr((string)$fieldValue, 0, 1) : ($mapping['manual_default'] ?? '');
|
|
break;
|
|
case 'Testo':
|
|
case 'VARCHAR':
|
|
default:
|
|
$fieldValue = !empty($fieldValue) ? htmlspecialchars((string)$fieldValue) : ($mapping['manual_default'] ?? '');
|
|
break;
|
|
}
|
|
} else { // Campi manuali
|
|
$fieldValue = $mapping['manual_default'] ?? '';
|
|
if ($mapping['data_type'] === 'DATE' && $mapping['manual_default'] === 'today') {
|
|
$fieldValue = date('Y-m-d');
|
|
}
|
|
}
|
|
if ($mapping['is_required'] && (is_null($fieldValue) || $fieldValue === '')) {
|
|
error_log("Required field missing for mapping ID: " . $mapping['id'] . ", field: " . $mapping['field_label']);
|
|
}
|
|
error_log("Inserting into import_data_details - Mapping ID: " . $mapping['id'] . ", Field Value: " . var_export($fieldValue, true) . ", Is Manual: " . $mapping['is_manual'] . ", Excel Column: " . ($mapping['excel_column'] ?? 'N/A') . ", Manual Default: " . ($mapping['manual_default'] ?? 'N/A'));
|
|
$stmt = $pdo->prepare("INSERT INTO import_data_details (id, mapping_id, field_value) VALUES (?, ?, ?)");
|
|
$stmt->execute([$iddatadb, $mapping['id'], $fieldValue]);
|
|
error_log("Inserted into import_data_details for ID $iddatadb, Mapping ID: " . $mapping['id'] . ", Field Value: " . var_export($fieldValue, true));
|
|
}
|
|
}
|
|
|
|
$_SESSION['inserted_ids'] = $insertedIds;
|
|
|
|
$params = [
|
|
'template_id' => $template_id,
|
|
'filename' => $newFilename,
|
|
];
|
|
|
|
?>
|
|
<form id="redirectForm" action="import_edit2.php" method="post">
|
|
<input type="hidden" name="template_id" value="<?= htmlspecialchars($template_id) ?>">
|
|
<input type="hidden" name="filename" value="<?= htmlspecialchars($newFilename) ?>">
|
|
|
|
<?php foreach ($selected_rows as $row): ?>
|
|
<input type="hidden" name="selected_rows[]" value="<?= htmlspecialchars($row) ?>">
|
|
<?php endforeach; ?>
|
|
|
|
<?php foreach ($insertedIds as $id): ?>
|
|
<input type="hidden" name="inserted_ids[]" value="<?= htmlspecialchars($id) ?>">
|
|
<?php endforeach; ?>
|
|
|
|
<input type="hidden" name="columns" value='<?= json_encode($columns) ?>'>
|
|
<input type="hidden" name="rows" value='<?= json_encode($rows) ?>'>
|
|
</form>
|
|
<script>
|
|
document.getElementById('redirectForm').submit();
|
|
</script>
|
|
<?php
|
|
|
|
exit;
|
|
|