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

Substitution début de fonctionnement

parent 4d8be446
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -9,7 +9,8 @@ use Application\Service\Structure\StructureService;
use Application\Service\Structure\StructureServiceFactory;
use Application\View\Helper\EcoleDoctoraleHelper;
use UnicaenAuth\Guard\PrivilegeController;

use Application\Entity\Db\StructureConcreteInterface;
use Application\View\Helper\StructureSubstitHelper;
return [
    'bjyauthorize'    => [
//        'guards' => [
@@ -157,4 +158,10 @@ return [
//            'Application\Controller\EcoleDoctorale' => EcoleDoctoraleControllerFactory::class,
        ],
    ],
    'view_helpers' => [
        'invokables' => array(
            'structureSubstitHelper' => StructureSubstitHelper::class,
        ),
        'factories' => [],
    ],
];
+37 −0
Original line number Diff line number Diff line
@@ -14,6 +14,9 @@ return [
                    'action'     => [
                        'index',
                        'selection',
                        'creer',
                        'modifier',
                        'generate-source-input',
                    ],
                    'privileges' => EcoleDoctoralePrivileges::ECOLE_DOCT_CONSULTATION,
                ],
@@ -45,6 +48,40 @@ return [
                    ],
                ],
            ],
            'substitution-creer' => [
                'type'          => Segment::class,
                'options'       => [
                    'route'    => '/substitution/creer',
                    'defaults' => [
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller'    => 'Substitution',
                        'action'        => 'creer',
                    ],
                ],
            ],
            'substitution-modifier' => [
                'type'          => Segment::class,
                'options'       => [
                    'route'    => '/substitution/modifier/:cible',
                    'defaults' => [
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller'    => 'Substitution',
                        'action'        => 'modifier',
                    ],
                ],
            ],
            'substitution-generer' => [
                'type'          => Segment::class,
                'options'       => [
                    'route'    => '/substitution/generer/:id',
                    'defaults' => [
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller'    => 'Substitution',
                        'action'        => 'generate-source-input',
                    ],
                ],
            ],

        ],
    ],
    'navigation'      => [
+80 −21
Original line number Diff line number Diff line
@@ -2,8 +2,11 @@

namespace Application\Controller;

use Application\Entity\Db\Etablissement;
use Application\Entity\Db\Structure;
use Application\Service\Etablissement\EtablissementServiceAwareTrait;
use Application\Service\Structure\StructureServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use Zend\View\Model\ViewModel;

class SubstitutionController extends AbstractController
@@ -40,35 +43,91 @@ class SubstitutionController extends AbstractController
//        $this->redirect()->toRoute('substitution-selection', ['cible' => $idCible]);
//    }

    public function selectionAction()
    public function creerAction()
    {
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $sources = [];
            foreach($data['sources'] as $sourceId) {
                $etablissement = $this->etablissementService->getEtablissementById($sourceId);
                $sources[] = $etablissement;
            }

        $idGeneralisation = $this->params()->fromRoute('generalisation');
        $idEtablissements = explode(",",$this->params()->fromRoute('etablissements'));
        $idAjout = $this->params()->fromQuery('nouveau');
        $idRetrait = $this->params()->fromQuery('retrait');
            $structureCible = new Etablissement();
            $structureCible->setCode(uniqid());
            $this->etablissementService->updateFromPostData($structureCible, $data['cible']);

        $etablissements = $this->etablissementService->getEtablissements();
        $etablissement = $this->etablissementService->getEtablissementById($idGeneralisation);
        $selection = [];
        foreach($idEtablissements as $idEtablissement) {
            $selection[] = $this->etablissementService->getEtablissementById($idEtablissement);
//            $this->structureService->createStructureSubstitutions($sources, $structureCible);
            return $this->redirect()->toRoute('substitution-index');

//            $id = $structureCible->getStructure()->getId();
//            return $this->redirect()->toRoute('substitution-modifier', ['cible' => $id], [], true);

        } else {
            $cible = new Structure();
            $structuresConcretesSubstituees = [];
            $etablissements = $this->etablissementService->findEtablissementsNonSubstitues();
        }
        if($idAjout !== null && $idAjout !== '') {
            $selection[] = $this->etablissementService->getEtablissementById($idAjout);

        $vm = new ViewModel([
            'cible' => $cible,
            'structuresConcretesSubstituees' => $structuresConcretesSubstituees,
            'etablissements' => $etablissements,
        ]);
        $vm->setTemplate('application/substitution/modifier');

        return $vm;
    }
        if($idRetrait !== null && $idRetrait !== '') {
            $selection = array_filter($selection, function($a) use ($idRetrait) {return $a->getId() != $idRetrait;});
//            $selection_bis = [];
//            foreach ($selection as $s) {
//                if ($s->getId() != ($idRetrait)) $selection_bis[] = $s;
//            }
//            $selection = $selection_bis;


    public function modifierAction()
    {
        $idCible = $this->params()->fromRoute('cible');
        $structureCible = $this->structureService->findStructureSubsitutionCibleById($idCible);
        $structuresSubstituees = $structureCible->getStructuresSubstituees();

        $structureConcreteCible = $this->structureService->findStructureConcreteFromStructure($structureCible);
        $structuresConcretesSubstituees = [];
        foreach($structuresSubstituees as $structureSubstituee) {
            $structureConcreteSubstituee = $this->structureService->findStructureConcreteFromStructure($structureSubstituee);
            $structuresConcretesSubstituees[] = $structureConcreteSubstituee;
        }

        $etablissements = $this->etablissementService->findEtablissementsNonSubstitues();

        $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.");
                }
                $sources[] = $etablissement;
            }
            $this->etablissementService->updateFromPostData($structureCible,$data['cible']);
            $this->structureService->updateStructureSubstitutions($sources, $structureCible);

            return $this->redirect()->toRoute(null, [],[], true);
        }



        return new ViewModel([
            'nouvelEtablissement' => $etablissement,
            'selectedEtablissements' => $selection,
            'cible' => $structureCible,
            'etablissements' => $etablissements,
            'structuresConcretesSubstituees' => $structuresConcretesSubstituees,
        ]);
    }

    public function generateSourceInputAction() {
        $id = $this->params()->fromRoute('id');
        $etablissement = $this->etablissementService->findEtablissementByStructureId($id);

        return new ViewModel([
            'structure' => $etablissement,
        ]);
    }
}
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ use UnicaenImport\Entity\Db\Traits\SourceAwareTrait;
/**
 * EcoleDoctorale
 */
