Commit 25d7ecd8 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[FIX] Impossibilité de déposer un rapport d'activité de fin de thèse en plus d'un rapport annuel.

parent 640746fc
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ Journal des modifications
- Templatisation de la notification de confirmation d'adresse électronique
- [FIX] Correction de l'envoi multiple de notification vers le président de jury lors du dépôt d'une version corrigée.
- Modification de l'assertion ouvrant la validation de l'UR
- [FIX] Impossibilité de déposer un rapport d'activité de fin de thèse en plus d'un rapport annuel.

3.0.0 (oracle => postgres)
-----
+65 −0
Changes for module/Application/src/Application/Controller/Rapport/RapportActiviteController.php: 65 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,8 +2,12 @@

namespace Application\Controller\Rapport;

use Application\Entity\Db\Rapport;
use Application\Provider\Privilege\RapportPrivileges;

/**
 * @property \Application\Form\RapportActiviteForm $form
 */
class RapportActiviteController extends RapportController
{
    protected $routeName = 'rapport-activite';
@@ -19,4 +23,65 @@ class RapportActiviteController extends RapportController
    protected $privilege_DEVALIDER_TOUT = RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_TOUT;
    protected $privilege_DEVALIDER_SIEN = RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_SIEN;

    /**
     * @var Rapport[]
     */
    protected $rapportsTeleversesAnnuels = [];

    /**
     * @var Rapport[]
     */
    protected $rapportsTeleversesFintheses = [];


    protected function loadRapportsTeleverses()
    {
        parent::loadRapportsTeleverses();

        $this->rapportsTeleversesAnnuels = array_filter($this->rapportsTeleverses, function(Rapport $rapport) {
            return $rapport->estFinal() === false;
        });
        $this->rapportsTeleversesFintheses = array_filter($this->rapportsTeleverses, function(Rapport $rapport) {
            return $rapport->estFinal() === true;
        });
    }

    protected function canTeleverserRapportAnnuel(): bool
    {
        // Peut être téléversé : 1 rapport annuel par année universitaire.

        $rapportsSurAnneeCourante = array_filter($this->rapportsTeleversesAnnuels, function(Rapport $rapport) {
            return $rapport->getAnneeUniv() === $this->anneeUnivCourante->getPremiereAnnee();
        });

        return count($rapportsSurAnneeCourante) === 0;
    }

    protected function canTeleverserRapportFinthese(): bool
    {
        // Peut être téléversé : 1 rapport de fin de thèse, toutes années univ confondues.

        return count($this->rapportsTeleversesFintheses) === 0;
    }

    protected function isTeleversementPossible(): bool
    {
        return
            $this->canTeleverserRapportAnnuel() ||
            $this->canTeleverserRapportFinthese();
    }

    protected function initForm()
    {
        parent::initForm();

        $estFinalValueOptions = [];
        if ($this->canTeleverserRapportAnnuel()) {
            $estFinalValueOptions['0'] = "Rapport d'activité annuel";
        }
        if ($this->canTeleverserRapportFinthese()) {
            $estFinalValueOptions['1'] = "Rapport d'activité de fin de thèse";
        }
        $this->form->setEstFinalValueOptions($estFinalValueOptions);
    }
}
+38 −13
Changes for module/Application/src/Application/Controller/Rapport/RapportController.php: 38 added lines, 13 removed lines.
Original line number Diff line number Diff line
@@ -73,6 +73,21 @@ abstract class RapportController extends AbstractController
     */
    protected $form;

    /**
     * @var Rapport[]
     */
    protected $rapportsTeleverses = [];

    /**
     * @var \Application\Entity\Db\These
     */
    protected $these;

    /**
     * @var \Application\Entity\AnneeUniv
     */
    protected $anneeUnivCourante;

    /**
     * @param RapportForm $form
     */
