export to lims
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
<?php
|
||||
// File: export_to_lims.php
|
||||
ini_set('display_errors', '0');
|
||||
error_reporting(E_ALL);
|
||||
ini_set('log_errors', 1);
|
||||
ini_set('error_log', __DIR__ . '/logsapi/export_lims_error.log');
|
||||
|
||||
// Includi il file con la connessione al database
|
||||
require_once __DIR__ . '/include/headscript.php';
|
||||
require_once dirname(__DIR__, 2) . '/vendor/autoload.php';
|
||||
require_once __DIR__ . '/class/VisualLimsApiClient.class.php';
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
try {
|
||||
// Verifica che la richiesta sia POST e contenga iddatadb
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['iddatadb'])) {
|
||||
throw new Exception('Richiesta non valida: iddatadb mancante');
|
||||
}
|
||||
|
||||
$iddatadb = (int)$_POST['iddatadb'];
|
||||
|
||||
// Crea la cartella logsapi se non esiste
|
||||
$logDir = __DIR__ . '/logsapi';
|
||||
if (!is_dir($logDir)) {
|
||||
mkdir($logDir, 0755, true);
|
||||
}
|
||||
|
||||
// Ottieni connessione al database
|
||||
$db = DBHandlerSelect::getInstance();
|
||||
$pdo = $db->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;
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user