144 lines
4.1 KiB
PHP
144 lines
4.1 KiB
PHP
<?php
|
|
require_once dirname(__DIR__, 2) . '/vendor/autoload.php';
|
|
require_once __DIR__ . '/class/VisualLimsApiClient.class.php';
|
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
ini_set('display_errors', '0');
|
|
error_reporting(E_ALL);
|
|
|
|
try {
|
|
$api = VisualLimsApiClient::getInstance();
|
|
|
|
$idCliente = isset($_GET['id_cliente']) ? (int)$_GET['id_cliente'] : 0;
|
|
$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 3;
|
|
$signedStatus = trim($_GET['signed_status'] ?? 'all');
|
|
|
|
if ($idCliente <= 0) {
|
|
throw new Exception("Parametro id_cliente mancante o non valido.");
|
|
}
|
|
|
|
/*
|
|
* Allowed limits only.
|
|
* This prevents risky wide queries on the live LIMS.
|
|
*/
|
|
$allowedLimits = [1, 3, 5, 10];
|
|
|
|
if (!in_array($limit, $allowedLimits, true)) {
|
|
$limit = 3;
|
|
}
|
|
|
|
/*
|
|
* Allowed signature filters.
|
|
*/
|
|
$allowedSignedStatuses = ['all', 'signed', 'not_signed'];
|
|
|
|
if (!in_array($signedStatus, $allowedSignedStatuses, true)) {
|
|
$signedStatus = 'all';
|
|
}
|
|
|
|
/*
|
|
* Base filter by customer.
|
|
* We already verified that Rapporto can expand Cliente and returns Cliente.IdCliente.
|
|
*/
|
|
$filters = [
|
|
"Cliente/IdCliente eq {$idCliente}"
|
|
];
|
|
|
|
if ($signedStatus === 'signed') {
|
|
$filters[] = "Firmato eq true";
|
|
}
|
|
|
|
if ($signedStatus === 'not_signed') {
|
|
$filters[] = "Firmato eq false";
|
|
}
|
|
|
|
$filter = implode(' and ', $filters);
|
|
|
|
/*
|
|
* Important:
|
|
* - $top limits the number of reports.
|
|
* - $orderby=Data desc gets the latest reports first.
|
|
* - $expand=RapportiFiles retrieves only the PDF file metadata, not the binary PDF.
|
|
*/
|
|
$params = [
|
|
'$filter' => $filter,
|
|
'$select' => 'IdRapporto,CodiceRapporto,Data,Versione,Firmato,DataStampa',
|
|
'$expand' => 'RapportiFiles',
|
|
'$orderby' => 'Data desc',
|
|
'$top' => $limit
|
|
];
|
|
|
|
$endpoint = "Rapporto?" . http_build_query($params);
|
|
|
|
file_put_contents(
|
|
__DIR__ . '/last_rapporti_cliente_endpoint.txt',
|
|
'[' . date('Y-m-d H:i:s') . '] ' . $endpoint . PHP_EOL,
|
|
FILE_APPEND
|
|
);
|
|
|
|
$data = $api->get($endpoint);
|
|
|
|
$items = $data['value'] ?? [];
|
|
|
|
if (!is_array($items)) {
|
|
$items = [];
|
|
}
|
|
|
|
$reports = [];
|
|
|
|
foreach ($items as $item) {
|
|
$rapportiFiles = $item['RapportiFiles'] ?? [];
|
|
$pdfFiles = [];
|
|
|
|
if (is_array($rapportiFiles)) {
|
|
foreach ($rapportiFiles as $file) {
|
|
$idRapportoFile = intval($file['IdRapportoFile'] ?? 0);
|
|
|
|
if ($idRapportoFile > 0) {
|
|
$pdfFiles[] = [
|
|
'id_rapporto_file' => $idRapportoFile,
|
|
'file_name' => $file['FileName'] ?? null,
|
|
'categoria' => $file['Categoria'] ?? null,
|
|
'tipo_rapporto' => $file['TipoRapporto'] ?? null,
|
|
'download_url' => "download_rapporto_pdf.php?id_rapporto_file={$idRapportoFile}"
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
$reports[] = [
|
|
'id_rapporto' => $item['IdRapporto'] ?? null,
|
|
'codice_rapporto' => $item['CodiceRapporto'] ?? null,
|
|
'data' => $item['Data'] ?? null,
|
|
'data_stampa' => $item['DataStampa'] ?? null,
|
|
'versione' => $item['Versione'] ?? null,
|
|
'firmato' => $item['Firmato'] ?? null,
|
|
'pdf_files' => $pdfFiles
|
|
];
|
|
}
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'id_cliente' => $idCliente,
|
|
'limit' => $limit,
|
|
'signed_status' => $signedStatus,
|
|
'endpoint' => $endpoint,
|
|
'count' => count($reports),
|
|
'reports' => $reports
|
|
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
} catch (Exception $e) {
|
|
file_put_contents(
|
|
__DIR__ . '/error_log.txt',
|
|
date('Y-m-d H:i:s') . ' - get_rapporti_cliente.php - ' . $e->getMessage() . PHP_EOL,
|
|
FILE_APPEND
|
|
);
|
|
|
|
http_response_code(500);
|
|
|
|
echo json_encode([
|
|
'success' => false,
|
|
'error' => $e->getMessage()
|
|
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
|
}
|