Commit b0e90dce authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

wqMerge branch 'master' into alc-edit-cc-modulateur-element

parents f34f736f d5515a75
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -3,7 +3,17 @@
## Correction de bugs

* L'interface d'administration des motifs de modification de service est de nouveau pleinement fonctionelle.
* La suppression d'un élément pédagogique de l'ODF complémentaire refonctionne.
* Correction d'un bug dans le cache : si un fichier n'était pas déjà en cache il y avait plantage.

## Nouveautés

* Formule de calcul de Lyon2
* L'administrateur se voit attibuer systématiquement l'accès à toutes les nouvelles fonctionnalités

## Notes de mise à jour

Les versions 7.3 ou 7.4 de PHP sont maintenant nécessaires.

# OSE 10-zf2 et 10-zf3

+0 −1
Original line number Diff line number Diff line
@@ -89,7 +89,6 @@ Dépendances requises :
    * ldap
    * bcmath
    * mbstring
    * mcrypt
    * opcache
    * xml
    * zip
+14 −0
Original line number Diff line number Diff line
@@ -377,6 +377,20 @@ class DataGen
                $this->syncTable($tbl, $params);
            }
        }

        /* L'administrateur doit avoir tous les droits obligatoirement! */
        $this->oseAdmin->getBdd()->exec("
        INSERT INTO
          role_privilege(privilege_id, role_id)
        SELECT
          p.id privilege_id, r.id role_id
        FROM
          privilege p
          JOIN role r ON r.code = 'administrateur'
          LEFT JOIN role_privilege rp on rp.privilege_id = p.id AND rp.role_id = r.id
        WHERE
          rp.role_id IS NULL
        ");
    }


code/Contrôle des séquences.php

deleted100755 → 0
+0 −132
Original line number Diff line number Diff line
<?php

/**
 * @var $this       \Application\View\Renderer\PhpRenderer
 * @var $controller \Zend\Mvc\Controller\AbstractController
 * @var $container  \Interop\Container\ContainerInterface
 * @var $viewName   string
 * @var $viewFile   string
 */

$bdd = new \Application\Connecteur\Bdd\BddConnecteur();
$bdd->setEntityManager($container->get(\Application\Constants::BDD));


$tables = getData($bdd);

$tableToModif = isset($_REQUEST['table-to-modif']) ? $_REQUEST['table-to-modif'] : null;

if ($tableToModif && isset($tables[$tableToModif]) && !empty($tables[$tableToModif]['sql'])) {
    foreach ($tables[$tableToModif]['sql'] as $query) {
        $bdd->exec($query);
    }
    die('OK');
}

?>
    <h1>Contrôle des valeurs des séquences</h1>
    <table class="table table-bordered table-condensed table-hover">
        <thead>
        <tr>
            <th>Table</th>
            <th>Séquence</th>
            <th>Séq. val</th>
            <th>Dernier ID</th>
            <th>SQL</th>
        </tr>
        </thead>
        <tbody>
        <?php foreach ($tables as $table => $d): extract($d); ?>
            <tr<?= $probleme ? ' class="bg-danger"' : '' ?>>
                <td><?= $table ?></td>
                <td><?= $sequence ?></td>
                <td><?= $seqVal ?></td>
                <td><?= $maxId ?></td>
                <td>
                    <?php if (!empty($sql)): ?>
                        <button class="btn btn-default btn-maj-seq" data-table="<?= $table ?>">MAJ séquence</button>
                    <?php endif; ?>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <script>

        $(function ()
        {

            $('.btn-maj-seq').click(function ()
            {
                majSeq($(this).data('table'))
            });

        });

        function majSeq(table)
        {
            var url = '<?= $_SERVER['REQUEST_URI'] ?>';

            $.post(url, {"table-to-modif": table}, function (data)
            {
                alertFlash('Réussi', 'success', 1000);
                window.location.reload();
            }).fail(function (jqXHR)
            {
                alertFlash(jqXHR.responseText, 'danger', 5000);
                console.log(jqXHR);
            });
        }

    </script>
