Commit 86932bef authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Avis sur rapport d'activité de fin de thèse

parent 3447b55f
Loading
Loading
Loading
Loading
+88 −1
Changes for module/Application/config/others/rapports.config.php: 88 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Application;
use Application\Assertion\Rapport\RapportAssertion;
use Application\Controller\Factory\Rapport\RapportActiviteControllerFactory;
use Application\Controller\Factory\Rapport\RapportActiviteRechercheControllerFactory;
use Application\Controller\Factory\Rapport\RapportAvisControllerFactory;
use Application\Controller\Factory\Rapport\RapportCsiControllerFactory;
use Application\Controller\Factory\Rapport\RapportCsiRechercheControllerFactory;
use Application\Controller\Factory\Rapport\RapportMiparcoursControllerFactory;
@@ -12,19 +13,24 @@ use Application\Controller\Factory\Rapport\RapportMiparcoursRechercheControllerF
use Application\Controller\Factory\Rapport\RapportValidationControllerFactory;
use Application\Controller\Rapport\RapportActiviteController;
use Application\Controller\Rapport\RapportActiviteRechercheController;
use Application\Controller\Rapport\RapportAvisController;
use Application\Controller\Rapport\RapportCsiController;
use Application\Controller\Rapport\RapportCsiRechercheController;
use Application\Controller\Rapport\RapportMiparcoursController;
use Application\Controller\Rapport\RapportMiparcoursRechercheController;
use Application\Controller\Rapport\RapportValidationController;
use Application\Form\Factory\RapportActiviteFormFactory;
use Application\Form\Factory\RapportAvisFormFactory;
use Application\Form\Factory\RapportCsiFormFactory;
use Application\Form\Factory\RapportMiparcoursFormFactory;
use Application\Form\Rapport\RapportAvisForm;
use Application\Form\RapportActiviteForm;
use Application\Form\RapportCsiForm;
use Application\Form\RapportMiparcoursForm;
use Application\Provider\Privilege\RapportPrivileges;
use Application\Search\Controller\SearchControllerPluginFactory;
use Application\Service\Rapport\Avis\RapportAvisService;
use Application\Service\Rapport\Avis\RapportAvisServiceFactory;
use Application\Service\Rapport\RapportSearchService;
use Application\Service\Rapport\RapportSearchServiceFactory;
use Application\Service\Rapport\RapportService;
@@ -59,6 +65,10 @@ return [
                            RapportPrivileges::RAPPORT_ACTIVITE_VALIDER_SIEN,
                            RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_TOUT,
                            RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_SIEN,
                            RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_TOUT,
                            RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_SIEN,
                            RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_TOUT,
                            RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_SIEN,

                            RapportPrivileges::RAPPORT_CSI_LISTER_TOUT,
                            RapportPrivileges::RAPPORT_CSI_LISTER_SIEN,
@@ -175,6 +185,29 @@ return [
                    ],
                    'assertion' => 'Assertion\\Rapport',
                ],
                [
                    'controller' => RapportAvisController::class,
                    'action'     => [
                        'ajouter',
                        'modifier',
                    ],
                    'privileges' => [
                        RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_TOUT,
                        RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_SIEN,
                    ],
                    'assertion' => 'Assertion\\Rapport',
                ],
                [
                    'controller' => RapportAvisController::class,
                    'action'     => [
                        'supprimer',
                    ],
                    'privileges' => [
                        RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_TOUT,
                        RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_SIEN,
                    ],
                    'assertion' => 'Assertion\\Rapport',
                ],

                ////////////////////////////////////////// Rapports CSI //////////////////////////////////////////
                [
@@ -440,6 +473,57 @@ return [
                            ],
                        ],
                    ],
                    'avis' => [
                        'type' => 'Literal',
                        'options' => [
                            'route' => '/avis',
                            'defaults' => [
                                'controller' => RapportAvisController::class,
                            ],
                        ],
                        'may_terminate' => false,
                        'child_routes' => [
                            'ajouter' => [
                                'type' => 'Segment',
                                'options' => [
                                    'route' => '/ajouter/:rapport',
                                    'constraints' => [
                                        'rapport' => '\d+',
                                    ],
                                    'defaults' => [
                                        'action' => 'ajouter',
                                        /* @see RapportAvisController::ajouterAction() */
                                    ],
                                ],
                            ],
                            'modifier' => [
                                'type' => 'Segment',
                                'options' => [
                                    'route' => '/modifier/:rapportAvis',
                                    'constraints' => [
                                        'rapportAvis' => '\d+',
                                    ],
                                    'defaults' => [
                                        'action' => 'modifier',
                                        /* @see RapportAvisController::modifierAction() */
                                    ],
                                ],
                            ],
                            'supprimer' => [
                                'type' => 'Segment',
                                'options' => [
                                    'route' => '/supprimer/:rapportAvis',
                                    'constraints' => [
                                        'rapportAvis' => '\d+',
                                    ],
                                    'defaults' => [
                                        'action' => 'supprimer',
                                        /* @see RapportAvisController::supprimerAction() */
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],

@@ -718,6 +802,7 @@ return [
            RapportService::class => RapportServiceFactory::class,
            RapportSearchService::class => RapportSearchServiceFactory::class,
            RapportValidationService::class => RapportValidationServiceFactory::class,
            RapportAvisService::class => RapportAvisServiceFactory::class,
        ],
    ],
    'controllers' => [
@@ -728,7 +813,8 @@ return [
            RapportCsiRechercheController::class => RapportCsiRechercheControllerFactory::class,
            RapportMiparcoursController::class => RapportMiparcoursControllerFactory::class,
            RapportMiparcoursRechercheController::class => RapportMiparcoursRechercheControllerFactory::class,
            RapportValidationController::class => RapportValidationControllerFactory::class
            RapportValidationController::class => RapportValidationControllerFactory::class,
            RapportAvisController::class => RapportAvisControllerFactory::class,
        ],
    ],
    'controller_plugins' => [
@@ -741,6 +827,7 @@ return [
            RapportActiviteForm::class => RapportActiviteFormFactory::class,
            RapportCsiForm::class => RapportCsiFormFactory::class,
            RapportMiparcoursForm::class => RapportMiparcoursFormFactory::class,
            RapportAvisForm::class => RapportAvisFormFactory::class,
        ],
    ],
];
+28 −0
Changes for module/Application/src/Application/Assertion/Rapport/RapportEntityAssertion.php: 28 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -45,6 +45,10 @@ class RapportEntityAssertion implements EntityAssertionInterface
            case RapportPrivileges::RAPPORT_ACTIVITE_VALIDER_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_SIEN:

            case RapportPrivileges::RAPPORT_CSI_TELEVERSER_TOUT:
            case RapportPrivileges::RAPPORT_CSI_TELEVERSER_SIEN:
@@ -66,6 +70,10 @@ class RapportEntityAssertion implements EntityAssertionInterface
            case RapportPrivileges::RAPPORT_ACTIVITE_VALIDER_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_DEVALIDER_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_SIEN:

            case RapportPrivileges::RAPPORT_CSI_TELEVERSER_SIEN:
            case RapportPrivileges::RAPPORT_CSI_SUPPRIMER_SIEN:
@@ -82,6 +90,10 @@ class RapportEntityAssertion implements EntityAssertionInterface
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_VALIDER_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_VALIDER_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_SIEN:

            case RapportPrivileges::RAPPORT_CSI_SUPPRIMER_TOUT:
            case RapportPrivileges::RAPPORT_CSI_SUPPRIMER_SIEN:
@@ -91,6 +103,14 @@ class RapportEntityAssertion implements EntityAssertionInterface
                $this->assertAucuneValidation();
        }

        switch ($privilege) {
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_AJOUTER_AVIS_SIEN:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_TOUT:
            case RapportPrivileges::RAPPORT_ACTIVITE_SUPPRIMER_AVIS_SIEN:
                $this->assertRapportFinDeThese();
        }

        return true;
    }

