ChillPersonBundle: move numberOfDependents configuration to a new household node; extend AdministrativeStatusRepository and EmploymentStatusRepository from ServiceEntityRepository

This commit is contained in:
Christophe Siraut 2024-12-20 11:28:36 +01:00
parent fbdc0d32f0
commit 03717a1a87
12 changed files with 49 additions and 128 deletions

View File

@ -37,7 +37,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class HouseholdMemberController extends ApiController class HouseholdMemberController extends ApiController
{ {
private array $fields_visibility; private array $household_fields_visibility;
public function __construct( public function __construct(
private readonly UrlGeneratorInterface $generator, private readonly UrlGeneratorInterface $generator,
@ -50,7 +50,7 @@ class HouseholdMemberController extends ApiController
private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry, private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry,
protected ParameterBagInterface $parameterBag, protected ParameterBagInterface $parameterBag,
) { ) {
$this->fields_visibility = $parameterBag->get('chill_person.person_fields'); $this->household_fields_visibility = $parameterBag->get('chill_person.household_fields');
} }
#[Route(path: '/{_locale}/person/household/member/{id}/edit', name: 'chill_person_household_member_edit')] #[Route(path: '/{_locale}/person/household/member/{id}/edit', name: 'chill_person_household_member_edit')]
@ -150,7 +150,7 @@ class HouseholdMemberController extends ApiController
'allowHouseholdCreate' => $allowHouseholdCreate ?? true, 'allowHouseholdCreate' => $allowHouseholdCreate ?? true,
'allowHouseholdSearch' => $allowHouseholdSearch ?? true, 'allowHouseholdSearch' => $allowHouseholdSearch ?? true,
'allowLeaveWithoutHousehold' => $allowLeaveWithoutHousehold ?? $request->query->has('allow_leave_without_household'), 'allowLeaveWithoutHousehold' => $allowLeaveWithoutHousehold ?? $request->query->has('allow_leave_without_household'),
'displayDependents' => ('visible' == $this->fields_visibility['number_of_dependents']) ? true : false, 'displayDependents' => ('visible' == $this->household_fields_visibility['number_of_dependents']) ? true : false,
]; ];
// context // context

View File

