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

Progress

parent a3a14a25
Loading
Loading
Loading
Loading
+0 −85
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@ namespace Application\Controller;
use Application\Entity\Db\Activite;
use Application\Form\Activite\ActiviteForm;
use Application\Form\Activite\ActiviteFormAwareTrait;
use Application\Form\FicheMetierImportation\FicheMetierImportationFormAwareTrait;
use Application\Form\SelectionFicheMetier\SelectionFicheMetierFormAwareTrait;
use Application\Provider\Etat\FicheMetierEtats;
use Application\Service\Activite\ActiviteServiceAwareTrait;
@@ -15,15 +14,12 @@ use Application\Service\Configuration\ConfigurationServiceAwareTrait;
use Application\Service\FicheMetier\FicheMetierServiceAwareTrait;
use Application\Service\ParcoursDeFormation\ParcoursDeFormationServiceAwareTrait;
use Doctrine\ORM\ORMException;
use Element\Entity\Db\Application;
use Element\Entity\Db\ApplicationElement;
use Element\Entity\Db\Competence;
use Element\Entity\Db\CompetenceElement;
use Element\Form\SelectionApplication\SelectionApplicationFormAwareTrait;
use Element\Form\SelectionCompetence\SelectionCompetenceFormAwareTrait;
use Element\Service\HasApplicationCollection\HasApplicationCollectionServiceAwareTrait;
use Element\Service\HasCompetenceCollection\HasCompetenceCollectionServiceAwareTrait;
use FicheMetier\Entity\Db\FicheMetier;
use Formation\Form\SelectionFormation\SelectionFormationFormAwareTrait;
use Laminas\Http\Request;
use Laminas\Http\Response;
@@ -59,7 +55,6 @@ class FicheMetierController extends AbstractActionController

    /** Traits associés aux formulaires */
    use ActiviteFormAwareTrait;
    use FicheMetierImportationFormAwareTrait;
    use SelectionApplicationFormAwareTrait;
    use SelectionCompetenceFormAwareTrait;
    use SelectionEtatFormAwareTrait;
@@ -297,86 +292,6 @@ class FicheMetierController extends AbstractActionController
        return $this->redirect()->toRoute('fiche-metier-type/editer', ['id' => $fiche->getId()], [], true);
    }


    /** IMPORTATION ***************************************************************************************************/

    private function genererInfosFromCSV(string $fichier_path): array
    {
        $csvInfos = $this->getFicheMetierService()->readFromCSV($fichier_path);

        $ajouts = $this->getConfigurationService()->getConfigurationsFicheMetier();
        foreach ($ajouts as $ajout) {
            if ($ajout->getEntityType() === Application::class) {
                $application = $ajout->getEntity();
                $csvInfos['applications'][$application->getId()] = $application;
            }
            if ($ajout->getEntityType() === Competence::class) {
                $competence = $ajout->getEntity();
                $csvInfos['competencesListe'][$competence->getId()] = $competence;
                $csvInfos['competences'][$competence->getType()->getLibelle()][$competence->getId()] = $competence;
            }
        }

        // tri
        foreach (['Connaissances', 'Opérationnelles', 'Comportementales'] as $type) {
            usort($csvInfos['competences'][$type], function (Competence $a, Competence $b) {
                return $a->getLibelle() > $b->getLibelle();
            });
        }
        usort($csvInfos['applications'], function (Application $a, Application $b) {
            return $a->getLibelle() > $b->getLibelle();
        });

        return $csvInfos;
    }

    public function importerDepuisCsvAction()
    {
        $form = $this->getFicheMetierImportationForm();
        $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/importer-depuis-csv', ['mode' => 'preview', 'path' => null], [], true));


        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $file = $request->getFiles();

            $fichier_path = $file['fichier']['tmp_name'];
            $mode = $data['mode'];

            $csvInfos = $this->genererInfosFromCSV($fichier_path);

            if ($mode !== null) {
                if ($mode === 'import') {
                    if ($csvInfos['metier'] !== null and empty($csvInfos['competences']['Manquantes'])) {
                        $fiche = $this->getFicheMetierService()->importFromCsvArray($csvInfos);

                        /** @see \Application\Controller\FicheMetierController::afficherAction() */
                        return $this->redirect()->toRoute('fiche-metier-type/afficher', ['id' => $fiche->getId()], [], true);
                    }
                }
                return new ViewModel([
                    'fichier_path' => $fichier_path,
                    'form' => $form,
                    'mode' => $mode,
                    'code' => $csvInfos['code'],
                    'metier' => $csvInfos['metier'],
                    'mission' => $csvInfos['mission'],
                    'activites' => $csvInfos['activites'],
                    'applications' => $csvInfos['applications'],
                    'competences' => $csvInfos['competences'],
                ]);
            }
        }

        $vm = new ViewModel([
            'title' => "Importation d'une fiche métier",
            'form' => $form,
        ]);
        return $vm;

    }

    /** Graphique *****************************************************************************************************/

    public function graphiqueCompetencesAction(): ViewModel