@@ -134,4 +154,12 @@ class RapportEntityAssertion implements EntityAssertionInterface
            "Le rapport ne doit pas avoir été validé"
        );
    }

    private function assertRapportFinDeThese()
    {
        $this->assertTrue(
            $this->rapport->getTypeRapport()->estRapportActivite() && $this->rapport->estFinal(),
            "Le rapport doit être un rapport d'activité de fin de thèse"
        );
    }
}
 No newline at end of file
+26 −0
Changes for module/Application/src/Application/Controller/Factory/Rapport/RapportAvisControllerFactory.php: 26 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller\Factory\Rapport;

use Application\Controller\Rapport\RapportAvisController;
use Application\Form\Rapport\RapportAvisForm;
use Application\Service\Rapport\Avis\RapportAvisService;
use Application\Service\Rapport\RapportService;
use Interop\Container\ContainerInterface;

class RapportAvisControllerFactory
{
    public function __invoke(ContainerInterface $container): RapportAvisController
    {
        $rapportService = $container->get(RapportService::class);
        $rapportAvisService = $container->get(RapportAvisService::class);
        $form = $container->get('FormElementManager')->get(RapportAvisForm::class);

        $controller = new RapportAvisController();
        $controller->setRapportService($rapportService);
        $controller->setRapportAvisService($rapportAvisService);
        $controller->setForm($form);

        return $controller;
    }
}
 No newline at end of file
+183 −0
Changes for module/Application/src/Application/Controller/Rapport/RapportAvisController.php: 183 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller\Rapport;

use Application\Controller\AbstractController;
use Application\Entity\Db\Rapport;
use Application\Entity\Db\RapportAvis;
use Application\EventRouterReplacerAwareTrait;
use Application\Filter\IdifyFilter;
use Application\Filter\IdifyFilterAwareTrait;
use Application\Form\Rapport\RapportAvisForm;
use Application\Service\Individu\IndividuServiceAwareTrait;
use Application\Service\Notification\NotifierServiceAwareTrait;
use Application\Service\Rapport\Avis\RapportAvisServiceAwareTrait;
use Application\Service\Rapport\RapportServiceAwareTrait;
use Doctrine\ORM\NoResultException;
use UnicaenApp\Exception\RuntimeException;
use Zend\Http\Response;

