From 6f55ba15d6847afc6da370e8c62bf2aed648844a Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Wed, 24 Apr 2024 17:40:31 +0200 Subject: [PATCH] Split crud controllers for each report entity --- .../src/Controller/CSCrudReportController.php | 1 + .../src/Controller/CVCrudController.php | 63 +++++++++++++++ .../src/Controller/FreinCrudController.php | 36 +++++++++ .../Controller/ImmersionCrudController.php | 80 +++++++++++++++++++ .../ProjetProfessionnelCrudController.php | 58 ++++++++++++++ .../DependencyInjection/ChillJobExtension.php | 12 ++- .../Resources/config/services/controller.yml | 15 ++-- 7 files changed, 251 insertions(+), 14 deletions(-) create mode 100644 src/Bundle/ChillJobBundle/src/Controller/CVCrudController.php create mode 100644 src/Bundle/ChillJobBundle/src/Controller/FreinCrudController.php create mode 100644 src/Bundle/ChillJobBundle/src/Controller/ImmersionCrudController.php create mode 100644 src/Bundle/ChillJobBundle/src/Controller/ProjetProfessionnelCrudController.php diff --git a/src/Bundle/ChillJobBundle/src/Controller/CSCrudReportController.php b/src/Bundle/ChillJobBundle/src/Controller/CSCrudReportController.php index 6f0cc742c..e52f296cc 100644 --- a/src/Bundle/ChillJobBundle/src/Controller/CSCrudReportController.php +++ b/src/Bundle/ChillJobBundle/src/Controller/CSCrudReportController.php @@ -79,6 +79,7 @@ class CSCrudReportController extends EntityPersonCRUDController protected function createFormFor(string $action, $entity, ?string $formClass = null, array $formOptions = []): FormInterface { + dump($entity); if ($entity instanceof Immersion) { if ('edit' === $action || 'new' === $action) { return parent::createFormFor($action, $entity, $formClass, [ diff --git a/src/Bundle/ChillJobBundle/src/Controller/CVCrudController.php b/src/Bundle/ChillJobBundle/src/Controller/CVCrudController.php new file mode 100644 index 000000000..473aff62e --- /dev/null +++ b/src/Bundle/ChillJobBundle/src/Controller/CVCrudController.php @@ -0,0 +1,63 @@ +request->get('submit', 'save-and-close'); + + return match ($next) { + 'save-and-close', 'delete-and-close' => $this->redirectToRoute('chill_job_report_index', [ + 'person' => $entity->getPerson()->getId(), + ]), + default => parent::onBeforeRedirectAfterSubmission($action, $entity, $form, $request), + }; + } + + protected function duplicateEntity(string $action, Request $request) + { + if ('cv' === $this->getCrudName()) { + $id = $request->query->get('duplicate_id', 0); + /** @var \Chill\JobBundle\Entity\CV $cv */ + $cv = $this->getEntity($action, $id, $request); + $em = $this->managerRegistry->getManager(); + + $em->detach($cv); + + foreach ($cv->getExperiences() as $experience) { + $cv->removeExperience($experience); + $em->detach($experience); + $cv->addExperience($experience); + } + foreach ($cv->getFormations() as $formation) { + $cv->removeFormation($formation); + $em->detach($formation); + $cv->addFormation($formation); + } + + return $cv; + } + + return parent::duplicateEntity($action, $request); + } +} diff --git a/src/Bundle/ChillJobBundle/src/Controller/FreinCrudController.php b/src/Bundle/ChillJobBundle/src/Controller/FreinCrudController.php new file mode 100644 index 000000000..71aadfa5c --- /dev/null +++ b/src/Bundle/ChillJobBundle/src/Controller/FreinCrudController.php @@ -0,0 +1,36 @@ +request->get('submit', 'save-and-close'); + + return match ($next) { + 'save-and-close', 'delete-and-close' => $this->redirectToRoute('chill_job_report_index', [ + 'person' => $entity->getPerson()->getId(), + ]), + default => parent::onBeforeRedirectAfterSubmission($action, $entity, $form, $request), + }; + } +} diff --git a/src/Bundle/ChillJobBundle/src/Controller/ImmersionCrudController.php b/src/Bundle/ChillJobBundle/src/Controller/ImmersionCrudController.php new file mode 100644 index 000000000..7b5f4a07b --- /dev/null +++ b/src/Bundle/ChillJobBundle/src/Controller/ImmersionCrudController.php @@ -0,0 +1,80 @@ +request->get('submit', 'save-and-close'); + + return match ($next) { + 'save-and-close', 'delete-and-close' => $this->redirectToRoute('chill_job_report_index', [ + 'person' => $entity->getPerson()->getId(), + ]), + default => parent::onBeforeRedirectAfterSubmission($action, $entity, $form, $request), + }; + } + + protected function createFormFor(string $action, $entity, ?string $formClass = null, array $formOptions = []): FormInterface + { + if ($entity instanceof Immersion) { + if ('edit' === $action || 'new' === $action) { + return parent::createFormFor($action, $entity, $formClass, [ + 'center' => $entity->getPerson()->getCenter(), + ]); + } + if ('bilan' === $action) { + return parent::createFormFor($action, $entity, $formClass, [ + 'center' => $entity->getPerson()->getCenter(), + 'step' => 'bilan', + ]); + } + if ('delete' === $action) { + return parent::createFormFor($action, $entity, $formClass, $formOptions); + } + throw new \LogicException("this step {$action} is not supported"); + } + + return parent::createFormFor($action, $entity, $formClass, $formOptions); + } + + protected function onPreFlush(string $action, $entity, FormInterface $form, Request $request) + { + // for immersion / edit-bilan action + if ('bilan' === $action) { + /* @var $entity Immersion */ + $entity->setIsBilanFullfilled(true); + } + + parent::onPreFlush($action, $entity, $form, $request); + } + + /** + * Edit immersion bilan. + * + * @param int $id + */ + public function editBilan(Request $request, $id): Response + { + return $this->formEditAction('bilan', $request, $id); + } +} diff --git a/src/Bundle/ChillJobBundle/src/Controller/ProjetProfessionnelCrudController.php b/src/Bundle/ChillJobBundle/src/Controller/ProjetProfessionnelCrudController.php new file mode 100644 index 000000000..55cab01eb --- /dev/null +++ b/src/Bundle/ChillJobBundle/src/Controller/ProjetProfessionnelCrudController.php @@ -0,0 +1,58 @@ +request->get('submit', 'save-and-close'); + + return match ($next) { + 'save-and-close', 'delete-and-close' => $this->redirectToRoute('chill_job_report_index', [ + 'person' => $entity->getPerson()->getId(), + ]), + default => parent::onBeforeRedirectAfterSubmission($action, $entity, $form, $request), + }; + } + + protected function duplicateEntity(string $action, Request $request) + { + if ('projet_prof' === $this->getCrudName()) { + $id = $request->query->get('duplicate_id', 0); + /** @var \Chill\JobBundle\Entity\ProjetProfessionnel $original */ + $original = $this->getEntity($action, $id, $request); + + $new = parent::duplicateEntity($action, $request); + + foreach ($original->getSouhait() as $s) { + $new->addSouhait($s); + } + foreach ($original->getValide() as $s) { + $new->addValide($s); + } + + return $new; + } + + return parent::duplicateEntity($action, $request); + } +} diff --git a/src/Bundle/ChillJobBundle/src/DependencyInjection/ChillJobExtension.php b/src/Bundle/ChillJobBundle/src/DependencyInjection/ChillJobExtension.php index 94c0ce998..a855fc0a2 100644 --- a/src/Bundle/ChillJobBundle/src/DependencyInjection/ChillJobExtension.php +++ b/src/Bundle/ChillJobBundle/src/DependencyInjection/ChillJobExtension.php @@ -13,6 +13,10 @@ namespace Chill\JobBundle\DependencyInjection; use Chill\JobBundle\Controller\CSCrudReportController; use Chill\JobBundle\Controller\CSPersonController; +use Chill\JobBundle\Controller\CVCrudController; +use Chill\JobBundle\Controller\FreinCrudController; +use Chill\JobBundle\Controller\ImmersionCrudController; +use Chill\JobBundle\Controller\ProjetProfessionnelCrudController; use Chill\JobBundle\Entity\CSPerson; use Chill\JobBundle\Entity\CV; use Chill\JobBundle\Entity\Frein; @@ -72,7 +76,7 @@ class ChillJobExtension extends Extension implements PrependExtensionInterface ], [ 'class' => CV::class, - 'controller' => CSCrudReportController::class, + 'controller' => CVCrudController::class, 'name' => 'cscv', 'base_role' => 'ROLE_USER', 'base_path' => '/person/report/cv', @@ -94,7 +98,7 @@ class ChillJobExtension extends Extension implements PrependExtensionInterface ], [ 'class' => ProjetProfessionnel::class, - 'controller' => CSCrudReportController::class, + 'controller' => ProjetProfessionnelCrudController::class, 'name' => 'projet_prof', 'base_role' => 'ROLE_USER', 'base_path' => '/person/report/projet-professionnel', @@ -116,7 +120,7 @@ class ChillJobExtension extends Extension implements PrependExtensionInterface ], [ 'class' => Frein::class, - 'controller' => CSCrudReportController::class, + 'controller' => FreinCrudController::class, 'name' => 'csfrein', 'base_role' => 'ROLE_USER', 'base_path' => '/person/report/frein', @@ -138,7 +142,7 @@ class ChillJobExtension extends Extension implements PrependExtensionInterface ], [ 'class' => Immersion::class, - 'controller' => CSCrudReportController::class, + 'controller' => ImmersionCrudController::class, 'name' => 'immersion', 'base_role' => 'ROLE_USER', 'base_path' => '/person/report/immersion', diff --git a/src/Bundle/ChillJobBundle/src/Resources/config/services/controller.yml b/src/Bundle/ChillJobBundle/src/Resources/config/services/controller.yml index 517fa143d..6f8973999 100644 --- a/src/Bundle/ChillJobBundle/src/Resources/config/services/controller.yml +++ b/src/Bundle/ChillJobBundle/src/Resources/config/services/controller.yml @@ -1,13 +1,8 @@ services: - Chill\JobBundle\Controller\CSReportController: - autoconfigure: true + _defaults: autowire: true + autoconfigure: true + Chill\JobBundle\Controller\: + resource: '../../../Controller' tags: ['controller.service_arguments'] - Chill\JobBundle\Controller\CSPersonController: - autoconfigure: true - autowire: true - tags: ['controller.service_arguments'] - Chill\JobBundle\Controller\CSCrudReportController: - autoconfigure: true - autowire: true - tags: [ 'controller.service_arguments' ] +