"CodiceRapporto eq '{$codiceRapportoSafe}'", '$select' => 'IdRapporto,CodiceRapporto,Data,Versione,Firmato,DataStampa', '$top' => 1 ]; $searchEndpoint = "Rapporto?" . http_build_query($searchParams); $searchData = $api->get($searchEndpoint); $rapporti = $searchData['value'] ?? []; if (empty($rapporti)) { echo json_encode([ 'success' => false, 'message' => 'Nessun rapporto trovato per questo CodiceRapporto.', 'codice_rapporto' => $codiceRapporto ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); exit; } $rapportoBase = $rapporti[0]; $idRapporto = intval($rapportoBase['IdRapporto'] ?? 0); if (!$idRapporto) { throw new Exception("IdRapporto non trovato nella risposta."); } /** * STEP 2 - Dettaglio Rapporto */ $clienteExpandError = null; $detailEndpoint = "Rapporto({$idRapporto})?\$expand=Cliente,RapportiFiles,CampioniDatiRapporto"; try { $detailData = $api->get($detailEndpoint); } catch (Exception $e) { $clienteExpandError = $e->getMessage(); $detailEndpoint = "Rapporto({$idRapporto})?\$expand=RapportiFiles,CampioniDatiRapporto"; $detailData = $api->get($detailEndpoint); } file_put_contents( $debugDir . "rapporto_{$codiceRapportoSafe}_light.json", json_encode($detailData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) ); $cliente = $detailData['Cliente'] ?? null; $rapportiFiles = $detailData['RapportiFiles'] ?? []; $campioniDatiRapporto = $detailData['CampioniDatiRapporto'] ?? []; // ====================== CLIENTE ====================== $clienteInfo = [ 'found' => is_array($cliente), 'id_cliente' => $cliente['IdCliente'] ?? $cliente['Id'] ?? null, 'codice_cliente' => $cliente['CodiceCliente'] ?? $cliente['Codice'] ?? null, 'nome_cliente' => $cliente['Nominativo'] ?? $cliente['RagioneSociale'] ?? $cliente['Nome'] ?? $cliente['Descrizione'] ?? null, 'partita_iva' => $cliente['PartitaIva'] ?? null, 'codice_fiscale' => $cliente['CodiceFiscale'] ?? null ]; // ====================== FILE PDF ====================== $selectedRapportoFile = null; $idRapportoFile = null; $pdfFileName = $codiceRapporto . '.pdf'; $pdfFullPath = $pdfDir . $pdfFileName; if (is_array($rapportiFiles) && count($rapportiFiles) > 0) { foreach ($rapportiFiles as $file) { $fileName = $file['FileName'] ?? ''; $tipoRapporto = $file['TipoRapporto'] ?? ''; $categoria = $file['Categoria'] ?? ''; if ( stripos($fileName, '.pdf') !== false || stripos($tipoRapporto, 'Rapporto') !== false || stripos($categoria, 'Rapporti') !== false ) { $selectedRapportoFile = $file; $idRapportoFile = $file['IdRapportoFile'] ?? null; break; } } if (!$selectedRapportoFile && count($rapportiFiles) > 0) { $selectedRapportoFile = $rapportiFiles[0]; $idRapportoFile = $rapportiFiles[0]['IdRapportoFile'] ?? null; } } // ====================== DOWNLOAD PDF - DEBUG AVANZATO ====================== $pdfDownloaded = false; $pdfError = null; $endpointUsato = null; if ($downloadPdf && $idRapportoFile) { $tentativi = [ "RapportoFile({$idRapportoFile})/\$value", "RapportoFile({$idRapportoFile})/Contenuto/\$value", "RapportoFile({$idRapportoFile})/File/\$value", "Rapporto({$idRapporto})/RapportiFiles({$idRapportoFile})/\$value", "Rapporto({$idRapporto})/RapportoFile/\$value", "GetRapportoFile?IdRapportoFile={$idRapportoFile}", "RapportoFile/Download?Id={$idRapportoFile}", "Rapporto/DownloadFile?IdRapporto={$idRapporto}" ]; foreach ($tentativi as $ep) { try { $pdfContent = $api->getRaw($ep); if (strlen($pdfContent) > 2000) { // PDF decente deve essere più grande file_put_contents($pdfFullPath, $pdfContent); $pdfDownloaded = true; $endpointUsato = $ep; $pdfError = "SUCCESSO con: " . $ep; break; } else { $pdfError = "Contenuto troppo piccolo con: " . $ep; } } catch (Exception $e) { $pdfError = "Fallito con " . $ep . " → " . $e->getMessage(); } } } // ====================== CAMPIONI + RATING (ripristinato dal tuo originale) ====================== $campioniSintesi = []; $ratingFinale = null; $ratingSource = null; $hasIrregolare = false; $hasPositiveResults = false; if (is_array($campioniDatiRapporto)) { foreach ($campioniDatiRapporto as $campione) { $giudizioRapporto = $campione['GiudizioRapporto'] ?? null; $giudizioCertificato = $campione['GiudizioCertificato'] ?? null; $esitoGiudizioLMR = $campione['EsitoGiudizioLMR'] ?? null; $esitoGiudizioImpiego = $campione['EsitoGiudizioImpiego'] ?? null; $risultatiIrregolari = ($campione['RisultatiIrregolari'] ?? false) === true; $risultatiPositivi = ($campione['RisultatiPositivi'] ?? false) === true; $campioniSintesi[] = [ 'id_campione_dati_rapporto' => $campione['IdCampioneDatiRapporto'] ?? null, 'codice_campione' => $campione['CodiceCampione'] ?? null, 'stato_campione' => $campione['StatoCampione'] ?? null, 'stato_campione_web' => $campione['StatoCampioneWeb'] ?? null, 'matrice' => $campione['Matrice'] ?? null, 'macro_matrice' => $campione['MacroMatrice'] ?? null, 'giudizio_rapporto' => $giudizioRapporto, 'giudizio_certificato' => $giudizioCertificato, 'esito_giudizio_lmr' => $esitoGiudizioLMR, 'esito_giudizio_impiego' => $esitoGiudizioImpiego, 'risultati_positivi' => $risultatiPositivi, 'risultati_irregolari' => $risultatiIrregolari ]; if (!$ratingFinale && !empty($giudizioRapporto)) { $ratingFinale = $giudizioRapporto; $ratingSource = 'CampioniDatiRapporto.GiudizioRapporto'; } if (!$ratingFinale && !empty($giudizioCertificato)) { $ratingFinale = $giudizioCertificato; $ratingSource = 'CampioniDatiRapporto.GiudizioCertificato'; } if ($risultatiIrregolari) $hasIrregolare = true; if ($risultatiPositivi) $hasPositiveResults = true; } } // Fallback rating if (!$ratingFinale) { if ($hasIrregolare) { $ratingFinale = 'Irregolare'; $ratingSource = 'RisultatiIrregolari'; } elseif ($hasPositiveResults || count($campioniSintesi) > 0) { $ratingFinale = 'Regolare'; $ratingSource = 'fallback'; } } // ====================== RISPOSTA FINALE ====================== echo json_encode([ 'success' => true, 'codice_rapporto' => $codiceRapporto, 'id_rapporto' => $idRapporto, 'search_endpoint' => $searchEndpoint, 'detail_endpoint' => $detailEndpoint, 'cliente_expand_error' => $clienteExpandError, 'rapporto_base' => $rapportoBase, 'cliente' => $clienteInfo, 'rating_finale' => $ratingFinale, 'rating_source' => $ratingSource, 'rapporti_files_count' => count($rapportiFiles), 'selected_rapporto_file' => $selectedRapportoFile, 'pdf_file_name' => $pdfFileName, 'pdf_path' => $pdfDownloaded ? $pdfFullPath : null, 'pdf_downloaded' => $pdfDownloaded, 'pdf_error' => $pdfError, 'campioni_count' => count($campioniSintesi), 'campioni_sintesi' => $campioniSintesi, 'download_requested' => $downloadPdf ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } catch (Exception $e) { http_response_code(500); echo json_encode([ 'success' => false, 'error' => $e->getMessage() ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); }