From 67bbd9bbbb6592df0b6948928847bddd79699052 Mon Sep 17 00:00:00 2001 From: "r.mubarakzyanov" Date: Tue, 21 Apr 2026 00:09:59 +0300 Subject: [PATCH] export analyses --- public/userarea/export_to_lims.php | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/public/userarea/export_to_lims.php b/public/userarea/export_to_lims.php index 1b5f833..7b7d375 100644 --- a/public/userarea/export_to_lims.php +++ b/public/userarea/export_to_lims.php @@ -432,6 +432,71 @@ try { $logFilePhotos = $logDir . "commessa_{$commessaId}_photos_step5_2_" . time() . ".txt"; $writeLog($logFilePhotos, $logContentPhotos, "STEP 6.2 - Photos (commessa={$commessaId})"); + // 🔹 STEP 6.3: Add Analyses (AnalisiCampione) via Campione({id})/AddAnalisi bound action + $stmt = $pdo->prepare(" + SELECT part_id, analysis_recordkey, analysis_name, analysis_method + FROM identification_parts_analyses + WHERE iddatadb = :iddatadb + ORDER BY part_id, id + "); + $stmt->execute(['iddatadb' => $iddatadb]); + $analysesRows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $partIdToIndex = []; + foreach ($parts as $idx => $part) { + $partIdToIndex[(int)$part['part_id']] = $idx; + } + + $totalAnalyses = count($analysesRows); + $addedAnalyses = 0; + $failedAnalyses = []; + $logContentStep63Analisi = "Analyses for iddatadb={$iddatadb}: total={$totalAnalyses}\n\n"; + + foreach ($analysesRows as $a) { + $partId = (int)$a['part_id']; + $recordKey = trim((string)($a['analysis_recordkey'] ?? '')); + $idx = $partIdToIndex[$partId] ?? null; + + if ($idx === null || !isset($campioni[$idx]) || $recordKey === '') { + $logContentStep63Analisi .= "SKIP (no campione for part_id={$partId} / empty recordkey): '{$recordKey}'\n"; + continue; + } + + $campioneId = (int)($campioni[$idx]['IdCampione'] ?? 0); + if ($campioneId <= 0) { + $logContentStep63Analisi .= "SKIP (invalid IdCampione for part_id={$partId}): '{$recordKey}'\n"; + continue; + } + + $payload = ['RecordKey' => $recordKey]; + $jsonPayload = json_encode($payload, JSON_UNESCAPED_SLASHES); + + $logContentStep63Analisi .= "curl --location --request POST '{$apiBaseUrl}Campione({$campioneId})/AddAnalisi' \\\n" . + "--header 'Content-Type: application/json' \\\n" . + "--header 'Authorization: Bearer ••••••' \\\n" . + "--data '{$jsonPayload}'\n"; + + try { + $result = $api->post("Campione({$campioneId})/AddAnalisi", $payload); + $logContentStep63Analisi .= "OK (part_id={$partId}, campione={$campioneId}): " . + ($a['analysis_name'] ?? '') . "\n---\n"; + $addedAnalyses++; + } catch (Exception $e) { + $errMsg = $e->getMessage(); + $logContentStep63Analisi .= "FAIL: {$errMsg}\n---\n"; + $failedAnalyses[] = [ + 'part_id' => $partId, + 'campione_id' => $campioneId, + 'analysis_recordkey' => $recordKey, + 'analysis_name' => $a['analysis_name'] ?? '', + 'error' => $errMsg, + ]; + } + } + + $logFileStep63Analisi = $logDir . "commessa_{$commessaId}_analyses_step63_" . time() . ".txt"; + $writeLog($logFileStep63Analisi, $logContentStep63Analisi, "STEP 6.3 - AddAnalisi (commessa={$commessaId})"); + // 🔹 STEP 7: Update Custom Fields for CommessaWeb if (!empty($fieldValues)) { // GET con espansione per CustomField @@ -563,11 +628,15 @@ try { "totalCampioni" => count($campioni), "totalCustomFields" => count($commessaAfterPatch["CommesseCustomFields"] ?? []), "totalPhotos" => count($photos), + "totalAnalyses" => $totalAnalyses, + "addedAnalyses" => $addedAnalyses, + "failedAnalyses" => $failedAnalyses, "message" => "Export successful", "logFiles" => [ "step5_create" => $logFileStep5, "step5_2_photos" => $logFilePhotos, "step6_campioni" => $logFileStep6, + "step63_analyses" => $logFileStep63Analisi, "step7_patch" => $logFileStep7 ?? null, "step9_1_importa" => $logFileStep91, "step10_get" => $logFileStep10 @@ -583,6 +652,7 @@ try { "step5_create" => $logFileStep5 ?? null, "step5_2_photos" => $logFilePhotos ?? null, "step6_campioni" => $logFileStep6 ?? null, + "step63_analyses" => $logFileStep63Analisi ?? null, "step7_patch" => $logFileStep7 ?? null, "step9_1_importa" => $logFileStep91 ?? null, "step10_get" => $logFileStep10 ?? null