136 lines
5.2 KiB
PHP
136 lines
5.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Mock implementation of VisualLimsApiClient.
|
|
* Activated when SIMULATE_EXPORT_LIMS=true in .env.
|
|
* All HTTP calls are skipped; fake but structurally valid data is returned.
|
|
* Every simulated call is logged via error_log() with a [SIMULATE] prefix.
|
|
*/
|
|
class VisualLimsApiClientMock
|
|
{
|
|
private int $fakeCommessaId;
|
|
|
|
public function __construct()
|
|
{
|
|
// Stable fake ID for the lifetime of a single request
|
|
$this->fakeCommessaId = mt_rand(90001, 99999);
|
|
error_log("[SIMULATE] VisualLimsApiClientMock initialised (fakeCommessaId={$this->fakeCommessaId})");
|
|
}
|
|
|
|
public function get(string $endpoint): array
|
|
{
|
|
error_log("[SIMULATE] GET {$endpoint}");
|
|
|
|
// --- Fixed-field dropdown lists ---
|
|
|
|
if (str_starts_with($endpoint, 'MoltiplicatorePrezzi')) {
|
|
return ['value' => [
|
|
['IdMoltiplicatorePrezzo' => 1, 'Codice' => 'MP-01', 'Descrizione' => 'Standard (1x)'],
|
|
['IdMoltiplicatorePrezzo' => 2, 'Codice' => 'MP-02', 'Descrizione' => 'Urgente (1.5x)'],
|
|
['IdMoltiplicatorePrezzo' => 3, 'Codice' => 'MP-03', 'Descrizione' => 'Extra Urgente (2x)'],
|
|
]];
|
|
}
|
|
|
|
if (str_starts_with($endpoint, 'AnagraficaCertestObject')) {
|
|
return ['value' => [
|
|
['IdAnagrafica' => 1, 'Codice' => 'OBJ-01', 'NomeAnagrafica' => 'Articolo Tessile'],
|
|
['IdAnagrafica' => 2, 'Codice' => 'OBJ-02', 'NomeAnagrafica' => 'Componente Meccanico'],
|
|
['IdAnagrafica' => 3, 'Codice' => 'OBJ-03', 'NomeAnagrafica' => 'Materiale Plastico'],
|
|
]];
|
|
}
|
|
|
|
if (str_starts_with($endpoint, 'AnagraficaCertestService')) {
|
|
return ['value' => [
|
|
['IdAnagrafica' => 1, 'Codice' => 'SRV-01', 'NomeAnagrafica' => 'Analisi Chimica'],
|
|
['IdAnagrafica' => 2, 'Codice' => 'SRV-02', 'NomeAnagrafica' => 'Test Meccanico'],
|
|
['IdAnagrafica' => 3, 'Codice' => 'SRV-03', 'NomeAnagrafica' => 'Prova Ambientale'],
|
|
]];
|
|
}
|
|
|
|
// Cliente? list — get_clienti.php exits early in simulate mode, but guard here too
|
|
if (str_starts_with($endpoint, 'Cliente?')) {
|
|
return ['value' => []];
|
|
}
|
|
|
|
// Cliente(N)?$expand=Responsabili
|
|
if (str_starts_with($endpoint, 'Cliente(')) {
|
|
preg_match('/Cliente\((\d+)\)/', $endpoint, $m);
|
|
$clienteId = isset($m[1]) ? (int) $m[1] : 0;
|
|
return [
|
|
'IdCliente' => $clienteId,
|
|
'Responsabili' => [
|
|
['IdClienteResponsabile' => 1, 'Nominativo' => 'Marco Bianchi'],
|
|
['IdClienteResponsabile' => 2, 'Nominativo' => 'Giulia Ferrari'],
|
|
['IdClienteResponsabile' => 3, 'Nominativo' => 'Andrea Russo'],
|
|
],
|
|
];
|
|
}
|
|
|
|
// --- CustomField dropdown values (get_customfield_values.php) ---
|
|
|
|
if (str_starts_with($endpoint, 'CustomField(')) {
|
|
preg_match('/CustomField\((\d+)\)/', $endpoint, $m);
|
|
$fieldId = isset($m[1]) ? (int) $m[1] : 0;
|
|
return [
|
|
'CustomFieldsValues' => [
|
|
['IdCustomFieldsValue' => $fieldId * 10 + 1, 'Valore' => 'Opzione A'],
|
|
['IdCustomFieldsValue' => $fieldId * 10 + 2, 'Valore' => 'Opzione B'],
|
|
['IdCustomFieldsValue' => $fieldId * 10 + 3, 'Valore' => 'Opzione C'],
|
|
],
|
|
];
|
|
}
|
|
|
|
// --- CommessaWeb OData calls (STEP 7 GET + STEP 10 verification) ---
|
|
|
|
preg_match('/\((\d+)\)/', $endpoint, $m);
|
|
$id = isset($m[1]) ? (int) $m[1] : $this->fakeCommessaId;
|
|
|
|
return [
|
|
'IdCommessa' => $id,
|
|
'CodiceCommessa' => "SIM-{$id}",
|
|
'CommesseCustomFields' => [], // Empty → PATCH step is skipped correctly
|
|
];
|
|
}
|
|
|
|
public function post(string $endpoint, array $payload): array
|
|
{
|
|
error_log("[SIMULATE] POST {$endpoint} payload=" . json_encode($payload));
|
|
|
|
// CommessaWeb creation
|
|
if ($endpoint === 'CommessaWeb') {
|
|
return [
|
|
'IdCommessa' => $this->fakeCommessaId,
|
|
'CodiceCommessa' => "SIM-{$this->fakeCommessaId}",
|
|
'Richiedente' => $payload['Richiedente'] ?? '',
|
|
'Descrizione' => $payload['Descrizione'] ?? '',
|
|
];
|
|
}
|
|
|
|
// Campione creation
|
|
if ($endpoint === 'Campione') {
|
|
return [
|
|
'IdCampione' => mt_rand(10001, 19999),
|
|
'Commessa' => $payload['Commessa'] ?? null,
|
|
'Matrice' => $payload['Matrice'] ?? null,
|
|
];
|
|
}
|
|
|
|
// InviaCommessa / ImportaCommessa (currently commented out upstream)
|
|
return ['simulated' => true, 'endpoint' => $endpoint];
|
|
}
|
|
|
|
public function patch(string $endpoint, array $payload): array
|
|
{
|
|
error_log("[SIMULATE] PATCH {$endpoint} payload=" . json_encode($payload));
|
|
|
|
return [];
|
|
}
|
|
|
|
public function postMultipart(string $endpoint, string $filePath, string $fileName): array
|
|
{
|
|
error_log("[SIMULATE] POST multipart {$endpoint} file={$fileName}");
|
|
|
|
return ['simulated' => true, 'file' => $fileName];
|
|
}
|
|
}
|