Skip to content
Snippets Groups Projects
Commit a3232cf2 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Finalisation du script de migration des paramètres de plafonds

parent 0e7a5a50
Branches
Tags
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment