Commit 3447b55f authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Déclaration tardive de visoconférence ajouté aux interventions de soutenance

parent 23bfb2fd
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ Journal des modifications
-----
- Ajout de la mention "La réservation du lieu de soutenance n'est pas faite automatiquement et reste à votre charge"
- Meilleure gestion des tokens des membres d'une soutenance
- Déclaration tardive de visoconférence ajouté aux interventions de soutenance 

3.0.8
-----
+6 −0
Changes for doc/release-notes/v3.0.10.md: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -14,3 +14,9 @@ git fetch --tags && git checkout --force 3.0.10 && bash ./install.sh
    - apache2-mod-php7.3 : `service apache2 reload`

## 2. Dans la base de données

Modification liée aux ajouts de nouvelle intervention de soutenance.

```sql
alter table soutenance_intervention add complement text;
```
 No newline at end of file
+22 −0
Changes for module/Soutenance/config/others/intervention.config.php: 22 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@ return [
                    'controller' => InterventionController::class,
                    'action' => [
                        'toggle-president-distanciel',
                        'ajouter-visioconference-tardive',
                        'supprimer-visioconference-tardive',
                    ],
                    'privileges' => InterventionPrivileges::INTERVENTION_MODIFIER,
                ],
@@ -129,6 +131,26 @@ return [
                                    ],
                                ],
                            ],
                            'ajouter-visioconference-tardive' => [
                                'type' => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route' => '/ajouter-visioconference-tardive',
                                    'defaults' => [
                                        'action' => 'ajouter-visioconference-tardive',
                                    ],
                                ],
                            ],
                            'supprimer-visioconference-tardive' => [
                                'type' => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route' => '/supprimer-visioconference-tardive/:intervention',
                                    'defaults' => [
                                        'action' => 'supprimer-visioconference-tardive',
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
+89 −1
Changes for module/Soutenance/src/Soutenance/Controller/InterventionController.php: 89 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -3,21 +3,30 @@
namespace Soutenance\Controller;

use Application\Controller\AbstractController;
use Application\Entity\Db\NatureFichier;
use Application\Entity\Db\VersionFichier;
use Application\Service\FichierThese\FichierTheseServiceAwareTrait;
use Application\Service\These\TheseServiceAwareTrait;
use Soutenance\Entity\Intervention;
use Soutenance\Entity\Justificatif;
use Soutenance\Entity\Membre;
use Soutenance\Entity\Parametre;
use Soutenance\Service\Intervention\InterventionServiceAwareTrait;
use Soutenance\Service\Justificatif\JustificatifServiceAwareTrait;
use Soutenance\Service\Membre\MembreServiceAwareTrait;
use Soutenance\Service\Parametre\ParametreServiceAwareTrait;
use Soutenance\Service\Proposition\PropositionServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use Zend\Http\Response;
use Zend\View\Model\ViewModel;

class InterventionController extends AbstractController {
    use EntityManagerAwareTrait;
    use FichierTheseServiceAwareTrait;
    use InterventionServiceAwareTrait;
    use JustificatifServiceAwareTrait;
    use MembreServiceAwareTrait;
    use ParametreServiceAwareTrait;
    use PropositionServiceAwareTrait;
    use TheseServiceAwareTrait;
@@ -27,16 +36,24 @@ class InterventionController extends AbstractController {
        return new ViewModel([]);
    }

    public function afficherAction()
    public function afficherAction() : ViewModel
    {
        $these = $this->getTheseService()->getRequestedThese($this);
        $proposition = $this->getPropositionService()->findByThese($these);
        $justificatifs = $this->getJustificatifService()->generateListeJustificatif($proposition, true);
        $distanciels = $this->getInterventionService()->getInterventionByTheseAndType($these, Intervention::TYPE_DISTANCIEL);
        $visios = $this->getInterventionService()->getInterventionByTheseAndType($these, Intervention::TYPE_VISIO_TARDIVE);
        $membres = [];
        foreach($proposition->getMembres() as $membre) {
            $membres[$membre->getId()] = $membre;
        }

        return new ViewModel([
            'these' => $these,
            'distanciel' => (!empty($distanciels))?current($distanciels):null,
            'visios' => (!empty($visios))?$visios:null,
            'proposition' => $proposition,
            'membres' => $membres,
            'justificatifs' => $justificatifs,
            'urlFichierThese' => $this->urlFichierThese(),
            'FORMULAIRE_DELEGUATION' => $this->getParametreService()->getParametreByCode(Parametre::CODE_FORMULAIRE_DELEGUATION)->getValeur(),
@@ -66,4 +83,75 @@ class InterventionController extends AbstractController {

        return $this->redirect()->toRoute('soutenance/intervention/afficher', ['these' => $these->getId()], [], true);
    }

    public function ajouterVisioconferenceTardiveAction() : ViewModel
    {
        $these = $this->getTheseService()->getRequestedThese($this);
        $proposition = $this->getPropositionService()->findByThese($these);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $files = $request->getFiles();
            $membre = $this->getMembreService()->find($data['membre']);

            if ($membre !== null and ($files !== null AND !empty($files))) {

                // 1 - Justificatif
                $files = ['files' => $files->toArray()];
                $nature = $this->fichierTheseService->fetchNatureFichier(NatureFichier::CODE_DELEGUATION_SIGNATURE);
                $version = $this->fichierTheseService->fetchVersionFichier(VersionFichier::CODE_ORIG);
                $fichiers = $this->fichierTheseService->createFichierThesesFromUpload($these, $files, $nature, $version);
                $justificatif = new Justificatif();
                $justificatif->setProposition($proposition);
                $justificatif->setFichier($fichiers[0]);
                $justificatif->setMembre($membre);
                $this->getJustificatifService()->create($justificatif);

                // 2 - Modification du membre
                $membre->setVisio(true);
                $this->getMembreService()->update($membre);

                // 3- Déclaration de l'intervention
                $intervention = new Intervention();
                $intervention->setType(Intervention::TYPE_VISIO_TARDIVE);
                $intervention->setThese($these);
                $intervention->setComplement($data['membre']);
                $this->getInterventionService()->create($intervention);
            }
            exit();
        }

        $membres = $proposition->getMembres()->toArray();
        $membres = array_filter($membres, function(Membre $membre) { return $membre->isVisio() === false; });

        return new ViewModel([
            'title' => "Ajout d'une déclaration de visioconférence tardive pour un membre du jury",
            'membres' => $membres,
            'these' => $these,
        ]);
    }

    public function supprimerVisioconferenceTardiveAction() : Response
    {
        $intervention = $this->getInterventionService()->getRequestedIntervention($this);
        $these = $intervention->getThese();
        $proposition = $this->getPropositionService()->findByThese($these);

        /** retrait de la déclaration de viso sur le membre et du justificatif */
        $membre = $this->getMembreService()->find($intervention->getComplement());
        if ($membre !== null) {
            $membre->setVisio(false);
            $this->getMembreService()->update($membre);

            $justificatif = $proposition->getJustificatif(NatureFichier::CODE_DELEGUATION_SIGNATURE, $membre);
            if ($justificatif !== null) {
                $this->getJustificatifService()->historise($justificatif);
            }
        }

        $this->getInterventionService()->delete($intervention);

        return $this->redirect()->toRoute('soutenance/intervention/afficher', ['these' => $these->getId()], [], true);
    }
}
 No newline at end of file
+8 −0
Changes for module/Soutenance/src/Soutenance/Controller/InterventionControllerFactory.php: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,11 +2,13 @@

namespace Soutenance\Controller;

use Application\Service\FichierThese\FichierTheseService;
use Application\Service\These\TheseService;
use Doctrine\ORM\EntityManager;
use Interop\Container\ContainerInterface;
use Soutenance\Service\Intervention\InterventionService;
use Soutenance\Service\Justificatif\JustificatifService;
use Soutenance\Service\Membre\MembreService;
use Soutenance\Service\Parametre\ParametreService;
use Soutenance\Service\Proposition\PropositionService;

@@ -20,23 +22,29 @@ class InterventionControllerFactory
    {
        /**
         * @var EntityManager $entityManager
         * @var FichierTheseService $fichierTheseService
         * @var InterventionService $interventionService
         * @var JustificatifService $justificatifService
         * @var MembreService $membreService
         * @var ParametreService $parametreService
         * @var PropositionService $propositionService
         * @var TheseService $theseService
         */
        $entityManager = $container->get('doctrine.entitymanager.orm_default');
        $fichierTheseService = $container->get(FichierTheseService::class);
        $interventionService = $container->get(InterventionService::class);
        $justificatifService = $container->get(JustificatifService::class);
        $membreService = $container->get(MembreService::class);
        $parametreService = $container->get(ParametreService::class);
        $propositionService = $container->get(PropositionService::class);
        $theseService = $container->get(TheseService::class);

        $controller = new InterventionController();
        $controller->setEntityManager($entityManager);
        $controller->setFichierTheseService($fichierTheseService);
        $controller->setInterventionService($interventionService);
        $controller->setJustificatifService($justificatifService);
        $controller->setMembreService($membreService);
        $controller->setParametreService($parametreService);
        $controller->setPropositionService($propositionService);
        $controller->setTheseService($theseService);
Loading