@ -60,6 +60,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
$this->handlePersonFieldsParameters($container, $config['person_fields']); $this->handlePersonFieldsParameters($container, $config['person_fields']);
$this->handleAccompanyingPeriodsFieldsParameters($container, $config['accompanying_periods_fields']); $this->handleAccompanyingPeriodsFieldsParameters($container, $config['accompanying_periods_fields']);
$this->handleHouseholdFieldsParameters($container, $config['household_fields']);
$container->setParameter( $container->setParameter(
'chill_person.allow_multiple_simultaneous_accompanying_periods', 'chill_person.allow_multiple_simultaneous_accompanying_periods',
@ -135,6 +136,9 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
'chill_accompanying_periods' => [ 'chill_accompanying_periods' => [
'fields' => $config['accompanying_periods_fields'], 'fields' => $config['accompanying_periods_fields'],
], ],
'chill_household' => [
'fields' => $config['household_fields'],
],
], ],
'form_themes' => ['@ChillPerson/Export/ListPersonFormFields.html.twig'], 'form_themes' => ['@ChillPerson/Export/ListPersonFormFields.html.twig'],
]; ];
@ -1142,6 +1146,23 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
} }
} }
private function handleHouseholdFieldsParameters(ContainerBuilder $container, $config)
{
$container->setParameter('chill_person.household_fields', $config);
foreach ($config as $key => $value) {
switch ($key) {
case 'enabled':
break;
default:
$container->setParameter('chill_person.household_fields.'.$key, $value);
break;
}
}
}
private function handlePersonFieldsParameters(ContainerBuilder $container, $config) private function handlePersonFieldsParameters(ContainerBuilder $container, $config)
{ {
if (\array_key_exists('enabled', $config)) { if (\array_key_exists('enabled', $config)) {

View File

@ -110,6 +110,12 @@ class Configuration implements ConfigurationInterface
->end() ->end()
->end() // children for 'person_fields', parent = array 'person_fields' ->end() // children for 'person_fields', parent = array 'person_fields'
->end() // person_fields, parent = children of root ->end() // person_fields, parent = children of root
->arrayNode('household_fields')
->canBeDisabled()
->children()
->append($this->addFieldNode('number_of_dependents', 'hidden'))
->end()
->end()
->arrayNode('accompanying_periods_fields') ->arrayNode('accompanying_periods_fields')
->canBeDisabled() ->canBeDisabled()
->children() ->children()

View File

@ -11,11 +11,12 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Entity; namespace Chill\PersonBundle\Entity;
use Chill\PersonBundle\Repository\AdministrativeStatusRepository;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer; use Symfony\Component\Serializer\Annotation as Serializer;
#[Serializer\DiscriminatorMap(typeProperty: 'type', mapping: ['chill_person_administrative_status' => AdministrativeStatus::class])] #[Serializer\DiscriminatorMap(typeProperty: 'type', mapping: ['chill_person_administrative_status' => AdministrativeStatus::class])]
#[ORM\Entity] #[ORM\Entity(repositoryClass: AdministrativeStatusRepository::class)]
#[ORM\Table(name: 'chill_person_administrative_status')] #[ORM\Table(name: 'chill_person_administrative_status')]
class AdministrativeStatus class AdministrativeStatus
{ {

View File

@ -11,11 +11,12 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Entity; namespace Chill\PersonBundle\Entity;
use Chill\PersonBundle\Repository\EmploymentStatusRepository;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer; use Symfony\Component\Serializer\Annotation as Serializer;
#[Serializer\DiscriminatorMap(typeProperty: 'type', mapping: ['chill_person_employment_status' => EmploymentStatus::class])] #[Serializer\DiscriminatorMap(typeProperty: 'type', mapping: ['chill_person_employment_status' => EmploymentStatus::class])]
#[ORM\Entity] #[ORM\Entity(repositoryClass: EmploymentStatusRepository::class)]
#[ORM\Table(name: 'chill_person_employment_status')] #[ORM\Table(name: 'chill_person_employment_status')]
class EmploymentStatus class EmploymentStatus
{ {

View File

@ -23,14 +23,14 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class HouseholdCompositionType extends AbstractType class HouseholdCompositionType extends AbstractType
{ {
private array $fields_visibility; private array $household_fields_visibility;
public function __construct( public function __construct(
private readonly HouseholdCompositionTypeRepository $householdCompositionTypeRepository, private readonly HouseholdCompositionTypeRepository $householdCompositionTypeRepository,
private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatableStringHelperInterface $translatableStringHelper,
protected ParameterBagInterface $parameterBag, protected ParameterBagInterface $parameterBag,
) { ) {
$this->fields_visibility = $parameterBag->get('chill_person.person_fields'); $this->household_fields_visibility = $parameterBag->get('chill_person.household_fields');
} }
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
@ -52,7 +52,7 @@ class HouseholdCompositionType extends AbstractType
'required' => true, 'required' => true,
'label' => 'household_composition.numberOfChildren', 'label' => 'household_composition.numberOfChildren',
]); ]);
if ('visible' == $this->fields_visibility['number_of_dependents']) { if ('visible' == $this->household_fields_visibility['number_of_dependents']) {
$builder $builder
->add('numberOfDependents', IntegerType::class, [ ->add('numberOfDependents', IntegerType::class, [
'required' => true, 'required' => true,

View File

@ -12,40 +12,13 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Repository; namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\AdministrativeStatus; use Chill\PersonBundle\Entity\AdministrativeStatus;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityRepository; use Doctrine\Persistence\ManagerRegistry;
class AdministrativeStatusRepository implements AdministrativeStatusRepositoryInterface class AdministrativeStatusRepository extends ServiceEntityRepository
{ {
private readonly EntityRepository $repository; public function __construct(ManagerRegistry $registry)
public function __construct(EntityManagerInterface $entityManager)
{ {
$this->repository = $entityManager->getRepository(AdministrativeStatus::class); parent::__construct($registry, AdministrativeStatus::class);
}
public function find($id): ?AdministrativeStatus
{
return $this->repository->find($id);
}
public function findAll(): array
{
return $this->repository->findAll();
}
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array
{
return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
}
public function findOneBy(array $criteria): ?AdministrativeStatus
{
return $this->findOneBy($criteria);
}
public function getClassName(): string
{
return AdministrativeStatus::class;
} }
} }

View File

@ -1,27 +0,0 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\AdministrativeStatus;
interface AdministrativeStatusRepositoryInterface
{
public function find($id): ?AdministrativeStatus;
public function findAll(): array;
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array;
public function findOneBy(array $criteria): ?AdministrativeStatus;
public function getClassName(): string;
}

View File

@ -12,40 +12,13 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Repository; namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\EmploymentStatus; use Chill\PersonBundle\Entity\EmploymentStatus;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityRepository; use Doctrine\Persistence\ManagerRegistry;
class EmploymentStatusRepository implements EmploymentStatusRepositoryInterface class EmploymentStatusRepository extends ServiceEntityRepository
{ {
private readonly EntityRepository $repository; public function __construct(ManagerRegistry $registry)
public function __construct(EntityManagerInterface $entityManager)
{ {
$this->repository = $entityManager->getRepository(EmploymentStatus::class); parent::__construct($registry, EmploymentStatus::class);
}
public function find($id): ?EmploymentStatus
{
return $this->repository->find($id);
}
public function findAll(): array
{
return $this->repository->findAll();
}
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array
{
return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
}
public function findOneBy(array $criteria): ?EmploymentStatus
{
return $this->findOneBy($criteria);
}
public function getClassName(): string
{
return EmploymentStatus::class;
} }
} }

View File

@ -1,27 +0,0 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\EmploymentStatus;
interface EmploymentStatusRepositoryInterface
{
public function find($id): ?EmploymentStatus;
public function findAll(): array;
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array;
public function findOneBy(array $criteria): ?EmploymentStatus;
public function getClassName(): string;
}

View File

@ -63,7 +63,7 @@
</h6> </h6>
<p> <p>
{{ 'household_composition.numberOfChildren children in household'|trans({'numberOfChildren': currentComposition.numberOfChildren}) }} {{ 'household_composition.numberOfChildren children in household'|trans({'numberOfChildren': currentComposition.numberOfChildren}) }}
{% if chill_person.fields.number_of_dependents == 'visible' %} {% if chill_household.fields.number_of_dependents == 'visible' %}
<br /> <br />
{{ 'household_composition.numberOfDependents adult dependents'|trans({'numberOfDependents': currentComposition.numberOfDependents}) }} {{ 'household_composition.numberOfDependents adult dependents'|trans({'numberOfDependents': currentComposition.numberOfDependents}) }}
<br /> <br />

View File

@ -21,7 +21,7 @@
<div class="item-col"> <div class="item-col">
<h3>{{ c.householdCompositionType.label|localize_translatable_string }}</h3> <h3>{{ c.householdCompositionType.label|localize_translatable_string }}</h3>
<p>{{ 'household_composition.numberOfChildren'|trans }}: {{ c.numberOfChildren }}</p> <p>{{ 'household_composition.numberOfChildren'|trans }}: {{ c.numberOfChildren }}</p>
{% if chill_person.fields.number_of_dependents == 'visible' %} {% if chill_household.fields.number_of_dependents == 'visible' %}
<p>{{ 'household_composition.numberOfDependents'|trans }}: {{ c.numberOfDependents }}</p> <p>{{ 'household_composition.numberOfDependents'|trans }}: {{ c.numberOfDependents }}</p>
<p>{{ 'household_composition.numberOfDependentsWithDisabilities'|trans }}: {{ c.numberOfDependentsWithDisabilities }}</p> <p>{{ 'household_composition.numberOfDependentsWithDisabilities'|trans }}: {{ c.numberOfDependentsWithDisabilities }}</p>
{% endif %} {% endif %}