=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java 2014-09-29 19:04:09 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java 2014-09-29 19:53:06 +0000 @@ -391,7 +391,7 @@ */ Collection getOrganisationUnitsByNameAndGroups( String name, Collection groups, OrganisationUnit parent, boolean limit ); - OrganisationUnitDataSetAssociationSet getOrganisationUnitDataSetAssociationSet(); + OrganisationUnitDataSetAssociationSet getOrganisationUnitDataSetAssociationSet( Integer maxlevels ); void filterOrganisationUnitsWithoutData( Collection organisationUnits ); === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java 2014-09-29 19:04:09 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java 2014-09-29 19:53:06 +0000 @@ -29,6 +29,7 @@ */ import static org.hisp.dhis.i18n.I18nUtils.i18n; +import static org.hisp.dhis.common.IdentifiableObjectUtils.getUids; import java.awt.geom.Point2D; import java.util.ArrayList; @@ -564,12 +565,12 @@ : intersection; } - public OrganisationUnitDataSetAssociationSet getOrganisationUnitDataSetAssociationSet() + public OrganisationUnitDataSetAssociationSet getOrganisationUnitDataSetAssociationSet( Integer maxLevels ) { Map> associationSet = Maps.newHashMap( organisationUnitStore.getOrganisationUnitDataSetAssocationMap() ); filterUserDataSets( associationSet ); - filterChildOrganisationUnits( associationSet ); + filterChildOrganisationUnits( associationSet, maxLevels ); OrganisationUnitDataSetAssociationSet set = new OrganisationUnitDataSetAssociationSet(); @@ -613,21 +614,21 @@ /** * Retains only the organisation units in the sub-tree of the current user. * - * TODO use offline levels - * * @param associationMap the associations between organisation unit and data sets. + * @param maxLevels the maximum number of levels to include relative to + * current user, inclusive. */ - private void filterChildOrganisationUnits( Map> associationMap ) + private void filterChildOrganisationUnits( Map> associationMap, Integer maxLevels ) { User currentUser = currentUserService.getCurrentUser(); if ( currentUser != null && currentUser.getOrganisationUnits() != null ) { - Collection parentIds = IdentifiableObjectUtils.getUids( currentUser.getOrganisationUnits() ); + Collection parentIds = getUids( currentUser.getOrganisationUnits() ); - Collection organisationUnitsWithChildren = getOrganisationUnitsWithChildren( parentIds ); + Collection organisationUnitsWithChildren = getOrganisationUnitsWithChildren( parentIds, maxLevels ); - Collection children = IdentifiableObjectUtils.getUids( organisationUnitsWithChildren ); + Collection children = getUids( organisationUnitsWithChildren ); associationMap.keySet().retainAll( children ); } === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java 2014-09-19 16:13:09 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java 2014-09-29 19:53:06 +0000 @@ -29,9 +29,11 @@ */ import com.opensymphony.xwork2.Action; + import org.hisp.dhis.acl.AclService; import org.hisp.dhis.common.ListMap; import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator; +import org.hisp.dhis.configuration.ConfigurationService; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementCategory; import org.hisp.dhis.dataelement.DataElementCategoryCombo; @@ -44,6 +46,7 @@ import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.indicator.IndicatorService; import org.hisp.dhis.organisationunit.OrganisationUnitDataSetAssociationSet; +import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.user.CurrentUserService; import org.hisp.dhis.user.User; @@ -119,6 +122,9 @@ @Autowired protected AclService aclService; + @Autowired + private ConfigurationService configurationService; + // ------------------------------------------------------------------------- // Output // ------------------------------------------------------------------------- @@ -238,7 +244,11 @@ expressionService.substituteExpressions( indicators, null ); - OrganisationUnitDataSetAssociationSet organisationUnitSet = organisationUnitService.getOrganisationUnitDataSetAssociationSet(); + OrganisationUnitLevel offlineOrgUnitLevel = configurationService.getConfiguration().getOfflineOrganisationUnitLevel(); + + Integer level = offlineOrgUnitLevel != null ? offlineOrgUnitLevel.getLevel() : null; + + OrganisationUnitDataSetAssociationSet organisationUnitSet = organisationUnitService.getOrganisationUnitDataSetAssociationSet( null ); //TODO change null > "level" dataSetAssociationSets = organisationUnitSet.getDataSetAssociationSets();