class RapportAvisController extends AbstractController
{
    use RapportServiceAwareTrait;
    use RapportAvisServiceAwareTrait;
    use IdifyFilterAwareTrait;
    use NotifierServiceAwareTrait;
    use IndividuServiceAwareTrait;
    use EventRouterReplacerAwareTrait;

    /**
     * @var string À redéfinir par les sous-classes.
     */
    protected $routeName;

    /**
     * @var string
     */
    protected $rapportAvisAjouteEventName = 'RAPPORT_AVIS_AJOUTE';
    protected $rapportAvisModifieEventName = 'RAPPORT_AVIS_MODIFIE';

    /**
     * @var RapportAvisForm
     */
    protected $form;

    /**
     * @param RapportAvisForm $form
     */
    public function setForm(RapportAvisForm $form)
    {
        $this->form = $form;
    }

    /**
     * @return array|\Zend\Http\Response
     */
    public function ajouterAction()
    {
        $rapport = $this->requestedRapport();

        $this->initForm();

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $this->form->setData($data);
            if ($this->form->isValid()) {
                /** @var RapportAvis $rapportAvis */
                $rapportAvis = $this->form->getData();
                $rapportAvis->setRapport($rapport);
                $this->rapportAvisService->saveRapportAvis($rapportAvis);

                // déclenchement d'un événement "avis ajouté"
                $this->events->trigger(
                    $this->rapportAvisAjouteEventName,
                    $rapportAvis,
                    []
                );

                $this->flashMessenger()->addSuccessMessage("Avis enregistré avec succès.");

                if ($redirectUrl = $this->params()->fromQuery('redirect')) {
                    return $this->redirect()->toUrl($redirectUrl);
                }

                return $this->redirect()->toRoute('these/identite', ['these' => $rapport->getThese()->getId()]);
            }
        }

        return [
            'rapport' => $rapport,
            'form' => $this->form,
        ];
    }

    public function modifierAction()
    {
        $rapportAvis = $this->requestedRapportAvis();
        $these = $rapportAvis->getRapport()->getThese();

        $this->initForm();
        $this->form->bind($rapportAvis);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $this->form->setData($data);
            if ($this->form->isValid()) {
                $this->rapportAvisService->saveRapportAvis($rapportAvis);

                // déclenchement d'un événement "avis modifié"
                $this->events->trigger(
                    $this->rapportAvisModifieEventName,
                    $rapportAvis,
                    []
                );

                $this->flashMessenger()->addSuccessMessage("Avis modifié avec succès.");

                if ($redirectUrl = $this->params()->fromQuery('redirect')) {
                    return $this->redirect()->toUrl($redirectUrl);
                }

                return $this->redirect()->toRoute('these/identite', ['these' => $these->getId()]);
            }
        }

        return [
            'rapport' => $rapportAvis->getRapport(),
            'form' => $this->form,
        ];
    }

    public function supprimerAction(): Response
    {
        $rapportAvis = $this->requestedRapportAvis();
        $these = $rapportAvis->getRapport()->getThese();

        $this->rapportAvisService->deleteRapportAvis($rapportAvis);

        $this->flashMessenger()->addSuccessMessage("Avis supprimé avec succès.");

        if ($redirectUrl = $this->params()->fromQuery('redirect')) {
            return $this->redirect()->toUrl($redirectUrl);
        }

        return $this->redirect()->toRoute('these/identite', ['these' => $these->getId()]);
    }

    /**
     * @return Rapport
     */
    private function requestedRapport(): Rapport
    {
        $id = $this->params()->fromRoute('rapport') ?: $this->params()->fromQuery('rapport');
        try {
            $rapport = $this->rapportService->findRapportById($id);
        } catch (NoResultException $e) {
            throw new RuntimeException("Aucun rapport trouvé avec cet id", 0, $e);
        }

        return $rapport;
    }

    /**
     * @return RapportAvis
     */
    private function requestedRapportAvis(): RapportAvis
    {
        $id = $this->params()->fromRoute('rapportAvis') ?: $this->params()->fromQuery('rapportAvis');
        try {
            $rapportAvis = $this->rapportAvisService->findRapportAvisById($id);
        } catch (NoResultException $e) {
            throw new RuntimeException("Aucun avis trouvé avec cet id : $id", 0, $e);
        }

        return $rapportAvis;
    }

    protected function initForm()
    {
        $this->form->setAvisPossibles(RapportAvis::AVIS);
    }
}
+1 −0
Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Rapport.dcm.xml: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
    </many-to-one>

    <one-to-many field="rapportValidations" target-entity="Application\Entity\Db\RapportValidation" mapped-by="rapport"/>
    <one-to-many field="rapportAvis" target-entity="Application\Entity\Db\RapportAvis" mapped-by="rapport"/>

    <field name="histoCreation" type="datetime" column="HISTO_CREATION"/>
    <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/>
Loading