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

[Structure] Retrait de la nommination manuelle des responsables et...

[Structure] Retrait de la nommination manuelle des responsables et gestionnaires (on se fie plus qu'au référentiel)
parent 8d49f31d
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -7,11 +7,15 @@
* Ajout des temoins hiérarchique et fonctionnelle pour les affectations
* Ajout du pourcentage de l'affectation pour les affectations
* [FIX] correction de la route de retour lors de l'abonnement/désabonnement à une formation
* [Formation] Ajout d'un bouton pour changer l'état vers un état donnée sans respecter le circuit
* [Formation] Ajout d'un bouton pour changer l'état vers un état donné sans respecter le circuit
* [Structure] Retrait de la nommination manuelle des responsables et gestionnaires (on se fie plus qu'au référentiel)

**Modifications de la base de donnée**

```sql
-- Nouvelles colonnes pour les roles
alter table unicaen_utilisateur_role add description text;

-- Nouvelles colonnes pour les affectations
alter table agent_carriere_affectation add t_hierarchique varchar(1) default 'N';
alter table agent_carriere_affectation add t_fonctionnelle varchar(1) default 'N';
@@ -25,9 +29,13 @@ WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, VALEUR, ORDRE) AS (
SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.VALEUR, d.ORDRE
FROM d
JOIN unicaen_parametre_categorie cp ON cp.CODE = 'CARRIERE';


```

**Évolution des bibliothèques**

```bash
composer update unicaen/utilisateur
composer update unicaen/privilege
```
+0 −38
Original line number Diff line number Diff line
@@ -12,8 +12,6 @@ use Structure\Entity\Db\StructureResponsable;
 */


$canEditerResponsable = false;
$canEditerGestionnaire = false;
?>

<div class="row">
@@ -25,17 +23,6 @@ $canEditerGestionnaire = false;

            Responsables
            <span class="badge"><?php echo count($responsables); ?></span>
            <?php if ($canEditerResponsable) : ?>
                <a
                    <?php /** @see \Structure\Controller\StructureController::ajouterResponsableAction() */ ?>
                    href="<?php echo $this->url('structure/ajouter-responsable', ['structure' => $structure->getId()], [], true); ?>"
                    class="ajax-modal"
                    data-event="modification"
                >
                        <span class="icon icon-ajouter" data-bs-toggle="tooltip" data-bs-html="true"
                              title="Ajouter un responsable à la structure <span class='highlight structure'><?php echo $structure->getLibelleLong(); ?></span>">
                        </span></a>
            <?php endif; ?>
        </h3>
        <ul>
            <?php foreach ($responsables as $responsable) : ?>
@@ -43,13 +30,6 @@ $canEditerGestionnaire = false;
                    <span title="Responsabilité valide sur la période du <?php echo ($responsable->getDateDebut())?$responsable->getDateDebut()->format('d/m/Y'):"N.C"; ?> au  <?php echo ($responsable->getDateFin())?$responsable->getDateFin()->format('d/m/Y'):"N.C"; ?>">
                        <?php echo $responsable->getAgent()->getDenomination(); ?>
                    </span>
                    <?php if ($responsable->getSource() AND $responsable->getSource()->getCode() === HasSourceInterface::SOURCE_EMC2 AND $canEditerResponsable) : ?>
                        <?php /** @see \Structure\Controller\StructureController::retirerResponsableAction()  */?>
                        <a href="<?php echo $this->url('structure/retirer-responsable', ['structure'=>$structure->getId(), 'responsable' => $responsable->getId()], [], true); ?>">
                            <span class="icon retirer" data-bs-toggle="tooltip" data-bs-html="true"
                                  title="Retirer un responsable à la structure <span class='highlight structure'><?php echo $structure->getLibelleLong(); ?></span>"></span>
                        </a>
                    <?php endif ?>
                </li>
            <?php endforeach; ?>
        </ul>
@@ -57,17 +37,6 @@ $canEditerGestionnaire = false;
        <h3>
            Gestionnaires
            <span class="badge"><?php echo count($gestionnaires); ?></span>
            <?php if ($canEditerGestionnaire) : ?>
                <a
                    <?php /** @see \Structure\Controller\StructureController::ajouterGestionnaireAction() */ ?>
                    href="<?php echo $this->url('structure/ajouter-gestionnaire', ['structure' => $structure->getId()], [], true); ?>"
                    class="ajax-modal"
                    data-event="modification"
                >
                        <span class="icon icon-ajouter" data-bs-toggle="tooltip" data-bs-html="true"
                              title="Ajouter un gestionnaire à la structure <span class='highlight structure'><?php echo $structure->getLibelleLong(); ?></span>">
                        </span></a>
            <?php endif; ?>
        </h3>
        <ul>
            <?php foreach ($gestionnaires as $gestionnaire) : ?>
@@ -75,13 +44,6 @@ $canEditerGestionnaire = false;
                    <span title="Responsabilité valide sur la période du <?php echo ($gestionnaire->getDateDebut())?$gestionnaire->getDateDebut()->format('d/m/Y'):"N.C"; ?> au  <?php echo ($gestionnaire->getDateFin())?$gestionnaire->getDateFin()->format('d/m/Y'):"N.C"; ?>">
                        <?php echo $gestionnaire->getAgent()->getDenomination(); ?>
                    </span>
                    <?php if ($gestionnaire->getSource() AND  $gestionnaire->getSource()->getCode() === HasSourceInterface::SOURCE_EMC2 AND $canEditerGestionnaire) : ?>
                        <?php /** @see \Structure\Controller\StructureController::retirerGestionnaireAction()  */?>
                        <a href="<?php echo $this->url('structure/retirer-gestionnaire', ['structure'=>$structure->getId(), 'gestionnaire' => $gestionnaire->getId()], [], true); ?>">
                            <span class="icon retirer" data-bs-toggle="tooltip" data-bs-html="true"
                                  title="Retirer un gestionnaire à la structure <span class='highlight structure'><?php echo $structure->getLibelleLong(); ?></span>"></span>
                        </a>
                    <?php endif ?>
                </li>
            <?php endforeach; ?>
        </ul>
+0 −72
Original line number Diff line number Diff line
@@ -8,14 +8,6 @@ use Structure\Controller\StructureController;
use Structure\Controller\StructureControllerFactory;
use Structure\Event\InfoStructure\InfoStructureEvent;
use Structure\Event\InfoStructure\InfoStructureEventFactory;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireForm;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireFormFactory;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireHydrator;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireHydratorFactory;
use Structure\Form\AjouterResponsable\AjouterResponsableForm;
use Structure\Form\AjouterResponsable\AjouterResponsableFormFactory;
use Structure\Form\AjouterResponsable\AjouterResponsableHydrator;
use Structure\Form\AjouterResponsable\AjouterResponsableHydratorFactory;
use Structure\Provider\Privilege\StructurePrivileges;
use Structure\Service\Notification\NotificationService;
use Structure\Service\Notification\NotificationServiceFactory;
@@ -99,18 +91,6 @@ return [
                    'privileges' => StructurePrivileges::STRUCTURE_DESCRIPTION,
                    'assertion'  => StructureAssertion::class,
                ],
                [
                    'controller' => StructureController::class,
                    'action' => [
                        'ajouter-gestionnaire',
                        'retirer-gestionnaire',
                        'ajouter-responsable',
                        'retirer-responsable',
                    ],
                    'privileges' => StructurePrivileges::STRUCTURE_GESTIONNAIRE,
                    //'assertion'  => StructureAssertion::class,

                ],
                [
                    'controller' => StructureController::class,
                    'action' => [
@@ -226,54 +206,6 @@ return [
                        'may_terminate' => true,
                        'child_routes' => [],
                    ],
                    'ajouter-gestionnaire' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/ajouter-gestionnaire/:structure',
                            'defaults' => [
                                'controller' => StructureController::class,
                                'action'     => 'ajouter-gestionnaire',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [],
                    ],
                    'retirer-gestionnaire' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/retirer-gestionnaire/:structure/:gestionnaire',
                            'defaults' => [
                                'controller' => StructureController::class,
                                'action'     => 'retirer-gestionnaire',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [],
                    ],
                    'ajouter-responsable' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/ajouter-responsable/:structure',
                            'defaults' => [
                                'controller' => StructureController::class,
                                'action'     => 'ajouter-responsable',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [],
                    ],
                    'retirer-responsable' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/retirer-responsable/:structure/:responsable',
                            'defaults' => [
                                'controller' => StructureController::class,
                                'action'     => 'retirer-responsable',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [],
                    ],
                    'ajouter-manuellement-agent' => [
                        'type'  => Segment::class,
                        'options' => [
@@ -405,14 +337,10 @@ return [
    ],
    'form_elements' => [
        'factories' => [
            AjouterGestionnaireForm::class => AjouterGestionnaireFormFactory::class,
            AjouterResponsableForm::class => AjouterResponsableFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            AjouterGestionnaireHydrator::class => AjouterGestionnaireHydratorFactory::class,
            AjouterResponsableHydrator::class => AjouterResponsableHydratorFactory::class,
        ],
    ]

+0 −114
Original line number Diff line number Diff line
@@ -27,15 +27,8 @@ use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\JsonModel;
use Laminas\View\Model\ViewModel;
use Structure\Entity\Db\StructureAgentForce;
use Structure\Entity\Db\StructureGestionnaire;
use Structure\Entity\Db\StructureResponsable;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireForm;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireFormAwareTrait;
use Structure\Form\AjouterResponsable\AjouterResponsableForm;
use Structure\Form\AjouterResponsable\AjouterResponsableFormAwareTrait;
use Structure\Service\Structure\StructureServiceAwareTrait;
use Structure\Service\StructureAgentForce\StructureAgentForceServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\View\Model\CsvModel;
use UnicaenDbImport\Entity\Db\Service\Source\SourceServiceAwareTrait;
use UnicaenDbImport\Entity\Db\Source;
@@ -63,8 +56,6 @@ class StructureController extends AbstractActionController {


    use AgentMissionSpecifiqueFormAwareTrait;
    use AjouterGestionnaireFormAwareTrait;
    use AjouterResponsableFormAwareTrait;
    use SelectionAgentFormAwareTrait;
    use HasDescriptionFormAwareTrait;

@@ -220,111 +211,6 @@ class StructureController extends AbstractActionController {
        return $this->redirect()->toRoute('structure/afficher', ['structure' => $structure->getId()], [], true);
    }

    /** GESTION DES RESPONSABLES ET GESTIONNAIRES *******************************************************************/

    public function ajouterResponsableAction() : ViewModel
    {
        $structure = $this->getStructureService()->getRequestedStructure($this);
        if ($structure === null) throw new RuntimeException("Aucun structure pour l'identifiant [".$this->params()->fromRoute(['structure'])."]");

        $responsable = new StructureResponsable();
        $responsable->setStructure($structure);

        /** @var AjouterResponsableForm $form */
        $form = $this->getAjouterResponsableForm();
        $form->get('responsable')->setAutocompleteSource($this->url()->fromRoute('agent/rechercher-large', [], [], true));
        $form->setAttribute('action', $this->url()->fromRoute('structure/ajouter-responsable', ['structure' => $structure->getId()]));
        $form->bind($responsable);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $responsable->setCreatedOn();
                /** @var Source $source */
                $source = $this->sourceService->getRepository()->findOneBy(['code' => HasSourceInterface::SOURCE_EMC2]);
                $responsable->setSource($source);
                $this->getStructureService()->getEntityManager()->persist($responsable);
                $this->getStructureService()->getEntityManager()->flush($responsable);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate("application/default/default-form");
        $vm->setVariables([
            'title' => "Ajout d'un responsable à une structure",
            'form' => $form,
        ]);
        return $vm;
    }

    public function retirerResponsableAction() : Response
    {
        $structure = $this->getStructureService()->getRequestedStructure($this);
        $responsable = $this->getAgentService()->getEntityManager()->getRepository(StructureResponsable::class)->find($this->params()->fromRoute('responsable'));

        if ($responsable) {
            $this->getStructureService()->getEntityManager()->remove($responsable);
            $this->getStructureService()->getEntityManager()->flush($responsable);
        }

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

    public function ajouterGestionnaireAction() : ViewModel
    {
        $structure = $this->getStructureService()->getRequestedStructure($this);
        if ($structure === null) throw new RuntimeException("Aucun structure pour l'identifiant [".$this->params()->fromRoute(['structure'])."]");

        $gestionnaire = new StructureGestionnaire();
        $gestionnaire->setStructure($structure);

        /** @var AjouterGestionnaireForm $form */
        $form = $this->getAjouterGestionnaireForm();
        $form->get('gestionnaire')->setAutocompleteSource($this->url()->fromRoute('agent/rechercher-large', [], [], true));
        $form->setAttribute('action', $this->url()->fromRoute('structure/ajouter-gestionnaire', ['structure' => $structure->getId()]));
        $form->bind($gestionnaire);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $gestionnaire->setCreatedOn();
                /** @var Source $source */
                $source = $this->sourceService->getRepository()->findOneBy(['code' => HasSourceInterface::SOURCE_EMC2]);
                $gestionnaire->setSource($source);
                $gestionnaire->setIdSource($structure->getId() ."_". $gestionnaire->getAgent()->getId());
                $this->getStructureService()->getEntityManager()->persist($gestionnaire);
                $this->getStructureService()->getEntityManager()->flush($gestionnaire);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate("application/default/default-form");
        $vm->setVariables([
            'title' => "Ajout d'un gestionnaire à une structure",
            'form' => $form,
        ]);
        return $vm;
    }

    public function retirerGestionnaireAction() : Response
    {
        $structure = $this->getStructureService()->getRequestedStructure($this);
        $gestionnaire = $this->getAgentService()->getEntityManager()->getRepository(StructureGestionnaire::class)->find($this->params()->fromRoute('gestionnaire'));

        if ($gestionnaire) {
            $this->getStructureService()->getEntityManager()->remove($gestionnaire);
            $this->getStructureService()->getEntityManager()->flush($gestionnaire);
        }

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

    /** Fonctions de recherche ****************************************************************************************/

    public function rechercherAction() : JsonModel
+0 −8
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@ use Formation\Service\FormationInstanceInscrit\FormationInstanceInscritService;
use Interop\Container\ContainerInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Structure\Form\AjouterGestionnaire\AjouterGestionnaireForm;
use Structure\Form\AjouterResponsable\AjouterResponsableForm;
use Structure\Service\Structure\StructureService;
use Structure\Service\StructureAgentForce\StructureAgentForceService;
use UnicaenDbImport\Entity\Db\Service\Source\SourceService;
@@ -76,14 +74,10 @@ class StructureControllerFactory {

        /**
         * @var AgentMissionSpecifiqueForm $affectationForm
         * @var AjouterGestionnaireForm $ajouterGestionnaire
         * @var AjouterResponsableForm $ajouterResponsable
         * @var SelectionAgentForm $selectionAgentForm
         * @var HasDescriptionFormAwareTrait $hasDescriptionForm
         */
        $affectationForm = $container->get('FormElementManager')->get(AgentMissionSpecifiqueForm::class);
        $ajouterGestionnaire = $container->get('FormElementManager')->get(AjouterGestionnaireForm::class);
        $ajouterResponsable = $container->get('FormElementManager')->get(AjouterResponsableForm::class);
        $selectionAgentForm = $container->get('FormElementManager')->get(SelectionAgentForm::class);
        $hasDescriptionForm = $container->get('FormElementManager')->get(HasDescriptionForm::class);

@@ -107,8 +101,6 @@ class StructureControllerFactory {
        $controller->setSourceService($sourceService);

        $controller->setAgentMissionSpecifiqueForm($affectationForm);
        $controller->setAjouterGestionnaireForm($ajouterGestionnaire);
        $controller->setAjouterResponsableForm($ajouterResponsable);
        $controller->setSelectionAgentForm($selectionAgentForm);
        $controller->setHasDescriptionForm($hasDescriptionForm);

Loading