query("SELECT id FROM operations"); $migratedOperations = $stmt->fetchAll(PDO::FETCH_COLUMN); if (empty($migratedOperations)) { echo "Aucune opération n'a été migrée. Veuillez d'abord migrer la table operations." . PHP_EOL; closeSshTunnel(); exit(1); } echo "Nombre d'opérations migrées : " . count($migratedOperations) . PHP_EOL; // Création de la liste des IDs d'opérations pour la requête IN $operationIds = implode(',', $migratedOperations); // Récupération des secteurs distincts liés aux opérations migrées $query = " SELECT DISTINCT ous.fk_operation, ous.fk_sector, s.libelle, s.sector, s.color FROM ope_users_sectors ous JOIN sectors s ON ous.fk_sector = s.rowid WHERE ous.fk_operation IN ($operationIds) AND ous.active = 1 AND s.active = 1 "; $stmt = $sourceDb->query($query); $sectors = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "Nombre de secteurs distincts à migrer : " . count($sectors) . PHP_EOL; // Préparation de la requête d'insertion $insertQuery = "INSERT INTO ope_sectors ( fk_operation, fk_old_sector, libelle, sector, color, created_at, fk_user_creat, updated_at, fk_user_modif, chk_active ) VALUES ( :fk_operation, :fk_old_sector, :libelle, :sector, :color, :created_at, :fk_user_creat, :updated_at, :fk_user_modif, :chk_active ) ON DUPLICATE KEY UPDATE libelle = VALUES(libelle), sector = VALUES(sector), color = VALUES(color), updated_at = VALUES(updated_at), fk_user_modif = VALUES(fk_user_modif)"; $insertStmt = $targetDb->prepare($insertQuery); // Compteurs $inserted = 0; $errors = 0; // Traitement de chaque secteur foreach ($sectors as $sector) { // Récupération des informations du secteur source $fkOperation = $sector['fk_operation']; $fkOldSector = $sector['fk_sector']; $libelle = $sector['libelle'] ?? ''; $sectorData = $sector['sector'] ?? ''; $color = $sector['color'] ?? '#4B77BE'; // Vérification si le secteur existe déjà pour cette opération $checkQuery = "SELECT id FROM ope_sectors WHERE fk_operation = :fk_operation AND fk_old_sector = :fk_old_sector"; $checkStmt = $targetDb->prepare($checkQuery); $checkStmt->execute([ 'fk_operation' => $fkOperation, 'fk_old_sector' => $fkOldSector ]); $exists = $checkStmt->fetch(PDO::FETCH_ASSOC); // Si le secteur existe déjà, passer au suivant if ($exists) { echo "Le secteur avec fk_operation=$fkOperation et fk_old_sector=$fkOldSector existe déjà. Mise à jour...\n"; } // Préparation des données pour l'insertion $sectorData = [ 'fk_operation' => $fkOperation, 'fk_old_sector' => $fkOldSector, 'libelle' => $libelle, 'sector' => $sectorData, 'color' => $color, 'created_at' => date('Y-m-d H:i:s'), 'fk_user_creat' => 1, // Utilisateur par défaut 'updated_at' => date('Y-m-d H:i:s'), 'fk_user_modif' => 1, // Utilisateur par défaut 'chk_active' => 1 ]; try { // Insertion dans la table cible $insertStmt->execute($sectorData); $inserted++; // Affichage du progrès if ($inserted % 10 === 0) { echo "Progression : $inserted secteurs migrés...\n"; } } catch (PDOException $e) { echo "Erreur lors de la migration du secteur (opération $fkOperation, secteur $fkOldSector) : " . $e->getMessage() . "\n"; $errors++; } } echo "Migration terminée. $inserted secteurs migrés avec succès. $errors erreurs rencontrées." . PHP_EOL; // Fermer le tunnel SSH closeSshTunnel(); } catch (Exception $e) { echo "Erreur critique: " . $e->getMessage() . PHP_EOL; // Fermer le tunnel SSH en cas d'erreur closeSshTunnel(); exit(1); }