<?php


function getData(Application\Connecteur\Bdd\BddConnecteur $bdd)
{
    $sql = "
    SELECT
      utc.table_name,
      us.sequence_name,
      us.last_number
    FROM
      USER_TAB_COLUMNS utc
      JOIN USER_SEQUENCES us ON us.sequence_name = SUBSTR(utc.table_name,1,23) || '_ID_SEQ'
    WHERE
      utc.column_name = 'ID'
    ";

    $dt = $bdd->fetch($sql, [], 'TABLE_NAME');

    $sqls = [];
    foreach ($dt as $tableName => $d) {
        $sqls[$tableName] = "SELECT '$tableName' table_name, max(id) max_id FROM $tableName";
    }

    $ids = $bdd->fetch(implode(' UNION ', $sqls), [], 'TABLE_NAME');

    $tables = [];
    foreach ($dt as $tableName => $d) {
        $sequence = $d['SEQUENCE_NAME'];
        $seqVal   = (int)$d['LAST_NUMBER'];
        $maxId    = (int)$ids[$tableName]['MAX_ID'];
        $probleme = $seqVal <= $maxId;

        $modifSqls = [];
        if ($maxId - $seqVal >= 0) {
            $modifSqls[] = "ALTER SEQUENCE $sequence INCREMENT BY " . ($maxId - $seqVal + 1);
            $modifSqls[] = "SELECT $sequence.NEXTVAL FROM dual";
            $modifSqls[] = "ALTER SEQUENCE $sequence INCREMENT BY 1";
        }

        $tables[$tableName] = [
            'sequence' => $sequence,
            'seqVal'   => $seqVal,
            'maxId'    => $maxId,
            'probleme' => $probleme,
            'sql'      => $modifSqls,
        ];
    }

    return $tables;
}
 No newline at end of file
+223 −0
Original line number Diff line number Diff line
<?php

/**
 * @var $this       \Application\View\Renderer\PhpRenderer
 * @var $controller \Zend\Mvc\Controller\AbstractController
 * @var $container  \Interop\Container\ContainerInterface
 * @var $viewName   string
 * @var $viewFile   string
 */
$formuleTestIntervenantId = 132;

