=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/datasetreport/DataSetReportService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/datasetreport/DataSetReportService.java 2013-09-16 17:07:25 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/datasetreport/DataSetReportService.java 2013-12-24 15:02:47 +0000 @@ -29,14 +29,13 @@ */ import java.util.List; -import java.util.Set; +import java.util.Map; import org.hisp.dhis.common.Grid; import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.period.Period; /** @@ -49,25 +48,27 @@ * Generates html code for a custom data set report. * * @param dataSet the data set. + * @param period the period. * @param unit the organisation unit. - * @param period the period. + * @param dimensions mapping between dimension identifiers and dimension option identifiers. * @param selectedUnitOnly indicates whether to use captured or aggregated data. * @param format the i18n format. * @return */ - String getCustomDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, boolean selectedUnitOnly, I18nFormat format ); + String getCustomDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format ); /** * Generates a list of Grids based on the HTML code for a custom data set report. * * @param dataSet the data set. + * @param period the period. * @param unit the organisation unit. - * @param period the period. + * @param dimensions mapping between dimension identifiers and dimension option identifiers. * @param selectedUnitOnly indicates whether to use captured or aggregated data. * @param format the i18n format. * @return a list of Grids. */ - List getCustomDataSetReportAsGrid( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, + List getCustomDataSetReportAsGrid( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format ); /** @@ -75,26 +76,28 @@ * in the data set. The data elements are grouped by their category combo. * * @param dataSet the data set. + * @param period the period. * @param unit the organisation unit. - * @param period the period. + * @param dimensions mapping between dimension identifiers and dimension option identifiers. * @param selectedUnitOnly indicates whether to use captured or aggregated data. * @param format the i18n format. * @param i18n the i18n object. * @return a list of Grids. */ - List getDefaultDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, boolean selectedUnitOnly, I18nFormat format, I18n i18n ); + List getDefaultDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format, I18n i18n ); /** * Generates a list of Grids representing a data set report. The data elements * are grouped and sorted by their section in the data set. * * @param dataSet the data set. + * @param period the period. * @param unit the organisation unit. - * @param period the period. + * @param dimensions mapping between dimension identifiers and dimension option identifiers. * @param selectedUnitOnly indicators whether to use captured or aggregated data. * @param format the i18n format. * @param i18n the i18n object. * @return a Grid. */ - List getSectionDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, boolean selectedUnitOnly, I18nFormat format, I18n i18n ); + List getSectionDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format, I18n i18n ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/datasetreport/DataSetReportStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/datasetreport/DataSetReportStore.java 2013-08-23 15:56:19 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/datasetreport/DataSetReportStore.java 2013-12-24 15:02:47 +0000 @@ -29,11 +29,9 @@ */ import java.util.Map; -import java.util.Set; import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.period.Period; /** @@ -43,11 +41,11 @@ { final String SEPARATOR = "-"; - Map getAggregatedValues( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, boolean rawData ); + Map getAggregatedValues( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean rawData ); - Map getAggregatedSubTotals( DataSet dataSet, Period period, OrganisationUnit unit, Set groups ); - - Map getAggregatedTotals( DataSet dataSet, Period period, OrganisationUnit unit, Set groups ); - - Map getAggregatedIndicatorValues( DataSet dataSet, Period period, OrganisationUnit unit, Set groups ); + Map getAggregatedSubTotals( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions ); + + Map getAggregatedTotals( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions ); + + Map getAggregatedIndicatorValues( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions ); } === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/impl/DefaultDataSetReportService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/impl/DefaultDataSetReportService.java 2013-12-19 18:12:57 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/impl/DefaultDataSetReportService.java 2013-12-24 15:02:47 +0000 @@ -39,7 +39,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Matcher; import org.hisp.dhis.common.Grid; @@ -61,7 +60,6 @@ import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.period.Period; import org.hisp.dhis.system.filter.AggregatableDataElementFilter; import org.hisp.dhis.system.grid.GridUtils; @@ -104,22 +102,22 @@ // DataSetReportService implementation // ------------------------------------------------------------------------- - public String getCustomDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, + public String getCustomDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format ) { - Map valueMap = dataSetReportStore.getAggregatedValues( dataSet, period, unit, groups, selectedUnitOnly ); - - valueMap.putAll( dataSetReportStore.getAggregatedTotals( dataSet, period, unit, groups ) ); - - Map indicatorValueMap = dataSetReportStore.getAggregatedIndicatorValues( dataSet, period, unit, groups ); + Map valueMap = dataSetReportStore.getAggregatedValues( dataSet, period, unit, dimensions, selectedUnitOnly ); + + valueMap.putAll( dataSetReportStore.getAggregatedTotals( dataSet, period, unit, dimensions ) ); + + Map indicatorValueMap = dataSetReportStore.getAggregatedIndicatorValues( dataSet, period, unit, dimensions ); return prepareReportContent( dataSet.getDataEntryForm(), valueMap, indicatorValueMap, format ); } - public List getCustomDataSetReportAsGrid( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, + public List getCustomDataSetReportAsGrid( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format ) { - String html = getCustomDataSetReport( dataSet, period, unit, groups, selectedUnitOnly, format ); + String html = getCustomDataSetReport( dataSet, period, unit, dimensions, selectedUnitOnly, format ); try { @@ -131,15 +129,15 @@ } } - public List getSectionDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, + public List getSectionDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format, I18n i18n ) { List
sections = new ArrayList
( dataSet.getSections() ); Collections.sort( sections, new SectionOrderComparator() ); - Map valueMap = dataSetReportStore.getAggregatedValues( dataSet, period, unit, groups, selectedUnitOnly ); - Map subTotalMap = dataSetReportStore.getAggregatedSubTotals( dataSet, period, unit, groups ); - Map totalMap = dataSetReportStore.getAggregatedTotals( dataSet, period, unit, groups ); + Map valueMap = dataSetReportStore.getAggregatedValues( dataSet, period, unit, dimensions, selectedUnitOnly ); + Map subTotalMap = dataSetReportStore.getAggregatedSubTotals( dataSet, period, unit, dimensions ); + Map totalMap = dataSetReportStore.getAggregatedTotals( dataSet, period, unit, dimensions ); List grids = new ArrayList(); @@ -244,7 +242,7 @@ return grids; } - public List getDefaultDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Set groups, + public List getDefaultDataSetReport( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions, boolean selectedUnitOnly, I18nFormat format, I18n i18n ) { ListMap map = new ListMap(); @@ -268,7 +266,7 @@ temp.getSections().add( section ); } - return getSectionDataSetReport( temp, period, unit, groups, selectedUnitOnly, format, i18n ); + return getSectionDataSetReport( temp, period, unit, dimensions, selectedUnitOnly, format, i18n ); } // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/jdbc/AnalyticsDataSetReportStore.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/jdbc/AnalyticsDataSetReportStore.java 2013-09-16 17:07:25 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/jdbc/AnalyticsDataSetReportStore.java 2013-12-24 15:02:47 +0000 @@ -28,16 +28,16 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.system.util.ListUtils.getList; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import org.hisp.dhis.analytics.AnalyticsService; import org.hisp.dhis.analytics.DataQueryParams; -import org.hisp.dhis.common.DimensionType; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementCategory; import org.hisp.dhis.dataset.DataSet; @@ -45,7 +45,6 @@ import org.hisp.dhis.datasetreport.DataSetReportStore; import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.period.Period; import org.hisp.dhis.system.filter.AggregatableDataElementFilter; import org.hisp.dhis.system.util.FilterUtils; @@ -69,7 +68,7 @@ @Override public Map getAggregatedValues( DataSet dataSet, Period period, OrganisationUnit unit, - Set groups, boolean rawData ) + Map dimensions, boolean rawData ) { List dataElements = new ArrayList( dataSet.getDataElements() ); @@ -87,11 +86,11 @@ params.setOrganisationUnit( unit ); params.enableCategoryOptionCombos(); - if ( groups != null && !groups.isEmpty() ) + if ( dimensions != null ) { - for ( OrganisationUnitGroup group : groups ) + for ( String dim : dimensions.keySet() ) { - params.setFilter( group.getGroupSet().getUid(), DimensionType.ORGANISATIONUNIT_GROUPSET, group ); + params.setFilters( analyticsService.getDimension( dim, getList( dimensions.get( dim ) ), null, null ) ); } } @@ -109,7 +108,7 @@ } @Override - public Map getAggregatedSubTotals( DataSet dataSet, Period period, OrganisationUnit unit, Set groups ) + public Map getAggregatedSubTotals( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions ) { Map dataMap = new HashMap(); @@ -139,11 +138,11 @@ params.setOrganisationUnit( unit ); params.setCategory( category ); - if ( groups != null && !groups.isEmpty() ) + if ( dimensions != null ) { - for ( OrganisationUnitGroup group : groups ) + for ( String dim : dimensions.keySet() ) { - params.setFilter( group.getGroupSet().getUid(), DimensionType.ORGANISATIONUNIT_GROUPSET, group ); + params.setFilters( analyticsService.getDimension( dim, getList( dimensions.get( dim ) ), null, null ) ); } } @@ -161,7 +160,7 @@ } @Override - public Map getAggregatedTotals( DataSet dataSet, Period period, OrganisationUnit unit, Set groups ) + public Map getAggregatedTotals( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions ) { List dataElements = new ArrayList( dataSet.getDataElements() ); @@ -178,11 +177,11 @@ params.setPeriod( period ); params.setOrganisationUnit( unit ); - if ( groups != null && !groups.isEmpty() ) + if ( dimensions != null ) { - for ( OrganisationUnitGroup group : groups ) + for ( String dim : dimensions.keySet() ) { - params.setFilter( group.getGroupSet().getUid(), DimensionType.ORGANISATIONUNIT_GROUPSET, group ); + params.setFilters( analyticsService.getDimension( dim, getList( dimensions.get( dim ) ), null, null ) ); } } @@ -200,7 +199,7 @@ } @Override - public Map getAggregatedIndicatorValues( DataSet dataSet, Period period, OrganisationUnit unit, Set groups ) + public Map getAggregatedIndicatorValues( DataSet dataSet, Period period, OrganisationUnit unit, Map dimensions ) { List indicators = new ArrayList( dataSet.getIndicators() ); @@ -215,11 +214,11 @@ params.setPeriod( period ); params.setOrganisationUnit( unit ); - if ( groups != null && !groups.isEmpty() ) + if ( dimensions != null ) { - for ( OrganisationUnitGroup group : groups ) + for ( String dim : dimensions.keySet() ) { - params.setFilter( group.getGroupSet().getUid(), DimensionType.ORGANISATIONUNIT_GROUPSET, group ); + params.setFilters( analyticsService.getDimension( dim, getList( dimensions.get( dim ) ), null, null ) ); } } === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java 2013-12-24 15:02:47 +0000 @@ -170,6 +170,24 @@ return list; } + + /** + * Returns a List with the given items. + * + * @param items the items which should be included in the List. + * @return a List. + */ + public static List getList( T... items ) + { + List list = new ArrayList(); + + for ( T item : items ) + { + list.add( item ); + } + + return list; + } /** * Removes empty strings from the given list. Empty includes null. === modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/dataset/action/GenerateDataSetReportAction.java' --- dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/dataset/action/GenerateDataSetReportAction.java 2013-09-16 17:07:25 +0000 +++ dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/dataset/action/GenerateDataSetReportAction.java 2013-12-24 15:02:47 +0000 @@ -28,12 +28,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.analytics.DataQueryParams.DIMENSION_NAME_SEP; import static org.hisp.dhis.dataset.DataSet.TYPE_CUSTOM; import static org.hisp.dhis.dataset.DataSet.TYPE_SECTION; import java.util.ArrayList; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletResponse; @@ -50,8 +52,6 @@ import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroup; -import org.hisp.dhis.organisationunit.OrganisationUnitGroupService; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; @@ -66,9 +66,7 @@ */ public class GenerateDataSetReportAction implements Action -{ - private static final String SEP = ";"; - +{ // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -101,13 +99,6 @@ this.organisationUnitService = organisationUnitService; } - private OrganisationUnitGroupService organisationUnitGroupService; - - public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService ) - { - this.organisationUnitGroupService = organisationUnitGroupService; - } - private PeriodService periodService; public void setPeriodService( PeriodService periodService ) @@ -157,11 +148,11 @@ this.ou = ou; } - private String groups; + private Set dimension; - public void setGroups( String groups ) + public void setDimension( Set dimension ) { - this.groups = groups; + this.dimension = dimension; } private boolean selectedUnitOnly; @@ -259,19 +250,17 @@ selectedOrgunit = organisationUnitService.getOrganisationUnit( ou ); - Set ouGroups = new HashSet(); - - if ( groups != null && groups.split( SEP ).length > 0 ) + Map dimensions = new HashMap(); + + if ( dimension != null ) { - String[] groupIds = groups.split( SEP ); - - for ( String groupId : groupIds ) - { - OrganisationUnitGroup group = organisationUnitGroupService.getOrganisationUnitGroup( groupId ); + for ( String dim : dimension ) + { + String[] dims = dim.split( DIMENSION_NAME_SEP ); - if ( group != null ) + if ( dims.length == 2 && dims[0] != null && dims[1] != null ) { - ouGroups.add( group ); + dimensions.put( dims[0], dims[1] ); } } } @@ -284,20 +273,20 @@ { if ( type != null ) { - grids = dataSetReportService.getCustomDataSetReportAsGrid( selectedDataSet, selectedPeriod, selectedOrgunit, ouGroups, selectedUnitOnly, format ); + grids = dataSetReportService.getCustomDataSetReportAsGrid( selectedDataSet, selectedPeriod, selectedOrgunit, dimensions, selectedUnitOnly, format ); } else { - customDataEntryFormCode = dataSetReportService.getCustomDataSetReport( selectedDataSet, selectedPeriod, selectedOrgunit, ouGroups, selectedUnitOnly, format ); + customDataEntryFormCode = dataSetReportService.getCustomDataSetReport( selectedDataSet, selectedPeriod, selectedOrgunit, dimensions, selectedUnitOnly, format ); } } else if ( TYPE_SECTION.equals( dataSetType ) ) { - grids = dataSetReportService.getSectionDataSetReport( selectedDataSet, selectedPeriod, selectedOrgunit, ouGroups, selectedUnitOnly, format, i18n ); + grids = dataSetReportService.getSectionDataSetReport( selectedDataSet, selectedPeriod, selectedOrgunit, dimensions, selectedUnitOnly, format, i18n ); } else { - grids = dataSetReportService.getDefaultDataSetReport( selectedDataSet, selectedPeriod, selectedOrgunit, ouGroups, selectedUnitOnly, format, i18n ); + grids = dataSetReportService.getDefaultDataSetReport( selectedDataSet, selectedPeriod, selectedOrgunit, dimensions, selectedUnitOnly, format, i18n ); } return type != null ? type : dataSetType; === modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-reporting/src/main/resources/META-INF/dhis/beans.xml 2013-08-27 12:32:13 +0000 +++ dhis-2/dhis-web/dhis-web-reporting/src/main/resources/META-INF/dhis/beans.xml 2013-12-24 15:02:47 +0000 @@ -106,7 +106,6 @@ - === modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/javascript/dataSetReport.js' --- dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/javascript/dataSetReport.js 2013-12-24 13:05:37 +0000 +++ dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/javascript/dataSetReport.js 2013-12-24 15:02:47 +0000 @@ -19,20 +19,20 @@ offset: dhis2.dsr.currentPeriodOffset }; - var groups = ""; + var dims = []; $( "[name='groupSet']" ).each( function( index, value ) { + var dim = $( this ).data( "uid" ); var item = $( this ).val(); - if ( item ) + + if ( dim && item ) { - groups += item + ";"; + var dimQuery = dim + ":" + item; + dims.push( dimQuery ); } } ); - if ( groups ) - { - dataSetReport["groups"] = groups; - } + dataSetReport.dimension = dims; return dataSetReport; } @@ -140,7 +140,15 @@ delete dataSetReport.periodType; delete dataSetReport.offset; - $.get( 'generateDataSetReport.action', dataSetReport, function( data ) { + var url = "generateDataSetReport.action?ds=" + dataSetReport.ds + + "&pe=" + dataSetReport.pe + "&ou=" + dataSetReport.ou + + "&selectedUnitOnly=" + dataSetReport.selectedUnitOnly; + + $.each( dataSetReport.dimension, function( inx, val ) { + url += "&dimension=" + val; + } ); + + $.get( url, function( data ) { $( '#content' ).html( data ); hideLoader(); showContent();