+0 −4
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@
namespace Application\Controller;

use Application\Form\Activite\ActiviteForm;
use Application\Form\FicheMetierImportation\FicheMetierImportationForm;
use Application\Form\SelectionFicheMetier\SelectionFicheMetierForm;
use Application\Service\Activite\ActiviteService;
use Application\Service\ActiviteDescription\ActiviteDescriptionService;
@@ -68,7 +67,6 @@ class FicheMetierControllerFactory
        $parcoursService = $container->get(ParcoursDeFormationService::class);

        /**
         * @var FicheMetierImportationForm $ficheMetierImportationForm
         * @var ActiviteForm $activiteForm
         * @var SelectionApplicationForm $selectionApplicationForm
         * @var SelectionCompetenceForm $selectionCompetenceForm
@@ -83,7 +81,6 @@ class FicheMetierControllerFactory
        $selectionFormationForm = $container->get('FormElementManager')->get(SelectionFormationForm::class);
        $selectionEtatForm = $container->get('FormElementManager')->get(SelectionEtatForm::class);
        $selectionFicheMetierForm = $container->get('FormElementManager')->get(SelectionFicheMetierForm::class);
        $ficheMetierImportationForm = $container->get('FormElementManager')->get(FicheMetierImportationForm::class);
        $selectionnerMetierForm = $container->get('FormElementManager')->get(SelectionnerMetierForm::class);

        /** @var FicheMetierController $controller */
@@ -109,7 +106,6 @@ class FicheMetierControllerFactory
        $controller->setSelectionFormationForm($selectionFormationForm);
        $controller->setSelectionEtatForm($selectionEtatForm);
        $controller->setSelectionFicheMetierForm($selectionFicheMetierForm);
        $controller->setFicheMetierImportationForm($ficheMetierImportationForm);
        $controller->setSelectionnerMetierForm($selectionnerMetierForm);

        return $controller;
+31 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ use Application\Entity\Db\Activite;
use Application\Entity\Db\ActiviteDescription;
use Application\Provider\Template\PdfTemplate;
use Application\Service\Configuration\ConfigurationServiceAwareTrait;
use Element\Entity\Db\Application;
use FicheMetier\Entity\Db\FicheMetier;
use Application\Entity\Db\FicheMetierActivite;
use Application\Provider\Etat\FicheMetierEtats;
@@ -591,4 +592,34 @@ class FicheMetierService {
        }
    }

    public function genererInfosFromCSV(string $fichier_path): array
    {
        $csvInfos = $this->readFromCSV($fichier_path);

        $ajouts = $this->getConfigurationService()->getConfigurationsFicheMetier();
        foreach ($ajouts as $ajout) {
            if ($ajout->getEntityType() === Application::class) {
                $application = $ajout->getEntity();
                $csvInfos['applications'][$application->getId()] = $application;
            }
            if ($ajout->getEntityType() === Competence::class) {
                $competence = $ajout->getEntity();
                $csvInfos['competencesListe'][$competence->getId()] = $competence;
                $csvInfos['competences'][$competence->getType()->getLibelle()][$competence->getId()] = $competence;
            }
        }

        // tri
        foreach (['Connaissances', 'Opérationnelles', 'Comportementales'] as $type) {
            usort($csvInfos['competences'][$type], function (Competence $a, Competence $b) {
                return $a->getLibelle() > $b->getLibelle();
            });
        }
        usort($csvInfos['applications'], function (Application $a, Application $b) {
            return $a->getLibelle() > $b->getLibelle();
        });

        return $csvInfos;
    }

}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -34,8 +34,8 @@ $this->headTitle('Index des fiches métiers');
                <span class="icon icon-ajouter"></span>
                Ajouter une fiche métier
            </a>
            <?php /** @see \Application\Controller\FicheMetierController::importerDepuisCsvAction() */ ?>
            <a href="<?php echo $this->url('fiche-metier-type/importer-depuis-csv', [], [], true); ?>"
            <?php /** @see FicheMetierController::importerAction() */ ?>
            <a href="<?php echo $this->url('fiche-metier/importer', [], [], true); ?>"
               class="btn btn-primary action">
                <span class="icon icon-ajouter"></span>
                Importer depuis CSV
+11 −0
Original line number Diff line number Diff line
@@ -115,6 +115,17 @@ return [
                            ],
                        ],
                    ],
                    'importer' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/importer',
                            'defaults' => [
                                /** @see FicheMetierController::importerAction() */
                                'controller' => FicheMetierController::class,
                                'action'     => 'importer',
                            ],
                        ],
                    ],
                    'dupliquer' => [
                        'type'  => Segment::class,
                        'options' => [
Loading