diff --git a/admin/migration/v18Plafonds.php b/admin/migration/v18Plafonds.php
index 0b3f3f022f6ee37c4b17ec3889e6c359619157df..d8886b86adb5265f6435095000d07a4365f2d6e0 100644
--- a/admin/migration/v18Plafonds.php
+++ b/admin/migration/v18Plafonds.php
@@ -80,7 +80,9 @@ class v18Plafonds extends AbstractMigration
protected function after()
{
-
+ $this->migrationParamsStructure();
+ //$this->migrationParamsReferentiel();
+ //$this->migrationParamsStatut();
}
@@ -95,4 +97,427 @@ class v18Plafonds extends AbstractMigration
$c->end('Préparation à la migration des indicateurs terminée');
}
+
+
+ public function migrationParamsStructure()
+ {
+ $bdd = $this->manager->getBdd();
+ $c = $this->manager->getOseAdmin()->getConsole();
+
+ $sql = "
+ SELECT
+ s.id entite_id,
+ p.id plafond_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ s.plafond_referentiel heures,
+ pa.annee_debut_id annee_id,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_structure s
+ JOIN plafond p ON p.numero = 15
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ WHERE
+ s.histo_destruction IS NULL
+ AND s.plafond_referentiel IS NOT NULL
+ AND pa.plafond_etat_id > 1
+ ";
+
+
+ $data = [];
+ $qr = $bdd->select($sql);
+ foreach ($qr as $r) {
+ $anneeDebut = (int)$r['ANNEE_ID'];
+ $anneeFin = (int)$r['ANNEE_FIN_ID'];
+ if ($anneeFin == 0) $anneeFin = 2099;
+
+ $plafondId = (int)$r['PLAFOND_ID'];
+ $entiteId = (int)$r['ENTITE_ID'];
+
+ $etatPrevuId = $r['PLAFOND_ETAT_PREVU_ID'] ? (int)$r['PLAFOND_ETAT_PREVU_ID'] : null;
+ $etatRealiseId = $r['PLAFOND_ETAT_REALISE_ID'] ? (int)$r['PLAFOND_ETAT_REALISE_ID'] : null;
+ $heures = $r['HEURES'] ? (int)$r['HEURES'] : 0;
+
+ for ($a = $anneeDebut; $a <= $anneeFin; $a++) {
+ if (!isset($data[$a][$plafondId][$entiteId])) {
+ $data[$a][$plafondId][$entiteId] = [
+ 'saisie' => $a == $anneeDebut,
+ 'PLAFOND_ETAT_PREVU_ID' => 1, // désactivé
+ 'PLAFOND_ETAT_REALISE_ID' => 1, // désactivé
+ 'HEURES' => 0,
+ ];
+ }
+
+ if ($etatPrevuId !== null) {
+ $data[$a][$plafondId][$entiteId]['PLAFOND_ETAT_PREVU_ID'] = $etatPrevuId;
+ }
+
+ if ($etatRealiseId !== null) {
+ $data[$a][$plafondId][$entiteId]['PLAFOND_ETAT_REALISE_ID'] = $etatRealiseId;
+ }
+
+ if ($heures !== null) {
+ $data[$a][$plafondId][$entiteId]['HEURES'] = $heures;
+ }
+ }
+ }
+
+ /* On supprime ce qui a déjà été créé */
+ $sql = "SELECT * FROM PLAFOND_STRUCTURE WHERE histo_destruction IS NULL";
+ $des = $bdd->select($sql);
+ foreach ($des as $de) {
+ $a = (int)$de['ANNEE_ID'];
+ $p = (int)$de['PLAFOND_ID'];
+ $e = (int)$de['STRUCTURE_ID'];
+ unset($data[$a][$p][$e]);
+ }
+
+ $inserts = [];
+ foreach ($data as $anneeId => $data2) {
+ foreach ($data2 as $plafondId => $data3) {
+ foreach ($data3 as $entiteId => $d) {
+ $insert = $d;
+ $insert['ANNEE_ID'] = $anneeId;
+ $insert['PLAFOND_ID'] = $plafondId;
+ $insert['ENTITE_ID'] = $entiteId;
+ $insert['HISTO_CREATION'] = new \DateTime();
+ $insert['HISTO_CREATEUR_ID'] = $this->manager->getOseAdmin()->getOseAppliId();
+ $insert['HISTO_MODIFICATION'] = new \DateTime();
+ $insert['HISTO_MODIFICATEUR_ID'] = $d['saisie'] ? $this->manager->getOseAdmin()->getOseAppliId() : null;
+ unset($insert['saisie']);
+ $inserts[] = $insert;
+ }
+ }
+ }
+
+
+ $c->begin('Convertion des paramètres de plafonds pour les structures');
+ $count = count($inserts);
+ foreach ($inserts as $current => $insert) {
+ $insert['STRUCTURE_ID'] = $insert['ENTITE_ID'];
+ unset($insert['ENTITE_ID']);
+ $c->msg('Ajout du paramètre ' . ($current + 1) . ' sur ' . $count . ' ...', true);
+ $bdd->getTable('PLAFOND_STRUCTURE')->insert($insert);
+ }
+ $c->begin('Fin de la convertion des paramètres de plafonds pour les structures');
+ }
+
+
+
+ public function migrationParamsReferentiel()
+ {
+ $bdd = $this->manager->getBdd();
+ $c = $this->manager->getOseAdmin()->getConsole();
+
+ $sql = "
+ SELECT
+ r.id entite_id,
+ p.id plafond_id,
+ pa.annee_debut_id annee_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ r.plafond heures,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_referentiel r
+ JOIN plafond p ON p.numero = 17
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ LEFT JOIN plafond_referentiel pr ON pr.fonction_referentiel_id = r.id AND pr.plafond_id = p.id AND pr.annee_id = pa.annee_debut_id
+ WHERE
+ r.histo_destruction IS NULL
+ AND r.plafond IS NOT NULL
+ AND pr.id IS NULL
+ AND pa.plafond_etat_id > 1
+ ";
+ $data = [];
+ $qr = $bdd->select($sql);
+ foreach ($qr as $r) {
+ $anneeDebut = (int)$r['ANNEE_ID'];
+ $anneeFin = (int)$r['ANNEE_FIN_ID'];
+ if ($anneeFin == 0) $anneeFin = 2099;
+
+ $plafondId = (int)$r['PLAFOND_ID'];
+ $entiteId = (int)$r['ENTITE_ID'];
+
+ $etatPrevuId = $r['PLAFOND_ETAT_PREVU_ID'] ? (int)$r['PLAFOND_ETAT_PREVU_ID'] : null;
+ $etatRealiseId = $r['PLAFOND_ETAT_REALISE_ID'] ? (int)$r['PLAFOND_ETAT_REALISE_ID'] : null;
+ $heures = $r['HEURES'] ? (int)$r['HEURES'] : 0;
+
+ for ($a = $anneeDebut; $a <= $anneeFin; $a++) {
+ if (!isset($data[$a][$plafondId][$entiteId])) {
+ $data[$a][$plafondId][$entiteId] = [
+ 'saisie' => $a == $anneeDebut,
+ 'PLAFOND_ETAT_PREVU_ID' => 1, // désactivé
+ 'PLAFOND_ETAT_REALISE_ID' => 1, // désactivé
+ 'HEURES' => 0,
+ ];
+ }
+
+ if ($etatPrevuId !== null) {
+ $data[$a][$plafondId][$entiteId]['PLAFOND_ETAT_PREVU_ID'] = $etatPrevuId;
+ }
+
+ if ($etatRealiseId !== null) {
+ $data[$a][$plafondId][$entiteId]['PLAFOND_ETAT_REALISE_ID'] = $etatRealiseId;
+ }
+
+ if ($heures !== null) {
+ $data[$a][$plafondId][$entiteId]['HEURES'] = $heures;
+ }
+ }
+ }
+
+ /* On supprime ce qui a déjà été créé */
+ $sql = "SELECT * FROM PLAFOND_REFERENTIEL WHERE histo_destruction IS NULL";
+ $des = $bdd->select($sql);
+ foreach ($des as $de) {
+ $a = (int)$de['ANNEE_ID'];
+ $p = (int)$de['PLAFOND_ID'];
+ $e = (int)$de['FONCTION_REFERENTIEL_ID'];
+ unset($data[$a][$p][$e]);
+ }
+
+ $inserts = [];
+ foreach ($data as $anneeId => $data2) {
+ foreach ($data2 as $plafondId => $data3) {
+ foreach ($data3 as $entiteId => $d) {
+ $insert = $d;
+ $insert['ANNEE_ID'] = $anneeId;
+ $insert['PLAFOND_ID'] = $plafondId;
+ $insert['ENTITE_ID'] = $entiteId;
+ $insert['HISTO_CREATION'] = new \DateTime();
+ $insert['HISTO_CREATEUR_ID'] = $this->manager->getOseAdmin()->getOseAppliId();
+ $insert['HISTO_MODIFICATION'] = new \DateTime();
+ $insert['HISTO_MODIFICATEUR_ID'] = $d['saisie'] ? $this->manager->getOseAdmin()->getOseAppliId() : null;
+ unset($insert['saisie']);
+ $inserts[] = $insert;
+ }
+ }
+ }
+
+
+ $c->begin('Convertion des paramètres de plafonds pour les fonctions référentielles');
+ $count = count($inserts);
+ foreach ($inserts as $current => $insert) {
+ $insert['FONCTION_REFERENTIEL_ID'] = $insert['ENTITE_ID'];
+ unset($insert['ENTITE_ID']);
+ $c->msg('Ajout du paramètre ' . ($current + 1) . ' sur ' . $count . ' ...', true);
+ $bdd->getTable('PLAFOND_REFERENTIEL')->insert($insert);
+ }
+ $c->begin('Fin de la convertion des paramètres de plafonds pour les fonctions référentielles');
+ }
+
+
+
+ public function migrationParamsStatut()
+ {
+ $bdd = $this->manager->getBdd();
+ $c = $this->manager->getOseAdmin()->getConsole();
+
+ $sql = "
+ SELECT
+ s.code entite_id,
+ p.id plafond_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ os.plafond_hc_remu_fc heures,
+ pa.annee_debut_id annee_id,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_statut os
+ JOIN plafond p ON p.numero = 12
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN statut s ON s.code = os.code AND s.annee_id = pa.annee_debut_id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ LEFT JOIN plafond_statut ps ON ps.statut_id = s.id AND ps.plafond_id = p.id AND ps.annee_id = pa.annee_debut_id
+ WHERE
+ os.histo_destruction IS NULL
+ AND os.plafond_hc_remu_fc IS NOT NULL
+ AND ps.id IS NULL
+ AND pa.plafond_etat_id > 1
+
+ UNION ALL
+
+ SELECT
+ s.code entite_id,
+ p.id plafond_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ os.plafond_referentiel heures,
+ pa.annee_debut_id annee_id,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_statut os
+ JOIN plafond p ON p.numero = 18
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN statut s ON s.code = os.code AND s.annee_id = pa.annee_debut_id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ LEFT JOIN plafond_statut ps ON ps.statut_id = s.id AND ps.plafond_id = p.id AND ps.annee_id = pa.annee_debut_id
+ WHERE
+ os.histo_destruction IS NULL
+ AND os.plafond_referentiel IS NOT NULL
+ AND ps.id IS NULL
+ AND pa.plafond_etat_id > 1
+
+ UNION ALL
+
+ SELECT
+ s.code entite_id,
+ p.id plafond_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ os.maximum_hetd heures,
+ pa.annee_debut_id annee_id,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_statut os
+ JOIN plafond p ON p.numero = 11
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN statut s ON s.code = os.code AND s.annee_id = pa.annee_debut_id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ LEFT JOIN plafond_statut ps ON ps.statut_id = s.id AND ps.plafond_id = p.id AND ps.annee_id = pa.annee_debut_id
+ WHERE
+ os.histo_destruction IS NULL
+ AND os.maximum_hetd IS NOT NULL
+ AND ps.id IS NULL
+ AND pa.plafond_etat_id > 1
+
+ UNION ALL
+
+ SELECT
+ s.code entite_id,
+ p.id plafond_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ os.plafond_hc_hors_remu_fc heures,
+ pa.annee_debut_id annee_id,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_statut os
+ JOIN plafond p ON p.numero = 10
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN statut s ON s.code = os.code AND s.annee_id = pa.annee_debut_id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ LEFT JOIN plafond_statut ps ON ps.statut_id = s.id AND ps.plafond_id = p.id AND ps.annee_id = pa.annee_debut_id
+ WHERE
+ os.histo_destruction IS NULL
+ AND os.plafond_hc_hors_remu_fc IS NOT NULL
+ AND ps.id IS NULL
+ AND pa.plafond_etat_id > 1
+
+ UNION ALL
+
+ SELECT
+ s.code entite_id,
+ p.id plafond_id,
+ CASE WHEN tvh.code = 'PREVU' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_prevu_id,
+ CASE WHEN tvh.code = 'REALISE' THEN pa.plafond_etat_id ELSE NULL END plafond_etat_realise_id,
+ os.plafond_hc_fi_hors_ead heures,
+ pa.annee_debut_id annee_id,
+ pa.annee_fin_id annee_fin_id
+ FROM
+ save_v18_statut os
+ JOIN plafond p ON p.numero = 13
+ JOIN save_v18_plafond_app pa ON pa.plafond_id = p.id
+ JOIN statut s ON s.code = os.code AND s.annee_id = pa.annee_debut_id
+ JOIN type_volume_horaire tvh ON tvh.id = pa.type_volume_horaire_id
+ LEFT JOIN plafond_statut ps ON ps.statut_id = s.id AND ps.plafond_id = p.id AND ps.annee_id = pa.annee_debut_id
+ WHERE
+ os.histo_destruction IS NULL
+ AND os.plafond_hc_fi_hors_ead IS NOT NULL
+ AND ps.id IS NULL
+ AND pa.plafond_etat_id > 1
+ ";
+ $data = [];
+ $qr = $bdd->select($sql);
+ foreach ($qr as $r) {
+ $anneeDebut = (int)$r['ANNEE_ID'];
+ $anneeFin = (int)$r['ANNEE_FIN_ID'];
+ if ($anneeFin == 0) $anneeFin = 2099;
+
+ $plafondId = (int)$r['PLAFOND_ID'];
+ $entiteId = $r['ENTITE_ID'];
+
+ $etatPrevuId = $r['PLAFOND_ETAT_PREVU_ID'] ? (int)$r['PLAFOND_ETAT_PREVU_ID'] : null;
+ $etatRealiseId = $r['PLAFOND_ETAT_REALISE_ID'] ? (int)$r['PLAFOND_ETAT_REALISE_ID'] : null;
+ $heures = $r['HEURES'] ? (int)$r['HEURES'] : 0;
+
+ for ($a = $anneeDebut; $a <= $anneeFin; $a++) {
+ if (!isset($data[$a][$plafondId][$entiteId])) {
+ $data[$a][$plafondId][$entiteId] = [
+ 'saisie' => $a == $anneeDebut,
+ 'PLAFOND_ETAT_PREVU_ID' => 1, // désactivé
+ 'PLAFOND_ETAT_REALISE_ID' => 1, // désactivé
+ 'HEURES' => 0,
+ ];
+ }
+
+ if ($etatPrevuId !== null) {
+ $data[$a][$plafondId][$entiteId]['PLAFOND_ETAT_PREVU_ID'] = $etatPrevuId;
+ }
+
+ if ($etatRealiseId !== null) {
+ $data[$a][$plafondId][$entiteId]['PLAFOND_ETAT_REALISE_ID'] = $etatRealiseId;
+ }
+
+ if ($heures !== null) {
+ $data[$a][$plafondId][$entiteId]['HEURES'] = $heures;
+ }
+ }
+ }
+
+ /* On supprime ce qui a déjà été créé */
+ $sql = "SELECT * FROM PLAFOND_STATUT WHERE histo_destruction IS NULL";
+ $des = $bdd->select($sql);
+ foreach ($des as $de) {
+ $a = (int)$de['ANNEE_ID'];
+ $p = (int)$de['PLAFOND_ID'];
+ $e = (int)$de['STATUT_ID'];
+ unset($data[$a][$p][$e]);
+ }
+
+ /* On récupère les statuts */
+ $sql = "SELECT code, annee_id, id FROM statut WHERE histo_destruction IS NULL";
+ $statuts = [];
+ $rs = $bdd->select($sql);
+ foreach ($rs as $r) {
+ $statuts[$r['CODE']][(int)$r['ANNEE_ID']] = (int)$r['ID'];
+ }
+
+ $inserts = [];
+ foreach ($data as $anneeId => $data2) {
+ foreach ($data2 as $plafondId => $data3) {
+ foreach ($data3 as $entiteId => $d) {
+ $statutId = $statuts[$entiteId][$anneeId] ?? null;
+
+ $insert = $d;
+ $insert['ANNEE_ID'] = $anneeId;
+ $insert['PLAFOND_ID'] = $plafondId;
+ $insert['ENTITE_ID'] = $statutId;
+ $insert['HISTO_CREATION'] = new \DateTime();
+ $insert['HISTO_CREATEUR_ID'] = $this->manager->getOseAdmin()->getOseAppliId();
+ $insert['HISTO_MODIFICATION'] = new \DateTime();
+ $insert['HISTO_MODIFICATEUR_ID'] = $d['saisie'] ? $this->manager->getOseAdmin()->getOseAppliId() : null;
+ unset($insert['saisie']);
+
+ if ($statutId) {
+ $inserts[] = $insert;
+ }
+ }
+ }
+ }
+
+
+ $c->begin('Convertion des paramètres de plafonds pour les statuts');
+ $count = count($inserts);
+ foreach ($inserts as $current => $insert) {
+ $insert['STATUT_ID'] = $insert['ENTITE_ID'];
+ unset($insert['ENTITE_ID']);
+ $c->msg('Ajout du paramètre ' . ($current + 1) . ' sur ' . $count . ' ...', true);
+ $bdd->getTable('PLAFOND_STATUT')->insert($insert);
+ }
+ $c->begin('Fin de la convertion des paramètres de plafonds pour les statuts');
+ }
}
\ No newline at end of file