This commit is contained in:
Julien Fastré 2021-12-06 17:27:57 +01:00
parent 25147704ad
commit ebd817f61e
9 changed files with 52 additions and 46 deletions

View File

@ -32,6 +32,7 @@ class AdminDocGeneratorTemplateController extends CRUDController
switch ($action) { switch ($action) {
case 'new': case 'new':
$context = $this->contextManager->getContextByKey($request->get('context')); $context = $this->contextManager->getContextByKey($request->get('context'));
// no break
case 'edit': case 'edit':
$context = $this->contextManager->getContextByDocGeneratorTemplate($entity); $context = $this->contextManager->getContextByDocGeneratorTemplate($entity);
@ -39,6 +40,7 @@ class AdminDocGeneratorTemplateController extends CRUDController
$defaultTemplateParameters, $defaultTemplateParameters,
['context' => $context] ['context' => $context]
); );
case 'index': case 'index':
return array_merge( return array_merge(
$defaultTemplateParameters, $defaultTemplateParameters,
@ -48,7 +50,6 @@ class AdminDocGeneratorTemplateController extends CRUDController
default: default:
return parent::generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters); // TODO: Change the autogenerated stub return parent::generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters); // TODO: Change the autogenerated stub
} }
} }
public function new(Request $request): Response public function new(Request $request): Response

View File

