Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ public ErrorMessage validateForErrorMessage(EventQueryParams params) {
}

private boolean hasDateQueryItem(EventQueryParams params) {
return params.getItems().stream()
return params.getItemsAndItemFilters().stream()
.anyMatch(
item ->
EventAnalyticsColumnName.OCCURRED_DATE_COLUMN_NAME.equals(item.getItemId())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -870,13 +870,17 @@ private List<String> getDimensionItemUidsFrom(
private static void addItemFiltersToDimensionItems(
List<QueryItem> itemsFilter, Map<String, List<String>> dimensionItems) {
for (QueryItem item : itemsFilter) {
String itemUid = ResponseHelper.getItemUid(item);

if (item.hasOptionSet()) {
dimensionItems.put(item.getItemId(), item.getOptionSetFilterItemsOrAll());
dimensionItems.put(itemUid, item.getOptionSetFilterItemsOrAll());
} else if (item.hasLegendSet()) {
dimensionItems.put(item.getItemId(), item.getLegendSetFilterItemsOrAll());
dimensionItems.put(itemUid, item.getLegendSetFilterItemsOrAll());
} else if (!item.getDimensionValues().isEmpty()) {
dimensionItems.put(itemUid, item.getDimensionValues());
} else {
dimensionItems.put(
item.getItemId(),
itemUid,
item.getFiltersAsString() != null ? List.of(item.getFiltersAsString()) : emptyList());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,24 @@ void validateSuccessWithStageDateItem_ScheduledDate() {
assertNull(error);
}

@Test
void validateSuccessWithStageDateItemFilter_OccurredDate() {
BaseDimensionalItemObject item =
new BaseDimensionalItemObject(EventAnalyticsColumnName.OCCURRED_DATE_COLUMN_NAME);
QueryItem qi = new QueryItem(item, prA, null, ValueType.DATE, AggregationType.NONE, null);

EventQueryParams params =
new EventQueryParams.Builder()
.withProgram(prA)
.withOrganisationUnits(List.of(ouA))
.addItemFilter(qi)
.build();

// Should not throw - stage date item filter provides period context
ErrorMessage error = eventQueryValidator.validateForErrorMessage(params);
assertNull(error);
}

@Test
void validateSuccessWithStaticDateItem_EnrollmentDate() {
BaseDimensionalItemObject item =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1619,6 +1619,63 @@ void shouldIgnoreDimensionValuesForNonDateItems() {
assertNotNull(items);
assertFalse(items.containsKey("202205"));
}

@Test
@DisplayName(
"should include stage-prefixed dimension values for date item filters with period identifiers")
void shouldIncludeStagePrefixedDimensionValuesForDateItemFilters() {
// Given
Grid grid = new ListGrid();

org.hisp.dhis.program.ProgramStage programStage = createProgramStage('S', programA);
programStage.setUid("A03MvHHogjR");

org.hisp.dhis.common.BaseDimensionalItemObject eventDateItem =
new org.hisp.dhis.common.BaseDimensionalItemObject("occurreddate");
eventDateItem.setUid("occurreddate");
eventDateItem.setName("Event date");

QueryItem queryItem = new QueryItem(eventDateItem, null, ValueType.DATE, null, null);
queryItem.setProgramStage(programStage);
queryItem.setCustomHeader(
org.hisp.dhis.common.AnalyticsCustomHeader.forEventDate(programStage));
queryItem.addDimensionValue("202205");
queryItem.addFilter(new QueryFilter(QueryOperator.GE, "2022-05-01"));
queryItem.addFilter(new QueryFilter(QueryOperator.LE, "2022-05-31"));

EventQueryParams params =
new EventQueryParams.Builder()
.withProgram(programA)
.withSkipMeta(false)
.withEndpointAction(AGGREGATE)
.withOrganisationUnits(List.of(orgUnitA))
.withPeriods(createPeriodDimensions("2023Q1"), "quarterly")
.addItemFilter(queryItem)
.build();

when(userService.getUserByUsername(anyString())).thenReturn(null);

// When
metadataItemsHandler.addMetadata(grid, params, List.of());

// Then
@SuppressWarnings("unchecked")
Map<String, List<String>> dimensions =
(Map<String, List<String>>) grid.getMetaData().get(DIMENSIONS.getKey());
assertNotNull(dimensions);

assertTrue(
dimensions.containsKey("A03MvHHogjR.eventdate"),
"Dimensions should contain stage-prefixed key 'A03MvHHogjR.eventdate'");
assertEquals(
List.of("202205"),
dimensions.get("A03MvHHogjR.eventdate"),
"Dimension values should contain the period identifier '202205', not the filter string");

assertFalse(
dimensions.containsKey("occurreddate"),
"Dimensions should not contain raw 'occurreddate' key for stage-scoped filter items");
}
}

@Nested
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ public void queryAggregatedenrollmentsmacase2() throws JSONException {

// Assert metaData.
String expectedMetaData =
"{\"pager\":{\"isLastPage\":true,\"pageSize\":50,\"page\":1},\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"202208\":{\"name\":\"August 2022\"},\"202307\":{\"name\":\"July 2023\"},\"202209\":{\"name\":\"September 2022\"},\"202305\":{\"name\":\"May 2023\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"202211\":{\"name\":\"November 2022\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"202212\":{\"name\":\"December 2022\"},\"202210\":{\"name\":\"October 2022\"},\"pe\":{},\"VBqh0ynB2wv\":{\"name\":\"Malaria case registration\"},\"pTo4uMt3xur.F3ogKBuviRA\":{\"name\":\"Household location\"},\"pTo4uMt3xur\":{\"name\":\"Malaria case registration\"}},\"dimensions\":{\"F3ogKBuviRA\":[],\"pe\":[\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\",\"202307\"],\"ou\":[\"ImspTQPwCqd\"]}}";
"{\"pager\":{\"isLastPage\":true,\"pageSize\":50,\"page\":1},\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"202208\":{\"name\":\"August 2022\"},\"202307\":{\"name\":\"July 2023\"},\"202209\":{\"name\":\"September 2022\"},\"202305\":{\"name\":\"May 2023\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"202211\":{\"name\":\"November 2022\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"202212\":{\"name\":\"December 2022\"},\"202210\":{\"name\":\"October 2022\"},\"pe\":{},\"VBqh0ynB2wv\":{\"name\":\"Malaria case registration\"},\"pTo4uMt3xur.F3ogKBuviRA\":{\"name\":\"Household location\"},\"pTo4uMt3xur\":{\"name\":\"Malaria case registration\"}},\"dimensions\":{\"pTo4uMt3xur.F3ogKBuviRA\":[],\"pe\":[\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\",\"202307\"],\"ou\":[\"ImspTQPwCqd\"]}}";
String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString();
assertEquals(expectedMetaData, actualMetaData, false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2576,7 +2576,7 @@ public void dataElementOrgUnitTypeFilter() throws JSONException {

// 3. Assert metaData.
String expectedMetaData =
"{\"pager\":{\"page\":1,\"pageSize\":50,\"isLastPage\":true},\"items\":{\"bbKtnxRZKEP\":{\"name\":\"Postpartum care visit\"},\"ou\":{\"name\":\"Organisation unit\"},\"edqlbukwRfQ\":{\"name\":\"Second antenatal care visit\"},\"2023\":{\"name\":\"2023\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"PFDfvmGpsR3.n1rtSHYf6O6\":{\"name\":\"WHOMCH Hospital \\/ Birth clinic\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"PFDfvmGpsR3\":{\"name\":\"Care at birth\"},\"pe\":{},\"2024\":{\"name\":\"2024\"},\"PUZaKR0Jh2k\":{\"name\":\"Previous deliveries\"},\"WZbXY0S00lP\":{\"name\":\"First antenatal care visit\"},\"WSGAb5XwJ3Y\":{\"name\":\"WHO RMNCH Tracker\"}},\"dimensions\":{\"pe\":[\"2020\",\"2021\",\"2022\",\"2023\",\"2024\"],\"ou\":[\"ImspTQPwCqd\"],\"n1rtSHYf6O6\":[\"in ImspTQPwCqd\"]}}";
"{\"pager\":{\"page\":1,\"pageSize\":50,\"isLastPage\":true},\"items\":{\"bbKtnxRZKEP\":{\"name\":\"Postpartum care visit\"},\"ou\":{\"name\":\"Organisation unit\"},\"edqlbukwRfQ\":{\"name\":\"Second antenatal care visit\"},\"2023\":{\"name\":\"2023\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"PFDfvmGpsR3.n1rtSHYf6O6\":{\"name\":\"WHOMCH Hospital \\/ Birth clinic\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"PFDfvmGpsR3\":{\"name\":\"Care at birth\"},\"pe\":{},\"2024\":{\"name\":\"2024\"},\"PUZaKR0Jh2k\":{\"name\":\"Previous deliveries\"},\"WZbXY0S00lP\":{\"name\":\"First antenatal care visit\"},\"WSGAb5XwJ3Y\":{\"name\":\"WHO RMNCH Tracker\"}},\"dimensions\":{\"pe\":[\"2020\",\"2021\",\"2022\",\"2023\",\"2024\"],\"ou\":[\"ImspTQPwCqd\"],\"PFDfvmGpsR3.n1rtSHYf6O6\":[\"in ImspTQPwCqd\"]}}";
String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString();
assertEquals(expectedMetaData, actualMetaData, false);

Expand Down
Loading
Loading