From b3cd2b28653206a5100f73a6ccbc7be6ebe239e7 Mon Sep 17 00:00:00 2001
From: Antony Le Courtes <antony.lecourtes@unicaen.fr>
Date: Mon, 18 May 2020 14:25:02 +0200
Subject: [PATCH] Correction bug duplication d'un statut d'intervenant

---
 CHANGELOG.md                                  |  6 +-
 .../StatutIntervenantSaisieForm.php           | 82 ++++++++++---------
 .../statut-intervenant/saisie.phtml           | 57 +++++++------
 3 files changed, 79 insertions(+), 66 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ff48009a32..a4101bdf80 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,11 @@
-# OSE 14.5 (alpha)
+# OSE 14.5 (beta)
+
+## Nouveautés
 
 ## Corrections de bugs
 
+* Corrections coquilles dans l'administration.
+* Correction bug sur la duplication d'un statut d'intervenant (ticket #29553)
 * Lors de l'import de données, l'application ne plante plus si le connecteur INTERVENANT est désactivé
 
 # OSE 14.4
diff --git a/module/Application/src/Application/Form/StatutIntervenant/StatutIntervenantSaisieForm.php b/module/Application/src/Application/Form/StatutIntervenant/StatutIntervenantSaisieForm.php
index b1f7451384..2ce76d67c1 100755
--- a/module/Application/src/Application/Form/StatutIntervenant/StatutIntervenantSaisieForm.php
+++ b/module/Application/src/Application/Form/StatutIntervenant/StatutIntervenantSaisieForm.php
@@ -282,6 +282,7 @@ class StatutIntervenantSaisieForm extends AbstractForm
      */
     public function getInputFilterSpecification()
     {
+
         return [
             'libelle'                => [
                 'required' => true,
@@ -433,51 +434,56 @@ class StatutIntervenantHydrator implements HydratorInterface
         $object->setMaximumHETD(FloatFromString::run($data['maximum-HETD']));
         $object->setDepassementSDSHC($data['depassement-sdshc']);
         $object->setChargesPatronales(FloatFromString::run($data['charges-patronales']) / 100);
-
-        //Gestion de la durée de vie des agréments par statut d'intervenant
-        //On récupére les types d'agrement
-        $qb = $this->getServiceTypeAgrement()->finderByHistorique();
-        $typesAgrements = $this->getServiceTypeAgrement()->getList($qb);
-        //Type agrement par statut d'intervenant
-        $qb = $this->getServiceTypeAgrementStatut()->finderByStatutIntervenant($object);
-        $this->getServiceTypeAgrementStatut()->finderByHistorique($qb);
-        $typesAgrementsStatuts = $this->getServiceTypeAgrementStatut()->getList($qb);
-        $typesAgrementsStatusByCode = [];
-        foreach($typesAgrementsStatuts as $tas)
+        //Uniquement si le statut intervenant existe déjà en base.
+        if(!empty($data['id']))
         {
-            $typesAgrementsStatusByCode[$tas->getType()->getCode()] = $tas;
-        }
-        //On boucle pour faire ensuite de l'insert, update ou delete
-        foreach($typesAgrements as $ta)
-        {
-            if(array_key_exists($ta->getCode(), $data))
+            //Gestion de la durée de vie des agréments par statut d'intervenant
+            //On récupére les types d'agrement
+            $qb = $this->getServiceTypeAgrement()->finderByHistorique();
+            $typesAgrements = $this->getServiceTypeAgrement()->getList($qb);
+            //Type agrement par statut d'intervenant
+            $qb = $this->getServiceTypeAgrementStatut()->finderByStatutIntervenant($object);
+            $this->getServiceTypeAgrementStatut()->finderByHistorique($qb);
+            $typesAgrementsStatuts = $this->getServiceTypeAgrementStatut()->getList($qb);
+            $typesAgrementsStatusByCode = [];
+            foreach($typesAgrementsStatuts as $tas)
+            {
+                $typesAgrementsStatusByCode[$tas->getType()->getCode()] = $tas;
+            }
+            //On boucle pour faire ensuite de l'insert, update ou delete
+            foreach($typesAgrements as $ta)
             {
-                if(!$data[$ta->getCode()] && array_key_exists($ta->getCode(), $typesAgrementsStatusByCode))
+                if(array_key_exists($ta->getCode(), $data))
                 {
-                    $tasToDelete = $typesAgrementsStatusByCode[$ta->getCode()];
-                    $object->removeTypeAgrementStatut($tasToDelete);
-                    $this->getServiceTypeAgrementStatut()->delete($tasToDelete);
-                }
-                elseif($data[$ta->getCode()] && array_key_exists($ta->getCode(), $typesAgrementsStatusByCode)){
-                    $tasToUpdate = $typesAgrementsStatusByCode[$ta->getCode()];
-                    $dureeVie = $data[$ta->getCode().'-DUREE_VIE'];
-                    $tasToUpdate->setDureeVie($dureeVie);
-                    $this->getServiceTypeAgrementStatut()->save($tasToUpdate);
-                }
-                elseif($data[$ta->getCode()] && !array_key_exists($ta->getCode(), $typesAgrementsStatusByCode)){
-                    $dureeVie = $data[$ta->getCode().'-DUREE_VIE'];
-                    $tasToCreate = new TypeAgrementStatut();
-                    $tasToCreate->setDureeVie($dureeVie);
-                    $tasToCreate->setObligatoire(1);
-                    $tasToCreate->setType($ta);
-                    $tasToCreate->setStatut($object);
-                    $this->getServiceTypeAgrementStatut()->save($tasToCreate);
-                    $object->addTypeAgrementStatut($tasToCreate);
-
+                    if(!$data[$ta->getCode()] && array_key_exists($ta->getCode(), $typesAgrementsStatusByCode))
+                    {
+                        $tasToDelete = $typesAgrementsStatusByCode[$ta->getCode()];
+                        $object->removeTypeAgrementStatut($tasToDelete);
+                        $this->getServiceTypeAgrementStatut()->delete($tasToDelete);
+                    }
+                    elseif($data[$ta->getCode()] && array_key_exists($ta->getCode(), $typesAgrementsStatusByCode)){
+                        $tasToUpdate = $typesAgrementsStatusByCode[$ta->getCode()];
+                        $dureeVie = $data[$ta->getCode().'-DUREE_VIE'];
+                        $tasToUpdate->setDureeVie($dureeVie);
+                        $this->getServiceTypeAgrementStatut()->save($tasToUpdate);
+                    }
+                    elseif($data[$ta->getCode()] && !array_key_exists($ta->getCode(), $typesAgrementsStatusByCode)){
+                        $dureeVie = $data[$ta->getCode().'-DUREE_VIE'];
+                        $tasToCreate = new TypeAgrementStatut();
+                        $tasToCreate->setDureeVie($dureeVie);
+                        $tasToCreate->setObligatoire(1);
+                        $tasToCreate->setType($ta);
+                        $tasToCreate->setStatut($object);
+                        $this->getServiceTypeAgrementStatut()->save($tasToCreate);
+                        $object->addTypeAgrementStatut($tasToCreate);
+
+                    }
                 }
             }
         }
 
+
+
         return $object;
     }
 
diff --git a/module/Application/view/application/statut-intervenant/saisie.phtml b/module/Application/view/application/statut-intervenant/saisie.phtml
index 176b816175..7044fefbd9 100755
--- a/module/Application/view/application/statut-intervenant/saisie.phtml
+++ b/module/Application/view/application/statut-intervenant/saisie.phtml
@@ -41,6 +41,7 @@ echo $this->form()->openTag($form); ?>
             <div class="col-md-9">
                 <div class="row">
                     <div class="col-md-4">
+                        <?= $this->formHidden($form->get('id')); ?>
                         <?= $this->formControlGroup($form->get('type-intervenant')); ?>
                     </div>
                     <div class="col-md-8">
@@ -74,33 +75,36 @@ echo $this->form()->openTag($form); ?>
                     <?= $this->formControlGroup($form->get('depassement-sdshc')); ?>
                     <br/>
                 </div>
+                <!--Uniquement si le statut existe déjà en base (avec un id)-->
+                <?php if (empty($form->get('id')->getValue())): ?>
+                    <div class="row temoins hidden" >
+                <?php else: ?>
+                    <div class="row temoins" >
+                <?php endif; ?>
+                        <fieldset>
+                            <legend style="font-size: 14px;font-weight: 700;">Gestion des agréments pour le statut : </legend>
+                            <table class="table table-bordered">
+                                <thead >
+                                    <th></th>
+                                    <th>Activé</th>
+                                    <th>Valable pendant</th>
+                                </thead>
+                                <tbody>
+                                <?php foreach($form->getElements() as $element):  ?>
+                                    <?php if(preg_match('#^CONSEIL[A-Z_]+\b(?!-DUREE_VIE)#', $element->getName())): ?>
+
+                                        <tr>
+                                            <td><?= $this->formLabel($form->get($element->getName())); ?></td>
+                                            <td><?= $this->formRadio($form->get($element->getName())); ?></td>
+                                            <td><?= $this->formControlGroup($form->get($element->getName() . '-DUREE_VIE')); ?></td>
+                                        </tr>
+                                    <?php endif; ?>
+                                <?php endforeach;?>
+                                </tbody>
+                            </table>
+                        </fieldset>
 
-                <div class="row temoins">
-                    <fieldset>
-                        <legend style="font-size: 14px;font-weight: 700;">Gestion des agréments pour le statut : </legend>
-                        <table class="table table-bordered">
-                            <thead >
-                                <th></th>
-                                <th>Activé</th>
-                                <th>Valable pendant</th>
-                            </thead>
-                            <tbody>
-                            <?php foreach($form->getElements() as $element):  ?>
-                                <?php if(preg_match('#^CONSEIL[A-Z_]+\b(?!-DUREE_VIE)#', $element->getName())): ?>
-
-                                    <tr>
-                                        <td><?= $this->formLabel($form->get($element->getName())); ?></td>
-                                        <td><?= $this->formRadio($form->get($element->getName())); ?></td>
-                                        <td><?= $this->formControlGroup($form->get($element->getName() . '-DUREE_VIE')); ?></td>
-                                    </tr>
-                                <?php endif; ?>
-                            <?php endforeach;?>
-                            </tbody>
-                        </table>
-                    </fieldset>
-
-                </div>
-
+                    </div>
                 <div class="row">
                     <?= $this->formElement($form->get('security')); ?>
                     <?php if ($canEdit) echo $this->formSubmit($form->get('submit')); ?>
@@ -140,7 +144,6 @@ echo $this->form()->openTag($form); ?>
     <script type="text/javascript">
         $(function () {
             $("body").on("statut-intervenant-clone", function (event, data) {
-                console.log('toto');
                 window.location.reload();
             });
             $(".statut-libelle-<?= $form->get('id')->getValue() ?>").html("<?= $form->get('libelle')->getValue() ?>");
-- 
GitLab