diff --git a/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php b/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php index a615ddda2..7e572c89d 100644 --- a/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php +++ b/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php @@ -14,19 +14,46 @@ namespace Chill\DocStoreBundle\Workflow; use Chill\DocStoreBundle\Entity\AccompanyingCourseDocument; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; +use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; +use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkflowHandlerInterface { private EntityRepository $repository; + private TranslatorInterface $translator; + /** * TODO: injecter le repository directement. */ - public function __construct(EntityManagerInterface $em) + public function __construct(EntityManagerInterface $em, TranslatorInterface $translator) { $this->repository = $em->getRepository(AccompanyingCourseDocument::class); + $this->translator = $translator; + } + + public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array + { + $course = $this->getRelatedEntity($entityWorkflow) + ->getCourse(); + $persons = []; + + if (null !== $course) { + $persons = $course->getCurrentParticipations()->map(static function (AccompanyingPeriodParticipation $participation) { + return $participation->getPerson(); + })->toArray(); + } + + return [ + 'persons' => $persons, + ]; + } + + public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string + { + return $this->translator->trans('workflow.Document (n°%doc%)', ['%%doc%' => $entityWorkflow->getRelatedEntityId()]); } public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?AccompanyingCourseDocument diff --git a/src/Bundle/ChillMainBundle/Serializer/Normalizer/EntityWorkflowNormalizer.php b/src/Bundle/ChillMainBundle/Serializer/Normalizer/EntityWorkflowNormalizer.php index bc053b3cf..b74520436 100644 --- a/src/Bundle/ChillMainBundle/Serializer/Normalizer/EntityWorkflowNormalizer.php +++ b/src/Bundle/ChillMainBundle/Serializer/Normalizer/EntityWorkflowNormalizer.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\MainBundle\Serializer\Normalizer; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; +use Chill\MainBundle\Workflow\EntityWorkflowManager; use Chill\MainBundle\Workflow\Helper\MetadataExtractor; use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait; @@ -22,12 +23,18 @@ class EntityWorkflowNormalizer implements NormalizerInterface, NormalizerAwareIn { use NormalizerAwareTrait; + private EntityWorkflowManager $entityWorkflowManager; + private MetadataExtractor $metadataExtractor; private Registry $registry; - public function __construct(MetadataExtractor $metadataExtractor, Registry $registry) - { + public function __construct( + EntityWorkflowManager $entityWorkflowManager, + MetadataExtractor $metadataExtractor, + Registry $registry + ) { + $this->entityWorkflowManager = $entityWorkflowManager; $this->metadataExtractor = $metadataExtractor; $this->registry = $registry; } @@ -40,6 +47,7 @@ class EntityWorkflowNormalizer implements NormalizerInterface, NormalizerAwareIn public function normalize($object, ?string $format = null, array $context = []) { $workflow = $this->registry->get($object, $object->getWorkflowName()); + $handler = $this->entityWorkflowManager->getHandler($object); return [ 'type' => 'entity_workflow', @@ -49,6 +57,8 @@ class EntityWorkflowNormalizer implements NormalizerInterface, NormalizerAwareIn 'workflow' => $this->metadataExtractor->buildArrayPresentationForWorkflow($workflow), 'currentStep' => $this->normalizer->normalize($object->getCurrentStep(), $format, $context), 'steps' => $this->normalizer->normalize($object->getStepsChained(), $format, $context), + 'datas' => $this->normalizer->normalize($handler->getEntityData($object), $format, $context), + 'title' => $handler->getEntityTitle($object), ]; } diff --git a/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php b/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php index 2e97f77af..551a17747 100644 --- a/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php +++ b/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php @@ -15,6 +15,10 @@ use Chill\MainBundle\Entity\Workflow\EntityWorkflow; interface EntityWorkflowHandlerInterface { + public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array; + + public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string; + public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?object; /** diff --git a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php index 46aed46b4..1be9f87bf 100644 --- a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php +++ b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php @@ -16,14 +16,32 @@ use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation; use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationRepository; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodWorkEvaluationVoter; +use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowHandlerInterface { private AccompanyingPeriodWorkEvaluationRepository $repository; - public function __construct(AccompanyingPeriodWorkEvaluationRepository $repository) + private TranslatorInterface $translator; + + public function __construct(AccompanyingPeriodWorkEvaluationRepository $repository, TranslatorInterface $translator) { $this->repository = $repository; + $this->translator = $translator; + } + + public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array + { + $evaluation = $this->getRelatedEntity($entityWorkflow); + + return [ + 'persons' => $evaluation->getAccompanyingPeriodWork()->getPersons(), + ]; + } + + public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string + { + return $this->translator->trans('workflow.Evaluation (n°%eval%)', ['%eval%' => $entityWorkflow->getRelatedEntityId()]); } public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?AccompanyingPeriodWorkEvaluation diff --git a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php index cdb70f49c..3b6a1e9aa 100644 --- a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php +++ b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php @@ -15,17 +15,34 @@ use Chill\MainBundle\Entity\Workflow\EntityWorkflow; use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository; +use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInterface { private AccompanyingPeriodWorkRepository $repository; - public function __construct(AccompanyingPeriodWorkRepository $repository) + private TranslatorInterface $translator; + + public function __construct(AccompanyingPeriodWorkRepository $repository, TranslatorInterface $translator) { $this->repository = $repository; + $this->translator = $translator; } - public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?object + public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array + { + return [ + 'persons' => $this->getRelatedEntity($entityWorkflow) + ->getPersons(), + ]; + } + + public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string + { + return $this->translator->trans('workflow.Work (n°%w%)', ['%w%' => $entityWorkflow->getRelatedEntityId()]); + } + + public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?AccompanyingPeriodWork { return $this->repository->find($entityWorkflow->getRelatedEntityId()); }