@@ -92,22 +107,17 @@ abstract class RapportController extends AbstractController
            return $result;
        }

        $these = $this->requestedThese();
        $rapports = $this->rapportService->findRapportsForThese($these, $this->typeRapport);
        //$allAnneesUnivs = $these->getAnneesUnivInscription()->toArray();
        $allAnneesUnivs = [$this->theseAnneeUnivService->anneeUnivCourante()];
        $anneesUnivs = $this->rapportService->computeAvailableTheseAnneeUniv(
            $allAnneesUnivs,
            $rapports
        );
        $this->form->setAnneesUnivs($anneesUnivs);
        $tousLesRapportsTeleverses = empty($anneesUnivs);
        $this->anneeUnivCourante = $this->theseAnneeUnivService->anneeUnivCourante();
        $this->these = $this->requestedThese();
        $this->loadRapportsTeleverses();

        $this->initForm();

        return new ViewModel([
            'rapports' => $rapports,
            'these' => $these,
            'rapports' => $this->rapportsTeleverses,
            'these' => $this->these,
            'form' => $this->form,
            'tousLesRapportsTeleverses' => $tousLesRapportsTeleverses,
            'isTeleversementPossible' => $this->isTeleversementPossible(),

            'typeValidation' => $this->typeValidation,
            'routeName' => $this->routeName,
@@ -129,6 +139,21 @@ abstract class RapportController extends AbstractController
        ]);
    }

    protected function loadRapportsTeleverses()
    {
        $this->rapportsTeleverses = $this->rapportService->findRapportsForThese($this->these, $this->typeRapport);
    }

    protected function isTeleversementPossible(): bool
    {
        return true;
    }

    protected function initForm()
    {
        $this->form->setAnneesUnivs([$this->anneeUnivCourante]);
    }

    /**
     * Ajout d'un nouveau rapport.
     */
+26 −4
Changes for module/Application/src/Application/Form/RapportActiviteForm.php: 26 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -8,6 +8,21 @@ use Zend\Form\Element\Radio;

class RapportActiviteForm extends RapportForm
{
    protected $estFinalValueOptions = [
        '0' => "Rapport d'activité annuel",
        '1' => "Rapport d'activité de fin de thèse",
    ];

    /**
     * @param string[] $estFinalValueOptions
     * @return self
     */
    public function setEstFinalValueOptions(array $estFinalValueOptions): self
    {
        $this->estFinalValueOptions = $estFinalValueOptions;
        return $this;
    }

    /**
     * @inheritDoc
     */
@@ -20,10 +35,7 @@ class RapportActiviteForm extends RapportForm
            'type' => Radio::class,
            'options' => [
                'label' => false,
                'value_options' => [
                    '0' => "Rapport d'activité annuel",
                    '1' => "Rapport d'activité de fin de thèse",
                ],
                'value_options' => $this->estFinalValueOptions,
            ],
            'attributes' => [
                'id' => 'estFinal',
@@ -33,6 +45,16 @@ class RapportActiviteForm extends RapportForm
        $this->bind(new Rapport());
    }

    /**
     * @inheritDoc
     */
    public function prepare()
    {
        $this->get('estFinal')->setValueOptions($this->estFinalValueOptions);

        return parent::prepare();
    }

    /**
     * @inheritDoc
     */
+0 −24
Changes for module/Application/src/Application/Service/Rapport/RapportService.php: 0 added lines, 24 removed lines.
Original line number Diff line number Diff line
@@ -2,11 +2,9 @@

namespace Application\Service\Rapport;

use Application\Entity\AnneeUniv;
use Application\Entity\Db\NatureFichier;
use Application\Entity\Db\Rapport;
use Application\Entity\Db\These;
use Application\Entity\Db\TheseAnneeUniv;
use Application\Entity\Db\TypeRapport;
use Application\Filter\NomFichierRapportFormatter;
use Application\Service\BaseService;
@@ -77,28 +75,6 @@ class RapportService extends BaseService
        return $qb->getQuery()->getResult();
    }

    /**
     * @param TheseAnneeUniv[]|\Application\Entity\AnneeUniv[] $anneesUnivs
     * @param Rapport[] $rapportsExistants
     * @return TheseAnneeUniv[]
     */
    public function computeAvailableTheseAnneeUniv(array $anneesUnivs, array $rapportsExistants): array
    {
        $rapportsExistantsAnneesUnivs = array_filter(array_map(function (Rapport $rapport) {
            return $rapport->getAnneeUniv();
        }, $rapportsExistants));

        return array_filter($anneesUnivs, function($anneeUniv) use ($rapportsExistantsAnneesUnivs) {
            if ($anneeUniv instanceof TheseAnneeUniv) {
                return !in_array($anneeUniv->getAnneeUniv(), $rapportsExistantsAnneesUnivs);
            } elseif ($anneeUniv instanceof AnneeUniv) {
                return !in_array($anneeUniv->getPremiereAnnee(), $rapportsExistantsAnneesUnivs);
            } else {
                return false;
            }
        });
    }

    /**
     * @inheritDoc
     */
Loading