Commit dcf7b6a7 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Améliorations du système de migration de données.

Gestion du changement dans les codes de structures de l'infra formule
parent 9f44bda8
Loading
Loading
Loading
Loading
+46 −9
Original line number Diff line number Diff line
<?php

//$bdd    = new \BddAdmin\Bdd(Config::get('bdds', 'dev-local'));
//$schema = new \BddAdmin\Schema($bdd);
if (!$oa->bddIsOk($msg)) {
    $c->printDie("Impossible d'accéder à la base de données : $msg!"
        . "\nVeuillez contrôler vos paramètres de configuration s'il vous plaît, avant de refaire une tentative de MAJ de la base de données (./bin/ose update-bdd).");
}

$bdd    = $oa->getBdd();
$schema = new \BddAdmin\Schema($bdd);

$c->println("\nMise à jour de la base de données", $c::COLOR_LIGHT_CYAN);

$ts = $c->exec("git branch", false);
$c->println("\n" . 'Mise à jour des définitions de la base de données', $c::COLOR_LIGHT_PURPLE);

$branch = null;
foreach ($ts as $t) {
    if (0 === strpos($t, '*')) {
        $branch = trim(substr($t, 1));
        break;
/* Récupération du schéma de référence */
$ref = $schema->loadFromFile($oa->getOseDir() . 'data/ddl.php');

/* Construction de la config de DDL pour filtrer */
$ddlConfig = require $oa->getOseDir() . 'data/ddl_config.php';
foreach ($ref as $ddlClass => $objects) {
    foreach ($objects as $object => $objectDdl) {
        $ddlConfig[$ddlClass]['includes'][] = $object;
    }
}

var_dump($branch);
 No newline at end of file
$mm = new MigrationManager($oa, $schema);
$mm->initTablesDef($ref, $ddlConfig);
$mm->migration('pre');

/* Mise en place du logging en mode console */
$scl          = new \BddAdmin\SchemaConsoleLogger();
$scl->console = $c;
$schema->setLogger($scl);

/* Mise à jour de la BDD */
//$schema->alter($ref, $ddlConfig, true);

/* Mise à jour des séquences */
$c->println("\n" . 'Mise à jour des séquences', $c::COLOR_LIGHT_PURPLE);
//$schema->majSequences($ref);

$c->println("\n" . 'Contrôle et mise à jour des données', $c::COLOR_LIGHT_PURPLE);
$dataGen = new DataGen($oa);
//$dataGen->update();

$c->println('');
$mm->migration('post');

$c->println("\n" . 'Mise à jour du point d\'indice pour les HETD', $c::COLOR_LIGHT_PURPLE);
//$bdd->exec('BEGIN OSE_FORMULE.UPDATE_ANNEE_TAUX_HETD; END;');

// Néttoyage des caches
//$oa->run('clear-cache', false);
 No newline at end of file
+5 −4
Original line number Diff line number Diff line
@@ -10,14 +10,11 @@ $schema = new \BddAdmin\Schema($bdd);

$c->println("\nMise à jour de la base de données", $c::COLOR_LIGHT_CYAN);

$oa->migration('pre');

$c->println("\n" . 'Mise à jour des définitions de la base de données', $c::COLOR_LIGHT_PURPLE);

/* Récupération du schéma de référence */
$ref = $schema->loadFromFile($oa->getOseDir() . 'data/ddl.php');


/* Construction de la config de DDL pour filtrer */
$ddlConfig = require $oa->getOseDir() . 'data/ddl_config.php';
foreach ($ref as $ddlClass => $objects) {
@@ -26,6 +23,10 @@ foreach ($ref as $ddlClass => $objects) {
    }
}

$mm = new MigrationManager($oa, $schema);
$mm->initTablesDef($ref, $ddlConfig);
$mm->migration('pre');

/* Mise en place du logging en mode console */
$scl          = new \BddAdmin\SchemaConsoleLogger();
$scl->console = $c;
@@ -43,7 +44,7 @@ $dataGen = new DataGen($oa);
$dataGen->update();

$c->println('');
$oa->migration('post');
$mm->migration('post');

$c->println("\n" . 'Mise à jour du point d\'indice pour les HETD', $c::COLOR_LIGHT_PURPLE);
$bdd->exec('BEGIN OSE_FORMULE.UPDATE_ANNEE_TAUX_HETD; END;');
+13 −9
Original line number Diff line number Diff line
@@ -19,17 +19,19 @@ class DepartementsInitCodes extends AbstractMigration

    public function utile(): bool
    {
        $bdd = $this->oseAdmin->getBdd();
        $oa = $this->manager->getOseAdmin();

        $bdd = $oa->getBdd();

        $sql     = "
        SELECT 
            count(*) nbvides 
            count(*) NBVIDES 
        FROM 
            departement 
            DEPARTEMENT 
        WHERE 
            code IS NULL AND source_code IS NOT NULL
            AND source_id=:source";
        $res     = $bdd->select($sql, ['source' => $this->oseAdmin->getSourceOseId()], \BddAdmin\Bdd::FETCH_ONE);
            CODE IS NULL AND SOURCE_CODE IS NOT NULL
            AND SOURCE_ID=:source";
        $res     = $bdd->select($sql, ['source' => $oa->getSourceOseId()], \BddAdmin\Bdd::FETCH_ONE);
        $nbvides = (int)$res['NBVIDES'];

        return $nbvides > 0;
@@ -37,10 +39,12 @@ class DepartementsInitCodes extends AbstractMigration



    public function action()
    public function action(string $contexte)
    {
        $sql = "UPDATE departement SET code = source_code WHERE code IS NULL AND source_id= :source";
        $this->oseAdmin->getBdd()->exec($sql, ['source' => $this->oseAdmin->getSourceOseId()]);
        $oa = $this->manager->getOseAdmin();

        $sql = "UPDATE DEPARTEMENT SET CODE = SOURCE_CODE WHERE CODE IS NULL AND SOURCE_ID= :source";
        $oa->getBdd()->exec($sql, ['source' => $oa->getSourceOseId()]);
    }

}
 No newline at end of file
+84 −0
Original line number Diff line number Diff line
<?php





class FormuleMigrationIntervenantStructuresTestVersCode extends AbstractMigration
{
    protected $contexte = self::CONTEXTE_ALL;

    protected $data;



    public function description(): string
    {
        return "Prise en compte des nouveaux codes structures sur FORMULE_TEST_INTERVENANT";
    }



    public function utile(): bool
    {
        return
            $this->manager->hasOldColumn('FORMULE_TEST_INTERVENANT', 'STRUCTURE_TEST_ID')
            &&
            (
                $this->manager->hasNewColumn('FORMULE_TEST_INTERVENANT', 'STRUCTURE_CODE')
                ||
                $this->manager->hasColumn('FORMULE_TEST_INTERVENANT', 'STRUCTURE_CODE')
            );
    }



    public function action(string $contexte)
    {
        switch ($contexte) {
            case self::CONTEXTE_PRE:
                $this->avant();
            break;
            case self::CONTEXTE_POST:
                $this->apres();
            break;
        }
    }



    public function avant()
    {
        $this->manager->sauvegarderTable('FORMULE_TEST_STRUCTURE', 'FORMULE_TEST_STRUCTURE__MIGR_I');
        $this->manager->sauvegarderTable('FORMULE_TEST_INTERVENANT', 'FORMULE_TEST_INTERVENANT__MIGR');
    }



    public function apres()
    {
        $bdd = $this->manager->getOseAdmin()->getBdd();

        $sql  = "
        SELECT 
          I.ID ID,
          S.LIBELLE STRUCTURE_CODE
        FROM 
          FORMULE_TEST_INTERVENANT__MIGR I 
          JOIN FORMULE_TEST_STRUCTURE__MIGR_I S ON S.ID = I.STRUCTURE_TEST_ID
        WHERE 
          I.STRUCTURE_CODE IS NULL
        ";
        $data = $bdd->select($sql);
        foreach ($data as $d) {
            $bdd->getTable('FORMULE_TEST_INTERVENANT')->update(
                ['STRUCTURE_CODE' => $d['STRUCTURE_CODE']],
                ['ID' => $d['ID']],
                );
        }

        $this->manager->supprimerSauvegarde('FORMULE_TEST_INTERVENANT__MIGR');
        $this->manager->supprimerSauvegarde('FORMULE_TEST_STRUCTURE__MIGR_I');
    }

}
 No newline at end of file
+103 −0
Original line number Diff line number Diff line
<?php





class FormuleMigrationVolumeHoraireStructuresTestVersCode extends AbstractMigration
{
    protected $contexte = self::CONTEXTE_ALL;

    protected $data;



    public function description(): string
    {
        return "Prise en compte des nouveaux codes structures sur FORMULE_TEST_VOLUME_HORAIRE";
    }



    public function utile(): bool
    {
        return
            //$this->manager->hasOldColumn('FORMULE_TEST_VOLUME_HORAIRE', 'STRUCTURE_TEST_ID')
            //&&
            (
                $this->manager->hasNewColumn('FORMULE_TEST_VOLUME_HORAIRE', 'STRUCTURE_CODE')
                ||
                $this->manager->hasColumn('FORMULE_TEST_VOLUME_HORAIRE', 'STRUCTURE_CODE')
            );
    }



    public function action(string $contexte)
    {
        switch ($contexte) {
            case self::CONTEXTE_PRE:
                $this->avant();
            break;
            case self::CONTEXTE_POST:
                $this->apres();
            break;
        }
    }



    public function avant()
    {
        $this->manager->sauvegarderTable('FORMULE_TEST_STRUCTURE', 'FORMULE_TEST_STRUCTURE__MIGR_V');
        $this->manager->sauvegarderTable('FORMULE_TEST_VOLUME_HORAIRE', 'FORMULE_TEST_VH__MIGR');
    }



    public function apres()
    {
        $bdd = $this->manager->getOseAdmin()->getBdd();

        $sql  = "
        SELECT 
          V.ID ID,
          S.LIBELLE STRUCTURE_CODE,
          S.UNIVERSITE,
          V.PARAM_1,
          F.PACKAGE_NAME
        FROM 
          FORMULE_TEST_VH__MIGR V 
          JOIN FORMULE_TEST_STRUCTURE__MIGR_V S ON S.ID = V.STRUCTURE_TEST_ID
          JOIN FORMULE_TEST_INTERVENANT FTI ON FTI.ID = V.INTERVENANT_TEST_ID
          JOIN FORMULE F ON F.ID = FTI.FORMULE_ID
        WHERE 
          V.STRUCTURE_CODE IS NULL
        ";
        $data = $bdd->select($sql);
        foreach ($data as $d) {
            $params = ['STRUCTURE_CODE' => $d['STRUCTURE_CODE']];
            if ($d['UNIVERSITE'] == 1) {
                $params['STRUCTURE_CODE'] = '__UNIV__';
            }
            if ($d['PACKAGE_NAME'] == 'FORMULE_LYON2') {
                $param1 = strtoupper($d['PARAM_1']);
                if ($param1 == 'D4DAC10000') $params['STRUCTURE_CODE'] = $param1;
            } elseif ($d['PACKAGE_NAME'] == 'FORMULE_NANTERRE') {
                $param1 = strtoupper($d['PARAM_1']);
                if ($param1 == 'KE8' || $param1 == 'UP10') {
                    $params['STRUCTURE_CODE'] = $param1;
                    $params['PARAM_1']        = null;
                }
            }
            $bdd->getTable('FORMULE_TEST_VOLUME_HORAIRE')->update(
                $params,
                ['ID' => $d['ID']],
                );
        }

        $this->manager->supprimerSauvegarde('FORMULE_TEST_VH__MIGR');
        $this->manager->supprimerSauvegarde('FORMULE_TEST_STRUCTURE__MIGR_V');
    }

}
 No newline at end of file
Loading