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

Ajout de fiche et duplication

parent 3c9a3097
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -127,7 +127,8 @@ class FichePosteController extends AbstractActionController {
        $structures = $this->getStructureService()->getStructuresFilles($structure);
        $structures[] = $structure;

        $fiches = $this->getFichePosteService()->getFichesPostesByStructures($structures, true);
//        $fiches = $this->getFichePosteService()->getFichesPostesByStructures($structures, true);
        $fiches = $this->getFichePosteService()->getFichesPostesByStructuresAndAgent($structures, true, $agent);

        /** @var Request $request */
        $request = $this->getRequest();
@@ -404,12 +405,15 @@ class FichePosteController extends AbstractActionController {
    public function ajouterFicheMetierAction()
    {
        $fiche = $this->getFichePosteService()->getRequestedFichePoste($this, 'fiche-poste');
        $agent = $fiche->getAgent();

        $ficheTypeExterne = new FicheTypeExterne();
        $form = $this->getAjouterFicheTypeForm();
        $form->setAttribute('action', $this->url()->fromRoute('fiche-poste/ajouter-fiche-metier', ['fiche-poste' => $fiche->getId()], [], true));
        $form->bind($ficheTypeExterne);

        if ($agent AND ! empty($agent->getGradesActifs())) $form->reinitWithAgent($agent);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
+15 −0
Original line number Diff line number Diff line
@@ -440,4 +440,19 @@ class Agent implements ResourceInterface

        return false;
    }

    /**
     * @return int
     */
    public function getMeilleurNiveau()
    {
        $niveau = 999;
        $grades = $this->getGradesActifs();
        foreach ($grades as $grade) {
            $level = $grade->getCorps()->getNiveau();
            if ($level !== null and $level <= $niveau) $niveau = $level;
        }
        return $niveau;

    }
}
 No newline at end of file
+46 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Application\Form\AjouterFicheMetier;

use Application\Entity\Db\Agent;
use Application\Entity\Db\FicheMetier;
use Application\Entity\Db\MetierReference;
use Application\Service\Domaine\DomaineServiceAwareTrait;
@@ -156,4 +157,49 @@ class AjouterFicheMetierForm extends Form {
        return $options;

    }

    /**
     * @param Agent $agent
     */
    public function reinitWithAgent(Agent $agent)
    {
        /** @var Select $ficheSelect */
        $ficheSelect = $this->get('fiche_type');

        $niveau = $agent->getMeilleurNiveau();

        /** @var array $fiches */
        $fiches = $this->getFicheMetierService()->getFichesMetiersWithNiveau($niveau - 1);

        $options = [];
        $dictionnaire = [];
        foreach ($fiches as $ficheMetier) {
            $domaines = $ficheMetier->getMetier()->getDomaines();
            foreach ($domaines as $domaine) {
                $dictionnaire[($domaine) ? $domaine->getLibelle() : "Sans domaine"][] = $ficheMetier;
            }
        }

        ksort($dictionnaire);
        foreach ($dictionnaire as $clef => $listing) {
            $optionsoptions = [];
            /** @var FicheMetier $fiche */
            foreach ($listing as $fiche) {
                $references = [];
                /** @var MetierReference $reference */
                foreach ($fiche->getMetier()->getReferences() as $reference) {
                    $references[] = $reference->getTitre();
                }
                $str_references = implode(", ", $references);
                $optionsoptions[$fiche->getId()] = $fiche->getMetier()->getLibelle() . (!empty($references)?" (".$str_references.")":"") ;
            }
            $array = [
                'label' => $clef,
                'options' => $optionsoptions,
            ];
            $options[] = $array;
        }

        $ficheSelect->setValueOptions($options);
    }
}
 No newline at end of file
+18 −2
Original line number Diff line number Diff line
@@ -114,6 +114,21 @@ class FicheMetierService {
        return $result;
    }

    /**
     * @param int $niveau
     * @return FicheMetier[]
     */
    public function getFichesMetiersWithNiveau($niveau)
    {
        $qb = $this->createQueryBuilder()
            ->andWhere('metier.niveau IS NULL or metier.niveau >= :niveau')
            ->setParameter('niveau', $niveau)
        ;

        $result = $qb->getQuery()->getResult();
        return $result;
    }

    /**
     * @param string $order an attribute use to sort
     * @return FicheMetier[]
@@ -212,11 +227,12 @@ class FicheMetierService {
    }

    /**
     * @param int $niveau
     * @return array
     */
    public function getFichesMetiersAsOptions()
    public function getFichesMetiersAsOptions($niveau =0)
    {
        $fiches = $this->getFichesMetiers();
        $fiches = $this->getFichesMetiersWithNiveau($niveau);
        $array = [];
        foreach ($fiches as $fiche) {
            $array[$fiche->getId()] = $fiche->getMetier()->getLibelle();
+21 −0
Original line number Diff line number Diff line
@@ -333,6 +333,27 @@ class FichePosteService {
        return $result;
    }

    /**
     * @param Structure[] $structures
     * @param boolean $sousstructure
     * @param Agent $agent
     * @return FichePoste[]
     */
    public function getFichesPostesByStructuresAndAgent($structures = [], $sousstructure = false, $agent = null)
    {
        $fiches = $this->getFichesPostesByStructures($structures, $sousstructure);
        $niveau = $agent->getMeilleurNiveau();

        if ($niveau === 999) return $fiches;

        $result = [];
        foreach ($fiches as $fiche) {
            if ($fiche->isComplete() AND $fiche->getAgent()->getMeilleurNiveau() >= ($niveau - 1)) $result[] = $fiche;
        }

        return $result;
    }

    /**
     * @param Structure $structure
     * @param boolean $sousstructure