=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-03-18 08:10:10 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-03-26 09:25:45 +0000 @@ -379,6 +379,17 @@ return this; } + + /** + * Removes the dimension or filter with the given identifier. + */ + public DataQueryParams removeDimensionOrFilter( String dimension ) + { + removeDimension( dimension ); + removeFilter( dimension ); + + return this; + } /** * Removes dimensions of the given type. === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java 2014-03-24 22:22:06 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java 2014-03-26 09:25:45 +0000 @@ -28,6 +28,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID; + import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -40,8 +42,10 @@ import org.hisp.dhis.common.DimensionalObject; import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.NameableObject; +import org.hisp.dhis.common.NameableObjectUtils; import org.hisp.dhis.common.QueryItem; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.period.Period; import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramStage; @@ -152,6 +156,34 @@ return uniqueItems; } + /** + * Replaces periods with start and end dates, using the earliest start date + * from the periods as start date and the latest end date from the periods + * as end date. Remove the period dimension or filter. + */ + public void replacePeriodsWithStartEndDates() + { + List periods = NameableObjectUtils.asTypedList( getDimensionOrFilter( PERIOD_DIM_ID ), Period.class ); + + for ( Period period : periods ) + { + Date start = period.getStartDate(); + Date end = period.getEndDate(); + + if ( startDate == null || ( start != null && start.before( startDate ) ) ) + { + startDate = start; + } + + if ( endDate == null || ( end != null && end.after( endDate ) ) ) + { + endDate = end; + } + } + + removeDimensionOrFilter( PERIOD_DIM_ID ); + } + public boolean isOrganisationUnitMode( String mode ) { return organisationUnitMode != null && organisationUnitMode.equalsIgnoreCase( mode ); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java 2014-03-24 22:19:59 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java 2014-03-26 09:25:45 +0000 @@ -189,6 +189,8 @@ { queryPlanner.validate( params ); + params.replacePeriodsWithStartEndDates(); + Grid grid = new ListGrid(); // ---------------------------------------------------------------------