diff --git a/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextWithPublicFormInterface.php b/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextWithPublicFormInterface.php index 402802501..894bf058c 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextWithPublicFormInterface.php +++ b/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextWithPublicFormInterface.php @@ -29,4 +29,6 @@ interface DocGeneratorContextWithPublicFormInterface extends DocGeneratorContext * @param mixed $entity */ public function hasPublicForm(DocGeneratorTemplate $template, $entity): bool; + + public function getFormData(DocGeneratorTemplate $template, $entity): array; } diff --git a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php index 1f5043d82..1f729e066 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php +++ b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php @@ -106,7 +106,7 @@ final class DocGeneratorTemplateController extends AbstractController if ($context instanceof DocGeneratorContextWithPublicFormInterface && $context->hasPublicForm($template, $entity)) { - $builder = $this->createFormBuilder(); + $builder = $this->createFormBuilder($context->getFormData($template, $entity)); $context->buildPublicForm($builder, $template, $entity); $form = $builder->getForm()->handleRequest($request); diff --git a/src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php b/src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php index b57577848..c081a63c2 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php +++ b/src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php @@ -99,6 +99,24 @@ class DocGenObjectNormalizer implements NormalizerAwareInterface, NormalizerInte } $type = $reflection->getProperty($attribute->getName())->getType(); + } elseif ($reflection->hasMethod($method = 'get'.ucfirst($attribute->getName()))) { + if (!$reflection->getMethod($method)->hasReturnType()) { + throw new \LogicException(sprintf( + 'Could not determine how the content is determined for the attribute %s. Add a return type on the method', + $attribute->getName() + )); + } + + $type = $reflection->getMethod($method)->getReturnType(); + } elseif ($reflection->hasMethod($method = 'is'.ucfirst($attribute->getName()))) { + if (!$reflection->getMethod($method)->hasReturnType()) { + throw new \LogicException(sprintf( + 'Could not determine how the content is determined for the attribute %s. Add a return type on the method', + $attribute->getName() + )); + } + + $type = $reflection->getMethod($method)->getReturnType(); } elseif ($reflection->hasMethod($attribute->getName())) { if (!$reflection->getMethod($attribute->getName())->hasReturnType()) { throw new \LogicException(sprintf( @@ -149,11 +167,13 @@ class DocGenObjectNormalizer implements NormalizerAwareInterface, NormalizerInte switch ($type) { case 'array': + return []; case 'bool': case 'double': case 'float': case 'int': case 'resource': + return null; case 'string': return ''; @@ -197,7 +217,7 @@ class DocGenObjectNormalizer implements NormalizerAwareInterface, NormalizerInte } elseif (null === $value) { $data[$key] = $this->normalizeNullOutputValue($format, $context, $attribute, $reflection); } else { - $data[$key] = (string) $value; + $data[$key] = $value; } } diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php index 9fcf492f6..d5f883e75 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php @@ -249,11 +249,11 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU */ public function getWarningDate(): ?DateTimeImmutable { - if (null === $this->getWarningDate() || null === $this->getWarningInterval()) { + if (null === $this->getEndDate() || null === $this->getWarningInterval()) { return null; } - return $this->getWarningDate()->sub($this->getWarningInterval()); + return $this->getEndDate()->sub($this->getWarningInterval()); } public function removeDocument(AccompanyingPeriodWorkEvaluationDocument $document): self diff --git a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php index 5227770eb..cab195530 100644 --- a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php +++ b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php @@ -34,7 +34,6 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; use function array_key_exists; class AccompanyingPeriodContext implements - DocGeneratorContextInterface, DocGeneratorContextWithAdminFormInterface, DocGeneratorContextWithPublicFormInterface { @@ -173,6 +172,13 @@ class AccompanyingPeriodContext implements return AccompanyingPeriod::class; } + public function getFormData(DocGeneratorTemplate $template, $entity): array + { + return [ + 'course' => $entity + ]; + } + public static function getKey(): string { return self::class; diff --git a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkContext.php b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkContext.php index 22c898f9d..3ade3ac4f 100644 --- a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkContext.php +++ b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkContext.php @@ -53,9 +53,12 @@ class AccompanyingPeriodWorkContext implements $this->periodContext->buildAdminForm($builder); } + /** + * @param AccompanyingPeriodWork $entity + */ public function buildPublicForm(FormBuilderInterface $builder, DocGeneratorTemplate $template, $entity): void { - $this->periodContext->buildPublicForm($builder, $template, $entity); + $this->periodContext->buildPublicForm($builder, $template, $entity->getAccompanyingPeriod()); } /** @@ -82,6 +85,14 @@ class AccompanyingPeriodWorkContext implements return AccompanyingPeriodWork::class; } + /** + * @param AccompanyingPeriodWork $entity + */ + public function getFormData(DocGeneratorTemplate $template, $entity): array + { + return $this->periodContext->getFormData($template, $entity->getAccompanyingPeriod()); + } + public static function getKey(): string { return 'accompanying_period_work_regular'; diff --git a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkEvaluationContext.php b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkEvaluationContext.php index 39dfcd493..e1aeed231 100644 --- a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkEvaluationContext.php +++ b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodWorkEvaluationContext.php @@ -136,6 +136,15 @@ class AccompanyingPeriodWorkEvaluationContext implements return AccompanyingPeriodWorkEvaluation::class; } + /** + * @param AccompanyingPeriodWorkEvaluation $entity + */ + public function getFormData(DocGeneratorTemplate $template, $entity): array + { + return $this->accompanyingPeriodWorkContext->getFormData($template, + $entity->getAccompanyingPeriodWork()); + } + public static function getKey(): string { return 'accompanying_period_work_evaluation_regular';