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
{
private array $fields_visibility;
private array $household_fields_visibility;
public function __construct(
private readonly UrlGeneratorInterface $generator,
@ -50,7 +50,7 @@ class HouseholdMemberController extends ApiController
private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry,
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')]
@ -150,7 +150,7 @@ class HouseholdMemberController extends ApiController
'allowHouseholdCreate' => $allowHouseholdCreate ?? true,
'allowHouseholdSearch' => $allowHouseholdSearch ?? true,
'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

View File

@ -60,6 +60,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
$this->handlePersonFieldsParameters($container, $config['person_fields']);
$this->handleAccompanyingPeriodsFieldsParameters($container, $config['accompanying_periods_fields']);
$this->handleHouseholdFieldsParameters($container, $config['household_fields']);
$container->setParameter(
'chill_person.allow_multiple_simultaneous_accompanying_periods',
@ -135,6 +136,9 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
'chill_accompanying_periods' => [
'fields' => $config['accompanying_periods_fields'],
],
'chill_household' => [
'fields' => $config['household_fields'],
],
],
'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)
{
if (\array_key_exists('enabled', $config)) {

View File

@ -110,6 +110,12 @@ class Configuration implements ConfigurationInterface
->end()
->end() // children for 'person_fields', parent = array 'person_fields'
->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')
->canBeDisabled()
->children()

View File

@ -11,11 +11,12 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Entity;
use Chill\PersonBundle\Repository\AdministrativeStatusRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer;
#[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')]
class AdministrativeStatus
{

View File

@ -11,11 +11,12 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Entity;
use Chill\PersonBundle\Repository\EmploymentStatusRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer;
#[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')]
class EmploymentStatus
{

View File

@ -23,14 +23,14 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class HouseholdCompositionType extends AbstractType
{
private array $fields_visibility;
private array $household_fields_visibility;
public function __construct(
private readonly HouseholdCompositionTypeRepository $householdCompositionTypeRepository,
private readonly TranslatableStringHelperInterface $translatableStringHelper,
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)
@ -52,7 +52,7 @@ class HouseholdCompositionType extends AbstractType
'required' => true,
'label' => 'household_composition.numberOfChildren',
]);
if ('visible' == $this->fields_visibility['number_of_dependents']) {
if ('visible' == $this->household_fields_visibility['number_of_dependents']) {
$builder
->add('numberOfDependents', IntegerType::class, [
'required' => true,

View File

@ -12,40 +12,13 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\AdministrativeStatus;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class AdministrativeStatusRepository implements AdministrativeStatusRepositoryInterface
class AdministrativeStatusRepository extends ServiceEntityRepository
{
private readonly EntityRepository $repository;
public function __construct(EntityManagerInterface $entityManager)
public function __construct(ManagerRegistry $registry)
{
$this->repository = $entityManager->getRepository(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;
parent::__construct($registry, 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;
use Chill\PersonBundle\Entity\EmploymentStatus;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class EmploymentStatusRepository implements EmploymentStatusRepositoryInterface
class EmploymentStatusRepository extends ServiceEntityRepository
{
private readonly EntityRepository $repository;
public function __construct(EntityManagerInterface $entityManager)
public function __construct(ManagerRegistry $registry)
{
$this->repository = $entityManager->getRepository(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;
parent::__construct($registry, 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>
<p>
{{ '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 />
{{ 'household_composition.numberOfDependents adult dependents'|trans({'numberOfDependents': currentComposition.numberOfDependents}) }}
<br />

View File

@ -21,7 +21,7 @@
<div class="item-col">
<h3>{{ c.householdCompositionType.label|localize_translatable_string }}</h3>
<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.numberOfDependentsWithDisabilities'|trans }}: {{ c.numberOfDependentsWithDisabilities }}</p>
{% endif %}