From fbdc0d32f070fc853b8906cc0574a7184bb6670b Mon Sep 17 00:00:00 2001 From: Christophe Siraut Date: Fri, 20 Dec 2024 11:28:36 +0100 Subject: [PATCH] ChillPersonBundle: Add numberOfDependents and numberOfDependentsWithDisabilities --- .../Controller/HouseholdMemberController.php | 9 +++- .../DependencyInjection/Configuration.php | 1 + .../Entity/Household/HouseholdComposition.php | 36 +++++++++++++ .../Form/HouseholdCompositionType.php | 25 ++++++++- .../components/Dates.vue | 51 +++++++++++++++++++ .../vuejs/HouseholdMembersEditor/js/i18n.js | 3 ++ .../HouseholdMembersEditor/store/index.js | 11 ++++ .../views/Household/summary.html.twig | 6 +++ .../HouseholdComposition/index.html.twig | 4 ++ .../Resources/views/Person/view.html.twig | 22 ++++++++ .../Normalizer/MembersEditorNormalizer.php | 4 ++ .../migrations/Version20241127160628.php | 3 -- .../migrations/Version20241220102357.php | 35 +++++++++++++ .../translations/messages+intl-icu.fr.yaml | 14 +++++ .../translations/messages.fr.yml | 2 + 15 files changed, 220 insertions(+), 6 deletions(-) create mode 100644 src/Bundle/ChillPersonBundle/migrations/Version20241220102357.php diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php index 07ab6da70..b9badff8a 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 $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->fields_visibility = $parameterBag->get('chill_person.person_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->fields_visibility['number_of_dependents']) ? true : false, ]; // context diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php b/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php index c0cdee8fa..d33ddfdc6 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/Configuration.php @@ -83,6 +83,7 @@ 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')) 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/Form/HouseholdCompositionType.php b/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php index 2df66039f..437a209e7 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 $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'); + } 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->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/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue index 854db2058..b5392d110 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue @@ -47,6 +47,36 @@ /> +
+ +
+ +
+
+
+ +
+ +
+
@@ -62,6 +92,11 @@ export default { computed: { ...mapState(["householdCompositionTypes"]), ...mapGetters(["isHouseholdNew"]), + displayDependents: { + get() { + return window.household_members_editor_data.displayDependents; + }, + }, householdCompositionType: { get() { if (this.$store.state.householdCompositionType !== null) { @@ -81,6 +116,22 @@ export default { this.$store.commit("setNumberOfChildren", value); }, }, + numberOfDependents: { + get() { + return this.$store.state.numberOfDependents; + }, + set(value) { + this.$store.commit("setNumberOfDependents", value); + }, + }, + numberOfDependentsWithDisabilities: { + get() { + return this.$store.state.numberOfDependentsWithDisabilities; + }, + set(value) { + this.$store.commit("setNumberOfDependentsWithDisabilities", value); + }, + }, startDate: { get() { return this.$store.state.startDate; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/js/i18n.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/js/i18n.js index 4afecc448..425088f81 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/js/i18n.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/js/i18n.js @@ -91,6 +91,9 @@ const appMessages = { composition: "Composition familiale", household_composition: "Composition du ménage", number_of_children: "Nombre d'enfants mineurs au sein du ménage", + number_of_dependents: "Nombre de personnes majeures à charge", + number_of_dependents_with_disabilities: + "Nombre de personnes à charge reconnues handicapées", }, confirmation: { save: "Enregistrer", diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js index d0ce9162f..7327d9003 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js @@ -73,6 +73,8 @@ const store = createStore({ window.household_members_editor_expand_suggestions === 1, householdCompositionType: null, numberOfChildren: 0, + numberOfDependents: 0, + numberOfDependentsWithDisabilities: 0, addressesSuggestion: [], showAddressSuggestion: true, householdCompositionTypes: [], @@ -322,6 +324,9 @@ const store = createStore({ start_date: { datetime: datetimeToISO(ISOToDate(state.startDate)), }, + number_of_dependents: state.numberOfDependents, + number_of_dependents_with_disabilities: + state.numberOfDependentsWithDisabilities, }; } @@ -455,6 +460,12 @@ const store = createStore({ setNumberOfChildren(state, number) { state.numberOfChildren = Number.parseInt(number); }, + setNumberOfDependents(state, number) { + state.numberOfDependents = Number.parseInt(number); + }, + setNumberOfDependentsWithDisabilities(state, number) { + state.numberOfDependentsWithDisabilities = Number.parseInt(number); + }, addAddressesSuggestion(state, addresses) { let existingIds = state.addressesSuggestion.map((a) => a.address_id); diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Household/summary.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Household/summary.html.twig index 4f4a0841d..a142ffd5f 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/Household/summary.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/Household/summary.html.twig @@ -63,6 +63,12 @@

{{ 'household_composition.numberOfChildren children in household'|trans({'numberOfChildren': currentComposition.numberOfChildren}) }} + {% if chill_person.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..2b0b8946b 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 @@

{{ c.householdCompositionType.label|localize_translatable_string }}

{{ 'household_composition.numberOfChildren'|trans }}: {{ c.numberOfChildren }}

+ {% if chill_person.fields.number_of_dependents == 'visible' %} +

{{ 'household_composition.numberOfDependents'|trans }}: {{ c.numberOfDependents }}

+

{{ 'household_composition.numberOfDependentsWithDisabilities'|trans }}: {{ c.numberOfDependentsWithDisabilities }}

+ {% endif %}
{{ 'household_composition.Since'|trans({'startDate': c.startDate}) }}
diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Person/view.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Person/view.html.twig index 74585c5f1..c8f4da3ec 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/Person/view.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/Person/view.html.twig @@ -206,6 +206,28 @@ This view should receive those arguments: {%- endif -%} + {%- if chill_person.fields.number_of_dependents == 'isible' -%} +
+
{{'Number of dependents'|trans}} :
+
+ {% if person.numberOfDependents is not null %} + {{ person.numberOfDependents }} + {% else %} + {{ 'No data given'|trans }} + {% endif %} +
+
+
+
{{'Number of dependents with disabilities'|trans}} :
+
+ {% if person.numberOfDependents is not null %} + {{ person.numberOfDependentsWithDisabilities }} + {% else %} + {{ 'No data given'|trans }} + {% endif %} +
+
+ {%- endif -%} {%- if chill_person.fields.marital_status == 'visible' -%}
{{'Marital status'|trans}} :
diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php index 0e358483e..956bdf03c 100644 --- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php +++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php @@ -147,6 +147,8 @@ class MembersEditorNormalizer implements DenormalizerAwareInterface, Denormalize if (null !== $data['composition']) { $compositionType = $this->denormalizer->denormalize($data['composition']['household_composition_type'], HouseholdCompositionType::class, $format, $context); $numberOfChildren = $data['composition']['number_of_children']; + $numberOfDependents = $data['composition']['number_of_dependents']; + $numberOfDependentsWithDisabilities = $data['composition']['number_of_dependents_with_disabilities']; $startDate = $this->denormalizer->denormalize($data['composition']['start_date'], \DateTimeImmutable::class, $format, $context); if (null === $compositionType) { @@ -156,6 +158,8 @@ class MembersEditorNormalizer implements DenormalizerAwareInterface, Denormalize $householdComposition = (new HouseholdComposition()) ->setHouseholdCompositionType($compositionType) ->setNumberOfChildren($numberOfChildren) + ->setNumberOfDependents($numberOfDependents) + ->setNumberOfDependentsWithDisabilities($numberOfDependentsWithDisabilities) ->setStartDate($startDate); $household->addComposition($householdComposition); diff --git a/src/Bundle/ChillPersonBundle/migrations/Version20241127160628.php b/src/Bundle/ChillPersonBundle/migrations/Version20241127160628.php index 5e657f6ce..cd6a67b6d 100644 --- a/src/Bundle/ChillPersonBundle/migrations/Version20241127160628.php +++ b/src/Bundle/ChillPersonBundle/migrations/Version20241127160628.php @@ -14,9 +14,6 @@ namespace Chill\Migrations\Person; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; -/** - * Auto-generated Migration: Please modify to your needs! - */ final class Version20241127160628 extends AbstractMigration { public function getDescription(): string diff --git a/src/Bundle/ChillPersonBundle/migrations/Version20241220102357.php b/src/Bundle/ChillPersonBundle/migrations/Version20241220102357.php new file mode 100644 index 000000000..123efdb1a --- /dev/null +++ b/src/Bundle/ChillPersonBundle/migrations/Version20241220102357.php @@ -0,0 +1,35 @@ +addSql('ALTER TABLE chill_person_household_composition ADD numberOfDependents INT DEFAULT NULL'); + $this->addSql('ALTER TABLE chill_person_household_composition ADD numberOfDependentsWithDisabilities INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE chill_person_household_composition DROP numberOfDependents'); + $this->addSql('ALTER TABLE chill_person_household_composition DROP numberOfDependentsWithDisabilities'); + } +} diff --git a/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml b/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml index 76a8606af..830e21d2d 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml +++ b/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml @@ -116,6 +116,20 @@ household_composition: few {# enfants dans le ménage} other {# enfants dans le ménage} } + numberOfDependents adult dependents: >- + {numberOfDependents, plural, + =0 {Aucune personne majeure à charge} + one {1 personne majeure à charge} + few {# personnes majeures à charge} + other {# personnes majeures à charge} + } + numberOfDependentsWithDisabilities dependents with disabilities: >- + {numberOfDependentsWithDisabilities, plural, + =0 {Aucune personne à charge reconnue handicapée} + one {1 personne à charge reconnue handicapée} + few {# personnes à charge reconnue handicapée} + other {# personnes à charge reconnue handicapée} + } periods: title: Parcours d'accompagnement (n°{id}) diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml index 1759cedc3..c33b6be4a 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml @@ -963,6 +963,8 @@ household_composition: Add a composition: Ajouter une composition familiale Update composition: Modifier la composition familiale Create: Créér une nouvelle composition familiale + numberOfDependents: Nombre de personnes majeures à charges + numberOfDependentsWithDisabilities: Nombre de personnes à charge reconnues handicapées # docgen Linked evaluations: Évaluations associées