getConnection(); // Simula idcommessaweb per il test (sostituire con risposta API nel flusso reale) $idcommessaweb = 10176; // Fittizio per il test // Salva idcommessaweb in datadb (simulazione per il test) $updateStmt = $pdo->prepare("UPDATE datadb SET idcommessaweb = :idcommessaweb WHERE iddatadb = :iddatadb"); $updateStmt->execute(['idcommessaweb' => $idcommessaweb, 'iddatadb' => $iddatadb]); // Step 1: Creazione payload per CommessaWeb $queryCommessa = " SELECT d.iddatadb, e.idclient AS Cliente, e.idschema AS SchemaCustomField FROM datadb d LEFT JOIN excel_templates e ON d.templateid = e.id WHERE d.iddatadb = :iddatadb "; $stmtCommessa = $pdo->prepare($queryCommessa); $stmtCommessa->execute(['iddatadb' => $iddatadb]); $recordCommessa = $stmtCommessa->fetch(PDO::FETCH_ASSOC); if (!$recordCommessa) { throw new Exception("Nessun record trovato per iddatadb: {$iddatadb}"); } // Payload per creazione CommessaWeb $payloadCommessa = [ 'Cliente' => (int)$recordCommessa['Cliente'], 'SchemaCustomField' => (int)$recordCommessa['SchemaCustomField'], 'Richiedente' => null, 'Descrizione' => 'example' ]; // Salva il payload di creazione CommessaWeb $outputFileCommessa = $logDir . "/commessaweb_create_{$iddatadb}.json"; file_put_contents($outputFileCommessa, json_encode($payloadCommessa, JSON_PRETTY_PRINT)); // Step 2: Creazione payload per campi custom (CommesseCustomFields) $queryCustomFields = " SELECT tm.field_id AS IdCommesseCustomFields, idd.field_value AS Valore FROM import_data_details idd JOIN template_mapping tm ON idd.mapping_id = tm.id WHERE idd.id = :iddatadb "; $stmtCustomFields = $pdo->prepare($queryCustomFields); $stmtCustomFields->execute(['iddatadb' => $iddatadb]); $customFields = $stmtCustomFields->fetchAll(PDO::FETCH_ASSOC); // Costruisci l'array CommesseCustomFields $commesseCustomFields = []; foreach ($customFields as $field) { $commesseCustomFields[] = [ 'IdCommesseCustomFields' => (int)$field['IdCommesseCustomFields'], 'Valore' => $field['Valore'] ?? '' ]; } // Payload per aggiornamento campi custom $payloadCustomFields = [ 'CommesseCustomFields' => $commesseCustomFields ]; // Salva il payload dei campi custom $outputFileCustomFields = $logDir . "/commessaweb_customfields_{$iddatadb}.json"; file_put_contents($outputFileCustomFields, json_encode($payloadCustomFields, JSON_PRETTY_PRINT)); // Step 3: Creazione payload per Campioni (da identification_parts) $queryCampioni = " SELECT part_number, idmatrice AS Matrice, part_description AS NoteWeb FROM identification_parts WHERE iddatadb = :iddatadb "; $stmtCampioni = $pdo->prepare($queryCampioni); $stmtCampioni->execute(['iddatadb' => $iddatadb]); $campioni = $stmtCampioni->fetchAll(PDO::FETCH_ASSOC); $payloadsCampioni = []; foreach ($campioni as $campione) { $payloadCampione = [ 'Commessa' => $idcommessaweb, // Usa idcommessaweb simulato 'Matrice' => (int)$campione['Matrice'], 'SottoMatrice' => null, 'SchemaCustomField' => 1, 'NoteWeb' => $campione['NoteWeb'] ?? '' ]; // Salva il payload del campione $outputFileCampione = $logDir . "/campione_{$iddatadb}_{$campione['part_number']}.json"; file_put_contents($outputFileCampione, json_encode($payloadCampione, JSON_PRETTY_PRINT)); $payloadsCampioni[] = $payloadCampione; } // Step 4: Creazione payload per InviaCommessa $payloadInviaCommessa = []; // Corpo vuoto, come tipico per azioni OData $outputFileInviaCommessa = $logDir . "/commessaweb_invia_{$iddatadb}.json"; file_put_contents($outputFileInviaCommessa, json_encode($payloadInviaCommessa, JSON_PRETTY_PRINT)); // Aggiorna lo status a 'l' (To LIMS) $updateStmt = $pdo->prepare("UPDATE datadb SET status = 'l' WHERE iddatadb = :iddatadb"); $updateStmt->execute(['iddatadb' => $iddatadb]); // Risposta di successo echo json_encode([ 'success' => true, 'message' => "Payload generati e salvati in {$outputFileCommessa}, {$outputFileCustomFields}, file campioni e {$outputFileInviaCommessa}", 'idcommessaweb' => $idcommessaweb, 'payload_commessa' => $payloadCommessa, 'payload_customfields' => $payloadCustomFields, 'payload_campioni' => $payloadsCampioni, 'payload_invia_commessa' => $payloadInviaCommessa ]); } catch (Exception $e) { // Log dell'errore file_put_contents($logDir . '/export_lims_error.log', date('Y-m-d H:i:s') . ' - ' . $e->getMessage() . PHP_EOL, FILE_APPEND); http_response_code(500); echo json_encode([ 'success' => false, 'message' => 'Errore: ' . $e->getMessage() ]); } /* Flusso reale (commentato, da attivare quando pronto) try { $apiClient = VisualLimsApiClient::getInstance(); // Step 1: Crea CommessaWeb $response = $apiClient->post('/api/odata/CommessaWeb', $payloadCommessa); if ($response['success'] && isset($response['CommessaId'])) { $idcommessaweb = $response['CommessaId']; // Salva idcommessaweb in datadb $updateStmt = $pdo->prepare("UPDATE datadb SET idcommessaweb = :idcommessaweb WHERE iddatadb = :iddatadb"); $updateStmt->execute(['idcommessaweb' => $idcommessaweb, 'iddatadb' => $iddatadb]); } else { throw new Exception('Errore nella creazione della CommessaWeb: ' . json_encode($response)); } // Step 2: Aggiorna CommesseCustomFields $apiClient->patch("/api/odata/CommessaWeb({$idcommessaweb})", $payloadCustomFields); // Step 3: Crea Campioni foreach ($payloadsCampioni as $payloadCampione) { $apiClient->post('/api/odata/Campione', $payloadCampione); } // Step 4: Invia Commessa $apiClient->post("/api/odata/CommessaWeb({$idcommessaweb})/InviaCommessa", $payloadInviaCommessa); // (Opzionale) Recupera il numero commessaweb con una GET $commessaData = $apiClient->get("/api/odata/CommessaWeb({$idcommessaweb})"); $commessaweb = $commessaData['Numero'] ?? ''; // Da confermare il nome del campo if ($commessaweb) { $updateStmt = $pdo->prepare("UPDATE datadb SET commessaweb = :commessaweb WHERE iddatadb = :iddatadb"); $updateStmt->execute(['commessaweb' => $commessaweb, 'iddatadb' => $iddatadb]); } } catch (Exception $e) { file_put_contents($logDir . '/export_lims_error.log', date('Y-m-d H:i:s') . ' - Flusso reale fallito: ' . $e->getMessage() . PHP_EOL, FILE_APPEND); throw $e; } */