diff --git a/src/Bundle/ChillDocGeneratorBundle/Context/ContextManager.php b/src/Bundle/ChillDocGeneratorBundle/Context/ContextManager.php
index a2eb3742c..78b59fdc6 100644
--- a/src/Bundle/ChillDocGeneratorBundle/Context/ContextManager.php
+++ b/src/Bundle/ChillDocGeneratorBundle/Context/ContextManager.php
@@ -11,8 +11,14 @@ declare(strict_types=1);
namespace Chill\DocGeneratorBundle\Context;
+use Chill\DocGeneratorBundle\Context\Exception\ContextNotFoundException;
+use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
+
class ContextManager
{
+ /**
+ * @var DocGeneratorContextInterface[]|iterable
+ */
private iterable $contexts;
public function __construct(iterable $contexts)
@@ -20,7 +26,21 @@ class ContextManager
$this->contexts = $contexts;
}
- public function getContext(): array
+ /**
+ * @throw ContextNotFoundException when the context is not found
+ */
+ public function getContextByDocGeneratorTemplate(DocGeneratorTemplate $docGeneratorTemplate): DocGeneratorContextInterface
+ {
+ foreach ($this->contexts as $key => $context) {
+ if ($docGeneratorTemplate->getContext() === $key) {
+ return $context;
+ }
+ }
+
+ throw new ContextNotFoundException($docGeneratorTemplate->getContext());
+ }
+
+ public function getContexts(): array
{
return iterator_to_array($this->contexts);
}
diff --git a/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextInterface.php b/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextInterface.php
index 7118b8eab..f70aa0abf 100644
--- a/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextInterface.php
+++ b/src/Bundle/ChillDocGeneratorBundle/Context/DocGeneratorContextInterface.php
@@ -11,6 +11,9 @@ declare(strict_types=1);
namespace Chill\DocGeneratorBundle\Context;
+use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
+use Chill\DocStoreBundle\Entity\StoredObject;
+
/**
* Interface for context for for document generation.
*/
@@ -39,6 +42,8 @@ interface DocGeneratorContextInterface
*/
public function hasForm(): bool;
+ public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity): void;
+
/**
* True of false which entity supports.
*/
diff --git a/src/Bundle/ChillDocGeneratorBundle/Context/Exception/ContextNotFoundException.php b/src/Bundle/ChillDocGeneratorBundle/Context/Exception/ContextNotFoundException.php
new file mode 100644
index 000000000..d4bbe856a
--- /dev/null
+++ b/src/Bundle/ChillDocGeneratorBundle/Context/Exception/ContextNotFoundException.php
@@ -0,0 +1,22 @@
+em = $em;
+ }
+
/**
* Get the data that will be injected to the generated document.
*
@@ -107,6 +118,19 @@ class HouseholdMemberSelectionContext implements DocGeneratorContextInterface
return true;
}
+ public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity): void
+ {
+ // Only for evaluation
+ if ($entity instanceof AccompanyingPeriodWorkEvaluation) {
+ $doc = new AccompanyingPeriodWorkEvaluationDocument();
+ $doc
+ ->setStoredObject($storedObject)
+ ->setTemplate($template);
+ $entity->addDocument($doc);
+ $this->em->persist($doc);
+ }
+ }
+
/**
* True of false which entity supports.
*/
diff --git a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php
index a0a50fb35..2a048d421 100644
--- a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php
+++ b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php
@@ -13,25 +13,24 @@ namespace Chill\DocGeneratorBundle\Controller;
use Base64Url\Base64Url;
use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlGeneratorInterface;
-use Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext;
+use Chill\DocGeneratorBundle\Context\ContextManager;
+use Chill\DocGeneratorBundle\Context\Exception\ContextNotFoundException;
use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
use Chill\DocGeneratorBundle\Repository\DocGeneratorTemplateRepository;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Serializer\Model\Collection;
-use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation;
-
-use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
-
use GuzzleHttp\Client;
use GuzzleHttp\Exception\TransferException;
use PhpOffice\PhpWord\TemplateProcessor;
+use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
// TODO à mettre dans services
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
@@ -42,20 +41,32 @@ final class DocGeneratorTemplateController extends AbstractController
{
private HttpClientInterface $client;
+ private ContextManager $contextManager;
+
private DocGeneratorTemplateRepository $docGeneratorTemplateRepository;
private KernelInterface $kernel;
+ private LoggerInterface $logger;
+
private PaginatorFactory $paginatorFactory;
+ private TempUrlGeneratorInterface $tempUrlGenerator;
+
public function __construct(
+ ContextManager $contextManager,
DocGeneratorTemplateRepository $docGeneratorTemplateRepository,
+ LoggerInterface $logger,
PaginatorFactory $paginatorFactory,
+ TempUrlGeneratorInterface $tempUrlGenerator,
KernelInterface $kernel,
HttpClientInterface $client
) {
+ $this->contextManager = $contextManager;
$this->docGeneratorTemplateRepository = $docGeneratorTemplateRepository;
+ $this->logger = $logger;
$this->paginatorFactory = $paginatorFactory;
+ $this->tempUrlGenerator = $tempUrlGenerator;
$this->kernel = $kernel;
$this->client = $client;
}
@@ -67,13 +78,12 @@ final class DocGeneratorTemplateController extends AbstractController
* )
*/
public function generateDocFromTemplateAction(
- TempUrlGeneratorInterface $tempUrlGenerator,
DocGeneratorTemplate $template,
string $entityClassName,
int $entityId,
Request $request
): Response {
- $getUrlGen = $tempUrlGenerator->generate(
+ $getUrlGen = $this->tempUrlGenerator->generate(
'GET',
$template->getFile()->getFilename()
);
@@ -102,25 +112,29 @@ final class DocGeneratorTemplateController extends AbstractController
exit;
}
- if (fwrite($handle, $dataDecrypted) === false) {
+ if (false === $ftemplate = fwrite($handle, $dataDecrypted)) {
echo "Cannot write to file ({$tmpfnameDeCrypted})";
exit;
}
- dump("Success, wrote ({$dataDecrypted}) to file ({$tmpfnameDeCrypted})");
+ dump("Success, wrote (to file ({$tmpfnameDeCrypted})");
fclose($handle);
$entity = $this->getDoctrine()->getRepository($entityClassName)->find($entityId);
- if ($template->getContext() === HouseholdMemberSelectionContext::class) {
- $context = new HouseholdMemberSelectionContext();
- $datas = $context->getData($entity);
- } else {
- throw new \Exception('Not implemented', 1);
+ try {
+ $context = $this->contextManager->getContextByDocGeneratorTemplate($template);
+ } catch (ContextNotFoundException $e) {
+ throw new NotFoundHttpException($e->getMessage(), $e);
}
+ $datas = $context->getData($entity);
+
+ dump('process the data', $datas);
+
+ /*
$templateProcessor = new TemplateProcessor($tmpfnameDeCrypted);
foreach ($datas['setValues'] as $setValuesConf) {
@@ -130,28 +144,32 @@ final class DocGeneratorTemplateController extends AbstractController
foreach ($datas['cloneRowAndSetValues'] as $cloneRowAndSetValues) {
$templateProcessor->cloneRowAndSetValues($cloneRowAndSetValues[0], $cloneRowAndSetValues[1]);
}
-
$tmpfnameGenerated = tempnam($this->kernel->getCacheDir(), 'DOC_GENERATED');
- $templateProcessor->saveAs($tmpfnameGenerated);
$fileContent = fopen($tmpfnameGenerated, 'rb'); // the generated file content
+ */
$genDocName = 'doc_' . sprintf('%010d', mt_rand()) . '.docx';
- $getUrlGen = $tempUrlGenerator->generate(
+ $getUrlGen = $this->tempUrlGenerator->generate(
'PUT',
$genDocName
);
unlink($tmpfnameDeCrypted);
- unlink($tmpfnameGenerated);
+ //unlink($tmpfnameGenerated);
$client = new Client();
try {
+ /*
$putResponse = $client->request('PUT', $getUrlGen->url, [
'body' => $fileContent,
]);
+ */
+ $putResponse = $client->request('PUT', $getUrlGen->url, [
+ 'body' => $ftemplate,
+ ]);
if ($putResponse->getStatusCode() === 201) {
$em = $this->getDoctrine()->getManager();
@@ -163,14 +181,16 @@ final class DocGeneratorTemplateController extends AbstractController
$em->persist($storedObject);
- // Only for evaluation
- if ($entity instanceof AccompanyingPeriodWorkEvaluation) {
- $doc = new AccompanyingPeriodWorkEvaluationDocument();
- $doc
- ->setStoredObject($storedObject)
- ->setTemplate($template);
- $entity->addDocument($doc);
- $em->persist($doc);
+ try {
+ $context->storeGenerated($template, $storedObject, $entity);
+ } catch (\Exception $e) {
+ $this->logger->error('Could not store the associated document to entity', [
+ 'entityClassName' => $entityClassName,
+ 'entityId' => $entityId,
+ 'contextKey' => $context->getName(),
+ ]);
+
+ throw $e;
}
$em->flush();
@@ -184,7 +204,7 @@ final class DocGeneratorTemplateController extends AbstractController
throw $e;
}
- throw new Exception('Unable to generate document.');
+ throw new \Exception('Unable to generate document.');
}
/**
diff --git a/src/Bundle/ChillDocGeneratorBundle/Form/DocGeneratorTemplateType.php b/src/Bundle/ChillDocGeneratorBundle/Form/DocGeneratorTemplateType.php
index f453ffa35..e661c6d9e 100644
--- a/src/Bundle/ChillDocGeneratorBundle/Form/DocGeneratorTemplateType.php
+++ b/src/Bundle/ChillDocGeneratorBundle/Form/DocGeneratorTemplateType.php
@@ -35,7 +35,7 @@ class DocGeneratorTemplateType extends AbstractType
{
$contexts = array_flip(array_map(static function (DocGeneratorContextInterface $c) {
return $c->getName();
- }, $this->contextManager->getContext()));
+ }, $this->contextManager->getContexts()));
$builder
->add('name', TranslatableStringFormType::class, [
diff --git a/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/index.html.twig b/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/index.html.twig
index ca6869bff..893f504bc 100644
--- a/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/index.html.twig
+++ b/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/index.html.twig
@@ -36,7 +36,7 @@
{% for document in documents %}
{{ document.title }} |
- {{ document.category.name|localize_translatable_string }} |
+ {% if document.category %}{{ document.category.name|localize_translatable_string }}{% endif %} |
{% if is_granted('CHILL_ACCOMPANYING_COURSE_DOCUMENT_SEE_DETAILS', document) %}
diff --git a/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/show.html.twig b/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/show.html.twig
index 3bf9cac43..90bb6289d 100644
--- a/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/show.html.twig
+++ b/src/Bundle/ChillDocStoreBundle/Resources/views/AccompanyingCourseDocument/show.html.twig
@@ -22,8 +22,10 @@
- {{ 'Title'|trans }}
- {{ document.title }}
- - {{ 'Category'|trans }}
- - {{ document.category.name|localize_translatable_string }}
+ {% if document.category is not null %}
+ - {{ 'Category'|trans }}
+ - {{ document.category.name|localize_translatable_string }}
+ {% endif %}
- {{ 'Description' | trans }}
-
diff --git a/src/Bundle/ChillMainBundle/Templating/TranslatableStringHelper.php b/src/Bundle/ChillMainBundle/Templating/TranslatableStringHelper.php
index e354fe9f0..88bb8f89d 100644
--- a/src/Bundle/ChillMainBundle/Templating/TranslatableStringHelper.php
+++ b/src/Bundle/ChillMainBundle/Templating/TranslatableStringHelper.php
@@ -18,12 +18,12 @@ use function array_key_exists;
final class TranslatableStringHelper implements TranslatableStringHelperInterface
{
+ private string $defaultLocale;
+
private RequestStack $requestStack;
private TranslatorInterface $translator;
- private string $defaultLocale;
-
public function __construct(RequestStack $requestStack, TranslatorInterface $translator, ParameterBagInterface $parameterBag)
{
$this->requestStack = $requestStack;
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
index d3595932c..92d84610f 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
@@ -135,8 +135,6 @@ class AccompanyingPeriod implements
private ?ClosingMotive $closingMotive = null;
/**
- * @var Collection
- *
* @ORM\OneToMany(targetEntity="Chill\PersonBundle\Entity\AccompanyingPeriod\Comment",
* mappedBy="accompanyingPeriod",
* cascade={"persist", "remove"},
@@ -147,7 +145,6 @@ class AccompanyingPeriod implements
private Collection $comments;
/**
- * @var bool
* @ORM\Column(type="boolean", options={"default": false})
* @Groups({"read", "write", "docgen:read"})
*/
@@ -167,7 +164,6 @@ class AccompanyingPeriod implements
private ?User $createdBy = null;
/**
- * @var bool
* @ORM\Column(type="boolean", options={"default": false})
* @Groups({"read", "write", "docgen:read"})
*/
@@ -216,8 +212,6 @@ class AccompanyingPeriod implements
private ?Origin $origin = null;
/**
- * @var Collection
- *
* @ORM\OneToMany(targetEntity=AccompanyingPeriodParticipation::class,
* mappedBy="accompanyingPeriod", orphanRemoval=true,
* cascade={"persist", "refresh", "remove", "merge", "detach"})
@@ -235,15 +229,12 @@ class AccompanyingPeriod implements
private ?Person $personLocation = null;
/**
- * @var string
- *
* @ORM\Column(type="text")
* @Groups({"read", "write"})
*/
private string $remark = '';
/**
- * @var bool
* @ORM\Column(type="boolean", options={"default": false})
* @Groups({"read", "write", "docgen:read"})
*/
@@ -262,8 +253,6 @@ class AccompanyingPeriod implements
private ?ThirdParty $requestorThirdParty = null;
/**
- * @var Collection
- *
* @ORM\OneToMany(
* targetEntity="Chill\PersonBundle\Entity\AccompanyingPeriod\Resource",
* mappedBy="accompanyingPeriod",
@@ -276,7 +265,6 @@ class AccompanyingPeriod implements
private Collection $resources;
/**
- * @var Collection
* @ORM\ManyToMany(
* targetEntity=Scope::class,
* cascade={}
@@ -304,7 +292,6 @@ class AccompanyingPeriod implements
private Collection $socialIssues;
/**
- * @var string
* @ORM\Column(type="string", length=32, nullable=true)
* @Groups({"read"})
*/
@@ -666,7 +653,7 @@ class AccompanyingPeriod implements
*
* @return DateTime
*/
- public function getOpeningDate(): ?\DateTime
+ public function getOpeningDate(): ?DateTime
{
return $this->openingDate;
}
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php
index 09ebc7d31..afcfc4228 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php
@@ -39,21 +39,23 @@ class Origin
* @ORM\Column(type="json")
* @Groups({"read"})
*/
- private array $label = [];
+ private $label;
/**
* @ORM\Column(type="date_immutable", nullable=true)
* @Groups({"read"})
*/
- private ?\DateTimeImmutable $noActiveAfter = null;
+ private ?DateTimeImmutable $noActiveAfter = null;
public function getId(): ?int
{
return $this->id;
}
- public function getLabel(): array
+ public function getLabel()
{
+ dump($this->label);
+
return $this->label;
}
diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php
index d3243c48b..473f6d75d 100644
--- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php
+++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php
@@ -1,5 +1,14 @@
"",
- 'closingDate' => \DateTime::class,
- 'confidential' => "",
+ 'id' => '',
+ 'closingDate' => DateTime::class,
+ 'confidential' => '',
'confidentialText' => '',
- 'createdAt' => \DateTime::class,
+ 'createdAt' => DateTime::class,
'createdBy' => User::class,
- 'emergency' => "",
+ 'emergency' => '',
'emergencyText' => '',
- 'openingDate' => \DateTime::class,
+ 'openingDate' => DateTime::class,
'originText' => '',
'requestorAnonymous' => false,
'socialIssues' => [],
@@ -59,6 +59,16 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
'participations' => [],
];
+ private ClosingMotiveRender $closingMotiveRender;
+
+ private ScopeResolverDispatcher $scopeResolverDispatcher;
+
+ private SocialIssueRender $socialIssueRender;
+
+ private TranslatableStringHelper $translatableStringHelper;
+
+ private TranslatorInterface $translator;
+
public function __construct(
TranslatorInterface $translator,
TranslatableStringHelper $translatableStringHelper,
@@ -73,38 +83,19 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
$this->scopeResolverDispatcher = $scopeResolverDispatcher;
}
-
- public function supportsNormalization($data, string $format = null, array $context = []): bool
- {
- if ('docgen' !== $format) {
- return false;
- }
-
- if ($data instanceof AccompanyingPeriod) {
- if (array_key_exists(self::IGNORE_FIRST_PASS_KEY, $context)
- && in_array(spl_object_hash($data), $context[self::IGNORE_FIRST_PASS_KEY])) {
- return false;
- }
-
- return true;
- } elseif (null === $data && ($context['docgen:expects'] ?? null) === AccompanyingPeriod::class) {
- return true;
- }
-
- return false;
- }
-
/**
* @param AccompanyingPeriod|null $period
*/
- public function normalize($period, string $format = null, array $context = [])
+ public function normalize($period, ?string $format = null, array $context = [])
{
if ($period instanceof AccompanyingPeriod) {
$ignored = $context[self::IGNORE_FIRST_PASS_KEY] ?? [];
$ignored[] = spl_object_hash($period);
$initial =
- $this->normalizer->normalize($period, $format, \array_merge($context,
- [self::IGNORE_FIRST_PASS_KEY => $ignored, AbstractNormalizer::GROUPS => 'docgen:read']));
+ $this->normalizer->normalize($period, $format, array_merge(
+ $context,
+ [self::IGNORE_FIRST_PASS_KEY => $ignored, AbstractNormalizer::GROUPS => 'docgen:read']
+ ));
// some transformation
$user = $initial['user'];
@@ -122,14 +113,14 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
// and add data custom
[
'intensity' => $this->translator->trans($period->getIntensity()),
- 'step' => $this->translator->trans('accompanying_period.'.$period->getStep()),
+ 'step' => $this->translator->trans('accompanying_period.' . $period->getStep()),
'emergencyText' => $period->isEmergency() ? $this->translator->trans('accompanying_period.emergency') : '',
'confidentialText' => $period->isConfidential() ? $this->translator->trans('confidential') : '',
- 'originText' => null !== $period->getOrigin() ? $this->translatableStringHelper->localize($period->getOrigin()->getLabel()) : '',
+ //'originText' => null !== $period->getOrigin() ? $this->translatableStringHelper->localize($period->getOrigin()->getLabel()) : '',
'closingMotiveText' => null !== $period->getClosingMotive() ?
$this->closingMotiveRender->renderString($period->getClosingMotive(), []) : '',
'ref' => $user,
- 'socialIssuesText' => implode(', ', array_map(function(SocialIssue $s) {
+ 'socialIssuesText' => implode(', ', array_map(function (SocialIssue $s) {
return $this->socialIssueRender->renderString($s, []);
}, $period->getSocialIssues()->toArray())),
'scopesText' => implode(', ', array_map(function (Scope $s) {
@@ -142,6 +133,28 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
return self::PERIOD_NULL;
}
- throw new InvalidArgumentException("this neither an accompanying period or null");
+ throw new InvalidArgumentException('this neither an accompanying period or null');
+ }
+
+ public function supportsNormalization($data, ?string $format = null, array $context = []): bool
+ {
+ if ('docgen' !== $format) {
+ return false;
+ }
+
+ if ($data instanceof AccompanyingPeriod) {
+ if (array_key_exists(self::IGNORE_FIRST_PASS_KEY, $context)
+ && in_array(spl_object_hash($data), $context[self::IGNORE_FIRST_PASS_KEY], true)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ if (null === $data && AccompanyingPeriod::class === ($context['docgen:expects'] ?? null)) {
+ return true;
+ }
+
+ return false;
}
}
diff --git a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php
index 2a3fb10f4..9c7ee70a6 100644
--- a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php
+++ b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php
@@ -13,12 +13,32 @@ namespace Chill\PersonBundle\Service\DocGenerator;
use Chill\DocGeneratorBundle\Context\DocGeneratorContextInterface;
use Chill\DocGeneratorBundle\Context\Exception\UnexpectedTypeException;
+use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
+use Chill\DocStoreBundle\Entity\AccompanyingCourseDocument;
+use Chill\DocStoreBundle\Entity\StoredObject;
+use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
+use DateTime;
+use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class AccompanyingPeriodContext implements DocGeneratorContextInterface
{
- public NormalizerInterface $normalizer;
+ private EntityManagerInterface $em;
+
+ private NormalizerInterface $normalizer;
+
+ private TranslatableStringHelperInterface $translatableStringHelper;
+
+ public function __construct(
+ NormalizerInterface $normalizer,
+ TranslatableStringHelperInterface $translatableStringHelper,
+ EntityManagerInterface $em
+ ) {
+ $this->normalizer = $normalizer;
+ $this->translatableStringHelper = $translatableStringHelper;
+ $this->em = $em;
+ }
public function getData($entity): array
{
@@ -49,6 +69,20 @@ class AccompanyingPeriodContext implements DocGeneratorContextInterface
return false;
}
+ /**
+ * @param AccompanyingPeriod $entity
+ */
+ public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity): void
+ {
+ $doc = new AccompanyingCourseDocument();
+ $doc->setTitle($this->translatableStringHelper->localize($template->getName()))
+ ->setDate(new DateTime())
+ ->setDescription($this->translatableStringHelper->localize($template->getName()))
+ ->setCourse($entity)
+ ->setObject($storedObject);
+ $this->em->persist($doc);
+ }
+
public function supports(string $entityClass): bool
{
return AccompanyingPeriod::class === $entityClass;
diff --git a/src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizerTest.php b/src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizerTest.php
index 5f5598a37..4c08db326 100644
--- a/src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizerTest.php
+++ b/src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizerTest.php
@@ -1,15 +1,27 @@
setOrigin((new AccompanyingPeriod\Origin())->setLabel(['fr' => 'origin']));
$period->setClosingMotive((new AccompanyingPeriod\ClosingMotive())->setName(['closing']));
$period->addScope((new Scope())->setName(['fr' => 'scope1']));
- $period->addScope((new Scope())->setName(['fr' =>'scope2']));
+ $period->addScope((new Scope())->setName(['fr' => 'scope2']));
$period->addSocialIssue((new SocialIssue())->setTitle(['fr' => 'issue1']));
$period->addSocialIssue((new SocialIssue())->setTitle(['fr' => 'issue2']));
$data = $this->normalizer->normalize($period, 'docgen', ['docgen:expects' => AccompanyingPeriod::class]);
@@ -59,7 +71,7 @@ class AccompanyingPeriodDocGenNormalizerTest extends KernelTestCase
$this->assertEqualsCanonicalizing(array_keys($expected), array_keys($data));
foreach ($expected as $key => $item) {
- if ($item === '@ignored') {
+ if ('@ignored' === $item) {
continue;
}
@@ -72,13 +84,13 @@ class AccompanyingPeriodDocGenNormalizerTest extends KernelTestCase
$data = $this->normalizer->normalize(null, 'docgen', ['docgen:expects' => AccompanyingPeriod::class]);
$expected = [
- 'id' => "",
+ 'id' => '',
'closingDate' => '@ignored',
- 'confidential' => "",
+ 'confidential' => '',
'confidentialText' => '',
'createdAt' => '@ignored',
'createdBy' => '@ignored',
- 'emergency' => "",
+ 'emergency' => '',
'emergencyText' => '',
'openingDate' => '@ignored',
'originText' => '',
@@ -98,12 +110,11 @@ class AccompanyingPeriodDocGenNormalizerTest extends KernelTestCase
$this->assertEqualsCanonicalizing(array_keys($expected), array_keys($data));
foreach ($expected as $key => $item) {
- if ($item === '@ignored') {
+ if ('@ignored' === $item) {
continue;
}
$this->assertEquals($item, $data[$key]);
}
}
-
}
|