diff --git a/src/data/repositories/SurveyFormD2Repository.ts b/src/data/repositories/SurveyFormD2Repository.ts index bd5f4151..942dcb36 100644 --- a/src/data/repositories/SurveyFormD2Repository.ts +++ b/src/data/repositories/SurveyFormD2Repository.ts @@ -199,30 +199,25 @@ export class SurveyD2Repository implements SurveyRepository { : mapQuestionnaireToEvent(questionnaire, orgUnitId, programId, this.api, eventId); return $payload.flatMap(payload => { - return apiToFuture( - this.api.tracker.postAsync({ importStrategy: action }, payload) - ).flatMap(response => { - return apiToFuture( - // eslint-disable-next-line testing-library/await-async-utils - this.api.system.waitFor("TRACKER_IMPORT_JOB", response.response.id) - ).flatMap(result => { - if (result && result.status !== "ERROR") { + return apiToFuture(this.api.tracker.post({ importStrategy: action }, payload)).flatMap( + response => { + if (response && response.status !== "ERROR") { //return the saved survey id. const surveyId = isTrackerProgram(programId) - ? result.bundleReport?.typeReportMap?.TRACKED_ENTITY?.objectReports[0] + ? response.bundleReport?.typeReportMap?.TRACKED_ENTITY?.objectReports[0] ?.uid - : result.bundleReport?.typeReportMap?.EVENT?.objectReports[0]?.uid; + : response.bundleReport?.typeReportMap?.EVENT?.objectReports[0]?.uid; return Future.success(surveyId); } else { return this.getErrorMessageWithNames( - result?.validationReport?.errorReports?.at(0)?.message + response?.validationReport?.errorReports?.at(0)?.message ).flatMap(errorMessage => { return Future.error(new Error(`Error: ${errorMessage} `)); }); } - }); - }); + } + ); }); } diff --git a/src/data/utils/surveyChildCountHelper.ts b/src/data/utils/surveyChildCountHelper.ts index 8d78b20b..186d2bcc 100644 --- a/src/data/utils/surveyChildCountHelper.ts +++ b/src/data/utils/surveyChildCountHelper.ts @@ -14,6 +14,7 @@ import { } from "../entities/D2Survey"; import { D2Api } from "@eyeseetea/d2-api/2.36"; import { TrackedEntitiesGetResponse } from "@eyeseetea/d2-api/api/trackerTrackedEntities"; +import { TrackerEventsResponse } from "@eyeseetea/d2-api/api/trackerEvents"; export type SurveyChildCountType = | { type: "value"; value: FutureData } @@ -89,6 +90,37 @@ export const getSurveyChildCount = ( } }; +const asyncGetEventSurveyChildCount = async ( + page: number, + programId: Id, + api: D2Api, + ouId: string, + ouMode: "SELECTED" | "CHILDREN" | "DESCENDANTS" | undefined, + filterStr: string +) => { + let response: TrackerEventsResponse; + let count = 0; + const pageSize = 250; + + do { + response = await api.tracker.events + .get({ + fields: { event: true }, + pageSize: pageSize, + page: page, + totalPages: true, + program: programId, + orgUnit: ouId, + ouMode: ouMode, + filter: filterStr, + }) + .getData(); + count += response.instances.length; + page++; + } while (response.page < Math.ceil((response.total as number) / pageSize)); + + return count; +}; const getEventSurveyCount = ( programId: Id, orgUnitId: Id, @@ -105,17 +137,16 @@ const getEventSurveyCount = ( ? `${filterParentDEId}:eq:${parentSurveyId}` : `${filterParentDEId}:eq:${secondaryParentId} `; - return apiToFuture( - api.tracker.events.get({ - fields: { event: true }, - program: programId, - orgUnit: ouId, - ouMode: ouMode, - filter: filterStr, - }) - ).flatMap(response => { - return Future.success(response.instances.length); - }); + const childEventCount = asyncGetEventSurveyChildCount( + 1, + programId, + api, + ouId, + ouMode, + filterStr + ); + + return Future.fromPromise(childEventCount); }; const getTrackerSurveyCount = ( @@ -134,12 +165,15 @@ const getTrackerSurveyCount = ( return apiToFuture( api.tracker.trackedEntities.get({ fields: { trackedEntity: true }, + pageSize: 250, + totalPages: true, program: programId, orgUnit: orgUnitId, ouMode: ouMode, filter: `${filterParentDEId}:eq:${parentSurveyId}`, }) ).flatMap((trackedEntities: TrackedEntitiesGetResponse) => { - return Future.success(trackedEntities.instances.length); + if (trackedEntities.total) return Future.success(trackedEntities.total); + else return Future.success(trackedEntities.instances.length); }); };