=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-04-10 21:12:18 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-04-10 22:52:55 +0000 @@ -291,14 +291,63 @@ return queryGroups; } + // ------------------------------------------------------------------------- + // Dimension constraints methods + // ------------------------------------------------------------------------- + public void applyDimensionConstraints( DataQueryParams params ) { - User user = currentUserService.getCurrentUser(); - - if ( params == null || user == null || - user.getUserCredentials() == null || !user.getUserCredentials().hasDimensionConstraints() ) - { - log.debug( "No dimension constraint applied" ); + applyOrganisationUnitConstraint( params ); + applyUserConstraints( params ); + } + + private void applyOrganisationUnitConstraint( DataQueryParams params ) + { + User user = currentUserService.getCurrentUser(); + + // --------------------------------------------------------------------- + // Check if current user has data view organisation units + // --------------------------------------------------------------------- + + if ( params == null || user == null || !user.hasDataViewOrganisationUnit() ) + { + return; + } + + // --------------------------------------------------------------------- + // Check if request already has organisation units specified + // --------------------------------------------------------------------- + + if ( params.hasDimensionOrFilterWithItems( DimensionalObject.ORGUNIT_DIM_ID ) ) + { + return; + } + + // ----------------------------------------------------------------- + // Apply constraint as filter, and remove potential all-dimension + // ----------------------------------------------------------------- + + params.removeDimensionOrFilter( DimensionalObject.ORGUNIT_DIM_ID ); + + List orgUnits = new ArrayList( user.getDataViewOrganisationUnits() ); + + DimensionalObject constraint = new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, DimensionType.ORGANISATIONUNIT, orgUnits ); + + params.getFilters().add( constraint ); + + log.info( "User: " + user.getUsername() + " constrained by data view organisation units" ); + } + + private void applyUserConstraints( DataQueryParams params ) + { + User user = currentUserService.getCurrentUser(); + + // --------------------------------------------------------------------- + // Check if current user has dimension constraints + // --------------------------------------------------------------------- + + if ( params == null || user == null || user.getUserCredentials() == null || !user.getUserCredentials().hasDimensionConstraints() ) + { return; } @@ -307,7 +356,7 @@ for ( DimensionalObject dimension : dimensionConstraints ) { // ----------------------------------------------------------------- - // Check if constraint is already specified with items + // Check if constraint already is specified with items // ----------------------------------------------------------------- if ( params.hasDimensionOrFilterWithItems( dimension.getUid() ) ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java 2014-04-10 21:20:39 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java 2014-04-10 22:52:55 +0000 @@ -90,7 +90,7 @@ { List dataApprovalLevels = dataApprovalLevelStore.getAllDataApprovalLevels(); - for ( DataApprovalLevel dataApprovalLevel : dataApprovalLevels) + for ( DataApprovalLevel dataApprovalLevel : dataApprovalLevels ) { int ouLevelNumber = dataApprovalLevel.getOrgUnitLevel();