Commit db3e37ae authored by joriot221's avatar joriot221
Browse files

Merge branch 'master' into FJ_Date_Modif

parents 11274d10 59a0fef6
Loading
Loading
Loading
Loading
+113 −1
Changes for admin/migration/v18Divers.php: 113 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ class v18Divers extends AbstractMigration

    public function utile(): bool
    {
        return $this->manager->hasNew('table', 'PLAFOND_PERIMETRE');
        return true;
    }


@@ -31,6 +31,10 @@ class v18Divers extends AbstractMigration
            $c->printDie('Attention : vous devez d\'abord mettre à jour en version 17.3 AVANT de mettre à jour en version 18');
        }

        if (!$this->checkDoublons()) {
            $c->printDie('Attention : des doublons ont été trouvés dans vos intervenants. Merci de purger d\'abord votre base de données, puis de relancer ensuite la procédure de mise à jour.');
        }

        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'");
@@ -93,4 +97,112 @@ class v18Divers extends AbstractMigration
        $c->end();
    }



    public function checkDoublons(): bool
    {
        $bdd = $this->manager->getBdd();
        $c   = $this->manager->getOseAdmin()->getConsole();

        $need = $this->manager->hasNew(\BddAdmin\Ddl\Ddl::UNIQUE_CONSTRAINT, 'INTERVENANT_CODE_UN')
            || $this->manager->hasNew(\BddAdmin\Ddl\Ddl::UNIQUE_CONSTRAINT, 'INTERVENANT_SOURCE_UN')
            || $this->manager->hasNew(\BddAdmin\Ddl\Ddl::UNIQUE_CONSTRAINT, 'INTERVENANT_UTIL_CODE_UN');

        if (!$need) return true;

        $sql = "SELECT
          COALESCE(t1.annee, t2.annee, t3.annee) annee,
          COALESCE(t1.nom, t2.nom, t3.nom) nom,
          COALESCE(t1.prenom, t2.prenom, t3.prenom) prenom,
          COALESCE(t1.statut, t2.statut, t3.statut) statut,
          CASE WHEN t1.cc IS NULL THEN '' ELSE t1.c || ' identiques' END CODE,
          CASE WHEN t2.cc IS NULL THEN '' ELSE t2.c || ' identiques' END SOURCE_CODE,
          CASE WHEN t3.cc IS NULL THEN '' ELSE t3.c || ' identiques' END UTILISATEUR_CODE
        FROM
          (
            SELECT
              i.ANNEE_ID annee, 
              i.nom_usuel nom,
              i.prenom prenom,
              si.libelle statut,
              'code_un' cc,
              count(*) c
            FROM
              intervenant i
              JOIN statut si ON si.id = i.statut_id
            WHERE
              i.HISTO_DESTRUCTION IS NULL
            GROUP BY
              i.CODE, 
              i.ANNEE_ID, 
              i.STATUT_ID,
              i.nom_usuel,
              i.prenom,
              si.libelle
            HAVING 
              COUNT(*) > 1
          ) t1

          FULL JOIN (
            SELECT
              i.ANNEE_ID annee,
              i.nom_usuel nom,
              i.prenom prenom,
              si.libelle statut,
              'source_un' cc,
              count(*) c
            FROM
              intervenant i
              JOIN statut si ON si.id = i.statut_id
            WHERE
              i.HISTO_DESTRUCTION IS NULL
            GROUP BY
              i.SOURCE_CODE, 
              i.ANNEE_ID, 
              i.STATUT_ID,
              i.nom_usuel,
              i.prenom,
              si.libelle
            HAVING COUNT(*) > 1
          ) t2 ON t2.nom = t1.nom AND t2.prenom = t1.prenom AND t2.statut = t1.statut

          FULL JOIN (
            SELECT
              i.ANNEE_ID annee,
              i.nom_usuel nom,
              i.prenom prenom,
              si.libelle statut,
              'util_code_un' cc,
              count(*) c
            FROM
              intervenant i
              JOIN statut si ON si.id = i.statut_id
            WHERE
              i.HISTO_DESTRUCTION IS NULL
              AND i.UTILISATEUR_CODE IS NOT NULL
            GROUP BY
              i.UTILISATEUR_CODE, 
              i.ANNEE_ID, 
              i.STATUT_ID,
              i.nom_usuel,
              i.prenom,
              si.libelle
            HAVING COUNT(*) > 1
          ) t3 ON t3.nom = COALESCE(t1.nom,t2.nom) AND t3.prenom = COALESCE(t1.prenom,t2.prenom) AND t3.statut = COALESCE(t1.statut,t2.statut)
        ";

        $res = $bdd->select($sql);

        if (!empty($res)) {
            $c->printArray($res);
            $c->println('Des intervenants ayant le même statut, le même source_code ou le même utilisateur_code pour la même année ont été trouvés.');
            $c->println('Merci de supprimer ou modifier manuellement les intervenants concernés AVANT de poursuivre la mise à jour.');
            $c->println('Une fois le traitement effectué, vous pourrez reprendre la mise à jour via la commande ./bin/ose update-bdd.');

            return false;
        } else {
            return true;
        }
    }

}
 No newline at end of file
