From 42c70e8c5a93bd980e97ae0ed29f3c459e26e69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr> Date: Wed, 4 May 2022 10:43:10 +0200 Subject: [PATCH] Fiabilisation des sauvegardes et de la migration v18 --- admin/migration/v18Divers.php | 50 ++++++++++++++++++++++++++++---- admin/migration/v18Plafonds.php | 30 ------------------- admin/migration/v18Statuts.php | 51 +++++++-------------------------- data/ddl_config.php | 1 + 4 files changed, 56 insertions(+), 76 deletions(-) diff --git a/admin/migration/v18Divers.php b/admin/migration/v18Divers.php index d4b2d05d73..6a5f81bf99 100644 --- a/admin/migration/v18Divers.php +++ b/admin/migration/v18Divers.php @@ -27,25 +27,65 @@ class v18Divers extends AbstractMigration $c = $this->manager->getOseAdmin()->getConsole(); try { - $c->msg('Suppression de la contrainte TYPE_INTERVENANT_CODE_UN en prévision de sa recréation'); - $bdd->exec("DELETE FROM AFFECTATION_RECHERCHE WHERE structure_id NOT IN (SELECT ID FROM STRUCTURE)"); + $c->msg('Coupure forcée de la synchronisation sur la table INTERVENANT'); + $bdd->exec("UPDATE IMPORT_TABLES SET SYNC_ENABLED = 0 WHERE TABLE_NAME = 'INTERVENANT'"); } catch (\Exception $e) { // rien à faire : la contrainte a déjà du être supprimée } + $this->sauvegardes(); + try { $c->msg('Suppression de la contrainte TYPE_INTERVENANT_CODE_UN en prévision de sa recréation'); - $bdd->exec("ALTER TABLE TYPE_INTERVENANT DROP CONSTRAINT TYPE_INTERVENANT_CODE_UN"); + $bdd->exec("DELETE FROM AFFECTATION_RECHERCHE WHERE structure_id NOT IN (SELECT ID FROM STRUCTURE)"); } catch (\Exception $e) { // rien à faire : la contrainte a déjà du être supprimée } try { - $c->msg('Coupure forcée de la synchronisation sur la table INTERVENANT'); - $bdd->exec("UPDATE IMPORT_TABLES SET SYNC_ENABLED = 0 WHERE TABLE_NAME = 'INTERVENANT'"); + $c->msg('Suppression de la contrainte TYPE_INTERVENANT_CODE_UN en prévision de sa recréation'); + $bdd->exec("ALTER TABLE TYPE_INTERVENANT DROP CONSTRAINT TYPE_INTERVENANT_CODE_UN"); } catch (\Exception $e) { // rien à faire : la contrainte a déjà du être supprimée } } + + + protected function sauvegardes() + { + $bdd = $this->manager->getBdd(); + $c = $this->manager->getOseAdmin()->getConsole(); + + $tables = [ + 'INTERVENANT' => 'SAVE_V18_INTERVENANT', + 'INTERVENANT_DOSSIER' => 'SAVE_V18_DOSSIER', + + 'TYPE_PIECE_JOINTE_STATUT' => 'SAVE_V18_TPJS', + 'TYPE_INTERVENTION_STATUT' => 'SAVE_V18_TIS', + + 'STATUT_INTERVENANT' => 'SAVE_V18_STATUT', + 'STATUT_PRIVILEGE' => 'SAVE_V18_STATUT_PRIVILEGE', + 'TYPE_AGREMENT_STATUT' => 'SAVE_V18_TA_STATUT', + 'DOSSIER_CHAMP_AUTRE_PAR_STATUT' => 'SAVE_V18_DOSSIER_AUTRE_STATUT', + 'STRUCTURE' => 'SAVE_V18_STRUCTURE', + 'FONCTION_REFERENTIEL' => 'SAVE_V18_REFERENTIEL', + 'PLAFOND_APPLICATION' => 'SAVE_V18_PLAFOND_APP', + 'PLAFOND' => 'SAVE_V18_PLAFOND', + ]; + + foreach ($tables as $table => $saveTable) { + if (!$this->manager->hasTable($table) || $this->manager->hasTable($saveTable)) { + unset($tables[$table]); + } + } + + $c->begin('Sauvegarde des anciennes données'); + foreach ($tables as $table => $saveTable) { + $c->msg('"' . $table . '" => "' . $saveTable . '".'); + $this->manager->sauvegarderTable($table, $saveTable); + } + $c->end(); + } + } \ No newline at end of file diff --git a/admin/migration/v18Plafonds.php b/admin/migration/v18Plafonds.php index f4a030e46d..633ac46b12 100644 --- a/admin/migration/v18Plafonds.php +++ b/admin/migration/v18Plafonds.php @@ -26,36 +26,6 @@ class v18Plafonds extends AbstractMigration $bdd = $this->manager->getBdd(); $c = $this->manager->getOseAdmin()->getConsole(); - if (empty($bdd->table()->get('SAVE_V18_STATUT'))) { - $this->manager->sauvegarderTable('STATUT_INTERVENANT', 'SAVE_V18_STATUT'); - $c->msg('Anciens statuts "STATUT_INTERVENANT" sauvegardés dans "SAVE_V18_STATUT".'); - } - - if (empty($bdd->table()->get('SAVE_V18_STRUCTURE'))) { - $this->manager->sauvegarderTable('STRUCTURE', 'SAVE_V18_STRUCTURE'); - $c->msg('Anciennes structures "STRUCTURE" sauvegardés dans "SAVE_V18_STRUCTURE".'); - } - - if (empty($bdd->table()->get('SAVE_V18_REFERENTIEL'))) { - $this->manager->sauvegarderTable('FONCTION_REFERENTIEL', 'SAVE_V18_REFERENTIEL'); - $c->msg('Anciennes fonctions référentielles "FONCTION_REFERENTIEL" sauvegardées dans "SAVE_V18_REFERENTIEL".'); - } - - if (empty($bdd->table()->get('SAVE_V18_PLAFOND_APP'))) { - $this->manager->sauvegarderTable('PLAFOND_APPLICATION', 'SAVE_V18_PLAFOND_APP'); - $c->msg('Anciens paramétrages des plafonds "PLAFOND_APPLICATION" sauvegardées dans "SAVE_V18_PLAFOND_APP".'); - } - - if (!empty($bdd->table()->get('PLAFOND_APPLICATION'))) { - $bdd->exec('DROP TABLE PLAFOND_APPLICATION'); - $c->msg('Suppression des anciens paramétrages de plafonds'); - } - - if (empty($bdd->table()->get('SAVE_V18_PLAFOND'))) { - $this->manager->sauvegarderTable('PLAFOND', 'SAVE_V18_PLAFOND'); - $c->msg('Anciens plafonds "PLAFOND" sauvegardées dans "SAVE_V18_PLAFOND".'); - } - if (!empty($bdd->table()->get('PLAFOND'))) { $bdd->exec('DROP TABLE PLAFOND CASCADE CONSTRAINTS'); $c->msg('Suppression des anciens plafonds'); diff --git a/admin/migration/v18Statuts.php b/admin/migration/v18Statuts.php index dddf93970e..248de5091c 100644 --- a/admin/migration/v18Statuts.php +++ b/admin/migration/v18Statuts.php @@ -130,7 +130,7 @@ class v18Statuts extends AbstractMigration $c = $this->manager->getOseAdmin()->getConsole(); $c->begin('Préparation à la mise à jour des indicateurs'); - if (empty($bdd->table()->get('TYPE_INDICATEUR'))) { + if (!$this->manager->hasTable('TYPE_INDICATEUR')) { $bdd->exec('ALTER TABLE INDICATEUR ADD (TYPE_INDICATEUR_ID NUMBER)'); $bdd->exec('CREATE TABLE TYPE_INDICATEUR ( ID NUMBER NOT NULL ENABLE, @@ -152,27 +152,6 @@ class v18Statuts extends AbstractMigration $c->begin('Mise à jour de la liste des statuts'); - if (empty($bdd->table()->get('SAVE_V18_STATUT'))) { - $this->manager->sauvegarderTable('STATUT_INTERVENANT', 'SAVE_V18_STATUT'); - $c->msg('Anciens statuts "STATUT_INTERVENANT" sauvegardés dans "SAVE_V18_STATUT".'); - } - - if (empty($bdd->table()->get('SAVE_V18_STATUT_PRIVILEGE'))) { - $this->manager->sauvegarderTable('STATUT_PRIVILEGE', 'SAVE_V18_STATUT_PRIVILEGE'); - $c->msg('Anciens statuts "STATUT_PRIVILEGE" sauvegardés dans "SAVE_V18_STATUT_PRIVILEGE".'); - } - - if (empty($bdd->table()->get('SAVE_V18_TA_STATUT'))) { - $this->manager->sauvegarderTable('TYPE_AGREMENT_STATUT', 'SAVE_V18_TA_STATUT'); - $c->msg('Anciens statuts "TYPE_AGREMENT_STATUT" sauvegardés dans "SAVE_V18_TA_STATUT".'); - } - - if (!$this->manager->hasTable('SAVE_V18_DOSSIER_AUTRE_STATUT') && $this->manager->hasTable('DOSSIER_CHAMP_AUTRE_PAR_STATUT')) { - $this->manager->sauvegarderTable('DOSSIER_CHAMP_AUTRE_PAR_STATUT', 'SAVE_V18_DOSSIER_AUTRE_STATUT'); - $c->msg('Anciens statuts "DOSSIER_CHAMP_AUTRE_PAR_STATUT" sauvegardés dans "SAVE_V18_DOSSIER_AUTRE_STATUT".'); - } - - /* Modifications préalables à faire en BDD */ if (empty($bdd->sequence()->get('STATUT_ID_SEQ'))) { $bdd->exec('CREATE SEQUENCE STATUT_ID_SEQ INCREMENT BY 1 MINVALUE 1 NOCACHE'); @@ -317,7 +296,7 @@ class v18Statuts extends AbstractMigration SELECT max(si.id) id, i.annee_id FROM - intervenant i + SAVE_V18_INTERVENANT i JOIN SAVE_V18_STATUT si ON si.id = i.statut_id GROUP BY si.code, i.annee_id @@ -492,7 +471,7 @@ class v18Statuts extends AbstractMigration osi.id old_statut_id, nsi.id new_statut_id FROM - intervenant i + SAVE_V18_INTERVENANT i JOIN SAVE_V18_STATUT osi ON osi.id = i.statut_id LEFT JOIN statut nsi ON nsi.code = osi.code AND nsi.annee_id = i.annee_id WHERE @@ -542,7 +521,7 @@ class v18Statuts extends AbstractMigration osi.id old_statut_id, nsi.id new_statut_id FROM - intervenant_dossier d + SAVE_V18_DOSSIER d JOIN intervenant i ON i.id = d.intervenant_id JOIN SAVE_V18_STATUT osi ON osi.id = d.statut_id LEFT JOIN statut nsi ON nsi.code = osi.code AND nsi.annee_id = i.annee_id @@ -581,14 +560,6 @@ class v18Statuts extends AbstractMigration $c->begin('Application des nouveaux statuts aux paramétrages de PJ'); - if (empty($bdd->table()->get('SAVE_V18_TPJS'))) { - $this->manager->sauvegarderTable('TYPE_PIECE_JOINTE_STATUT', 'SAVE_V18_TPJS'); - $c->msg('Anciens paramètres "TYPE_PIECE_JOINTE_STATUT" sauvegardés dans "SAVE_V18_TPJS".'); - - $bdd->exec('DELETE FROM TYPE_PIECE_JOINTE_STATUT'); - $c->msg("Vidage de la table \"TYPE_PIECE_JOINTE_STATUT\" avant d'insérer les nouveaux paramètres"); - } - try { $bdd->exec("ALTER TABLE TYPE_PIECE_JOINTE_STATUT DROP CONSTRAINT TPJS_STATUT_INTERVENANT_FK"); } catch (\Exception $e) { @@ -598,6 +569,9 @@ class v18Statuts extends AbstractMigration /* Modifications au niveau de la table TPJS */ $ddl = $bdd->table()->get('TYPE_PIECE_JOINTE_STATUT')['TYPE_PIECE_JOINTE_STATUT']; if (!isset($ddl['columns']['ANNEE_ID'])) { + $bdd->exec('DELETE FROM TYPE_PIECE_JOINTE_STATUT'); + $c->msg("Vidage de la table \"TYPE_PIECE_JOINTE_STATUT\" avant d'insérer les nouveaux paramètres"); + $bdd->exec("ALTER TABLE TYPE_PIECE_JOINTE_STATUT ADD(ANNEE_ID NUMBER)"); } if (!isset($ddl['columns']['NUM_REGLE'])) { @@ -675,17 +649,12 @@ class v18Statuts extends AbstractMigration $c->begin('Application des nouveaux statuts aux paramétrages des types d\'intervention'); - if (empty($bdd->table()->get('SAVE_V18_TIS'))) { - $this->manager->sauvegarderTable('TYPE_INTERVENTION_STATUT', 'SAVE_V18_TIS'); - $c->msg('Anciens paramètres "TYPE_INTERVENTION_STATUT" sauvegardés dans "SAVE_V18_TIS".'); - - $bdd->exec('DELETE FROM TYPE_INTERVENTION_STATUT'); - $c->msg("Vidage de la table \"TYPE_INTERVENTION_STATUT\" avant d'insérer les nouveaux paramètres"); - } - /* Modifications au niveau de la table TIS */ $ddl = $bdd->table()->get('TYPE_INTERVENTION_STATUT')['TYPE_INTERVENTION_STATUT']; if (!isset($ddl['columns']['ANNEE_ID'])) { + $bdd->exec('DELETE FROM TYPE_INTERVENTION_STATUT'); + $c->msg("Vidage de la table \"TYPE_INTERVENTION_STATUT\" avant d'insérer les nouveaux paramètres"); + $bdd->exec("ALTER TABLE TYPE_INTERVENTION_STATUT ADD(ANNEE_ID NUMBER)"); } if (!isset($ddl['columns']['STATUT_ID'])) { diff --git a/data/ddl_config.php b/data/ddl_config.php index 2f103d7f37..ad938b88ab 100644 --- a/data/ddl_config.php +++ b/data/ddl_config.php @@ -11,6 +11,7 @@ return [ 'TBL_SERVICE_SAISIE', 'STATUT_PRIVILEGE', 'TYPE_AGREMENT_STATUT', + 'PLAFOND_APPLICATION', ], ], 'materialized-view' => [ -- GitLab