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

Demande externe v0.9

parent b58b8ff1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ class UploadHydrator implements HydratorInterface {
    public function extract($object): array
    {
        $data = [
            'nature' => ($object)?$object->getNature()->getId():null,
            'nature' => ($object AND $object->getNature())?$object->getNature()->getId():null,
        ];
        return $data;
    }
+50 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ use Formation\Form\DemandeExterne\DemandeExterneHydratorFactory;
use Formation\Provider\Privilege\DemandeexternePrivileges;
use Formation\Service\DemandeExterne\DemandeExterneService;
use Formation\Service\DemandeExterne\DemandeExterneServiceFactory;
use Formation\View\Helper\DemandeExterneViewHelper;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenPrivilege\Guard\PrivilegeController;
@@ -51,6 +52,8 @@ return [
                    'controller' => DemandeExterneController::class,
                    'action' => [
                        'index',
                        'rechercher-agent',
                        'rechercher-organisme',
                    ],
                    'privileges' => [
                        DemandeexternePrivileges::DEMANDEEXTERNE_INDEX,
@@ -80,6 +83,8 @@ return [
                    'controller' => DemandeExterneController::class,
                    'action' => [
                        'modifier',
                        'ajouter-devis',
                        'retirer-devis',
                    ],
                    'privileges' => [
                        DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER,
@@ -212,6 +217,26 @@ return [
                                    ],
                                ],
                            ],
                            'ajouter-devis' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/ajouter-devis/:demande-externe',
                                    'defaults' => [
                                        'controller' => DemandeExterneController::class,
                                        'action' => 'ajouter-devis'
                                    ],
                                ],
                            ],
                            'retirer-devis' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/retirer-devis/:devis',
                                    'defaults' => [
                                        'controller' => DemandeExterneController::class,
                                        'action' => 'retirer-devis'
                                    ],
                                ],
                            ],
                            'historiser' => [
                                'type'  => Segment::class,
                                'options' => [
@@ -292,6 +317,26 @@ return [
                                    ],
                                ],
                            ],
                            'rechercher-agent' => [
                                'type'  => Literal::class,
                                'options' => [
                                    'route'    => '/rechercher-agent',
                                    'defaults' => [
                                        'controller' => DemandeExterneController::class,
                                        'action' => 'rechercher-agent'
                                    ],
                                ],
                            ],
                            'rechercher-organisme' => [
                                'type'  => Literal::class,
                                'options' => [
                                    'route'    => '/rechercher-organisme',
                                    'defaults' => [
                                        'controller' => DemandeExterneController::class,
                                        'action' => 'rechercher-organisme'
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
@@ -319,6 +364,11 @@ return [
        'factories' => [
            DemandeExterneHydrator::class => DemandeExterneHydratorFactory::class,
        ],
    ],
    'view_helpers' => [
        'invokables' => [
            'demandeExterne' => DemandeExterneViewHelper::class,
        ]
    ]

];
 No newline at end of file
+9 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ use Application\Constant\RoleConstant;
use Application\Entity\Db\Agent;
use Application\Service\Agent\AgentServiceAwareTrait;
use Formation\Entity\Db\DemandeExterne;
use Formation\Provider\Etat\DemandeExterneEtats;
use Formation\Provider\Privilege\DemandeexternePrivileges;
use Formation\Provider\Role\FormationRoles;
use Formation\Service\DemandeExterne\DemandeExterneServiceAwareTrait;
@@ -45,6 +46,7 @@ class DemandeExterneAssertion extends AbstractAssertion {
            if ($roleId === Structure::ROLE_RESPONSABLE) $liste = $structure->getResponsables();
            foreach ($liste as $agent) $agents[$agent->getId()] = $agent;
        }
        $agents = array_map(function ($a) { return $a->getAgent();}, $agents);
        return $agents;
    }

@@ -66,18 +68,23 @@ class DemandeExterneAssertion extends AbstractAssertion {
            case FormationRoles::GESTIONNAIRE_FORMATION :
                return true;
            case RoleConstant::PERSONNEL :
                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER AND $demande->getEtat()->getCode() !== DemandeExterneEtats::ETAT_CREATION_EN_COURS) return false;
                return $agent->getUtilisateur() === $user;
            case Agent::ROLE_AUTORITE :
                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER AND $demande->getEtat()->getCode() !== DemandeExterneEtats::ETAT_CREATION_EN_COURS) return false;
                $autorites = $this->getAgentService()->computeAutorites($agent);
                return DemandeExterneAssertion::userInAgents($user, $autorites);
            case Agent::ROLE_SUPERIEURE :
                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER AND $demande->getEtat()->getCode() !== DemandeExterneEtats::ETAT_CREATION_EN_COURS) return false;
                $superieurs = $this->getAgentService()->computeSuperieures($agent);
                return DemandeExterneAssertion::userInAgents($user, $superieurs);
            case Structure::ROLE_RESPONSABLE :
                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER AND $demande->getEtat()->getCode() !== DemandeExterneEtats::ETAT_CREATION_EN_COURS) return false;
                $structures = $this->getAgentService()->computesStructures($agent);
                $responsables = DemandeExterneAssertion::agentInStructures(Structure::ROLE_RESPONSABLE, $structures);
                return DemandeExterneAssertion::userInAgents($user, $responsables);
            case Structure::ROLE_GESTIONNAIRE :
                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER AND $demande->getEtat()->getCode() !== DemandeExterneEtats::ETAT_CREATION_EN_COURS) return false;
                $structures = $this->getAgentService()->computesStructures($agent);
                $gestionnaires = DemandeExterneAssertion::agentInStructures(Structure::ROLE_GESTIONNAIRE, $structures);
                return DemandeExterneAssertion::userInAgents($user, $gestionnaires);
