getConnection(); $iddatadb = $_GET['iddatadb'] ?? null; if (!$iddatadb) { echo json_encode(['success' => false, 'message' => 'ID TRF mancante']); exit; } try { // 1) prendo templateid da datadb $stmtTpl = $pdo->prepare("SELECT templateid FROM datadb WHERE iddatadb = :iddatadb LIMIT 1"); $stmtTpl->execute([':iddatadb' => $iddatadb]); $templateid = $stmtTpl->fetchColumn(); // 2) prendo (max 1) field_id visibile in parts $extraFieldId = null; if ($templateid) { $stmtEF = $pdo->prepare("SELECT field_id FROM template_mapping WHERE template_id = :templateid AND is_visible_parts = 1 ORDER BY id ASC LIMIT 1"); $stmtEF->execute([':templateid' => $templateid]); $extraFieldId = $stmtEF->fetchColumn(); if ($extraFieldId !== false) $extraFieldId = (int)$extraFieldId; else $extraFieldId = null; } // 3) carico parts + join su tabella figlia if ($extraFieldId) { $stmt = $pdo->prepare(" SELECT p.id, p.iddatadb, p.part_number, p.part_description, p.idmatrice, p.note, p.dateexpiry, cf.value_id AS extra_value_id, cf.value_text AS extra_value_text FROM identification_parts p LEFT JOIN identification_parts_customfields cf ON cf.part_id = p.id AND cf.field_id = :extraFieldId WHERE p.iddatadb = :iddatadb ORDER BY p.part_number ASC "); $stmt->execute([ ':iddatadb' => $iddatadb, ':extraFieldId' => $extraFieldId ]); } else { $stmt = $pdo->prepare(" SELECT id, iddatadb, part_number, part_description, idmatrice, note, dateexpiry, NULL AS extra_value_id, NULL AS extra_value_text FROM identification_parts WHERE iddatadb = :iddatadb ORDER BY part_number ASC "); $stmt->execute([':iddatadb' => $iddatadb]); } $parts = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode([ 'success' => true, 'parts' => $parts, 'extra_field_id' => $extraFieldId, 'debug_sql' => ($extraFieldId ? 'WITH_CF_JOIN' : 'NO_CF') ]); } catch (PDOException $e) { echo json_encode(['success' => false, 'message' => 'Errore nel caricamento: ' . $e->getMessage()]); }