Loading module/Application/config/merged/hierarchie.config.php +19 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,10 @@ namespace Application; use Application\Controller\AgentHierarchieController; use Application\Controller\AgentHierarchieControllerFactory; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculForm; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculFormFactory; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculHydrator; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculHydratorFactory; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationForm; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationFormFactory; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationHydrator; Loading @@ -29,6 +33,7 @@ return [ 'index', 'afficher', 'importer', 'calculer', ], 'privileges' => [ AgentPrivileges::AGENT_INDEX, //todo "Faites mieux !!!" Loading Loading @@ -78,6 +83,18 @@ return [ ], 'may_terminate' => true, ], 'calculer' => [ 'type' => Literal::class, 'options' => [ 'route' => '/calculer', 'defaults' => [ /** @see AgentHierarchieController::calculerAction() */ 'controller' => AgentHierarchieController::class, 'action' => 'calculer', ], ], 'may_terminate' => true, ], ], ], ], Loading @@ -98,11 +115,13 @@ return [ ], 'form_elements' => [ 'factories' => [ AgentHierarchieCalculForm::class => AgentHierarchieCalculFormFactory::class, AgentHierarchieImportationForm::class => AgentHierarchieImportationFormFactory::class, ], ], 'hydrators' => [ 'factories' => [ AgentHierarchieCalculHydrator::class => AgentHierarchieCalculHydratorFactory::class, AgentHierarchieImportationHydrator::class => AgentHierarchieImportationHydratorFactory::class, ], ], Loading module/Application/src/Application/Controller/AgentHierarchieController.php +75 −0 Original line number Diff line number Diff line Loading @@ -4,18 +4,22 @@ namespace Application\Controller; use Application\Entity\Db\AgentAutorite; use Application\Entity\Db\AgentSuperieur; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculFormAwareTrait; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationFormAwareTrait; use Application\Service\Agent\AgentServiceAwareTrait; use Application\Service\AgentAutorite\AgentAutoriteServiceAwareTrait; use Application\Service\AgentSuperieur\AgentSuperieurServiceAwareTrait; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Structure\Service\Structure\StructureServiceAwareTrait; class AgentHierarchieController extends AbstractActionController { use AgentServiceAwareTrait; use AgentAutoriteServiceAwareTrait; use AgentSuperieurServiceAwareTrait; use StructureServiceAwareTrait; use AgentHierarchieCalculFormAwareTrait; use AgentHierarchieImportationFormAwareTrait; public function indexAction() : ViewModel Loading Loading @@ -124,4 +128,75 @@ class AgentHierarchieController extends AbstractActionController return $vm; } public function calculerAction() : ViewModel { $form = $this->getAgentHierarchieCalculForm(); $form->setAttribute('action', $this->url()->fromRoute('agent/hierarchie/calculer', ['mode' => 'preview', 'structure' => null], [], true)); $request = $this->getRequest(); if ($request->isPost()) { $error = []; $data = $request->getPost(); $mode = $data['mode']; $structureId = $data['structure']; $structure = $this->getStructureService()->getStructure($structureId); $structures = $this->getStructureService()->getStructuresFilles($structure, true); $agents = $this->getAgentService()->getAgentsByStructures($structures); $superieurs = []; $autorites = []; foreach ($agents as $agent) { $superieurs[$agent->getId()] = $this->getAgentService()->computeSuperieures($agent); $autorites[$agent->getId()] = $this->getAgentService()->computeAutorites($agent, $superieurs[$agent->getId()]); } if ($mode === 'compute' AND empty($error)) { $warning = []; foreach ($agents as $agent) { $this->getAgentAutoriteService()->historiseAll($agent); if (empty($autorites[$agent->getId()])) { $warning[] = "Aucune autorité n'a pu être déterminée pour ".$agent->getDenomination(); } else { foreach ($autorites[$agent->getId()] as $autorite) { $this->getAgentAutoriteService()->createAgentAutorite($agent, $autorite); } } $this->getAgentSuperieurService()->historiseAll($agent); if (empty($superieurs[$agent->getId()])) { $warning[] = "Aucun supérieur n'a pu être déterminée pour ".$agent->getDenomination(); } else { foreach ($superieurs[$agent->getId()] as $superieur) { $this->getAgentSuperieurService()->createAgentSuperieur($agent, $superieur); } } } } if ($mode !== 'compute') { $title = "Calcul de chaînes hiérarchiques (Prévisualisation)"; } if ($mode === 'compute') { $title = "Calcul de chaînes hiérarchiques (Importation)"; } return new ViewModel([ 'title' => $title, 'form' => $form, 'structure' => $structure, 'agents' => $agents, 'superieurs' => $superieurs, 'autorites' => $autorites, 'error' => $error, 'warning' => $warning, ]); } return new ViewModel([ 'title' => "Calcul de chaînes hiérarchiques", 'form' => $form, ]); } } No newline at end of file module/Application/src/Application/Controller/AgentHierarchieControllerFactory.php +8 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Application\Controller; use Application\Entity\Db\AgentAutorite; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculForm; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationForm; use Application\Service\Agent\AgentService; use Application\Service\AgentAutorite\AgentAutoriteService; Loading @@ -10,6 +11,7 @@ use Application\Service\AgentSuperieur\AgentSuperieurService; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; use Structure\Service\Structure\StructureService; class AgentHierarchieControllerFactory { Loading @@ -26,20 +28,26 @@ class AgentHierarchieControllerFactory * @var AgentService $agentService * @var AgentAutoriteService $agentAutoriteService * @var AgentSuperieurService $agentSuperieurService * @var StructureService $structureService */ $agentService = $container->get(AgentService::class); $agentAutoriteService = $container->get(AgentAutoriteService::class); $agentSuperieurService = $container->get(AgentSuperieurService::class); $structureService = $container->get(StructureService::class); /** * @var AgentHierarchieImportationForm $importationForm * @var AgentHierarchieCalculForm $calculForm */ $importationForm = $container->get('FormElementManager')->get(AgentHierarchieImportationForm::class); $calculForm = $container->get('FormElementManager')->get(AgentHierarchieCalculForm::class); $controller = new AgentHierarchieController(); $controller->setAgentService($agentService); $controller->setAgentAutoriteService($agentAutoriteService); $controller->setAgentSuperieurService($agentSuperieurService); $controller->setStructureService($structureService); $controller->setAgentHierarchieCalculForm($calculForm); $controller->setAgentHierarchieImportationForm($importationForm); return $controller; } Loading module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculForm.php 0 → 100644 +66 −0 Original line number Diff line number Diff line <?php namespace Application\Form\AgentHierarchieCalcul; use Laminas\Form\Element\Button; use Laminas\Form\Element\File; use Laminas\Form\Element\Select; use Laminas\Form\Form; use Laminas\InputFilter\Factory; use Structure\Service\Structure\StructureServiceAwareTrait; class AgentHierarchieCalculForm extends Form { use StructureServiceAwareTrait; public function init() { $this->add([ 'type' => Select::class, 'name' => 'structure', 'options' => [ 'label' => 'Structure <span class="icon icon-asterisque" title="Champ obligatoire"></span> :', 'label_options' => [ 'disable_html_escape' => true, ], 'value_options' => $this->getStructureService()->getStructuresAsOptions(), ], 'attributes' => [ 'id' => 'structure', 'class' => 'bootstrap-selectpicker', 'data-live-search' => 'true' ], ]); //mode $this->add([ 'type' => Select::class, 'name' => 'mode', 'options' => [ 'label' => 'Mode <span class="icon icon-asterisque" title="Champ obligatoire"></span> :', 'label_options' => [ 'disable_html_escape' => true, ], 'value_options' => [ 'preview' => "Prévisualisation", 'compute' => "Calcul", ] ], 'attributes' => [ 'id' => 'mode', ], ]); //Submit $this->add([ 'type' => Button::class, 'name' => 'creer', 'options' => [ 'label' => 'Traiter le ficher', 'label_options' => [ 'disable_html_escape' => true, ], ], 'attributes' => [ 'type' => 'submit', 'class' => 'btn btn-primary', ], ]); $this->setInputFilter((new Factory())->createInputFilter([ 'fichier' => [ 'required' => true, ], 'mode' => ['required' => true, ], ])); } } No newline at end of file module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormAwareTrait.php 0 → 100644 +19 −0 Original line number Diff line number Diff line <?php namespace Application\Form\AgentHierarchieCalcul; trait AgentHierarchieCalculFormAwareTrait { private AgentHierarchieCalculForm $agentHierarchieCalculForm; public function getAgentHierarchieCalculForm(): AgentHierarchieCalculForm { return $this->agentHierarchieCalculForm; } public function setAgentHierarchieCalculForm(AgentHierarchieCalculForm $agentHierarchieCalculForm): void { $this->agentHierarchieCalculForm = $agentHierarchieCalculForm; } } No newline at end of file Loading
module/Application/config/merged/hierarchie.config.php +19 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,10 @@ namespace Application; use Application\Controller\AgentHierarchieController; use Application\Controller\AgentHierarchieControllerFactory; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculForm; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculFormFactory; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculHydrator; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculHydratorFactory; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationForm; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationFormFactory; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationHydrator; Loading @@ -29,6 +33,7 @@ return [ 'index', 'afficher', 'importer', 'calculer', ], 'privileges' => [ AgentPrivileges::AGENT_INDEX, //todo "Faites mieux !!!" Loading Loading @@ -78,6 +83,18 @@ return [ ], 'may_terminate' => true, ], 'calculer' => [ 'type' => Literal::class, 'options' => [ 'route' => '/calculer', 'defaults' => [ /** @see AgentHierarchieController::calculerAction() */ 'controller' => AgentHierarchieController::class, 'action' => 'calculer', ], ], 'may_terminate' => true, ], ], ], ], Loading @@ -98,11 +115,13 @@ return [ ], 'form_elements' => [ 'factories' => [ AgentHierarchieCalculForm::class => AgentHierarchieCalculFormFactory::class, AgentHierarchieImportationForm::class => AgentHierarchieImportationFormFactory::class, ], ], 'hydrators' => [ 'factories' => [ AgentHierarchieCalculHydrator::class => AgentHierarchieCalculHydratorFactory::class, AgentHierarchieImportationHydrator::class => AgentHierarchieImportationHydratorFactory::class, ], ], Loading
module/Application/src/Application/Controller/AgentHierarchieController.php +75 −0 Original line number Diff line number Diff line Loading @@ -4,18 +4,22 @@ namespace Application\Controller; use Application\Entity\Db\AgentAutorite; use Application\Entity\Db\AgentSuperieur; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculFormAwareTrait; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationFormAwareTrait; use Application\Service\Agent\AgentServiceAwareTrait; use Application\Service\AgentAutorite\AgentAutoriteServiceAwareTrait; use Application\Service\AgentSuperieur\AgentSuperieurServiceAwareTrait; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Structure\Service\Structure\StructureServiceAwareTrait; class AgentHierarchieController extends AbstractActionController { use AgentServiceAwareTrait; use AgentAutoriteServiceAwareTrait; use AgentSuperieurServiceAwareTrait; use StructureServiceAwareTrait; use AgentHierarchieCalculFormAwareTrait; use AgentHierarchieImportationFormAwareTrait; public function indexAction() : ViewModel Loading Loading @@ -124,4 +128,75 @@ class AgentHierarchieController extends AbstractActionController return $vm; } public function calculerAction() : ViewModel { $form = $this->getAgentHierarchieCalculForm(); $form->setAttribute('action', $this->url()->fromRoute('agent/hierarchie/calculer', ['mode' => 'preview', 'structure' => null], [], true)); $request = $this->getRequest(); if ($request->isPost()) { $error = []; $data = $request->getPost(); $mode = $data['mode']; $structureId = $data['structure']; $structure = $this->getStructureService()->getStructure($structureId); $structures = $this->getStructureService()->getStructuresFilles($structure, true); $agents = $this->getAgentService()->getAgentsByStructures($structures); $superieurs = []; $autorites = []; foreach ($agents as $agent) { $superieurs[$agent->getId()] = $this->getAgentService()->computeSuperieures($agent); $autorites[$agent->getId()] = $this->getAgentService()->computeAutorites($agent, $superieurs[$agent->getId()]); } if ($mode === 'compute' AND empty($error)) { $warning = []; foreach ($agents as $agent) { $this->getAgentAutoriteService()->historiseAll($agent); if (empty($autorites[$agent->getId()])) { $warning[] = "Aucune autorité n'a pu être déterminée pour ".$agent->getDenomination(); } else { foreach ($autorites[$agent->getId()] as $autorite) { $this->getAgentAutoriteService()->createAgentAutorite($agent, $autorite); } } $this->getAgentSuperieurService()->historiseAll($agent); if (empty($superieurs[$agent->getId()])) { $warning[] = "Aucun supérieur n'a pu être déterminée pour ".$agent->getDenomination(); } else { foreach ($superieurs[$agent->getId()] as $superieur) { $this->getAgentSuperieurService()->createAgentSuperieur($agent, $superieur); } } } } if ($mode !== 'compute') { $title = "Calcul de chaînes hiérarchiques (Prévisualisation)"; } if ($mode === 'compute') { $title = "Calcul de chaînes hiérarchiques (Importation)"; } return new ViewModel([ 'title' => $title, 'form' => $form, 'structure' => $structure, 'agents' => $agents, 'superieurs' => $superieurs, 'autorites' => $autorites, 'error' => $error, 'warning' => $warning, ]); } return new ViewModel([ 'title' => "Calcul de chaînes hiérarchiques", 'form' => $form, ]); } } No newline at end of file
module/Application/src/Application/Controller/AgentHierarchieControllerFactory.php +8 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Application\Controller; use Application\Entity\Db\AgentAutorite; use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculForm; use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationForm; use Application\Service\Agent\AgentService; use Application\Service\AgentAutorite\AgentAutoriteService; Loading @@ -10,6 +11,7 @@ use Application\Service\AgentSuperieur\AgentSuperieurService; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; use Structure\Service\Structure\StructureService; class AgentHierarchieControllerFactory { Loading @@ -26,20 +28,26 @@ class AgentHierarchieControllerFactory * @var AgentService $agentService * @var AgentAutoriteService $agentAutoriteService * @var AgentSuperieurService $agentSuperieurService * @var StructureService $structureService */ $agentService = $container->get(AgentService::class); $agentAutoriteService = $container->get(AgentAutoriteService::class); $agentSuperieurService = $container->get(AgentSuperieurService::class); $structureService = $container->get(StructureService::class); /** * @var AgentHierarchieImportationForm $importationForm * @var AgentHierarchieCalculForm $calculForm */ $importationForm = $container->get('FormElementManager')->get(AgentHierarchieImportationForm::class); $calculForm = $container->get('FormElementManager')->get(AgentHierarchieCalculForm::class); $controller = new AgentHierarchieController(); $controller->setAgentService($agentService); $controller->setAgentAutoriteService($agentAutoriteService); $controller->setAgentSuperieurService($agentSuperieurService); $controller->setStructureService($structureService); $controller->setAgentHierarchieCalculForm($calculForm); $controller->setAgentHierarchieImportationForm($importationForm); return $controller; } Loading
module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculForm.php 0 → 100644 +66 −0 Original line number Diff line number Diff line <?php namespace Application\Form\AgentHierarchieCalcul; use Laminas\Form\Element\Button; use Laminas\Form\Element\File; use Laminas\Form\Element\Select; use Laminas\Form\Form; use Laminas\InputFilter\Factory; use Structure\Service\Structure\StructureServiceAwareTrait; class AgentHierarchieCalculForm extends Form { use StructureServiceAwareTrait; public function init() { $this->add([ 'type' => Select::class, 'name' => 'structure', 'options' => [ 'label' => 'Structure <span class="icon icon-asterisque" title="Champ obligatoire"></span> :', 'label_options' => [ 'disable_html_escape' => true, ], 'value_options' => $this->getStructureService()->getStructuresAsOptions(), ], 'attributes' => [ 'id' => 'structure', 'class' => 'bootstrap-selectpicker', 'data-live-search' => 'true' ], ]); //mode $this->add([ 'type' => Select::class, 'name' => 'mode', 'options' => [ 'label' => 'Mode <span class="icon icon-asterisque" title="Champ obligatoire"></span> :', 'label_options' => [ 'disable_html_escape' => true, ], 'value_options' => [ 'preview' => "Prévisualisation", 'compute' => "Calcul", ] ], 'attributes' => [ 'id' => 'mode', ], ]); //Submit $this->add([ 'type' => Button::class, 'name' => 'creer', 'options' => [ 'label' => 'Traiter le ficher', 'label_options' => [ 'disable_html_escape' => true, ], ], 'attributes' => [ 'type' => 'submit', 'class' => 'btn btn-primary', ], ]); $this->setInputFilter((new Factory())->createInputFilter([ 'fichier' => [ 'required' => true, ], 'mode' => ['required' => true, ], ])); } } No newline at end of file
module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormAwareTrait.php 0 → 100644 +19 −0 Original line number Diff line number Diff line <?php namespace Application\Form\AgentHierarchieCalcul; trait AgentHierarchieCalculFormAwareTrait { private AgentHierarchieCalculForm $agentHierarchieCalculForm; public function getAgentHierarchieCalculForm(): AgentHierarchieCalculForm { return $this->agentHierarchieCalculForm; } public function setAgentHierarchieCalculForm(AgentHierarchieCalculForm $agentHierarchieCalculForm): void { $this->agentHierarchieCalculForm = $agentHierarchieCalculForm; } } No newline at end of file