@@ -111,6 +118,8 @@ class DemandeExterneAssertion extends AbstractAssertion {
            case 'ajouter' :
                return $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_AJOUTER, $entityAgent);
            case 'modifier' :
            case 'ajouter-devis' :
            case 'retirer-devis' :
                return $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER);
            case 'historiser' :
            case 'restaurer' :
+109 −5
Original line number Diff line number Diff line
@@ -3,6 +3,10 @@
namespace Formation\Controller;

use Application\Service\Agent\AgentServiceAwareTrait;
use Fichier\Entity\Db\Fichier;
use Fichier\Form\Upload\UploadFormAwareTrait;
use Fichier\Service\Fichier\FichierServiceAwareTrait;
use Fichier\Service\Nature\NatureServiceAwareTrait;
use Formation\Entity\Db\DemandeExterne;
use Formation\Form\DemandeExterne\DemandeExterneFormAwareTrait;
use Formation\Form\Inscription\InscriptionFormAwareTrait;
@@ -14,6 +18,7 @@ use Laminas\Http\Request;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Laminas\View\Model\JsonModel;
use Laminas\View\Model\ViewModel;
use UnicaenEtat\Service\Etat\EtatServiceAwareTrait;

@@ -21,18 +26,36 @@ use UnicaenEtat\Service\Etat\EtatServiceAwareTrait;

class DemandeExterneController extends AbstractActionController {
    use AgentServiceAwareTrait;
    use EtatServiceAwareTrait;
    use DemandeExterneServiceAwareTrait;
    use EtatServiceAwareTrait;
    use FichierServiceAwareTrait;
    use NatureServiceAwareTrait;
    use NotificationServiceAwareTrait;

    use DemandeExterneFormAwareTrait;
    use UploadFormAwareTrait;
    use InscriptionFormAwareTrait;

    public function indexAction() : ViewModel
    {
        $demandes = $this->getDemandeExterneService()->getDemandesExternes();
        $fromQueries  = $this->params()->fromQuery();
        $params = [
            'agent' => $this->getAgentService()->getAgent($fromQueries['agent']['id']),
            'organisme' => $fromQueries['organisme']['id'],
            'etat' => $this->getEtatService()->getEtat((trim($fromQueries['etat'])!=='')?trim($fromQueries['etat']):null),
            'historise' => $fromQueries['historise'],
        ];

        $demandes = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($params);

        $etats = $this->getEtatService()->getEtatsByTypeCode(DemandeExterneEtats::TYPE);

        return new ViewModel([
            'demandes' => $demandes,
            'etats' => $etats,

        return new ViewModel(['demandes' => $demandes]);
            'params' => $params
        ]);
    }

    public function afficherAction() : ViewModel
@@ -271,7 +294,7 @@ class DemandeExterneController extends AbstractActionController {
            'inscription' => $demande,
            'form' => $form,
        ]);
        $vm->setTemplate('formation/demande-externe');
        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
        return $vm;
    }

