214 lines
8.3 KiB
PHP
214 lines
8.3 KiB
PHP
<?php
|
|
|
|
if (!function_exists('gdbFixedDefaultValue')) {
|
|
/** Default di un fixed field (DATE 'today' → data odierna). */
|
|
function gdbFixedDefaultValue(array $f): string
|
|
{
|
|
$v = $f['default_value'] ?? '';
|
|
if (($f['data_type'] ?? '') === 'DATE' && $v === 'today') {
|
|
return date('Y-m-d');
|
|
}
|
|
return (string)$v;
|
|
}
|
|
}
|
|
|
|
if (!function_exists('buildGridConfig')) {
|
|
/**
|
|
* Config del template necessaria per costruire le righe: fixed fields (ordinati
|
|
* come in imported.php), main field mappings, alias map, default idclient.
|
|
*
|
|
* @return array{fixedFields:array, fixedAliasMap:array, mainFieldMappings:array, default_idclient:mixed}
|
|
*/
|
|
function buildGridConfig(PDO $pdo, int $templateId): array
|
|
{
|
|
// Mappa logica fixed_field_key → colonna reale su datadb (come imported.php)
|
|
$fixedAliasMap = [
|
|
'ClienteResponsabile' => 'cliente_responsabile_id',
|
|
'ClienteFornitore' => 'cliente_fornitore_id',
|
|
'ClienteAnalisi' => 'clienteAnalisi',
|
|
'ClienteFatturazione' => 'ClienteFatturazione',
|
|
'MoltiplicatorePrezzo' => 'moltiplicatore_prezzo_id',
|
|
'AnagraficaCertestObject' => 'anagrafica_certest_object_id',
|
|
'AnagraficaCertestService' => 'anagrafica_certest_service_id',
|
|
'ConsegnaRichiesta' => 'consegna_richiesta',
|
|
];
|
|
|
|
// Fixed fields visibili, ordinati come imported.php
|
|
$fixedStmt = $pdo->prepare("
|
|
SELECT id, fixed_field_key, is_manual, data_type, is_required, default_value, is_visible_import
|
|
FROM template_fixed_mapping
|
|
WHERE template_id = ? AND is_visible_import = 1
|
|
ORDER BY id
|
|
");
|
|
$fixedStmt->execute([$templateId]);
|
|
$fixedFieldsRaw = $fixedStmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
$desiredOrder = [
|
|
'ClienteResponsabile', 'ClienteFornitore', 'ClienteAnalisi', 'ClienteFatturazione',
|
|
'AnagraficaCertestObject', 'AnagraficaCertestService', 'MoltiplicatorePrezzo', 'ConsegnaRichiesta',
|
|
];
|
|
$excludeFromFixed = ['ClienteFornitore']; // reso come colonna a sé
|
|
|
|
$fixedFields = [];
|
|
$tempMap = [];
|
|
foreach ($fixedFieldsRaw as $f) {
|
|
if (in_array($f['fixed_field_key'], $excludeFromFixed, true)) continue;
|
|
$tempMap[$f['fixed_field_key']] = $f;
|
|
}
|
|
foreach ($desiredOrder as $key) {
|
|
if (isset($tempMap[$key])) {
|
|
$fixedFields[] = $tempMap[$key];
|
|
unset($tempMap[$key]);
|
|
}
|
|
}
|
|
foreach ($tempMap as $f) {
|
|
$fixedFields[] = $f;
|
|
}
|
|
|
|
// Main field mappings (max 2), come imported.php
|
|
$mapStmt = $pdo->prepare("
|
|
SELECT id, field_label, data_type, is_required, field_id, field_order,
|
|
main_field, is_visible_import, manual_default
|
|
FROM template_mapping
|
|
WHERE template_id = ?
|
|
ORDER BY field_order ASC, id ASC
|
|
");
|
|
$mapStmt->execute([$templateId]);
|
|
$allMappings = $mapStmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
$mainFieldMappings = [];
|
|
foreach ($allMappings as $mapping) {
|
|
if ((string)$mapping['main_field'] === '1' && (int)$mapping['is_visible_import'] === 1) {
|
|
$mainFieldMappings[] = $mapping;
|
|
}
|
|
if (count($mainFieldMappings) >= 2) break;
|
|
}
|
|
|
|
// Default idclient dal template
|
|
$tplStmt = $pdo->prepare("SELECT idclient FROM excel_templates WHERE id = ?");
|
|
$tplStmt->execute([$templateId]);
|
|
$default_idclient = $tplStmt->fetchColumn();
|
|
$default_idclient = $default_idclient !== false ? $default_idclient : null;
|
|
|
|
return [
|
|
'fixedFields' => $fixedFields,
|
|
'fixedAliasMap' => $fixedAliasMap,
|
|
'mainFieldMappings' => $mainFieldMappings,
|
|
'default_idclient' => $default_idclient,
|
|
];
|
|
}
|
|
}
|
|
|
|
if (!function_exists('buildGridRows')) {
|
|
/**
|
|
* Costruisce le righe gridData per la lista di iddatadb data, nell'ordine passato.
|
|
*
|
|
* @param int[] $iddatadbList
|
|
* @param array $config output di buildGridConfig()
|
|
* @return array righe nella stessa forma di imported.php $gridDataArray
|
|
*/
|
|
function buildGridRows(PDO $pdo, array $iddatadbList, array $config): array
|
|
{
|
|
$iddatadbList = array_values(array_filter(array_map('intval', $iddatadbList), fn($v) => $v > 0));
|
|
if (empty($iddatadbList)) {
|
|
return [];
|
|
}
|
|
|
|
$fixedFields = $config['fixedFields'];
|
|
$fixedAliasMap = $config['fixedAliasMap'];
|
|
$mainFieldMappings = $config['mainFieldMappings'];
|
|
$default_idclient = $config['default_idclient'];
|
|
|
|
$ph = implode(',', array_fill(0, count($iddatadbList), '?'));
|
|
|
|
// Righe datadb + user_name
|
|
$stmt = $pdo->prepare("
|
|
SELECT d.*, CONCAT(u.first_name, ' ', u.last_name) AS user_name
|
|
FROM datadb d
|
|
LEFT JOIN auth_users u ON d.user_id = u.id
|
|
WHERE d.iddatadb IN ($ph)
|
|
");
|
|
$stmt->execute($iddatadbList);
|
|
$byId = [];
|
|
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) {
|
|
$byId[(int)$r['iddatadb']] = $r;
|
|
}
|
|
|
|
// Dettagli (import_data_details)
|
|
$detStmt = $pdo->prepare("
|
|
SELECT d.id AS datadb_id, d.mapping_id, d.field_value,
|
|
m.field_id, m.field_label, m.data_type, m.is_required, m.manual_default
|
|
FROM import_data_details d
|
|
JOIN template_mapping m ON d.mapping_id = m.id
|
|
WHERE d.id IN ($ph)
|
|
");
|
|
$detStmt->execute($iddatadbList);
|
|
$detailsByRow = [];
|
|
foreach ($detStmt->fetchAll(PDO::FETCH_ASSOC) as $d) {
|
|
$detailsByRow[(int)$d['datadb_id']][] = $d;
|
|
}
|
|
|
|
// Costruzione righe nell'ordine della lista passata
|
|
$rows = [];
|
|
foreach ($iddatadbList as $id) {
|
|
$row = $byId[$id] ?? null;
|
|
if ($row === null) continue;
|
|
|
|
$rowObj = [
|
|
'iddatadb' => (int)$row['iddatadb'],
|
|
'status' => $row['status'] ?? 'i',
|
|
'idclient' => $row['idclient'] ?? $default_idclient,
|
|
'cliente_fornitore_id' => $row['cliente_fornitore_id'] ?? null,
|
|
'tested_component' => $row['tested_component'] ?? '',
|
|
'commessaweb' => $row['commessaweb'] ?? null,
|
|
'user_name' => $row['user_name'] ?? '',
|
|
'importreferencecode' => $row['importreferencecode'] ?? '',
|
|
'filename_import' => $row['filename_import'] ?? '',
|
|
'importdate' => $row['importdate'] ?? '',
|
|
];
|
|
|
|
// Fixed fields
|
|
$rowObj['fixedFields'] = [];
|
|
foreach ($fixedFields as $f) {
|
|
$key = $f['fixed_field_key'];
|
|
$dbCol = $fixedAliasMap[$key] ?? $key;
|
|
$val = $row[$dbCol] ?? '';
|
|
if ($val === '' || $val === null) {
|
|
$val = gdbFixedDefaultValue($f);
|
|
}
|
|
$rowObj['fixedFields'][$key] = (string)$val;
|
|
}
|
|
|
|
// Details
|
|
$rowObj['details'] = [];
|
|
$rowDetails = $detailsByRow[$id] ?? [];
|
|
foreach ($rowDetails as $d) {
|
|
$rowObj['details'][(string)$d['mapping_id']] = $d['field_value'] ?? '';
|
|
}
|
|
|
|
// Main field values
|
|
foreach ($mainFieldMappings as $mainMapping) {
|
|
$found = null;
|
|
foreach ($rowDetails as $d) {
|
|
if ($d['mapping_id'] == $mainMapping['id']) {
|
|
$found = $d;
|
|
break;
|
|
}
|
|
}
|
|
$rowObj['details'][(string)$mainMapping['id']] =
|
|
($found['field_value'] ?? null) ?? ($mainMapping['manual_default'] ?? '');
|
|
}
|
|
|
|
if (!empty($mainFieldMappings)) {
|
|
$firstMain = $mainFieldMappings[0];
|
|
$rowObj['mainFieldValue'] = $rowObj['details'][(string)$firstMain['id']] ?? '';
|
|
}
|
|
|
|
$rowObj['_dirty'] = false;
|
|
$rows[] = $rowObj;
|
|
}
|
|
|
|
return $rows;
|
|
}
|
|
}
|