$data = "901	Oui	CM	50,00 %	0,00 %	50,00 %	20 h	1,5 HETD	30 HETD		30 HETD	66,67 %	30 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		15 HETD	0 HETD	15 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD
909	Oui	TD	50,00 %	25,00 %	25,00 %	50 h	1 HETD	50 HETD		0 HETD	0,00 %	0 HETD	0 HETD		50 HETD	40,00 %	50 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		25 HETD	12,5 HETD	12,5 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD
902	Oui	CM	0,00 %	0,00 %	100,00 %	50 h	1,5 HETD	75 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		75 HETD	65,22 %	14,35 HETD	60,65 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	14,35 HETD	0 HETD	0 HETD	0 HETD	60,65 HETD	0 HETD	0 HETD
D4DAC10000	Oui	Référentiel				20 h	1 HETD	20 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		20 HETD	16,00 %	0 HETD	20 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	20 HETD
D4DAC10000	Oui	CM	0,00 %	0,00 %	100,00 %	10 h	1,5 HETD	15 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		15 HETD	31,58 %	0 HETD	15 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	15 HETD	0 HETD	0 HETD
901	Oui	TD	0,00 %	0,00 %	100,00 %	40 h	1 HETD	40 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		40 HETD	34,78 %	7,65 HETD	32,35 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	7,65 HETD	0 HETD	0 HETD	0 HETD	32,35 HETD	0 HETD	0 HETD
901	Oui	Référentiel				40 h	1 HETD	40 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		40 HETD	32,00 %	0 HETD	40 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	40 HETD
909	Oui	CM	80,00 %	0,00 %	20,00 %	50 h	1,5 HETD	75 HETD		0 HETD	0,00 %	0 HETD	0 HETD		75 HETD	60,00 %	75 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		60 HETD	0 HETD	15 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD
901	Oui	Référentiel				15 h	1 HETD	15 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		15 HETD	12,00 %	0 HETD	15 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	15 HETD
ETAB-X	Non	TD	100,00 %	0,00 %	0,00 %	30 h	1 HETD	30 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		30 HETD	66,67 %	0 HETD	30 HETD		0 HETD	0 HETD	0 HETD	0 HETD	30 HETD	0 HETD	0 HETD	0 HETD	0 HETD
ETAB-X	Non	Référentiel				40 h	1 HETD	40 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		40 HETD	32,00 %	0 HETD	40 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	40 HETD
ETAB-Y	Non	CM	100,00 %	0,00 %	0,00 %	10 h	1,5 HETD	15 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		15 HETD	33,33 %	0 HETD	15 HETD		0 HETD	0 HETD	0 HETD	0 HETD	15 HETD	0 HETD	0 HETD	0 HETD	0 HETD
909	Oui	Référentiel				10 h	1 HETD	10 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		10 HETD	8,00 %	0 HETD	10 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	10 HETD
901	Oui	TD	40,00 %	20,00 %	40,00 %	15 h	1 HETD	15 HETD		15 HETD	33,33 %	15 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		6 HETD	3 HETD	6 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD
D4DAC10000	Oui	CM	0,00 %	0,00 %	100,00 %	5 h	1,5 HETD	7,5 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		7,5 HETD	15,79 %	0 HETD	7,5 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	0 HETD	7,5 HETD	0 HETD	0 HETD
D4DAC10000	Oui	TD	100,00 %	0,00 %	0,00 %	25 h	1 HETD	25 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		25 HETD	52,63 %	0 HETD	25 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0,00 %	0 HETD	0 HETD		0 HETD	0 HETD	0 HETD	0 HETD	25 HETD	0 HETD	0 HETD	0 HETD	0 HETD
";

/*
Structures :
1	Droit
2	Histoire
3	IAE
4	IUT
5	Lettres
6	Santé
7	Sciences
8	SUAPS
9	Université
*/

$correspStructs = [
    '901'        => 1,
    '909'        => 2,
    '902'        => 3,
    'U1LY200000' => 4,
    'D4DAC10000' => 5,
    'ETAB-X'     => 6,
    'ETAB-Y'     => 7,
];

$correspChamps = [
    'structureTest'           => 0,
    'referentiel'             => 2,
    'serviceStatutaire'       => null,
    'typeInterventionCode'    => 2,
    'tauxFi'                  => 3,
    'tauxFa'                  => 4,
    'tauxFc'                  => 5,
    'ponderationServiceDu'    => null,
    'ponderationServiceCompl' => null,
    'param1'                  => 0,
    'param2'                  => 1,
    'param3'                  => null,
    'param4'                  => null,
    'param5'                  => null,
    'heures'                  => 6,
    'aServiceFi'              => 40,
    'aServiceFa'              => 41,
    'aServiceFc'              => 42,
    'aServiceReferentiel'     => 43,
    'aHeuresComplFi'          => 44,
    'aHeuresComplFa'          => 45,
    'aHeuresComplFc'          => 46,
    'aHeuresComplFcMajorees'  => 47,
    'aHeuresComplReferentiel' => 48,
];

function transfo(array $c)
{
    if ($c['typeInterventionCode'] == 'Référentiel') {
        $c['typeInterventionCode'] = null;
        $c['referentiel']          = true;
    } else {
        $c['referentiel'] = false;
    }

    return $c;
}

$debug = false;
//$debug = true;


$defaults = [
    'referentiel'             => false,
    'serviceStatutaire'       => true,
    'tauxFi'                  => 100,
    'tauxFa'                  => 0,
    'tauxFc'                  => 0,
    'ponderationServiceDu'    => 1,
    'ponderationServiceCompl' => 1,
];

/** @var \Doctrine\ORM\EntityManager $bdd */
$bdd = $container->get(\Application\Constants::BDD);

