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

Substitution Factorisation de la création de la structure concrete

parent 7e8b260c
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ return [
            'substitution-creer' => [
                'type'          => Segment::class,
                'options'       => [
                    'route'    => '/substitution/creer',
                    'route'    => '/substitution/creer/:type',
                    'defaults' => [
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller'    => 'Substitution',
+35 −12
Original line number Diff line number Diff line
@@ -2,17 +2,24 @@

namespace Application\Controller;

use Application\Entity\Db\EcoleDoctorale;
use Application\Entity\Db\Etablissement;
use Application\Entity\Db\Structure;
use Application\Entity\Db\StructureConcreteInterface;
use Application\Entity\Db\TypeStructure;
use Application\Entity\Db\UniteRecherche;
use Application\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait;
use Application\Service\Etablissement\EtablissementServiceAwareTrait;
use Application\Service\Structure\StructureServiceAwareTrait;
use Application\Service\UniteRecherche\UniteRechercheServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use Zend\View\Model\ViewModel;

class SubstitutionController extends AbstractController
{
    use EtablissementServiceAwareTrait;
    use EcoleDoctoraleServiceAwareTrait;
    use UniteRechercheServiceAwareTrait;
    use StructureServiceAwareTrait;

    public function indexAction()
@@ -47,22 +54,37 @@ class SubstitutionController extends AbstractController

    public function creerAction()
    {
        $type = $this->params()->fromRoute('type');
        $structures = [];
        switch($type) {
            case TypeStructure::CODE_ETABLISSEMENT :
                $structures = $this->etablissementService->getEtablissements();
                break;
            case TypeStructure::CODE_ECOLE_DOCTORALE :
                $structures = $this->ecoleDoctoraleService->getEcolesDoctorales();
                break;
            case TypeStructure::CODE_UNITE_RECHERCHE :
                $structures = $this->uniteRechercheService->getUnitesRecherches();
                break;
        }

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $sources = [];
            foreach($data['sourceIds'] as $sourceId) {
                $etablissement = $this->etablissementService->findEtablissementByStructureId($sourceId);
                if ($etablissement === null) {
                    throw new RuntimeException("Etablissement cible non trouvé avec id=$sourceId.");
                $structure = $this->structureService->findStructureById($sourceId);
                $structureConcrete = $this->structureService->findStructureConcreteFromStructure($structure);
                if ($structureConcrete === null) {
                    throw new RuntimeException("Aucune structure concréte cible trouvée avec id=$sourceId.");
                }
                $sources[] = $etablissement;
                $sources[] = $structureConcrete;
            }


            $structureCibleDataObject = new Etablissement();
            $structureCibleDataObject->setCode(uniqid());
            $this->etablissementService->updateFromPostData($structureCibleDataObject, $data['cible']);
            //creation de la structureCible adequate
            $structureCibleDataObject = $this->structureService->createStructureConcrete($type);
            //TODO bouger cela dans structureService ??
            $this->structureService->updateFromPostData($structureCibleDataObject, $data['cible']);

            $structureCible = $this->structureService->createStructureSubstitutions($sources, $structureCibleDataObject);
            $id = $structureCible->getStructure()->getId();
@@ -77,7 +99,7 @@ class SubstitutionController extends AbstractController
        $vm = new ViewModel([
            'cible' => $cible,
            'structuresConcretesSubstituees' => $structuresConcretesSubstituees,
            'etablissements' => $etablissements,
            'structuresConcretes' => $structures,
        ]);
        $vm->setTemplate('application/substitution/modifier');

@@ -120,7 +142,7 @@ class SubstitutionController extends AbstractController

        return new ViewModel([
            'cible' => $structureCible,
            'etablissements' => $etablissements,
            'structuresConcretes' => $etablissements,
            'structuresConcretesSubstituees' => $structuresConcretesSubstituees,
        ]);
    }
@@ -137,10 +159,11 @@ class SubstitutionController extends AbstractController

    public function generateSourceInputAction() {
        $id = $this->params()->fromRoute('id');
        $etablissement = $this->etablissementService->findEtablissementByStructureId($id);
        $structure = $this->structureService->findStructureById($id);
        $structureConcrete = $this->structureService->findStructureConcreteFromStructure($structure);

        return new ViewModel([
            'structure' => $etablissement,
            'structure' => $structureConcrete,
        ]);
    }
}
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ class EcoleDoctoraleService extends BaseService implements RoleServiceAwareInter
    public function getEcolesDoctorales() {
        /** @var EcoleDoctorale[] $ecoles */
        $ecoles = $this->getRepository()->findAll();
        usort($ecoles, function ($a,$b) {return $a->getLibelle() > $b->getLibelle();});
        return $ecoles;
    }

+3 −24
Original line number Diff line number Diff line
@@ -9,10 +9,7 @@ use Application\Entity\Db\Utilisateur;
use Application\Service\BaseService;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\QueryBuilder;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject;
use UnicaenApp\Exception\RuntimeException;
use Zend\Feed\Reader\Feed\Atom\Source;

class EtablissementService extends BaseService
{
@@ -32,13 +29,9 @@ class EtablissementService extends BaseService
     */
    public function getEtablissements() {
        /** @var Etablissement[] $etablissments */
        $etablissments = $this->getRepository()->findAll();
//        /** @var QueryBuilder $qb */
//        $qb = $this->getEntityManager()->getRepository(Etablissement::class)->createQueryBuilder("e")
//            ->select("e,s")
//            ->leftJoin("e.structure", "s");
//        $etablissments = $qb->getQuery()->execute();
        return $etablissments;
        $etablissements = $this->getRepository()->findAll();
        usort($etablissements, function ($a,$b) {return $a->getLibelle() > $b->getLibelle();});
        return $etablissements;
    }

    /**
@@ -153,20 +146,6 @@ class EtablissementService extends BaseService
        }
    }


    public function createFromPostData($data) {
        $etablissement = new Etablissement();
        $hydrator = new DoctrineObject($this->getEntityManager());
        $hydrator->hydrate($data, $etablissement);
        return $etablissement;
    }

    public function updateFromPostData($structure, $data)
    {
        $hydrator = new DoctrineObject($this->getEntityManager());
        $hydrator->hydrate($data, $structure);
    }

    public function findEtablissementByStructureId($structureId)
    {
        $qb = $this->getRepository()->createQueryBuilder("e")
+30 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use UnicaenApp\Exception\RuntimeException;
use Webmozart\Assert\Assert;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject;

/**
 * @author Unicaen
@@ -316,6 +317,35 @@ class StructureService extends BaseService

        $this->getEntityManager()->remove($cibleConcrete);
        $this->getEntityManager()->flush($cibleConcrete);
    }

    /**
     * @param  TypeStructure $typeStructure
     * @return StructureConcreteInterface|null
     */
    public function createStructureConcrete($typeStructure) {
        $structureCibleDataObject = null;
        switch($typeStructure) {
            case TypeStructure::CODE_ETABLISSEMENT :
                $structureCibleDataObject = new Etablissement();
                $structureCibleDataObject->setCode(uniqid());
                break;
            case TypeStructure::CODE_ECOLE_DOCTORALE :
                $structureCibleDataObject = new EcoleDoctorale();
                break;
            case TypeStructure::CODE_UNITE_RECHERCHE :
                $structureCibleDataObject = new UniteRecherche();
                break;
            default:
                throw new RuntimeException("Type de structure inconnu [".$typeStructure."]");
        }
        return $structureCibleDataObject;
    }


    public function updateFromPostData($structure, $data)
    {
        $hydrator = new DoctrineObject($this->getEntityManager());
        $hydrator->hydrate($data, $structure);
    }
}
 No newline at end of file
Loading