Skip to content

Commit fe24f63

Browse files
fix: format period names for stage-prefixed date dim. in aggregate queries (#23964) (#24003)
1 parent 0507197 commit fe24f63

6 files changed

Lines changed: 42 additions & 13 deletions

File tree

dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandler.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
import org.hisp.dhis.common.MetadataItem;
8686
import org.hisp.dhis.common.QueryFilter;
8787
import org.hisp.dhis.common.QueryItem;
88+
import org.hisp.dhis.i18n.I18nFormat;
89+
import org.hisp.dhis.i18n.I18nManager;
8890
import org.hisp.dhis.option.Option;
8991
import org.hisp.dhis.organisationunit.OrganisationUnit;
9092
import org.hisp.dhis.period.PeriodDimension;
@@ -105,6 +107,8 @@ public class MetadataItemsHandler {
105107

106108
private final OrganisationUnitResolver organisationUnitResolver;
107109

110+
private final I18nManager i18nManager;
111+
108112
/**
109113
* Adds meta-data values to the given grid based on the given data query parameters.
110114
*
@@ -140,7 +144,7 @@ public void addMetadata(Grid grid, EventQueryParams params, List<Keyword> keywor
140144
* @param grid the {@link Grid}.
141145
* @param params the {@link EventQueryParams}.
142146
* @param keywords the list of {@link Keyword}.
143-
* @return a map of metadata items.
147+
* @return a map containing the metadata items.
144148
*/
145149
private Map<String, Object> buildMetadataItems(
146150
Grid grid, EventQueryParams params, List<Keyword> keywords) {
@@ -498,6 +502,13 @@ private void addPeriodDimensionMetadataValue(
498502
return;
499503
}
500504

505+
I18nFormat format = i18nManager.getI18nFormat();
506+
if (format != null) {
507+
String formattedName = format.formatPeriod(periodDimension.getPeriod());
508+
periodDimension.setName(formattedName);
509+
periodDimension.setShortName(formattedName);
510+
}
511+
501512
metadataItemMap.put(
502513
periodDimensionValue,
503514
new MetadataItem(

dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EnrollmentQueryServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ void shouldAcceptCreatedAndCompletedHeaders() {
6565
null,
6666
securityManager(params),
6767
eventQueryValidator(),
68-
new MetadataItemsHandler(null, null, null),
68+
new MetadataItemsHandler(null, null, null, null),
6969
new SchemeIdHandler(null),
7070
sqlBuilder());
7171

dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandlerTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,14 @@
8383
import org.hisp.dhis.common.QueryOperator;
8484
import org.hisp.dhis.common.ValueType;
8585
import org.hisp.dhis.dataelement.DataElement;
86+
import org.hisp.dhis.i18n.I18nFormat;
87+
import org.hisp.dhis.i18n.I18nManager;
8688
import org.hisp.dhis.legend.Legend;
8789
import org.hisp.dhis.legend.LegendSet;
8890
import org.hisp.dhis.option.Option;
8991
import org.hisp.dhis.option.OptionSet;
9092
import org.hisp.dhis.organisationunit.OrganisationUnit;
93+
import org.hisp.dhis.period.Period;
9194
import org.hisp.dhis.period.PeriodDimension;
9295
import org.hisp.dhis.program.EnrollmentStatus;
9396
import org.hisp.dhis.program.Program;
@@ -115,6 +118,10 @@ class MetadataItemsHandlerTest {
115118

116119
@Mock private OrganisationUnitResolver organisationUnitResolver;
117120

121+
@Mock private I18nManager i18nManager;
122+
123+
@Mock private I18nFormat i18nFormat;
124+
118125
@InjectMocks private MetadataItemsHandler metadataItemsHandler;
119126

120127
private OrganisationUnit orgUnitA;
@@ -1441,6 +1448,8 @@ void shouldIncludeDimensionValuesForDateItems() {
14411448
.build();
14421449

14431450
when(userService.getUserByUsername(anyString())).thenReturn(null);
1451+
when(i18nManager.getI18nFormat()).thenReturn(i18nFormat);
1452+
when(i18nFormat.formatPeriod(any(Period.class))).thenReturn("May 2022");
14441453

14451454
// When
14461455
metadataItemsHandler.addMetadata(grid, params, List.of());
@@ -1458,6 +1467,13 @@ void shouldIncludeDimensionValuesForDateItems() {
14581467
List.of("202205"),
14591468
dimensions.get("A03MvHHogjR.eventdate"),
14601469
"Dimension values should contain the period identifier '202205'");
1470+
1471+
@SuppressWarnings("unchecked")
1472+
Map<String, Object> items = (Map<String, Object>) grid.getMetaData().get(ITEMS.getKey());
1473+
assertNotNull(items);
1474+
MetadataItem periodItem = (MetadataItem) items.get("202205");
1475+
assertNotNull(periodItem);
1476+
assertEquals("May 2022", periodItem.getName());
14611477
}
14621478

14631479
@Test
@@ -1491,6 +1507,8 @@ void shouldAddPeriodMetadataItemsForDateDimensionValues() {
14911507
.build();
14921508

14931509
when(userService.getUserByUsername(anyString())).thenReturn(null);
1510+
when(i18nManager.getI18nFormat()).thenReturn(i18nFormat);
1511+
when(i18nFormat.formatPeriod(any(Period.class))).thenReturn("May 2022");
14941512

14951513
// When
14961514
metadataItemsHandler.addMetadata(grid, params, List.of());
@@ -1504,6 +1522,7 @@ void shouldAddPeriodMetadataItemsForDateDimensionValues() {
15041522
items.containsKey("202205"), "Items should contain period metadata entry for '202205'");
15051523
MetadataItem periodItem = (MetadataItem) items.get("202205");
15061524
assertNotNull(periodItem.getName(), "Period metadata item should have a name");
1525+
assertEquals("May 2022", periodItem.getName());
15071526
}
15081527

15091528
@Test

0 commit comments

Comments
 (0)