=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/completeness/DataSetCompletenessStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/completeness/DataSetCompletenessStore.java 2011-03-01 19:32:40 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/completeness/DataSetCompletenessStore.java 2011-03-01 22:01:40 +0000 @@ -75,6 +75,10 @@ int getNumberOfValues( DataSet dataSet, Collection children, Period period, Date deadline ); + Collection getDataSetsWithRegistrations( Collection dataSets ); + + Collection getPeriodsWithRegistrations( Collection periods ); + void createIndex(); void dropIndex(); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/completeness/impl/AbstractDataSetCompletenessService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/completeness/impl/AbstractDataSetCompletenessService.java 2011-03-01 21:07:47 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/completeness/impl/AbstractDataSetCompletenessService.java 2011-03-01 22:01:40 +0000 @@ -172,6 +172,9 @@ Collection units = organisationUnitService.getOrganisationUnits( organisationUnitIds ); Collection dataSets = dataSetService.getDataSets( dataSetIds ); + periods = completenessStore.getPeriodsWithRegistrations( periods ); + dataSets = completenessStore.getDataSetsWithRegistrations( dataSets ); + OrganisationUnitHierarchy hierarchy = organisationUnitService.getOrganisationUnitHierarchy(); hierarchy.prepareChildren( units ); @@ -179,17 +182,20 @@ for ( final Period period : periods ) { - for ( final OrganisationUnit unit : units ) + for ( final DataSet dataSet : dataSets ) { - for ( final DataSet dataSet : dataSets ) + if ( period.getPeriodType() != null && dataSet.getPeriodType() != null && period.getPeriodType().equals( dataSet.getPeriodType() ) ) { - final Date deadline = getDeadline( period, days ); - - final DataSetCompletenessResult result = getDataSetCompleteness( period, deadline, unit, hierarchy, dataSet ); - - if ( result.getSources() > 0 ) + for ( final OrganisationUnit unit : units ) { - batchHandler.addObject( result ); + final Date deadline = getDeadline( period, days ); + + final DataSetCompletenessResult result = getDataSetCompleteness( period, deadline, unit, hierarchy, dataSet ); + + if ( result.getSources() > 0 ) + { + batchHandler.addObject( result ); + } } } } === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/completeness/jdbc/JDBCDataSetCompletenessStore.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/completeness/jdbc/JDBCDataSetCompletenessStore.java 2011-03-01 19:32:40 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/completeness/jdbc/JDBCDataSetCompletenessStore.java 2011-03-01 22:01:40 +0000 @@ -31,6 +31,7 @@ import static org.hisp.dhis.system.util.DateUtils.getMediumDateString; import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -179,8 +180,42 @@ "AND sourceid IN (" + childrenIds + ")"; return statementManager.getHolder().queryForInteger( sql ); - } + } + + public Collection getDataSetsWithRegistrations( Collection dataSets ) + { + Collection selection = new ArrayList(); + + for ( DataSet dataSet : dataSets ) + { + final String sql = "SELECT count(*) FROM completedatasetregistration WHERE datasetid = " + dataSet.getId(); + + if ( statementManager.getHolder().queryForInteger( sql ) > 0 ) + { + selection.add( dataSet ); + } + } + + return selection; + } + public Collection getPeriodsWithRegistrations( Collection periods ) + { + Collection selection = new ArrayList(); + + for ( Period period : periods ) + { + final String sql = "SELECT count(*) FROM completedatasetregistration WHERE periodid = " + period.getId(); + + if ( statementManager.getHolder().queryForInteger( sql ) > 0 ) + { + selection.add( period ); + } + } + + return selection; + } + public void createIndex() { try