diff --git a/src/Bundle/ChillMainBundle/Form/Type/Export/ExportType.php b/src/Bundle/ChillMainBundle/Form/Type/Export/ExportType.php index e5d0887f3..fe4c43830 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/Export/ExportType.php +++ b/src/Bundle/ChillMainBundle/Form/Type/Export/ExportType.php @@ -18,6 +18,7 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; class ExportType extends AbstractType { @@ -29,7 +30,15 @@ class ExportType extends AbstractType final public const PICK_FORMATTER_KEY = 'pick_formatter'; - public function __construct(private readonly ExportManager $exportManager, private readonly SortExportElement $sortExportElement) {} + private array $personFieldsConfig; + + public function __construct( + private readonly ExportManager $exportManager, + private readonly SortExportElement $sortExportElement, + protected ParameterBagInterface $parameterBag, + ) { + $this->personFieldsConfig = $parameterBag->get('chill_person.person_fields'); + } public function buildForm(FormBuilderInterface $builder, array $options) { @@ -77,6 +86,17 @@ class ExportType extends AbstractType ); foreach ($aggregators as $alias => $aggregator) { + /* + * eventually mask aggregator + */ + if (str_starts_with((string) $alias, 'person_') and str_ends_with((string) $alias, '_aggregator')) { + $field = preg_replace(['/person_/', '/_aggregator/'], '', (string) $alias); + if (array_key_exists($field, $this->personFieldsConfig) and 'visible' !== $this->personFieldsConfig[$field]) { + continue; + } + } + + $aggregatorBuilder->add($alias, AggregatorType::class, [ 'aggregator_alias' => $alias, 'export_manager' => $this->exportManager, diff --git a/src/Bundle/ChillPersonBundle/Controller/AdministrativeStatusController.php b/src/Bundle/ChillPersonBundle/Controller/AdministrativeStatusController.php new file mode 100644 index 000000000..0b854ce43 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Controller/AdministrativeStatusController.php @@ -0,0 +1,26 @@ +addOrderBy('e.order', 'ASC'); + + return parent::orderQuery($action, $query, $request, $paginator); + } +} diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php index 07ab6da70..fd35ef31b 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php @@ -33,9 +33,12 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Security; use Symfony\Component\Serializer\Exception; use Symfony\Contracts\Translation\TranslatorInterface; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; class HouseholdMemberController extends ApiController { + private array $household_fields_visibility; + public function __construct( private readonly UrlGeneratorInterface $generator, private readonly TranslatorInterface $translator, @@ -45,7 +48,10 @@ class HouseholdMemberController extends ApiController private readonly Security $security, private readonly PositionRepository $positionRepository, private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry, - ) {} + protected ParameterBagInterface $parameterBag, + ) { + $this->household_fields_visibility = $parameterBag->get('chill_person.household_fields'); + } #[Route(path: '/{_locale}/person/household/member/{id}/edit', name: 'chill_person_household_member_edit')] public function editMembership(Request $request, HouseholdMember $member): Response @@ -144,6 +150,7 @@ class HouseholdMemberController extends ApiController 'allowHouseholdCreate' => $allowHouseholdCreate ?? true, 'allowHouseholdSearch' => $allowHouseholdSearch ?? true, 'allowLeaveWithoutHousehold' => $allowLeaveWithoutHousehold ?? $request->query->has('allow_leave_without_household'), + 'displayDependents' => ('visible' == $this->household_fields_visibility['number_of_dependents']) ? true : false, ]; // context diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAdministrativeStatus.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAdministrativeStatus.php new file mode 100644 index 000000000..b9de3990a --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAdministrativeStatus.php @@ -0,0 +1,43 @@ + ['fr' => 'situation administrative régulière']], + ['name' => ['fr' => 'sans papier']], + ['name' => ['fr' => 'séjour provisoire']], + ]; + + foreach ($status as $val) { + $administrativeStatus = (new AdministrativeStatus()) + ->setName($val['name']) + ->setActive(true); + $manager->persist($administrativeStatus); + } + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php index 9320a1246..40393f79e 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php @@ -15,12 +15,15 @@ use Chill\MainBundle\DependencyInjection\MissingBundleException; use Chill\MainBundle\Security\Authorization\ChillExportVoter; use Chill\PersonBundle\Controller\AccompanyingPeriodCommentApiController; use Chill\PersonBundle\Controller\AccompanyingPeriodResourceApiController; +use Chill\PersonBundle\Controller\AdministrativeStatusController; use Chill\PersonBundle\Controller\EmploymentStatusController; use Chill\PersonBundle\Controller\HouseholdCompositionTypeApiController; use Chill\PersonBundle\Controller\RelationApiController; use Chill\PersonBundle\Doctrine\DQL\AddressPart; use Chill\PersonBundle\Entity\AccompanyingPeriod; +use Chill\PersonBundle\Entity\AdministrativeStatus; use Chill\PersonBundle\Entity\EmploymentStatus; +use Chill\PersonBundle\Form\AdministrativeStatusType; use Chill\PersonBundle\Form\EmploymentStatusType; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodCommentVoter; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodResourceVoter; @@ -57,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', @@ -132,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'], ]; @@ -195,6 +202,28 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac ], ], ], + [ + 'class' => AdministrativeStatus::class, + 'name' => 'administrative_status', + 'base_path' => '/admin/administrative', + 'base_role' => 'ROLE_ADMIN', + 'form_class' => AdministrativeStatusType::class, + 'controller' => AdministrativeStatusController::class, + 'actions' => [ + 'index' => [ + 'role' => 'ROLE_ADMIN', + 'template' => '@ChillPerson/AdministrativeStatus/index.html.twig', + ], + 'new' => [ + 'role' => 'ROLE_ADMIN', + 'template' => '@ChillPerson/AdministrativeStatus/new.html.twig', + ], + 'edit' => [ + 'role' => 'ROLE_ADMIN', + 'template' => '@ChillPerson/AdministrativeStatus/edit.html.twig', + ], + ], + ], [ 'class' => EmploymentStatus::class, 'name' => 'employment_status', @@ -1117,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)) { diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php b/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php index 5f75f0d69..12c8b4c5b 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php @@ -83,9 +83,11 @@ class Configuration implements ConfigurationInterface ->append($this->addFieldNode('accompanying_period')) ->append($this->addFieldNode('memo')) ->append($this->addFieldNode('number_of_children')) + ->append($this->addFieldNode('number_of_dependents', 'hidden')) ->append($this->addFieldNode('acceptEmail')) ->append($this->addFieldNode('deathdate')) ->append($this->addFieldNode('employment_status', 'hidden')) + ->append($this->addFieldNode('administrative_status', 'hidden')) ->arrayNode('alt_names') ->defaultValue([]) ->arrayPrototype() @@ -108,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() diff --git a/src/Bundle/ChillPersonBundle/Entity/AdministrativeStatus.php b/src/Bundle/ChillPersonBundle/Entity/AdministrativeStatus.php new file mode 100644 index 000000000..23d451f48 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Entity/AdministrativeStatus.php @@ -0,0 +1,81 @@ + AdministrativeStatus::class])] +#[ORM\Entity(repositoryClass: AdministrativeStatusRepository::class)] +#[ORM\Table(name: 'chill_person_administrative_status')] +class AdministrativeStatus +{ + #[Serializer\Groups(['read', 'docgen:read'])] + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER)] + private ?int $id = null; + + #[Serializer\Groups(['read', 'docgen:read'])] + #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON)] + #[Serializer\Context(['is-translatable' => true], groups: ['docgen:read'])] + private array $name = []; + + #[Serializer\Groups(['read'])] + #[ORM\Column(type: \Doctrine\DBAL\Types\Types::BOOLEAN)] + private bool $active = true; + + #[ORM\Column(type: \Doctrine\DBAL\Types\Types::FLOAT, name: 'ordering', nullable: true, options: ['default' => '0.0'])] + private float $order = 0; + + public function getId(): ?int + { + return $this->id; + } + + public function getActive(): ?bool + { + return $this->active; + } + + public function getName(): ?array + { + return $this->name; + } + + public function getOrder(): ?float + { + return $this->order; + } + + public function setActive(bool $active): self + { + $this->active = $active; + + return $this; + } + + public function setName(array $name): self + { + $this->name = $name; + + return $this; + } + + public function setOrder(float $order): self + { + $this->order = $order; + + return $this; + } +} diff --git a/src/Bundle/ChillPersonBundle/Entity/EmploymentStatus.php b/src/Bundle/ChillPersonBundle/Entity/EmploymentStatus.php index 08b1f45ac..83b3c65f5 100644 --- a/src/Bundle/ChillPersonBundle/Entity/EmploymentStatus.php +++ b/src/Bundle/ChillPersonBundle/Entity/EmploymentStatus.php @@ -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 { diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php index 4aea2129c..ac84bb3fd 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php @@ -58,6 +58,18 @@ class HouseholdComposition implements TrackCreationInterface, TrackUpdateInterfa #[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, nullable: true, options: ['default' => null])] private ?int $numberOfChildren = null; + #[Assert\NotNull] + #[Assert\GreaterThanOrEqual(0, groups: ['Default', 'household_composition'])] + #[Serializer\Groups(['docgen:read'])] + #[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, nullable: true, options: ['default' => null])] + private ?int $numberOfDependents = null; + + #[Assert\NotNull] + #[Assert\GreaterThanOrEqual(0, groups: ['Default', 'household_composition'])] + #[Serializer\Groups(['docgen:read'])] + #[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, nullable: true, options: ['default' => null])] + private ?int $numberOfDependentsWithDisabilities = null; + #[Assert\NotNull(groups: ['Default', 'household_composition'])] #[Serializer\Groups(['docgen:read'])] #[ORM\Column(type: \Doctrine\DBAL\Types\Types::DATE_IMMUTABLE, nullable: false)] @@ -98,6 +110,16 @@ class HouseholdComposition implements TrackCreationInterface, TrackUpdateInterfa return $this->numberOfChildren; } + public function getNumberOfDependents(): ?int + { + return $this->numberOfDependents; + } + + public function getNumberOfDependentsWithDisabilities(): ?int + { + return $this->numberOfDependentsWithDisabilities; + } + public function getStartDate(): ?\DateTimeImmutable { return $this->startDate; @@ -142,6 +164,20 @@ class HouseholdComposition implements TrackCreationInterface, TrackUpdateInterfa return $this; } + public function setNumberOfDependents(?int $numberOfDependents): HouseholdComposition + { + $this->numberOfDependents = $numberOfDependents; + + return $this; + } + + public function setNumberOfDependentsWithDisabilities(?int $numberOfDependentsWithDisabilities): HouseholdComposition + { + $this->numberOfDependentsWithDisabilities = $numberOfDependentsWithDisabilities; + + return $this; + } + public function setStartDate(?\DateTimeImmutable $startDate): HouseholdComposition { $this->startDate = $startDate; diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 04607a0e0..5d57f11af 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -304,6 +304,13 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI #[ORM\Column(type: \Doctrine\DBAL\Types\Types::TEXT)] private string $memo = ''; + /** + * The person's administrative status. + */ + #[ORM\ManyToOne(targetEntity: AdministrativeStatus::class)] + #[ORM\JoinColumn(nullable: true)] + private ?AdministrativeStatus $administrativeStatus = null; + /** * The person's mobile phone number. */ @@ -777,6 +784,11 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI return $this->addresses; } + public function getAdministrativeStatus(): ?AdministrativeStatus + { + return $this->administrativeStatus; + } + /** * Return the age of a person, calculated at the date 'now'. * @@ -1420,6 +1432,13 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI return $this; } + public function setAdministrativeStatus(?AdministrativeStatus $administrativeStatus): self + { + $this->administrativeStatus = $administrativeStatus; + + return $this; + } + public function setAcceptSMS(bool $acceptSMS): self { $this->acceptSMS = $acceptSMS; diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AdministrativeStatusAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AdministrativeStatusAggregator.php new file mode 100644 index 000000000..8bdc74f7f --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AdministrativeStatusAggregator.php @@ -0,0 +1,76 @@ +leftJoin('person.administrativeStatus', 'admin_status'); + $qb->addSelect('admin_status.id as administrative_status_aggregator'); + + $qb->addGroupBy('administrative_status_aggregator'); + } + + public function applyOn() + { + return Declarations::PERSON_TYPE; + } + + public function buildForm(FormBuilderInterface $builder) {} + + public function getFormDefaultData(): array + { + return []; + } + + public function getLabels($key, array $values, $data) + { + return function ($value): string { + if ('_header' === $value) { + return 'Administrative status'; + } + + if (null === $value || '' === $value) { + return ''; + } + + $g = $this->administrativeStatusRepository->find($value); + + return $this->translatableStringHelper->localize($g->getName()); + }; + } + + public function getQueryKeys($data) + { + return ['administrative_status_aggregator']; + } + + public function getTitle() + { + return 'Group people by administrative status'; + } +} diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/EmploymentStatusAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/EmploymentStatusAggregator.php new file mode 100644 index 000000000..359e48cf3 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/EmploymentStatusAggregator.php @@ -0,0 +1,76 @@ +leftJoin('person.employmentStatus', 'es'); + $qb->addSelect('es.id as employment_status_aggregator'); + + $qb->addGroupBy('employment_status_aggregator'); + } + + public function applyOn() + { + return Declarations::PERSON_TYPE; + } + + public function buildForm(FormBuilderInterface $builder) {} + + public function getFormDefaultData(): array + { + return []; + } + + public function getLabels($key, array $values, $data) + { + return function ($value): string { + if ('_header' === $value) { + return 'Employment status'; + } + + if (null === $value || '' === $value) { + return ''; + } + + $g = $this->employmentStatusRepository->find($value); + + return $this->translatableStringHelper->localize($g->getName()); + }; + } + + public function getQueryKeys($data) + { + return ['employment_status_aggregator']; + } + + public function getTitle() + { + return 'Group people by employment status'; + } +} diff --git a/src/Bundle/ChillPersonBundle/Form/AdministrativeStatusType.php b/src/Bundle/ChillPersonBundle/Form/AdministrativeStatusType.php new file mode 100644 index 000000000..81f299538 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Form/AdministrativeStatusType.php @@ -0,0 +1,44 @@ +add('name', TranslatableStringFormType::class, [ + 'required' => true, + ]) + ->add('active', ChoiceType::class, [ + 'choices' => [ + 'Active' => true, + 'Inactive' => false, + ], + ]) + ->add('order', NumberType::class); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AdministrativeStatus::class, + ]); + } +} diff --git a/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php b/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php index 2df66039f..b0b7fbef5 100644 --- a/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php +++ b/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php @@ -19,10 +19,19 @@ use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; class HouseholdCompositionType extends AbstractType { - public function __construct(private readonly HouseholdCompositionTypeRepository $householdCompositionTypeRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) {} + private array $household_fields_visibility; + + public function __construct( + private readonly HouseholdCompositionTypeRepository $householdCompositionTypeRepository, + private readonly TranslatableStringHelperInterface $translatableStringHelper, + protected ParameterBagInterface $parameterBag, + ) { + $this->household_fields_visibility = $parameterBag->get('chill_person.household_fields'); + } public function buildForm(FormBuilderInterface $builder, array $options) { @@ -42,7 +51,19 @@ class HouseholdCompositionType extends AbstractType ->add('numberOfChildren', IntegerType::class, [ 'required' => true, 'label' => 'household_composition.numberOfChildren', - ]) + ]); + if ('visible' == $this->household_fields_visibility['number_of_dependents']) { + $builder + ->add('numberOfDependents', IntegerType::class, [ + 'required' => true, + 'label' => 'household_composition.numberOfDependents', + ]) + ->add('numberOfDependentsWithDisabilities', IntegerType::class, [ + 'required' => true, + 'label' => 'household_composition.numberOfDependentsWithDisabilities', + ]); + } + $builder ->add('comment', CommentType::class, [ 'required' => false, ]); diff --git a/src/Bundle/ChillPersonBundle/Form/PersonType.php b/src/Bundle/ChillPersonBundle/Form/PersonType.php index c03221f04..21d56dde7 100644 --- a/src/Bundle/ChillPersonBundle/Form/PersonType.php +++ b/src/Bundle/ChillPersonBundle/Form/PersonType.php @@ -26,6 +26,7 @@ use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\PersonPhone; use Chill\PersonBundle\Form\Type\PersonAltNameType; use Chill\PersonBundle\Form\Type\PersonPhoneType; +use Chill\PersonBundle\Form\Type\PickAdministrativeStatusType; use Chill\PersonBundle\Form\Type\PickEmploymentStatusType; use Chill\PersonBundle\Form\Type\PickGenderType; use Chill\PersonBundle\Form\Type\Select2MaritalStatusType; @@ -108,6 +109,11 @@ class PersonType extends AbstractType ->add('employmentStatus', PickEmploymentStatusType::class, ['required' => false]); } + if ('visible' === $this->config['administrative_status']) { + $builder + ->add('administrativeStatus', PickAdministrativeStatusType::class, ['required' => false]); + } + if ('visible' === $this->config['place_of_birth']) { $builder->add('placeOfBirth', TextType::class, [ 'required' => false, diff --git a/src/Bundle/ChillPersonBundle/Form/Type/PickAdministrativeStatusType.php b/src/Bundle/ChillPersonBundle/Form/Type/PickAdministrativeStatusType.php new file mode 100644 index 000000000..126c260f5 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Form/Type/PickAdministrativeStatusType.php @@ -0,0 +1,50 @@ +setDefault('label', 'Administrative Status') + ->setDefault( + 'choice_label', + fn (AdministrativeStatus $administrativeStatus): string => $this->translatableStringHelper->localize($administrativeStatus->getName()) + ) + ->setDefault( + 'query_builder', + static fn (EntityRepository $er): QueryBuilder => $er->createQueryBuilder('c') + ->where('c.active = true') + ->orderBy('c.order'), + ) + ->setDefault('placeholder', $this->translatableStringHelper->localize(['Select an option…'])) + ->setDefault('class', AdministrativeStatus::class); + } + + public function getParent() + { + return EntityType::class; + } +} diff --git a/src/Bundle/ChillPersonBundle/Menu/AdminPersonMenuBuilder.php b/src/Bundle/ChillPersonBundle/Menu/AdminPersonMenuBuilder.php index bfcb5e436..a361b107d 100644 --- a/src/Bundle/ChillPersonBundle/Menu/AdminPersonMenuBuilder.php +++ b/src/Bundle/ChillPersonBundle/Menu/AdminPersonMenuBuilder.php @@ -65,6 +65,12 @@ class AdminPersonMenuBuilder implements LocalMenuBuilderInterface ])->setExtras(['order' => 2035]); } + if ('visible' == $this->fields_visibility['administrative_status']) { + $menu->addChild('Administrative status', [ + 'route' => 'chill_crud_administrative_status_index', + ])->setExtras(['order' => 2036]); + } + $menu->addChild('person_admin.person_resource_kind', [ 'route' => 'chill_crud_person_resource-kind_index', ])->setExtras(['order' => 2040]); diff --git a/src/Bundle/ChillPersonBundle/Repository/AdministrativeStatusRepository.php b/src/Bundle/ChillPersonBundle/Repository/AdministrativeStatusRepository.php new file mode 100644 index 000000000..637db23c5 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Repository/AdministrativeStatusRepository.php @@ -0,0 +1,24 @@ + +
{{ 'household_composition.numberOfChildren children in household'|trans({'numberOfChildren': currentComposition.numberOfChildren}) }}
+ {% if chill_household.fields.number_of_dependents == 'visible' %}
+
+ {{ 'household_composition.numberOfDependents adult dependents'|trans({'numberOfDependents': currentComposition.numberOfDependents}) }}
+
+ {{ 'household_composition.numberOfDependentsWithDisabilities dependents with disabilities'|trans({'numberOfDependentsWithDisabilities': currentComposition.numberOfDependentsWithDisabilities}) }}
+ {% endif %}
{{ 'household_composition.Since'|trans({'startDate': currentComposition.startDate}) }} diff --git a/src/Bundle/ChillPersonBundle/Resources/views/HouseholdComposition/index.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/HouseholdComposition/index.html.twig index 7d3adc04a..f3c931707 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/HouseholdComposition/index.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/HouseholdComposition/index.html.twig @@ -21,6 +21,10 @@
{{ 'household_composition.numberOfChildren'|trans }}: {{ c.numberOfChildren }}
+ {% if chill_household.fields.number_of_dependents == 'visible' %} +{{ 'household_composition.numberOfDependents'|trans }}: {{ c.numberOfDependents }}
+{{ 'household_composition.numberOfDependentsWithDisabilities'|trans }}: {{ c.numberOfDependentsWithDisabilities }}
+ {% endif %}