From ad3bcab66837011ac8eb4e05afc901dff25cea3b Mon Sep 17 00:00:00 2001 From: Vivek Singh Date: Mon, 24 Jun 2024 16:13:44 +0530 Subject: [PATCH] #1382 - filters as string instead of array and string both --- .../action/mydashboard/MyDashboardActions.js | 23 +++++++++++-------- .../src/service/IndividualService.js | 19 +++++++++++---- .../src/service/SyncService.js | 14 +++++------ 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/packages/openchs-android/src/action/mydashboard/MyDashboardActions.js b/packages/openchs-android/src/action/mydashboard/MyDashboardActions.js index f8aac4cd3..feea973d8 100644 --- a/packages/openchs-android/src/action/mydashboard/MyDashboardActions.js +++ b/packages/openchs-android/src/action/mydashboard/MyDashboardActions.js @@ -11,6 +11,7 @@ import RealmQueryService from "../../service/query/RealmQueryService"; import SubjectTypeService from "../../service/SubjectTypeService"; import {DashboardCacheFilter} from "openchs-models"; import General from "../../utility/General"; +import {JSONStringify} from "../../utility/JsonStringify"; function getApplicableEncounterTypes(holder) { return _.isEmpty(holder.selectedGeneralEncounterTypes) ? holder.selectedEncounterTypes : holder.selectedGeneralEncounterTypes; @@ -35,11 +36,11 @@ function updateCacheWithPostSyncValues(context) { if (oneSyncCompleted) { const subjectTypeQuery = (path) => [`${path} = "${subjectTypes[0].uuid}"`]; toUpdateValues = { - individualFilters: subjectTypeQuery('subjectType.uuid'), - encountersFilters: subjectTypeQuery('programEnrolment.individual.subjectType.uuid'), - enrolmentFilters: subjectTypeQuery('individual.subjectType.uuid'), - generalEncountersFilters: subjectTypeQuery('individual.subjectType.uuid'), - dueChecklistFilter: subjectTypeQuery('individual.subjectType.uuid'), + individualFilters: RealmQueryService.orQuery(subjectTypeQuery('subjectType.uuid')), + encountersFilters: RealmQueryService.orQuery(subjectTypeQuery('programEnrolment.individual.subjectType.uuid')), + enrolmentFilters: RealmQueryService.orQuery(subjectTypeQuery('individual.subjectType.uuid')), + generalEncountersFilters: RealmQueryService.orQuery(subjectTypeQuery('individual.subjectType.uuid')), + dueChecklistFilter: RealmQueryService.orQuery(subjectTypeQuery('individual.subjectType.uuid')), selectedSubjectTypeUUID: subjectTypes[0].uuid, ...toUpdateValues }; @@ -104,9 +105,9 @@ class MyDashboardActions { showFilters: false, filters: new Map(), locationSearchCriteria: IndividualSearchCriteria.empty(), - individualFilters: [], - encountersFilters: [], - generalEncountersFilters: [], + individualFilters: '', + encountersFilters: '', + generalEncountersFilters: '', enrolmentFilters: [], dueChecklistFilter: [], selectedLocations: [], @@ -144,6 +145,8 @@ class MyDashboardActions { const queryGeneralEncounter = MyDashboardActions.shouldQueryGeneralEncounter(state); const dueChecklistWithChecklistItem = individualService.dueChecklistForDefaultDashboard(dashboardCacheFilter.filterDate, dashboardCacheFilter.dueChecklistFilter); + General.logDebugTemp("MyDashboardActions", JSONStringify(dashboardCacheFilter)); + const [ allIndividualsWithScheduledVisits, allIndividualsWithOverDueVisits, @@ -230,7 +233,9 @@ class MyDashboardActions { if (listType === "recentlyCompletedRegistration" || listType === "total") allIndividuals = methodMap.get(listType)(state.date.value, [], filters, state.selectedPrograms, getApplicableEncounterTypes(state)); else if (listType === "dueChecklist") { - allIndividuals = methodMap.get(listType)(state.date.value, [], state.dueChecklistFilter) + allIndividuals = methodMap.get(listType)(state.date.value, [], filters, state.selectedPrograms, getApplicableEncounterTypes(state), queryProgramEncounter, queryGeneralEncounter); + } else if (["scheduled", "overdue"].includes(listType)) { + allIndividuals = methodMap.get(listType)(state.date.value, [], state.encountersFilters, state.generalEncountersFilters, queryProgramEncounter, queryGeneralEncounter); } else allIndividuals = methodMap.get(listType)(state.date.value, [], filters, state.generalEncountersFilters, queryProgramEncounter, queryGeneralEncounter); diff --git a/packages/openchs-android/src/service/IndividualService.js b/packages/openchs-android/src/service/IndividualService.js index e47e32d5e..398e9d741 100644 --- a/packages/openchs-android/src/service/IndividualService.js +++ b/packages/openchs-android/src/service/IndividualService.js @@ -65,11 +65,16 @@ function getSubjectUUIDsForCustomFilters(customFilterService, reportFilters) { return {uniqueSubjects, filterApplied}; } -function applyUserFilters(entities, reportFilters, criteria, addressFilter, genders, schema, customFilterService) { +function applyConfiguredFilters(entities, criteria) { let filteredEntities = entities; if (!_.isEmpty(criteria)) { filteredEntities = filteredEntities.filtered(criteria); } + return filteredEntities; +} + +function applyUserFilters(entities, reportFilters, addressFilter, genders, schema, customFilterService) { + let filteredEntities = entities; filteredEntities = RealmQueryService.filterBasedOnAddress(schema, filteredEntities, addressFilter); filteredEntities = RealmQueryService.filterBasedOnGenders(schema, filteredEntities, genders); const {uniqueSubjects, filterApplied} = getSubjectUUIDsForCustomFilters(customFilterService, reportFilters); @@ -259,7 +264,8 @@ class IndividualService extends BaseService { dateMidnight, dateMorning); - programEncounters = applyUserFilters(programEncounters, reportFilters, programEncounterCriteria, addressFilter, genders, ProgramEncounter.schema.name, this.getService(CustomFilterService)); + programEncounters = applyConfiguredFilters(programEncounters, programEncounterCriteria); + programEncounters = applyUserFilters(programEncounters, reportFilters, addressFilter, genders, ProgramEncounter.schema.name, this.getService(CustomFilterService)); programEncounters = programEncounters.map((enc) => { const individual = enc.programEnrolment.individual; @@ -296,7 +302,8 @@ class IndividualService extends BaseService { dateMidnight, dateMorning); - encounters = applyUserFilters(encounters, reportFilters, encounterCriteria, addressFilter, genders, Encounter.schema.name, this.getService(CustomFilterService)); + encounters = applyConfiguredFilters(encounters, encounterCriteria); + encounters = applyUserFilters(encounters, reportFilters, addressFilter, genders, Encounter.schema.name, this.getService(CustomFilterService)); encounters = encounters.map((enc) => { const individual = enc.individual; @@ -346,7 +353,8 @@ class IndividualService extends BaseService { 'AND voided = false ', dateMorning); - programEncounters = applyUserFilters(programEncounters, reportFilters, programEncounterCriteria, addressFilter, genders, ProgramEncounter.schema.name, this.getService(CustomFilterService)); + programEncounters = applyConfiguredFilters(programEncounters, programEncounterCriteria); + programEncounters = applyUserFilters(programEncounters, reportFilters, addressFilter, genders, ProgramEncounter.schema.name, this.getService(CustomFilterService)); programEncounters = programEncounters.map((enc) => { const individual = enc.programEnrolment.individual; @@ -381,7 +389,8 @@ class IndividualService extends BaseService { 'AND voided = false ', dateMorning); - encounters = applyUserFilters(encounters, reportFilters, encounterCriteria, addressFilter, genders, Encounter.schema.name, this.getService(CustomFilterService)); + encounters = applyConfiguredFilters(encounters, encounterCriteria); + encounters = applyUserFilters(encounters, reportFilters, addressFilter, genders, Encounter.schema.name, this.getService(CustomFilterService)); encounters = encounters.map((enc) => { const individual = enc.individual; diff --git a/packages/openchs-android/src/service/SyncService.js b/packages/openchs-android/src/service/SyncService.js index 142c75a41..e85eaaf7c 100644 --- a/packages/openchs-android/src/service/SyncService.js +++ b/packages/openchs-android/src/service/SyncService.js @@ -46,7 +46,7 @@ function transformResourceToEntity(entityMetaData, entityResources) { try { return acc.concat([entityMetaData.entityClass.fromResource(resource, this.entityService, entityResources)]); } catch (error) { - if(error instanceof IgnorableSyncError) { + if (error instanceof IgnorableSyncError) { resource.excludeFromPersist = true; General.logError("SyncService", error); } else { @@ -104,9 +104,9 @@ class SyncService extends BaseService { .then(() => Promise.resolve(this.logSyncCompleteEvent(syncStartTime))) .then(() => this.clearDataIn([RuleFailureTelemetry])) .then(() => this.downloadNewsImages()) - .then(() => { - return updatedSyncSource; - }); + .then(() => { + return updatedSyncSource; + }); // Even blank dataServerSync with no data in or out takes quite a while. // Don't do it twice if no image sync required @@ -411,12 +411,12 @@ class SyncService extends BaseService { }); const customDashboardService = this.context.getService(CustomDashboardService); const renderCustomDashboard = customDashboardService.isCustomDashboardMarkedPrimary(); - if(!renderCustomDashboard) { - this.dispatchAction(MyDashboardActionNames.ON_LOAD); - } else { + if (renderCustomDashboard) { this.dispatchAction(CustomDashboardActionNames.ON_LOAD, {customDashboardType: CustomDashboardType.None}); this.dispatchAction(CustomDashboardActionNames.REMOVE_OLDER_COUNTS); setTimeout(() => this.dispatchAction(CustomDashboardActionNames.REFRESH_COUNT), 500); + } else { + this.dispatchAction(MyDashboardActionNames.ON_LOAD); } } }