@@ -305,7 +328,88 @@ class DemandeExterneController extends AbstractActionController {
            'inscription' => $demande,
            'form' => $form,
        ]);
        $vm->setTemplate('formation/demande-externe');
        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
        return $vm;
    }

    /** DEVIS *********************************************************************************************/

    public function ajouterDevisAction()
    {
        $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);

        $fichier = new Fichier();
        $devisNature = $this->getNatureService()->getNatureByCode('DEMANDEEXTERNE_DEVIS');
        $fichier->setNature($devisNature);
        $form = $this->getUploadForm();
        $form->setAttribute('action', $this->url()->fromRoute('formation/demande-externe/ajouter-devis', ['demande-externe' => $demande->getId()], [], true));
        $form->get('nature')->setValueOptions([$devisNature->getId() => $devisNature->getLibelle()]);
        $form->bind($fichier);


        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $files = $request->getFiles();
            $file = $files['fichier'];

            if ($file['name'] != '') {
                $nature = $this->getNatureService()->getNature($data['nature']);
                $fichier = $this->getFichierService()->createFichierFromUpload($file, $nature);
                $demande->addDevis($fichier);
                $this->getDemandeExterneService()->update($demande);
            }
            return $this->redirect()->toRoute('inscription-formation', [], [], true);
        }

        $vm = new ViewModel();
        $vm->setTemplate('formation/default/default-form');
        $vm->setVariables([
            'title' => 'Téléverserment d\'un fichier',
            'form' => $form,
        ]);
        return $vm;
    }

    public function retirerDevisAction() : Response
    {
        $fichier = $this->getFichierService()->getRequestedFichier($this, 'devis');
        $this->getFichierService()->delete($fichier);

        return $this->redirect()->toRoute('inscription-formation', [], ['fragment' => "demandes"], true);
    }

    /** FONCTIONS POUR LE FILTRE ***************************************************************************/

    public function rechercherAgentAction() : JsonModel
    {
        if (($term = $this->params()->fromQuery('term'))) {
            $agents = $this->getDemandeExterneService()->findAgentByTerm($term);
            $result = $this->getAgentService()->formatAgentJSON($agents);
            return new JsonModel($result);
        }
        exit;
    }

    public function rechercherOrganismeAction() : JsonModel
    {
        if (($term = $this->params()->fromQuery('term'))) {
            $organismes = $this->getDemandeExterneService()->findOrganismeByTerm($term);

            $result = [];
            foreach ($organismes as $organisme) {
                $result[] = array(
                    'id' => $organisme,
                    'label' => $organisme,
                );
            }
            usort($result, function ($a, $b) {
                return strcmp($a['label'], $b['label']);
            });

            return new JsonModel($result);
        }
        exit;
    }
}
 No newline at end of file
+15 −0
Original line number Diff line number Diff line
@@ -3,6 +3,9 @@
namespace Formation\Controller;

use Application\Service\Agent\AgentService;
use Fichier\Form\Upload\UploadForm;
use Fichier\Service\Fichier\FichierService;
use Fichier\Service\Nature\NatureService;
use Formation\Form\DemandeExterne\DemandeExterneForm;
use Formation\Form\Inscription\InscriptionForm;
use Formation\Service\DemandeExterne\DemandeExterneService;
@@ -26,27 +29,39 @@ class DemandeExterneControllerFactory {
         * @var AgentService $agentService
         * @var DemandeExterneService $demandeExterneService
         * @var EtatService $etatService
         * @var FichierService $fichierService
         * @var NatureService $natureService
         * @var NotificationService $notificationService
         */
        $agentService = $container->get(AgentService::class);
        $demandeExterneService = $container->get(DemandeExterneService::class);
        $etatService = $container->get(EtatService::class);
        $fichierService = $container->get(FichierService::class);
        $natureService = $container->get(NatureService::class);
        $notificationService = $container->get(NotificationService::class);

        /**
         * @var DemandeExterneForm $demandeExterneForm
         * @var InscriptionForm $inscriptionForm
         * @var UploadForm $uploadForm
         */
        $demandeExterneForm = $container->get('FormElementManager')->get(DemandeExterneForm::class);
        $inscriptionForm = $container->get('FormElementManager')->get(InscriptionForm::class);
        $uploadForm = $container->get('FormElementManager')->get(UploadForm::class);


        $controller = new DemandeExterneController();
        $controller->setAgentService($agentService);
        $controller->setDemandeExterneService($demandeExterneService);
        $controller->setEtatService($etatService);
        $controller->setFichierService($fichierService);
        $controller->setNatureService($natureService);
        $controller->setNotificationService($notificationService);

        $controller->setDemandeExterneForm($demandeExterneForm);
        $controller->setInscriptionForm($inscriptionForm);
        $controller->setUploadForm($uploadForm);

        return $controller;
    }
}
 No newline at end of file
Loading