class EcoleDoctorale implements StructureEntityInterface, HistoriqueAwareInterface, SourceAwareInterface
class EcoleDoctorale implements StructureConcreteInterface, HistoriqueAwareInterface, SourceAwareInterface
{
    use HistoriqueAwareTrait;
    use SourceAwareTrait;
+3 −4
Original line number Diff line number Diff line
@@ -4,16 +4,14 @@ namespace Application\Entity\Db;

use UnicaenApp\Entity\HistoriqueAwareInterface;
use UnicaenApp\Entity\HistoriqueAwareTrait;
use UnicaenApp\Util;
use UnicaenImport\Entity\Db\Interfaces\SourceAwareInterface;
use UnicaenImport\Entity\Db\Source;
use UnicaenImport\Entity\Db\Traits\SourceAwareTrait;
use UnicaenApp\Util;
use Webmozart\Assert\Assert;

/**
 * Etablissement
 */
class Etablissement implements StructureEntityInterface, HistoriqueAwareInterface, SourceAwareInterface
class Etablissement implements StructureConcreteInterface, HistoriqueAwareInterface, SourceAwareInterface
{
    use HistoriqueAwareTrait;
    use SourceAwareTrait;
@@ -39,6 +37,7 @@ class Etablissement implements StructureEntityInterface, HistoriqueAwareInterfac
     */
    private $sourceCode;


    /**
     * Ajoute le préfixe établissement à la chaîne de caractères spécifiée.
     *
Loading