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

Système de test massif d'arrondisseur de formule

parent a0bdbf30
Loading
Loading
Loading
Loading
Loading
+90 −0
Changes for code/formules/testArrondisseurMassif.php: 90 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

/**
 * @var $this       \Application\View\Renderer\PhpRenderer
 * @var $container  \Psr\Container\ContainerInterface
 */

use Unicaen\BddAdmin\Bdd;
use Formule\Service\FormuleService;
use Formule\Service\TestService;
use Formule\Model\Arrondisseur\Testeur;
use Formule\Entity\FormuleIntervenant;

$bdd = $container->get(Bdd::class);

$testTablename = 'TEST_ARR';

if (!$bdd->table()->exists($testTablename)) {
    $sql = "create table test_arr as 
    select 
      i.annee_id, 
      fri.intervenant_id, 
      fri.type_volume_horaire_id, 
      fri.etat_volume_horaire_id, 
      0 passe,
      0 err_none, 
      0 err_minimal, 
      0 err_full, 
      0 err_custom_min, 
      0 err_custom_full 
    from formule_resultat_intervenant fri JOIN intervenant i ON i.id = fri.intervenant_id";
    $bdd->exec($sql);
}

$fs      = $container->get(FormuleService::class);
$ts      = $container->get(TestService::class);
$testeur = new Testeur();

$sql   = "SELECT * FROM test_arr WHERE annee_id = 2024 AND passe = 0";
$data  = $bdd->select($sql, [], ['case' => CASE_LOWER]);
$nb    = 0;
$count = count($data);
foreach ($data as $d) {
    $nb++;
    echo "Item $nb / $count ...\n";

    $intervenantId       = (int)$d['intervenant_id'];
    $typeVolumeHoraireId = (int)$d['type_volume_horaire_id'];
    $etatVolumeHoraireId = (int)$d['etat_volume_horaire_id'];

    $fi = $fs->getFormuleServiceIntervenant($intervenantId, $typeVolumeHoraireId, $etatVolumeHoraireId);

    $resKey = [
        'INTERVENANT_ID'         => $intervenantId,
        'TYPE_VOLUME_HORAIRE_ID' => $typeVolumeHoraireId,
        'ETAT_VOLUME_HORAIRE_ID' => $etatVolumeHoraireId,
    ];

    $resData = [
        'PASSE'           => 1,
        'ERR_NONE'        => 0,
        'ERR_MINIMAL'     => 0,
        'ERR_FULL'        => 0,
        'ERR_CUSTOM_MIN'  => 0,
        'ERR_CUSTOM_FULL' => 0,
    ];

    $fi->setArrondisseur(FormuleIntervenant::ARRONDISSEUR_NO);
    $ts->getServiceFormule()->calculer($fi);
    $trace               = $fi->getArrondisseurTrace();
    $resData['ERR_NONE'] = $testeur->tester($trace);

    $fi->setArrondisseur(FormuleIntervenant::ARRONDISSEUR_MINIMAL);
    $ts->getServiceFormule()->calculer($fi);
    $trace                  = $fi->getArrondisseurTrace();
    $resData['ERR_MINIMAL'] = $testeur->tester($trace);

    $fi->setArrondisseur(FormuleIntervenant::ARRONDISSEUR_FULL);
    $ts->getServiceFormule()->calculer($fi);
    $trace               = $fi->getArrondisseurTrace();
    $resData['ERR_FULL'] = $testeur->tester($trace);

    $fi->setArrondisseur(FormuleIntervenant::ARRONDISSEUR_CUSTOM);
    $ts->getServiceFormule()->calculer($fi);
    $trace                      = $fi->getArrondisseurTrace();
    $resData['ERR_CUSTOM_FULL'] = $testeur->tester($trace);

    $bdd->getTable($testTablename)->update($resData, $resKey);
}
+38 −6
Changes for module/Formule/src/Model/Arrondisseur/Arrondisseur.php: 38 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -66,8 +66,8 @@ class Arrondisseur

    protected function preparerCalculs(Ligne $data): void
    {
        $this->preparationHorizontale($data);
        $this->preparationVerticale($data);
        $this->preparationHorizontaleDescendante($data);
        $this->preparationVerticaleDescendante($data);
    }


@@ -76,7 +76,7 @@ class Arrondisseur
    {
        $services = $data->getSubs();
        foreach ($services as $service) {
            $this->preparationVerticale($service);
            $this->preparationVerticaleDescendante($service);
        }
    }

@@ -84,12 +84,44 @@ class Arrondisseur

    protected function preparerCalculsCustom(Ligne $data): void
    {
        $services = $data->getSubs();
        foreach ($services as $service) {
            $vhs = $service->getSubs();
            foreach( $vhs as $vh ){
                $this->preparationHorizontaleMontante($vh);
            }
        }
    }



    protected function preparationHorizontaleMontante(Ligne $data): void
    {
        // Sous-total par catégorie
        foreach (Ligne::CATEGORIES as $categorie) {
            // Sous-sous-total par enseignement FI/FA/FC
            $ceth = $this->addCalcul($data->getValeur($categorie . Ligne::TYPE_ENSEIGNEMENT));
            foreach (Ligne::TYPES_ENSEIGNEMENT as $type) {
                $ceth->addValeur($data->getValeur($categorie . $type));
            }

            // calcul par catégorie
            $cc = $this->addCalcul($data->getValeur($categorie));
            $cc->addValeur($data->getValeur($categorie . Ligne::TYPE_ENSEIGNEMENT));
            $cc->addValeur($data->getValeur($categorie . Ligne::TYPE_REFERENTIEL));
        }

        /* le total général est recalculé */
        $totalGeneral = $data->getValeur(Ligne::CAT_TYPE_PRIME)->getValueFinale();
        foreach (Ligne::CATEGORIES as $categorie) {
            $totalGeneral += $data->getValeur($categorie)->getValueFinale();
        }
        $data->getValeur(Ligne::TOTAL)->setValue(round($totalGeneral, 2));
    }



    protected function preparationHorizontale(Ligne $data): void
    protected function preparationHorizontaleDescendante(Ligne $data): void
    {
        // Sous-total par catégorie
        foreach (Ligne::CATEGORIES as $categorie) {
@@ -114,7 +146,7 @@ class Arrondisseur



    protected function preparationVerticale(Ligne $data): void
    protected function preparationVerticaleDescendante(Ligne $data): void
    {
        $subs = $data->getSubs();

@@ -143,7 +175,7 @@ class Arrondisseur
                if ($sv->getDiff() !== 0) {
                    $noDiff = false;
                }
                $this->preparationVerticale($sub);
                $this->preparationVerticaleDescendante($sub);
            }
            if ($noDiff) {
                $v->setDiff(0);