From 9ea3189bd1cbbdab221c2343d1a5c41f5dba23fa Mon Sep 17 00:00:00 2001 From: Birloi Florian Date: Fri, 24 May 2024 14:43:09 +0300 Subject: [PATCH] refactor: update services age category to beneficiaries --- .../migrations/1716549264192-Beneficiaries.ts | 76 +++++++++++++++++++ .../civic-center-service-search-filter.dto.ts | 3 +- .../dto/create-civic-center-service.dto.ts | 3 +- .../entities/beneficiary.entity.ts | 13 ++++ .../entities/civic-center-service.entity.ts | 17 +++-- .../services/civic-center.service.ts | 31 ++++++-- .../enums/age-category.enum.ts | 19 ----- .../controllers/nomenclatures.controller.ts | 5 ++ .../shared/services/nomenclatures.service.ts | 7 ++ backend/src/shared/shared.module.ts | 2 + .../src/assets/locales/en/translation.json | 19 ----- .../src/assets/locales/ro/translation.json | 19 ----- .../src/common/helpers/pulling-apps-helper.ts | 6 +- .../EditCivicCenterService.tsx | 3 +- .../components/CivicCenterForm.tsx | 19 +++-- .../components/CivicCenterServiceContent.tsx | 4 +- .../config/CivicCenterFormConfig.ts | 12 +-- .../constants/age-categories.constants.ts | 9 --- .../civic-center-service-payload.interface.ts | 2 +- .../civic-center-service.interface.ts | 2 +- .../nomenclature/Nomenclature.queries.ts | 8 ++ .../nomenclature/Nomenclatures.service.ts | 4 + 22 files changed, 178 insertions(+), 105 deletions(-) create mode 100644 backend/src/migrations/1716549264192-Beneficiaries.ts create mode 100644 backend/src/modules/civic-center-service/entities/beneficiary.entity.ts delete mode 100644 backend/src/modules/practice-program/enums/age-category.enum.ts delete mode 100644 frontend/src/pages/civic-center-service/constants/age-categories.constants.ts diff --git a/backend/src/migrations/1716549264192-Beneficiaries.ts b/backend/src/migrations/1716549264192-Beneficiaries.ts new file mode 100644 index 000000000..df5deea7f --- /dev/null +++ b/backend/src/migrations/1716549264192-Beneficiaries.ts @@ -0,0 +1,76 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class Beneficiaries1716549264192 implements MigrationInterface { + name = 'Beneficiaries1716549264192'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "_beneficiary" ("id" SERIAL NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_680ec92b80a3a9a5ff18f0630b4" PRIMARY KEY ("id"))`, + ); + // Insert the values + await queryRunner.query(` + INSERT INTO "_beneficiary" (name) VALUES + ('copii (0-14 ani)'), + ('tineri (15-18 ani)'), + ('adulți (18-25 ani)'), + ('vârstnici (>65 ani)'), + ('familie'), + ('persoane aflate în risc de sărăcie'), + ('persoane cu adicţii (alcool, droguri, jocuri de noroc etc.)'), + ('persoane cu afecţiuni medicale'), + ('persoane cu afecţiuni psihice'), + ('persoane cu dizabilităţi'), + ('persoane din comunităţi izolate'), + ('persoane fără adăpost'), + ('persoane private de libertate'), + ('victime ale traficului de persoane'), + ('victime ale violenţei domestice'), + ('şomeri de lungă durată'), + ('servicii sociale de suport pentru aparţinătorii beneficiarilor') + `); + await queryRunner.query( + `CREATE TABLE "civic_center_service_to_beneficiary" ("civic_center_service_id" integer NOT NULL, "beneficiary_id" integer NOT NULL, CONSTRAINT "PK_1ec14ffa726e31df630f5a47367" PRIMARY KEY ("civic_center_service_id", "beneficiary_id"))`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_6ce738baa15588686511310b7b" ON "civic_center_service_to_beneficiary" ("civic_center_service_id") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_3d4def4c6507c1dfa407066477" ON "civic_center_service_to_beneficiary" ("beneficiary_id") `, + ); + await queryRunner.query( + `ALTER TABLE "civic_center_service" DROP COLUMN "age_categories"`, + ); + await queryRunner.query( + `DROP TYPE "public"."civic_center_service_age_categories_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "civic_center_service_to_beneficiary" ADD CONSTRAINT "FK_6ce738baa15588686511310b7b3" FOREIGN KEY ("civic_center_service_id") REFERENCES "civic_center_service"("id") ON DELETE CASCADE ON UPDATE CASCADE`, + ); + await queryRunner.query( + `ALTER TABLE "civic_center_service_to_beneficiary" ADD CONSTRAINT "FK_3d4def4c6507c1dfa4070664777" FOREIGN KEY ("beneficiary_id") REFERENCES "_domain"("id") ON DELETE CASCADE ON UPDATE CASCADE`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "civic_center_service_to_beneficiary" DROP CONSTRAINT "FK_3d4def4c6507c1dfa4070664777"`, + ); + await queryRunner.query( + `ALTER TABLE "civic_center_service_to_beneficiary" DROP CONSTRAINT "FK_6ce738baa15588686511310b7b3"`, + ); + await queryRunner.query( + `CREATE TYPE "public"."civic_center_service_age_categories_enum" AS ENUM('COPII', 'TINERI', 'ADULTI', 'VARSTNICI', 'FAMILIE', 'RISC_DE_SARACIE', 'ADICTII', 'AFECTIUNI_MEDICALE', 'AFECTIUNI_PSIHICE', 'DIZABILITATI', 'COMUNITATI_IZOLATE', 'FARA_ADAPOST', 'PRIVATE_DE_LIBERTATE', 'TRAFICULUI_DE_PERSOANE', 'VIOLENTEI_DOMESTICE', 'SOMERI', 'APARTINATORII_BENEFICIARILOR')`, + ); + await queryRunner.query( + `ALTER TABLE "civic_center_service" ADD "age_categories" "public"."civic_center_service_age_categories_enum" array NOT NULL`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_3d4def4c6507c1dfa407066477"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_6ce738baa15588686511310b7b"`, + ); + await queryRunner.query(`DROP TABLE "civic_center_service_to_beneficiary"`); + await queryRunner.query(`DROP TABLE "_beneficiary"`); + } +} diff --git a/backend/src/modules/civic-center-service/dto/civic-center-service-search-filter.dto.ts b/backend/src/modules/civic-center-service/dto/civic-center-service-search-filter.dto.ts index 6d76d1454..85d492554 100644 --- a/backend/src/modules/civic-center-service/dto/civic-center-service-search-filter.dto.ts +++ b/backend/src/modules/civic-center-service/dto/civic-center-service-search-filter.dto.ts @@ -1,7 +1,6 @@ import { OmitType } from '@nestjs/swagger'; import { IsArray, IsNumber, IsOptional } from 'class-validator'; import { BaseFilterDto } from 'src/common/base/base-filter.dto'; -import { AgeCategory } from 'src/modules/practice-program/enums/age-category.enum'; export class CivicCenterServiceSearchFilterDto extends OmitType(BaseFilterDto, [ 'orderBy', @@ -21,5 +20,5 @@ export class CivicCenterServiceSearchFilterDto extends OmitType(BaseFilterDto, [ @IsArray() @IsOptional() - ageCategories?: AgeCategory[]; //TODO: this needs to be renamed to beneficiaries + beneficiaries?: number[]; } diff --git a/backend/src/modules/civic-center-service/dto/create-civic-center-service.dto.ts b/backend/src/modules/civic-center-service/dto/create-civic-center-service.dto.ts index 3ecf270d7..8f1b2772e 100644 --- a/backend/src/modules/civic-center-service/dto/create-civic-center-service.dto.ts +++ b/backend/src/modules/civic-center-service/dto/create-civic-center-service.dto.ts @@ -14,7 +14,6 @@ import { import { REGEX } from 'src/common/constants/patterns.constant'; import { IsPhoneValid } from 'src/common/decorators/is-phone-valid.decorator'; import { ToRoPhoneNumber } from 'src/common/decorators/to-ro-phone-number.decorator'; -import { AgeCategory } from '../../practice-program/enums/age-category.enum'; export class CreateCivicCenterServiceDto { @IsString() @@ -48,7 +47,7 @@ export class CreateCivicCenterServiceDto { domains: number[]; @IsArray() - ageCategories: AgeCategory[]; + beneficiaries: number[]; @IsBoolean() hasOnlineAccess: boolean; diff --git a/backend/src/modules/civic-center-service/entities/beneficiary.entity.ts b/backend/src/modules/civic-center-service/entities/beneficiary.entity.ts new file mode 100644 index 000000000..71ed585a5 --- /dev/null +++ b/backend/src/modules/civic-center-service/entities/beneficiary.entity.ts @@ -0,0 +1,13 @@ +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity('_beneficiary') +export class Beneficiary { + @PrimaryGeneratedColumn('increment') + id: number; + + @Column({ + type: 'varchar', + name: 'name', + }) + name: string; +} diff --git a/backend/src/modules/civic-center-service/entities/civic-center-service.entity.ts b/backend/src/modules/civic-center-service/entities/civic-center-service.entity.ts index 23f5377a9..47d8dcf5b 100644 --- a/backend/src/modules/civic-center-service/entities/civic-center-service.entity.ts +++ b/backend/src/modules/civic-center-service/entities/civic-center-service.entity.ts @@ -11,9 +11,9 @@ import { ManyToOne, OneToMany, } from 'typeorm'; -import { AgeCategory } from '../../practice-program/enums/age-category.enum'; import { Feedback } from './feedback.entity'; import { ServiceDomain } from './service-domain.entity'; +import { Beneficiary } from './beneficiary.entity'; @Entity() export class CivicCenterService extends BaseEntity { @@ -70,13 +70,16 @@ export class CivicCenterService extends BaseEntity { }) domains: ServiceDomain[]; - @Column({ - type: 'enum', - enum: AgeCategory, - array: true, - name: 'age_categories', + @ManyToMany(() => Domain, { cascade: true, onDelete: 'CASCADE' }) + @JoinTable({ + name: 'civic_center_service_to_beneficiary', + joinColumn: { + name: 'civic_center_service_id', + referencedColumnName: 'id', + }, + inverseJoinColumn: { name: 'beneficiary_id', referencedColumnName: 'id' }, }) - ageCategories: AgeCategory[]; + beneficiaries: Beneficiary[]; @Column({ type: 'boolean', name: 'has_online_access', default: false }) hasOnlineAccess: boolean; diff --git a/backend/src/modules/civic-center-service/services/civic-center.service.ts b/backend/src/modules/civic-center-service/services/civic-center.service.ts index 83c367a96..f71734c0c 100644 --- a/backend/src/modules/civic-center-service/services/civic-center.service.ts +++ b/backend/src/modules/civic-center-service/services/civic-center.service.ts @@ -28,6 +28,7 @@ import { OngApplicationService } from 'src/modules/application/services/ong-appl import { ApplicationStatus } from 'src/modules/application/enums/application-status.enum'; import { ApplicationPullingType } from 'src/modules/application/enums/application-pulling-type.enum'; import { OngApplicationStatus } from 'src/modules/application/enums/ong-application-status.enum'; +import { Beneficiary } from '../entities/beneficiary.entity'; @Injectable() export class CivicCenterServiceService { @@ -55,7 +56,14 @@ export class CivicCenterServiceService { }, }); - // 3. Check if undetermined flag and end date have correct values + // 3. Get beneficiaries + const beneficiaries = await this.nomenclatureService.getBeneficiaries({ + where: { + id: In(createCivicCenterServiceDto.beneficiaries), + }, + }); + + // 4. Check if undetermined flag and end date have correct values if ( createCivicCenterServiceDto.endDate && createCivicCenterServiceDto.isPeriodNotDetermined @@ -71,6 +79,7 @@ export class CivicCenterServiceService { ...createCivicCenterServiceDto, location: location, domains, + beneficiaries, }); return service; @@ -169,6 +178,15 @@ export class CivicCenterServiceService { }); } + let beneficiaries: Beneficiary[]; + if (updateCivicCenterServiceDto.beneficiaries) { + beneficiaries = await this.nomenclatureService.getBeneficiaries({ + where: { + id: In(updateCivicCenterServiceDto.beneficiaries), + }, + }); + } + // 4. Validate received data await this.validateData(updateCivicCenterServiceDto); @@ -178,6 +196,7 @@ export class CivicCenterServiceService { ...updateCivicCenterServiceDto, location: location || civicService.location, domains: domains || civicService.domains, + beneficiaries: beneficiaries || civicService.beneficiaries, }); return service; @@ -214,6 +233,7 @@ export class CivicCenterServiceService { 'location', 'domains', 'organization', + 'beneficiaries', 'organization.organizationGeneral', ], }); @@ -234,7 +254,7 @@ export class CivicCenterServiceService { public async findAll(organizationId: number): Promise { return this.civicCenterServiceRepository.getMany({ where: { organizationId }, - relations: ['location', 'domains'], + relations: ['location', 'domains', 'beneficiaries'], order: { createdOn: OrderDirection.DESC, }, @@ -284,7 +304,7 @@ export class CivicCenterServiceService { civicCenterServiceFilterDto: CivicCenterServiceSearchFilterDto, ): Promise> { try { - const { domains, ageCategories, ...restOfFilters } = + const { domains, beneficiaries, ...restOfFilters } = civicCenterServiceFilterDto; // 1. get only active services and map correctly ids for domains and age categories @@ -295,7 +315,8 @@ export class CivicCenterServiceService { status: OrganizationStatus.ACTIVE, }, domains: domains?.length > 0 ? { id: In(domains) } : null, - ageCategories: ageCategories ? ArrayOverlap(ageCategories) : null, + beneficiaries: + beneficiaries?.length > 0 ? { id: In(beneficiaries) } : null, }; // 2. return all paginated services @@ -342,7 +363,7 @@ export class CivicCenterServiceService { const practiceProgram = await this.civicCenterServiceRepository.get({ where, - relations: ['location', 'location.county', 'domains'], + relations: ['location', 'location.county', 'domains', 'beneficiaries'], }); if (!practiceProgram) { diff --git a/backend/src/modules/practice-program/enums/age-category.enum.ts b/backend/src/modules/practice-program/enums/age-category.enum.ts deleted file mode 100644 index 236349398..000000000 --- a/backend/src/modules/practice-program/enums/age-category.enum.ts +++ /dev/null @@ -1,19 +0,0 @@ -export enum AgeCategory { - COPII = 'COPII', - TINERI = 'TINERI', - ADULTI = 'ADULTI', - VARSTNICI = 'VARSTNICI', - FAMILIE = 'FAMILIE', - RISC_DE_SARACIE = 'RISC_DE_SARACIE', - ADICTII = 'ADICTII', - AFECTIUNI_MEDICALE = 'AFECTIUNI_MEDICALE', - AFECTIUNI_PSIHICE = 'AFECTIUNI_PSIHICE', - DIZABILITATI = 'DIZABILITATI', - COMUNITATI_IZOLATE = 'COMUNITATI_IZOLATE', - FARA_ADAPOST = 'FARA_ADAPOST', - PRIVATE_DE_LIBERTATE = 'PRIVATE_DE_LIBERTATE', - TRAFICULUI_DE_PERSOANE = 'TRAFICULUI_DE_PERSOANE', - VIOLENTEI_DOMESTICE = 'VIOLENTEI_DOMESTICE', - SOMERI = 'SOMERI', - APARTINATORII_BENEFICIARILOR = 'APARTINATORII_BENEFICIARILOR', -} diff --git a/backend/src/shared/controllers/nomenclatures.controller.ts b/backend/src/shared/controllers/nomenclatures.controller.ts index 9a6b806e4..a311d226d 100644 --- a/backend/src/shared/controllers/nomenclatures.controller.ts +++ b/backend/src/shared/controllers/nomenclatures.controller.ts @@ -68,4 +68,9 @@ export class NomenclaturesController { getServiceDomains() { return this.nomenclaturesService.getServiceDomains({}); } + + @Get('beneficiaries') + getBeneficiaries() { + return this.nomenclaturesService.getBeneficiaries({}); + } } diff --git a/backend/src/shared/services/nomenclatures.service.ts b/backend/src/shared/services/nomenclatures.service.ts index 04be1dfc8..336ff626c 100644 --- a/backend/src/shared/services/nomenclatures.service.ts +++ b/backend/src/shared/services/nomenclatures.service.ts @@ -15,6 +15,7 @@ import { Coalition } from '../entities/coalition.entity'; import { Federation } from '../entities/federation.entity'; import { PracticeDomain } from 'src/modules/practice-program/entities/practice_domain.entity'; import { ServiceDomain } from 'src/modules/civic-center-service/entities/service-domain.entity'; +import { Beneficiary } from 'src/modules/civic-center-service/entities/beneficiary.entity'; @Injectable() export class NomenclaturesService { @@ -39,6 +40,8 @@ export class NomenclaturesService { private readonly practiceDomainRepository: Repository, @InjectRepository(ServiceDomain) private readonly serviceDomainRepository: Repository, + @InjectRepository(Beneficiary) + private readonly beneficiaryRepository: Repository, ) {} public getCity(conditions: FindOneOptions) { @@ -155,4 +158,8 @@ export class NomenclaturesService { public getServiceDomains(conditions: FindManyOptions) { return this.serviceDomainRepository.find(conditions); } + + public getBeneficiaries(conditions: FindManyOptions) { + return this.beneficiaryRepository.find(conditions); + } } diff --git a/backend/src/shared/shared.module.ts b/backend/src/shared/shared.module.ts index 976e829be..b7a4769c0 100644 --- a/backend/src/shared/shared.module.ts +++ b/backend/src/shared/shared.module.ts @@ -18,6 +18,7 @@ import { S3FileManagerService } from './services/s3-file-manager.service'; import { FileManagerService } from './services/file-manager.service'; import { PracticeDomain } from 'src/modules/practice-program/entities/practice_domain.entity'; import { ServiceDomain } from 'src/modules/civic-center-service/entities/service-domain.entity'; +import { Beneficiary } from 'src/modules/civic-center-service/entities/beneficiary.entity'; @Global() @Module({ @@ -33,6 +34,7 @@ import { ServiceDomain } from 'src/modules/civic-center-service/entities/service Skill, PracticeDomain, ServiceDomain, + Beneficiary, ]), HttpModule, ], diff --git a/frontend/src/assets/locales/en/translation.json b/frontend/src/assets/locales/en/translation.json index 4188b17ce..3e1146fdd 100644 --- a/frontend/src/assets/locales/en/translation.json +++ b/frontend/src/assets/locales/en/translation.json @@ -1243,25 +1243,6 @@ "description": "TODO#17: Lorem ipsum", "add_button": "Add Service" }, - "beneficiaries": { - "COPII": "copii (0-14 ani)", - "TINERI": "tineri (15-18 ani)", - "ADULTI": "adulți (18-25 ani)", - "VARSTNICI": "vârstnici (>65 ani)", - "FAMILIE": "familie", - "RISC_DE_SARACIE": "persoane aflate în risc de sărăcie", - "ADICTII": "persoane cu adicţii (alcool, droguri, jocuri de noroc etc.)", - "AFECTIUNI_MEDICALE": "persoane cu afecţiuni medicale", - "AFECTIUNI_PSIHICE": "persoane cu afecţiuni psihice", - "DIZABILITATI": "persoane cu dizabilităţi", - "COMUNITATI_IZOLATE": "persoane din comunităţi izolate", - "FARA_ADAPOST": "persoane fără adăpost", - "PRIVATE_DE_LIBERTATE": "persoane private de libertate", - "TRAFICULUI_DE_PERSOANE": "victime ale traficului de persoane", - "VIOLENTEI_DOMESTICE": "victime ale violenţei domestice", - "SOMERI": "şomeri de lungă durată", - "APARTINATORII_BENEFICIARILOR": "servicii sociale de suport pentru aparţinătorii beneficiarilor" - }, "list": { "error": "Error loading the list of services" }, diff --git a/frontend/src/assets/locales/ro/translation.json b/frontend/src/assets/locales/ro/translation.json index fa6248a45..b291dab28 100644 --- a/frontend/src/assets/locales/ro/translation.json +++ b/frontend/src/assets/locales/ro/translation.json @@ -1247,25 +1247,6 @@ "description": "Aici poți vizualiza și edita toate serviciile oferite de organizația ta.", "add_button": "Adaugă Serviciu" }, - "beneficiaries": { - "COPII": "copii (0-14 ani)", - "TINERI": "tineri (15-18 ani)", - "ADULTI": "adulți (18-25 ani)", - "VARSTNICI": "vârstnici (>65 ani)", - "FAMILIE": "familie", - "RISC_DE_SARACIE": "persoane aflate în risc de sărăcie", - "ADICTII": "persoane cu adicţii (alcool, droguri, jocuri de noroc etc.)", - "AFECTIUNI_MEDICALE": "persoane cu afecţiuni medicale", - "AFECTIUNI_PSIHICE": "persoane cu afecţiuni psihice", - "DIZABILITATI": "persoane cu dizabilităţi", - "COMUNITATI_IZOLATE": "persoane din comunităţi izolate", - "FARA_ADAPOST": "persoane fără adăpost", - "PRIVATE_DE_LIBERTATE": "persoane private de libertate", - "TRAFICULUI_DE_PERSOANE": "victime ale traficului de persoane", - "VIOLENTEI_DOMESTICE": "victime ale violenţei domestice", - "SOMERI": "şomeri de lungă durată", - "APARTINATORII_BENEFICIARILOR": "servicii sociale de suport pentru aparţinătorii beneficiarilor" - }, "list": { "error": "Eroare la încărcarea listei de servicii" }, diff --git a/frontend/src/common/helpers/pulling-apps-helper.ts b/frontend/src/common/helpers/pulling-apps-helper.ts index 8a58c4277..0023fb143 100644 --- a/frontend/src/common/helpers/pulling-apps-helper.ts +++ b/frontend/src/common/helpers/pulling-apps-helper.ts @@ -23,8 +23,6 @@ export const dataToCsv = (items: { id: number; name: string }[]): string => { return items ? items.map((item) => item.name).join(', ') : ''; }; -export const formatAgeCategories = (item: CivicCenterService) => { - return item?.ageCategories - .map((key) => i18n.t(`beneficiaries.${key}`, { ns: 'civic_center_service' })) - .join(', '); +export const formatBeneficiaries = (item: CivicCenterService) => { + return item?.beneficiaries.map((item) => item.name).join(', '); }; diff --git a/frontend/src/pages/civic-center-service/EditCivicCenterService.tsx b/frontend/src/pages/civic-center-service/EditCivicCenterService.tsx index 499d1469c..337ede790 100644 --- a/frontend/src/pages/civic-center-service/EditCivicCenterService.tsx +++ b/frontend/src/pages/civic-center-service/EditCivicCenterService.tsx @@ -40,12 +40,13 @@ const EditCivicCenterService = () => { useEffect(() => { if (civicCenterService) { - const { startDate, endDate, domains, ...formData } = civicCenterService; + const { startDate, endDate, domains, beneficiaries, ...formData } = civicCenterService; const location = mapCitiesToSelect(civicCenterService.location); reset({ ...formData, + beneficiaries: beneficiaries.map(mapToId), domains: domains.map(mapToId), startDate: new Date(startDate), endDate: endDate ? new Date(endDate) : endDate, diff --git a/frontend/src/pages/civic-center-service/components/CivicCenterForm.tsx b/frontend/src/pages/civic-center-service/components/CivicCenterForm.tsx index d43969aa4..3854d849a 100644 --- a/frontend/src/pages/civic-center-service/components/CivicCenterForm.tsx +++ b/frontend/src/pages/civic-center-service/components/CivicCenterForm.tsx @@ -18,10 +18,12 @@ import ServerSelect from '../../../components/server-select/ServerSelect'; import Textarea from '../../../components/Textarea/Textarea'; import Toggle from '../../../components/toggle/Toggle'; import { CivicCenterServicePayload } from '../../../services/civic-center-service/interfaces/civic-center-service-payload.interface'; -import { useServiceDomainsQuery } from '../../../services/nomenclature/Nomenclature.queries'; +import { + useBeneficiariesQuery, + useServiceDomainsQuery, +} from '../../../services/nomenclature/Nomenclature.queries'; import { getCities } from '../../../services/nomenclature/Nomenclatures.service'; import { CivicCenterFormConfig } from '../config/CivicCenterFormConfig'; -import { ageCategories } from '../constants/age-categories.constants'; import SubsectionHeader from './SubsectionHeader'; interface CivicCenterFormProps { @@ -45,6 +47,7 @@ const CivicCenterForm = ({ // load nomenclature data const { data: domains } = useServiceDomainsQuery(); + const { data: beneficiaries } = useBeneficiariesQuery(); // translarions const { t } = useTranslation(['civic_center_service']); @@ -276,19 +279,19 @@ const CivicCenterForm = ({ }} /> { return ( )[ - CivicCenterFormConfig.ageCategories.key + CivicCenterFormConfig.beneficiaries.key ]?.message?.toString()} onItemsChange={onChange} > diff --git a/frontend/src/pages/civic-center-service/components/CivicCenterServiceContent.tsx b/frontend/src/pages/civic-center-service/components/CivicCenterServiceContent.tsx index c311fa75f..f5666522c 100644 --- a/frontend/src/pages/civic-center-service/components/CivicCenterServiceContent.tsx +++ b/frontend/src/pages/civic-center-service/components/CivicCenterServiceContent.tsx @@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next'; import { calculatePeriod, dataToCsv, - formatAgeCategories, + formatBeneficiaries, } from '../../../common/helpers/pulling-apps-helper'; interface CivicCenterServiceContentProps { @@ -65,7 +65,7 @@ const CivicCenterServiceContent = ({ service }: CivicCenterServiceContentProps) /> = { helperText: translations.domains.helper, }, }, - ageCategories: { - key: 'ageCategories', + beneficiaries: { + key: 'beneficiaries', rules: { required: { value: true, - message: translations.ageCategories.required, + message: translations.beneficiaries.required, }, }, config: { - title: translations.ageCategories.label, - helperText: translations.ageCategories.helper, + title: translations.beneficiaries.label, + helperText: translations.beneficiaries.helper, }, }, online: { diff --git a/frontend/src/pages/civic-center-service/constants/age-categories.constants.ts b/frontend/src/pages/civic-center-service/constants/age-categories.constants.ts deleted file mode 100644 index 577b35162..000000000 --- a/frontend/src/pages/civic-center-service/constants/age-categories.constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -import i18n from '../../../common/config/i18n'; -import { Beneficiary } from '../../../common/enums/age-category.enum'; - -export const ageCategories = Object.keys(Beneficiary).map((key) => { - return { - name: i18n.t(`beneficiaries.${key}`, { ns: 'civic_center_service' }), - id: key, - }; -}); diff --git a/frontend/src/services/civic-center-service/interfaces/civic-center-service-payload.interface.ts b/frontend/src/services/civic-center-service/interfaces/civic-center-service-payload.interface.ts index 06151c97f..7f76dd96b 100644 --- a/frontend/src/services/civic-center-service/interfaces/civic-center-service-payload.interface.ts +++ b/frontend/src/services/civic-center-service/interfaces/civic-center-service-payload.interface.ts @@ -12,7 +12,7 @@ export interface CivicCenterServicePayload extends BaseEntity { shortDescription: string; longDescription: string; domains: number[]; - ageCategories: Beneficiary[]; + beneficiaries: Beneficiary[]; isPeriodNotDetermined: boolean; hasOnlineAccess: boolean; onlineAccessLink?: string | null; diff --git a/frontend/src/services/civic-center-service/interfaces/civic-center-service.interface.ts b/frontend/src/services/civic-center-service/interfaces/civic-center-service.interface.ts index c0bb9865a..4bc99dfb2 100644 --- a/frontend/src/services/civic-center-service/interfaces/civic-center-service.interface.ts +++ b/frontend/src/services/civic-center-service/interfaces/civic-center-service.interface.ts @@ -12,7 +12,7 @@ export interface CivicCenterService extends BaseEntity { shortDescription: string; longDescription: string; domains: Domain[]; - ageCategories: Beneficiary[]; + beneficiaries: { id: number; name: string }[]; hasOnlineAccess: boolean; onlineAccessLink?: string; onlineAccessDescription?: string; diff --git a/frontend/src/services/nomenclature/Nomenclature.queries.ts b/frontend/src/services/nomenclature/Nomenclature.queries.ts index ac76b59aa..224f44ac9 100644 --- a/frontend/src/services/nomenclature/Nomenclature.queries.ts +++ b/frontend/src/services/nomenclature/Nomenclature.queries.ts @@ -15,6 +15,7 @@ import { getFaculties, getPracticeDomains, getServiceDomains, + getBeneficiaries, } from './Nomenclatures.service'; import { Coalition } from '../../common/interfaces/coalitions.interface'; import { Federation } from '../../common/interfaces/federations.interface'; @@ -64,6 +65,13 @@ export const useServiceDomainsQuery = () => { }); }; +export const useBeneficiariesQuery = () => { + return useQuery(['beneficiaries'], () => getBeneficiaries(), { + cacheTime: 1000 * 60 * 60, + staleTime: 1000 * 60 * 60, + }); +}; + export const useRegionsQuery = () => { const { setRegions } = useStore(); return useQuery('regions', () => getRegions(), { diff --git a/frontend/src/services/nomenclature/Nomenclatures.service.ts b/frontend/src/services/nomenclature/Nomenclatures.service.ts index 472c552e2..d23ebaea5 100644 --- a/frontend/src/services/nomenclature/Nomenclatures.service.ts +++ b/frontend/src/services/nomenclature/Nomenclatures.service.ts @@ -37,6 +37,10 @@ export const getServiceDomains = (): Promise => { return API.get(`/nomenclatures/service-domains`).then((res) => res.data); }; +export const getBeneficiaries = (): Promise<{ id: number; name: string }[]> => { + return API.get(`/nomenclatures/beneficiaries`).then((res) => res.data); +}; + export const getRegions = (): Promise => { return API.get(`/nomenclatures/regions`).then((res) => res.data); };