Commit 4b88ba36 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

- Finalisation Développement formulaire spécifique pour modification centre de...

- Finalisation Développement formulaire spécifique pour modification centre de cout et modulateurs d'un élément pédagogique(ticket #25857)
parent a9f329ac
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -2,11 +2,9 @@

namespace Application;

use Application\Form\OffreFormation\ElementModulateurCCSaisie;
use Application\Provider\Privilege\Privileges;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;
use Zend\Form\Form;

return [
    'router'          => [
+31 −12
Original line number Diff line number Diff line
@@ -5,10 +5,12 @@ namespace Application\Controller\OffreFormation;
use Application\Controller\AbstractController;
use Application\Entity\Db\ElementPedagogique;
use Application\Filter\FloatFromString;
use Application\Form\OffreFormation\Traits\ElementModulateurCCSaisieAwareTrait;
use Application\Form\OffreFormation\Traits\ElementModulateurCentreCoutFormAwareTrait;
use Application\Form\OffreFormation\Traits\ElementPedagogiqueSaisieAwareTrait;
use Application\Form\OffreFormation\Traits\VolumeHoraireEnsFormAwareTrait;
use Application\Provider\Privilege\Privileges;
use Application\Service\Traits\CentreCoutEpServiceAwareTrait;
use Application\Service\Traits\ElementModulateurServiceAwareTrait;
use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait;
use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\VolumeHoraireEnsServiceAwareTrait;
@@ -25,7 +27,9 @@ class ElementPedagogiqueController extends AbstractController
    use ElementPedagogiqueSaisieAwareTrait;
    use VolumeHoraireEnsFormAwareTrait;
    use VolumeHoraireEnsServiceAwareTrait;
    use ElementModulateurCCSaisieAwareTrait;
    use ElementModulateurCentreCoutFormAwareTrait;
    use ElementModulateurServiceAwareTrait;
    use CentreCoutEpServiceAwareTrait;



@@ -262,20 +266,35 @@ class ElementPedagogiqueController extends AbstractController

    public function modulateursCentresCoutsAction()
    {
        $this->em()->getFilters()->enable('historique')->init([
            \Application\Entity\Db\ElementModulateur::class,
            \Application\Entity\Db\CentreCout::class,
            \Application\Entity\Db\CentreCoutEp::class,
        ]);

        $element = $this->getEvent()->getParam('elementPedagogique');
        $modulateurs = $element->getElementModulateur();
        $form    = $this->getElementModulateurCentreCoutForm();
        //Traitement retour formulaire
        $request = $this->getRequest();
        if ($request->isPost()) {
            $datasPost = $request->getPost();
            //Modulateur
            $element = $this->getServiceElementModulateur()->addElementModulateur($element, $datasPost['modulateur']);
            //Centres de coûts
            $centreCouts = [
                'fi' => $datasPost['fi'],
                'fa' => $datasPost['fa'],
                'fc' => $datasPost['fc'],
            ];
            $element     = $this->getServiceCentreCoutEp()->addElementCentreCout($element, $centreCouts);
        }

        $form = $this->getFormOffreFormationElementModulateurCCSaisie();
        $form->setElement($element);
        $form->setAttribute('action', $this->url()->fromRoute('of/element/volume-horaire', ['elementPedagogique' => $element->getId()]));
        $form->setElementPedagogique($element);
        $form->setAttribute('action', $this->url()->fromRoute('of/element/modulateurs-centres-couts', ['elementPedagogique' => $element->getId()]));
        $form->build();
        $typesModulateurs = $form->getTypesModulateurs();

        return [
            'form' => $form,
            'typesModulateurs' => $typesModulateurs,
            'element'          => $element,
        ];
    }

}
+37 −56
Original line number Diff line number Diff line
@@ -4,11 +4,9 @@ namespace Application\Form\OffreFormation;

use Application\Entity\Db\ElementPedagogique;
use Application\Form\AbstractForm;
use Application\Form\OffreFormation\EtapeCentreCout\Traits\EtapeCentreCoutFormAwareTrait;
use Application\Form\OffreFormation\Traits\ElementModulateursFieldsetAwareTrait;
use Application\Service\Traits\CentreCoutServiceAwareTrait;
use Application\Service\Traits\TypeModulateurServiceAwareTrait;
use Application\Entity\Db\Etape;
use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait;
use Zend\Form\Element\Select;

@@ -17,11 +15,13 @@ use Zend\Form\Element\Select;
 *
 * @author Antony Le Courtes <antony.lecourtes@unicaen.fr>
 */
class ElementModulateurCCSaisie extends AbstractForm
class ElementModulateurCentreCoutForm extends AbstractForm
{
    use TypeModulateurServiceAwareTrait;
    use ElementPedagogiqueServiceAwareTrait;
    use TypeModulateurServiceAwareTrait;
    use ElementModulateursFieldsetAwareTrait;

    use CentreCoutServiceAwareTrait;

    /**
@@ -29,7 +29,7 @@ class ElementModulateurCCSaisie extends AbstractForm
     *
     * @var Element
     */
    protected $element;
    protected $elementPedagogiquePeddagogique;



@@ -61,41 +61,43 @@ class ElementModulateurCCSaisie extends AbstractForm

    public function build()
    {
        $element = $this->getElement();
        if (!$element) {
        $elementPedagogique = $this->getElementPedagogique();
        if (!$elementPedagogique) {
            throw new \RuntimeException('Element non spécifiée : construction du formulaire impossible');
        }


        $elementsModulateurs = $element->getElementModulateur();

        //Formulaire partie Modulateur de l'élément pédagogique en cours
        $typeModulateur = $this->getServiceTypeModulateur()->finderByElementPedagogique($elementPedagogique)->getQuery()->getOneOrNullResult();
        $values         = $typeModulateur->getModulateur();
        foreach ($values as $value) {
            $modulateursValues[$typeModulateur->getCode()][$value->getCode()] = $value->getLibelle();
        }
        $selectModulateur = new Select('modulateur');
        $selectModulateur->setLabel($typeModulateur->getLibelle() . " : ");
        $selectModulateur->setValueOptions(['' => '(Aucun)'] + $modulateursValues[$typeModulateur->getCode()]);
        $elementsModulateurs = $elementPedagogique->getElementModulateur();
        foreach ($elementsModulateurs as $elementModulateur) {
            $typeModulateur = $elementModulateur->getModulateur()->getTypeModulateur();
            $modulateurs    = $typeModulateur->getModulateur();
            foreach ($modulateurs as $m) {
                $modulateursValues[$typeModulateur->getCode()][$m->getId()] = $m->getLibelle();
            $modulateur     = $elementModulateur->getModulateur();
            $selectModulateur->setValue($modulateur->getCode());
        }
        }
        //TODO Prévoir le cas où il n'y a pas de modulateur et de centre de cout sur un EP
        $centresCoutsEp     = $element->getCentreCoutEp();
        $this->add($selectModulateur);

        //Formulaire partie Centres de coût de l'élément pédagogique en cours
        $centresCoutsEp     = $elementPedagogique->getCentreCoutEp();
        $centresCoutsValues = [];
        foreach ($centresCoutsEp as $centreCoutEp) {
            $libelleTypeHeures                      = $centreCoutEp->getTypeHeures()->getLibelleCourt();
            $codeTypeHeures                      = $centreCoutEp->getTypeHeures()->getCode();
            $centreCout                          = $centreCoutEp->getCentreCout();
            $centresCoutsValues[$libelleTypeHeures] = $centreCout->getCode();
            $centresCoutsValues[$codeTypeHeures] = $centreCout->getCode();
        }
        $typeHeuresEp = $element->getTypeHeures()->getValues();
        $typeHeuresEp = $elementPedagogique->getTypeHeures()->getValues();
        foreach ($typeHeuresEp as $typeHeures) {
            $select = $this->createSelectElement($typeHeures);
            $this->add($select);
            $selectCentreCout = $this->createSelectElementCentreCout($typeHeures);
            if (array_key_exists($typeHeures->getCode(), $centresCoutsValues)) {
                $selectCentreCout->setValue($centresCoutsValues[$typeHeures->getCode()]);
            }
            $this->add($selectCentreCout);
        }

        //Select pour le modulateur de l'élément pédagogique
        $select = new Select('modulateur');
        $select->setLabel($typeModulateur->getLibelle() . " : ");
        $select->setValueOptions($modulateursValues[$typeModulateur->getCode()]);
        $select->setValue(1);
        $this->add($select);


        $this->add([
@@ -106,7 +108,7 @@ class ElementModulateurCCSaisie extends AbstractForm



    private function createSelectElement(\Application\Entity\Db\TypeHeures $th)
    private function createSelectElementCentreCout(\Application\Entity\Db\TypeHeures $th)
    {
        //retrieve centre cout by types heures
        $qb           = $this->getServiceCentreCout()->finderByTypeHeures($th);
@@ -135,46 +137,25 @@ class ElementModulateurCCSaisie extends AbstractForm
    public function getTypesModulateurs()
    {

        if (!$this->element) {
        if (!$this->elementPedagogique) {
            throw new \RuntimeException('Element non spécifié');
        }

        return $this->getServiceTypeModulateur()->getList($this->getServiceTypeModulateur()->finderByElementPedagogique($this->element));
    }



    /**
     * Retourne le nombre total de modulateurs que l'on peut renseigner
     *
     * @param string $typeCode
     *
     * @return integer
     */
    public function countModulateurs($typeCode = null)
    {
        $count = 0;
        foreach ($this->getFieldsets() as $fieldset) {
            if ($fieldset instanceof ElementModulateursFieldset) {
                $count += $fieldset->countModulateurs($typeCode);
            }
        }

        return $count;
        return $this->getServiceTypeModulateur()->getList($this->getServiceTypeModulateur()->finderByElementPedagogique($this->elementPedagogique));
    }



    public function getElement()
    public function getElementPedagogique()
    {
        return $this->element;
        return $this->elementPedagogique;
    }



    public function setElement(ElementPedagogique $element)
    public function setElementPedagogique(ElementPedagogique $elementPedagogique)
    {
        $this->element = $element;
        $this->elementPedagogique = $elementPedagogique;

        return $this;
    }
+0 −49
Original line number Diff line number Diff line
<?php

namespace Application\Form\OffreFormation\Traits;


use Application\Form\OffreFormation\ElementModulateurCCSaisie;

/**
 * Description of ElementModulateurCCSaisieAwareTrait
 *
 * @author UnicaenCode
 */
trait ElementModulateurCCSaisieAwareTrait
{
    /**
     * @var ElementModulateurCCSaisie
     */
    private $formOffreFormationElementModulateurCCSaisie;



    /**
     * @param ElementModulateurSaisie $formOffreFormationElementModulateurCCSaisie
     *
     * @return self
     */
    public function setFormOffreFormationElementModulateurCCSaisie(ElementModulateurSaisie $formOffreFormationElementModulateurCCSaisie)
    {
        $this->formOffreFormationElementModulateurCCSaisie = $formOffreFormationElementModulateurCCSaisie;

        return $this;
    }



    /**
     * Retourne un nouveau formulaire ou fieldset systématiquement, sauf si ce dernier a été fourni manuellement.
     *
     * @return ElementModulateurCCSaisie
     */
    public function getFormOffreFormationElementModulateurCCSaisie()
    {
        if (!empty($this->formOffreFormationElementModulateurCCSaisie)) {
            return $this->formOffreFormationElementModulateurCCSaisie;
        }

        return \Application::$container->get('FormElementManager')->get(ElementModulateurCCSaisie::class);
    }
}
 No newline at end of file
+49 −0
Original line number Diff line number Diff line
<?php

namespace Application\Form\OffreFormation\Traits;


use Application\Form\OffreFormation\ElementModulateurCentreCoutForm;

/**
 * Description of ElementModulateurCentreCoutAwareTrait
 *
 * @author UnicaenCode
 */
trait ElementModulateurCentreCoutFormAwareTrait
{
    /**
     * @var ElementModulateurCentreCoutForm
     */
    private $elementModulateurCentreCoutForm;



    /**
     * @param ElementModulateurCentreCoutForm $elementModulateurCentreCoutForm
     *
     * @return self
     */
    public function setElementModulateurCentreCoutForm(ElementModulateurCentreCoutForm $elementModulateurCentreCoutForm)
    {
        $this->elementModulateurCentreCoutForm = $elementModulateurCentreCoutForm;

        return $this;
    }



    /**
     * Retourne un nouveau formulaire
     *
     * @return ElementModulateurCentreCoutForm
     */
    public function getElementModulateurCentreCoutForm()
    {
        if (!empty($this->elementModulateurCentreCoutForm)) {
            return $this->elementModulateurCentreCoutForm;
        }

        return \Application::$container->get('FormElementManager')->get(ElementModulateurCentreCoutForm::class);
    }
}
 No newline at end of file
Loading