+6 −1
Changes for admin/migration/v18Plafonds.php: 6 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -16,7 +16,12 @@ class v18Plafonds extends AbstractMigration

    public function utile(): bool
    {
        return $this->manager->hasNew('table', 'PLAFOND_PERIMETRE') || $this->manager->hasTable('SAVE_V18_PLAFOND');
        return $this->manager->hasNew('table', 'PLAFOND_PERIMETRE')
            && $this->manager->hasTable('SAVE_V18_PLAFOND')
            && $this->manager->hasTable('SAVE_V18_STRUCTURE')
            && $this->manager->hasTable('SAVE_V18_PLAFOND_APP')
            && $this->manager->hasTable('SAVE_V18_REFERENTIEL')
            && $this->manager->hasTable('SAVE_V18_STATUT');
    }


+1 −1
Changes for admin/migration/v18Privileges.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ class v18Privileges extends AbstractMigration

    public function utile(): bool
    {
        return $this->manager->hasTable('SAVE_V18_PRIVILEGE');
        return $this->manager->hasTable('SAVE_V18_PRIVILEGE') && $this->manager->hasTable('SAVE_V18_ROLE_PRIVILEGE');
    }


+7 −1
Changes for admin/migration/v18Statuts.php: 7 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -16,7 +16,13 @@ class v18Statuts extends AbstractMigration

    public function utile(): bool
    {
        return $this->manager->hasOld('table', 'STATUT_INTERVENANT');
        return $this->manager->hasOld('table', 'STATUT_INTERVENANT')
            && $this->manager->hasTable('SAVE_V18_STATUT')
            && $this->manager->hasTable('SAVE_V18_STATUT_PRIVILEGE')
            && $this->manager->hasTable('SAVE_V18_DOSSIER_AUTRE_STATUT')
            && $this->manager->hasTable('SAVE_V18_TA_STATUT')
            && $this->manager->hasTable('SAVE_V18_INTERVENANT')
            && $this->manager->hasTable('SAVE_V18_DOSSIER');
    }


+58 −0
Changes for admin/src/Console.php: 58 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -124,6 +124,64 @@ class Console implements \BddAdmin\Logger\LoggerInterface



    public function printArray(array $a)
    {
        $lengths = [];

        if (isset($a[0])) {
            $head = $a[0];
            foreach ($head as $k => $null) {
                $head[$k] = $k;
                if (($lengths[$k] ?? 0) < mb_strlen($k)) {
                    $lengths[$k] = mb_strlen($k);
                }
            }
        } else {
            $head = [];
        }

        foreach ($a as $l) {
            foreach ($l as $k => $v) {
                if (($lengths[$k] ?? 0) < mb_strlen($v)) {
                    $lengths[$k] = mb_strlen($v);
                }
            }
        }

        $this->println('');
        $this->print('|');
        foreach ($head as $k => $v) {
            $this->print(str_pad('', $lengths[$k], '-') . ' | ');
        }
        $this->println('');
        if ($head) {
            $this->print('|');
            foreach ($head as $k => $v) {
                $this->print(str_pad($v, $lengths[$k], ' ') . ' | ');
            }
            $this->println('');
            $this->print('|');
            foreach ($head as $k => $v) {
                $this->print(str_pad('', $lengths[$k], '-') . ' | ');
            }
            $this->println('');
        }
        foreach ($a as $n => $l) {
            $this->print('|');
            foreach ($l as $k => $v) {
                $this->print(str_pad($v, $lengths[$k], ' ') . ' | ');
            }
            $this->println('');
        }
        $this->print('|');
        foreach ($head as $k => $v) {
            $this->print(str_pad('', $lengths[$k], '-') . ' | ');
        }
        $this->println('');
    }



    public function msg($message, bool $rewrite = false)
    {
        if ($this->logCurrentLevel <= $this->logLevel) {