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 $extraFields = []): array { error_log("[SIMULATE] POST multipart {$endpoint} file={$fileName}"); return ['simulated' => true, 'file' => $fileName]; } }