$data   = explode("\n", $data);
$vhHead = [];
$vhData = [];
foreach ($data as $l) {
    if (trim($l)) {
        $cOri = explode("\t", trim($l));

        $values = [];
        foreach ($correspChamps as $col => $index) {
            if ($index !== null) {
                $vhHead[$col] = $col;
                $values[$col] = $cOri[$index];
                if ('' === $values[$col] && isset($defaults[$col])) {
                    $values[$col] = $defaults[$col];
                }
            }
        }

        $values = transfo($values);

        foreach ($correspChamps as $col => $index) {
            if ($index !== null) {
                if ((null === $values[$col] || '' === $values[$col]) && isset($defaults[$col])) {
                    $values[$col] = $defaults[$col];
                }
            }
        }

        if (isset($values['structureTest']) && !empty($values['structureTest']) && !$values['structureTest'] instanceof \Application\Entity\Db\FormuleTestStructure) {
            try {
                $values['structureTest'] = $bdd->getRepository(\Application\Entity\Db\FormuleTestStructure::class)->find($correspStructs[$values['structureTest']]);
            } catch (\Exception $e) {
                throw new \Exception("Composante " . $values['structureTest'] . " non mappée", 0, $e);
            }
        }

        $lfloat = [
            'tauxFi', 'tauxFa', 'tauxFc',
            'heures',
            'ponderationServiceDu', 'ponderationServiceCompl',
            'aServiceFi', 'aServiceFa', 'aServiceFc', 'aServiceReferentiel', 'aHeuresComplFi', 'aHeuresComplFa', 'aHeuresComplFc', 'aHeuresComplFcMajorees', 'aHeuresComplReferentiel',
        ];
        foreach ($lfloat as $col) {
            if (isset($values[$col])) {
                $values[$col] = stringToFloat($values[$col]);
            }
        }

        $ltaux = ['tauxFi', 'tauxFa', 'tauxFc'];
        foreach ($ltaux as $col) {
            if (isset($values[$col])) {
                $values[$col] = $values[$col] / 100;
            }
        }

        $lbool = ['referentiel', 'serviceStatutaire'];
        foreach ($lbool as $col) {
            if (isset($values[$col])) {
                $values[$col] = (bool)$values[$col];
            }
        }

        $values['debugInfo'] = $cOri;
        $vhData[]            = $values;
    }
}


if (!$debug) {
    /** @var \Application\Service\FormuleTestIntervenantService $ftiService */
    $ftiService = $container->get(\Application\Service\FormuleTestIntervenantService::class);
    $fti        = $ftiService->get($formuleTestIntervenantId);
    $bdd->getConnection()->exec('DELETE FROM formule_test_volume_horaire WHERE intervenant_test_id = ' . $fti->getId());
    foreach ($vhData as $i => $values) {
        $vh = new \Application\Entity\Db\FormuleTestVolumeHoraire();
        $vh->setIntervenantTest($fti);
        foreach ($vhHead as $col) {
            $vh->{'set' . ucfirst($col)}($values[$col]);
        }
        try {
            $bdd->persist($vh);
            $bdd->flush($vh);
            $vhData[$i]['debugInfo'] = 'OK';
        } catch (\Exception $e) {
            $vhData[$i]['debugInfo'] = $e->getMessage();
        }
    }
}

?>
<style>
    table {
        font-size: 8pt;
    }
</style>
<table class="table table-bordered table-condensed table-extra-condensed table-hover">
    <tr>
        <?php foreach ($vhHead as $col): ?>
            <th><?= $col; ?></th>
        <?php endforeach; ?>
        <th>Infos Débug</th>
    </tr>
    <?php
    foreach ($vhData as $values) {
        echo '<tr>';
        foreach ($values as $col => $value) {
            if (is_array($value)) {
                $value = '<pre style="font-size:8pt">' . var_export($value, true) . '</pre>';
            }
            echo "<td>$value</td>";
        }
        echo '</tr>';
    }
    ?>
</table>
 No newline at end of file
Loading