@ -90,7 +90,6 @@ final class DocGeneratorTemplateController extends AbstractController
int $entityId, int $entityId,
Request $request Request $request
): Response { ): Response {
try { try {
$context = $this->contextManager->getContextByDocGeneratorTemplate($template); $context = $this->contextManager->getContextByDocGeneratorTemplate($template);
} catch (ContextNotFoundException $e) { } catch (ContextNotFoundException $e) {

View File

@ -1,18 +1,28 @@
<?php <?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\DocGeneratorBundle\Menu; namespace Chill\DocGeneratorBundle\Menu;
use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
use Knp\Menu\MenuItem; use Knp\Menu\MenuItem;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use function in_array;
class AdminMenuBuilder implements LocalMenuBuilderInterface class AdminMenuBuilder implements LocalMenuBuilderInterface
{ {
private TranslatorInterface $translator;
private Security $security; private Security $security;
private TranslatorInterface $translator;
public function __construct(TranslatorInterface $translator, Security $security) public function __construct(TranslatorInterface $translator, Security $security)
{ {
$this->translator = $translator; $this->translator = $translator;
@ -22,12 +32,12 @@ class AdminMenuBuilder implements LocalMenuBuilderInterface
public function buildMenu($menuId, MenuItem $menu, array $parameters) public function buildMenu($menuId, MenuItem $menu, array $parameters)
{ {
if ($this->security->isGranted('ROLE_ADMIN')) { if ($this->security->isGranted('ROLE_ADMIN')) {
if (in_array($menuId, ['admin_index', 'admin_section'])) { if (in_array($menuId, ['admin_index', 'admin_section'], true)) {
$menu->addChild($this->translator->trans('docgen.Document generation'), [ $menu->addChild($this->translator->trans('docgen.Document generation'), [
'route' => 'chill_crud_docgen_template_index' 'route' => 'chill_crud_docgen_template_index',
])->setExtras([ ])->setExtras([
'order' => 350, 'order' => 350,
'explain' => 'docgen.Manage templates and document generation' 'explain' => 'docgen.Manage templates and document generation',
]); ]);
} }
} }
@ -37,6 +47,4 @@ class AdminMenuBuilder implements LocalMenuBuilderInterface
{ {
return ['admin_index', 'admin_section', 'docgen_admin']; return ['admin_index', 'admin_section', 'docgen_admin'];
} }
} }

View File

@ -212,6 +212,7 @@ class DocGenObjectNormalizer implements NormalizerAwareInterface, NormalizerInte
if (is_iterable($value)) { if (is_iterable($value)) {
$arr = []; $arr = [];
foreach ($value as $k => $v) { foreach ($value as $k => $v) {
$arr[$k] = $arr[$k] =
$this->normalizer->normalize($v, $format, array_merge( $this->normalizer->normalize($v, $format, array_merge(

View File

@ -11,7 +11,7 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Entity; namespace Chill\PersonBundle\Entity;
use DateTimeImmutable; use DateTime;
use DateTimeInterface; use DateTimeInterface;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\DiscriminatorMap; use Symfony\Component\Serializer\Annotation\DiscriminatorMap;
@ -38,7 +38,7 @@ class AccompanyingPeriodParticipation
* @ORM\Column(type="date", nullable=true) * @ORM\Column(type="date", nullable=true)
* @Groups({"read", "docgen:read"}) * @Groups({"read", "docgen:read"})
*/ */
private ?\DateTime $endDate = null; private ?DateTime $endDate = null;
/** /**
* @ORM\Id * @ORM\Id
@ -59,11 +59,11 @@ class AccompanyingPeriodParticipation
* @ORM\Column(type="date", nullable=false) * @ORM\Column(type="date", nullable=false)
* @Groups({"read", "docgen:read"}) * @Groups({"read", "docgen:read"})
*/ */
private ?\DateTime $startDate = null; private ?DateTime $startDate = null;
public function __construct(AccompanyingPeriod $accompanyingPeriod, Person $person) public function __construct(AccompanyingPeriod $accompanyingPeriod, Person $person)
{ {
$this->startDate = new \DateTime('now'); $this->startDate = new DateTime('now');
$this->accompanyingPeriod = $accompanyingPeriod; $this->accompanyingPeriod = $accompanyingPeriod;
$this->person = $person; $this->person = $person;
} }

View File

@ -157,8 +157,6 @@ class Household
} }
/** /**
* @param DateTimeImmutable|null $now
* @return Collection
* @Serializer\Groups({"docgen:read"}) * @Serializer\Groups({"docgen:read"})
*/ */
public function getCurrentMembers(?DateTimeImmutable $now = null): Collection public function getCurrentMembers(?DateTimeImmutable $now = null): Collection

View File

@ -12,7 +12,6 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Serializer\Normalizer; namespace Chill\PersonBundle\Serializer\Normalizer;
use Chill\PersonBundle\Entity\SocialWork\SocialAction; use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Chill\PersonBundle\Templating\Entity\SocialActionRender; use Chill\PersonBundle\Templating\Entity\SocialActionRender;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait; use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
@ -41,8 +40,8 @@ class SocialActionNormalizer implements NormalizerAwareInterface, NormalizerInte
'desactivationDate' => $this->normalizer->normalize($socialAction->getDesactivationDate()), 'desactivationDate' => $this->normalizer->normalize($socialAction->getDesactivationDate()),
'title' => $socialAction->getTitle(), 'title' => $socialAction->getTitle(),
]; ];
case 'docgen':
case 'docgen':
if (null === $socialAction) { if (null === $socialAction) {
return ['id' => 0, 'title' => '', 'text' => '']; return ['id' => 0, 'title' => '', 'text' => ''];
} }
@ -52,12 +51,13 @@ class SocialActionNormalizer implements NormalizerAwareInterface, NormalizerInte
'text' => $this->render->renderString($socialAction, []), 'text' => $this->render->renderString($socialAction, []),
'title' => $socialAction->getTitle(), 'title' => $socialAction->getTitle(),
]; ];
default: default:
throw new \Symfony\Component\Serializer\Exception\RuntimeException("format not supported"); throw new \Symfony\Component\Serializer\Exception\RuntimeException('format not supported');
} }
} }
public function supportsNormalization($data, string $format = null, array $context = []) public function supportsNormalization($data, ?string $format = null, array $context = [])
{ {
if ($data instanceof SocialAction && 'json' === $format) { if ($data instanceof SocialAction && 'json' === $format) {
return true; return true;
@ -68,7 +68,7 @@ class SocialActionNormalizer implements NormalizerAwareInterface, NormalizerInte
return true; return true;
} }
if (null === $data && ($context['docgen:expects'] ?? null) === SocialAction::class) { if (null === $data && SocialAction::class === ($context['docgen:expects'] ?? null)) {
return true; return true;
} }
} }

View File

@ -16,9 +16,8 @@ use Chill\PersonBundle\Templating\Entity\SocialIssueRender;
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface; use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait; use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class SocialIssueNormalizer implements NormalizerAwareInterface, ContextAwareNormalizerInterface class SocialIssueNormalizer implements ContextAwareNormalizerInterface, NormalizerAwareInterface
{ {
use NormalizerAwareTrait; use NormalizerAwareTrait;
@ -42,8 +41,8 @@ class SocialIssueNormalizer implements NormalizerAwareInterface, ContextAwareNor
'title' => $socialIssue->getTitle(), 'title' => $socialIssue->getTitle(),
'text' => $this->render->renderString($socialIssue, []), 'text' => $this->render->renderString($socialIssue, []),
]; ];
case 'docgen':
case 'docgen':
if (null === $socialIssue) { if (null === $socialIssue) {
return ['id' => 0, 'title' => '', 'text' => '']; return ['id' => 0, 'title' => '', 'text' => ''];
} }
@ -56,20 +55,20 @@ class SocialIssueNormalizer implements NormalizerAwareInterface, ContextAwareNor
} }
} }
public function supportsNormalization($data, string $format = null, array $context = []) public function supportsNormalization($data, ?string $format = null, array $context = [])
{ {
if ($data instanceof SocialIssue && 'json' === $format) { if ($data instanceof SocialIssue && 'json' === $format) {
return true; return true;
} }
if ('docgen' === $format) { if ('docgen' === $format) {
if ($data instanceof SocialIssue) { if ($data instanceof SocialIssue) {
return true; return true;
} }
if (null === $data && ($context['docgen:expects'] ?? null) === SocialIssue::class) { if (null === $data && SocialIssue::class === ($context['docgen:expects'] ?? null)) {
return true; return true;
} }
} }
return false; return false;

View File

@ -80,22 +80,6 @@ final class AccompanyingPeriodDocGenNormalizerTest extends KernelTestCase
} }
} }
public function testNormalizeParticipations()
{
$period = new AccompanyingPeriod();
$period->addPerson($person = new Person());
$person->setFirstName('test');
$data = $this->normalizer->normalize($period, 'docgen', ['docgen:expects' => AccompanyingPeriod::class]);
$this->assertIsArray($data);
$this->assertArrayHasKey('participations', $data);
$this->assertCount(1, $data['participations']);
$this->assertArrayHasKey('currentParticipations', $data);
$this->assertCount(1, $data['currentParticipations']);
}
public function testNormalizeNull() public function testNormalizeNull()
{ {
$data = $this->normalizer->normalize(null, 'docgen', ['docgen:expects' => AccompanyingPeriod::class]); $data = $this->normalizer->normalize(null, 'docgen', ['docgen:expects' => AccompanyingPeriod::class]);
@ -134,4 +118,20 @@ final class AccompanyingPeriodDocGenNormalizerTest extends KernelTestCase
$this->assertEquals($item, $data[$key]); $this->assertEquals($item, $data[$key]);
} }
} }
public function testNormalizeParticipations()
{
$period = new AccompanyingPeriod();
$period->addPerson($person = new Person());
$person->setFirstName('test');
$data = $this->normalizer->normalize($period, 'docgen', ['docgen:expects' => AccompanyingPeriod::class]);
$this->assertIsArray($data);
$this->assertArrayHasKey('participations', $data);
$this->assertCount(1, $data['participations']);
$this->assertArrayHasKey('currentParticipations', $data);
$this->assertCount(1, $data['currentParticipations']);
}
} }