diff --git a/package.json b/package.json index 7305495..0290068 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@dhis2/ui": "6.12.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", - "@eyeseetea/d2-api": "1.17.0-beta.4", + "@eyeseetea/d2-api": "1.18.0-beta.1", "@eyeseetea/d2-ui-components": "2.7.0", "@eyeseetea/feedback-component": "0.0.3", "@material-ui/core": "4.12.4", diff --git a/src/data/repositories/SurveyFormD2Repository.ts b/src/data/repositories/SurveyFormD2Repository.ts index 27ba5e9..655568c 100644 --- a/src/data/repositories/SurveyFormD2Repository.ts +++ b/src/data/repositories/SurveyFormD2Repository.ts @@ -1,6 +1,6 @@ import { D2Api } from "@eyeseetea/d2-api/2.36"; import { Future } from "../../domain/entities/generic/Future"; -import { Id } from "../../domain/entities/Ref"; +import { Id, NamedRef } from "../../domain/entities/Ref"; import { SurveyRepository } from "../../domain/repositories/SurveyRepository"; import { apiToFuture, FutureData } from "../api-futures"; import _ from "../../domain/entities/generic/Collection"; @@ -265,7 +265,6 @@ export class SurveyD2Repository implements SurveyRepository { return filter; } - //Currently tracker programs are only in Prevalence module private getTrackerProgramSurveys( surveyFormType: SURVEY_FORM_TYPES, programId: Id, @@ -300,8 +299,12 @@ export class SurveyD2Repository implements SurveyRepository { }) ).flatMap((trackedEntities: TrackedEntitiesGetResponse) => { const instances: D2TrackerEntitySelectedPick[] = trackedEntities.instances; - const surveys = mapTrackedEntityToSurvey(instances, surveyFormType); - return Future.success(surveys); + return this.getOrgUnitNames(instances.map(instance => instance.orgUnit)).flatMap( + orgUnits => { + const surveys = mapTrackedEntityToSurvey(instances, surveyFormType, orgUnits); + return Future.success(surveys); + } + ); }); } @@ -327,14 +330,37 @@ export class SurveyD2Repository implements SurveyRepository { ).flatMap( (trackedEntities: TrackedEntitiesGetResponse) => { const instances: D2TrackerEntitySelectedPick[] = trackedEntities.instances; - const surveys = mapTrackedEntityToSurvey(instances, surveyFormType); - return Future.success(surveys); + return this.getOrgUnitNames( + instances.map(instance => instance.orgUnit) + ).flatMap(orgUnits => { + const surveys = mapTrackedEntityToSurvey( + instances, + surveyFormType, + orgUnits + ); + return Future.success(surveys); + }); } ); }) ).flatMap(listOfSurveys => Future.success(_(listOfSurveys).flatten().value())); } + private getOrgUnitNames(orgUnitIds: Id[]): FutureData { + return apiToFuture( + this.api.models.organisationUnits.get({ + fields: { id: true, name: true }, + filter: { id: { in: orgUnitIds } }, + paging: false, + }) + ).flatMap(orgUnitsResponse => { + const orgUnits = orgUnitsResponse.objects.map(ou => { + return { id: ou.id, name: ou.name }; + }); + return Future.success(orgUnits); + }); + } + private getEventProgramSurveys( surveyFormType: SURVEY_FORM_TYPES, programId: Id, @@ -360,8 +386,11 @@ export class SurveyD2Repository implements SurveyRepository { }) ).flatMap(response => { const events = response.instances; - const surveys = mapEventToSurvey(events, surveyFormType, programId); - return Future.success(surveys); + + return this.getOrgUnitNames(events.map(event => event.orgUnit)).flatMap(orgUnits => { + const surveys = mapEventToSurvey(events, surveyFormType, programId, orgUnits); + return Future.success(surveys); + }); }); } @@ -481,7 +510,6 @@ export class SurveyD2Repository implements SurveyRepository { occurredAt: "", dataValues: [], programStage: "", - scheduledAt: "", }; const payload: TrackerPostRequest = { @@ -510,10 +538,7 @@ export class SurveyD2Repository implements SurveyRepository { orgUnit: orgUnitId, trackedEntity: teiId, trackedEntityType: getTrackedEntityAttributeType(programId), - createdAtClient: "", enrollments: [], - relationships: [], - updatedAtClient: "", attributes: [], }; diff --git a/src/data/repositories/testRepositories/SurveyFormTestRepository.ts b/src/data/repositories/testRepositories/SurveyFormTestRepository.ts index 09521d7..90ab80d 100644 --- a/src/data/repositories/testRepositories/SurveyFormTestRepository.ts +++ b/src/data/repositories/testRepositories/SurveyFormTestRepository.ts @@ -155,7 +155,6 @@ export class SurveyTestRepository implements SurveyRepository { { dataElement: "de1", value: "0", - providedElsewhere: false, updatedAt: "", storedBy: "", createdAt: "", diff --git a/src/data/utils/surveyFormMappers.ts b/src/data/utils/surveyFormMappers.ts index 61fafa3..f527f6d 100644 --- a/src/data/utils/surveyFormMappers.ts +++ b/src/data/utils/surveyFormMappers.ts @@ -324,10 +324,8 @@ export const mapQuestionnaireToEvent = ( program: programId, status: "ACTIVE", occurredAt: new Date().toISOString().split("T")?.at(0) || "", - dataValues: dataValues, programStage: "", - scheduledAt: "", }; return Future.success({ events: [event] }); } @@ -394,6 +392,7 @@ export const mapQuestionnaireToTrackedEntities = ( const enrollments: D2TrackerEnrollment[] = [ { + trackedEntity: teiId ?? "", orgUnit: orgUnitId, program: programId, enrollment: questionnaire.subLevelDetails?.enrollmentId ?? "", diff --git a/src/data/utils/surveyListMappers.ts b/src/data/utils/surveyListMappers.ts index c0912d1..e34f74a 100644 --- a/src/data/utils/surveyListMappers.ts +++ b/src/data/utils/surveyListMappers.ts @@ -27,7 +27,7 @@ import { SURVEY_PATIENT_CODE_TEA_ID, } from "../entities/D2Survey"; import { getSurveyNameBySurveyFormType } from "./surveyProgramHelper"; -import { Id } from "../../domain/entities/Ref"; +import { Id, NamedRef } from "../../domain/entities/Ref"; import { SelectedPick } from "@eyeseetea/d2-api/api"; import { D2TrackerEvent } from "@eyeseetea/d2-api/api/trackerEvents"; @@ -45,7 +45,8 @@ export type D2TrackerEntitySelectedPick = SelectedPick< export const mapTrackedEntityToSurvey = ( trackedEntities: D2TrackerEntitySelectedPick[], - surveyFormType: SURVEY_FORM_TYPES + surveyFormType: SURVEY_FORM_TYPES, + orgUnits?: NamedRef[] ): Survey[] => { return trackedEntities.map(trackedEntityInstance => { const parentPrevalenceSurveyId = @@ -106,7 +107,6 @@ export const mapTrackedEntityToSurvey = ( name: "", surveyType: "", }, - //TO DO : Fix for upgrade //@ts-ignore startDate: trackedEntityInstance.enrollments[0]?.createdAt ? //@ts-ignore @@ -116,9 +116,7 @@ export const mapTrackedEntityToSurvey = ( status: "ACTIVE", assignedOrgUnit: { id: trackedEntityInstance.orgUnit ?? "", - //TO DO : Fix for upgrade - //@ts-ignore - name: trackedEntityInstance.enrollments?.[0]?.orgUnitName ?? "", + name: orgUnits?.find(ou => ou.id === trackedEntityInstance.orgUnit)?.name ?? "", }, surveyType: "", parentWardRegisterId: parentWardId, @@ -134,7 +132,8 @@ export const mapTrackedEntityToSurvey = ( export const mapEventToSurvey = ( events: D2TrackerEvent[], surveyFormType: SURVEY_FORM_TYPES, - programId: Id + programId: Id, + orgUnits?: NamedRef[] ): Survey[] => { return events.map((event: D2TrackerEvent) => { const surveyProperties = new Map( @@ -195,7 +194,10 @@ export const mapEventToSurvey = ( : event.status === "COMPLETED" ? ("COMPLETED" as SURVEY_STATUSES) : ("ACTIVE" as SURVEY_STATUSES), - assignedOrgUnit: { id: event.orgUnit, name: event.orgUnitName ?? "" }, + assignedOrgUnit: { + id: event.orgUnit, + name: orgUnits?.find(ou => ou.id === event.orgUnit)?.name ?? "", + }, surveyType: surveyType, parentWardRegisterId: parentWardRegisterId, surveyFormType: surveyFormType, diff --git a/yarn.lock b/yarn.lock index f6c4fb5..c7e2685 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3423,10 +3423,10 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== -"@eyeseetea/d2-api@1.17.0-beta.4": - version "1.17.0-beta.4" - resolved "https://registry.yarnpkg.com/@eyeseetea/d2-api/-/d2-api-1.17.0-beta.4.tgz#10352f472a86430b4153b1bdc6f7f2279ce8675a" - integrity sha512-1NexOomGQUqg31QdFmSxKDfIUAVH9f9EyUkcEhWoOU6w+gveoSz8a87gp1cuC0s/KgBnf4mn9BczHtNKGz4YEQ== +"@eyeseetea/d2-api@1.18.0-beta.1": + version "1.18.0-beta.1" + resolved "https://registry.yarnpkg.com/@eyeseetea/d2-api/-/d2-api-1.18.0-beta.1.tgz#9d99e21091bcf62e74988449a8cbf6ad18448bb7" + integrity sha512-PV3534gcPU3600T4xFWozs0upy3J5fg1lC3EYtEblMsqjkmUQFw00RVBAo0B/WcHth5fOVVkABc3jEKfMuWTSQ== dependencies: abort-controller "3.0.0" axios "1.6.4"