=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitQueryParams.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitQueryParams.java 2015-09-23 18:53:55 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitQueryParams.java 2015-09-30 18:21:31 +0000 @@ -44,12 +44,12 @@ private String query; /** - * The parent organisation units for which to include all children. + * The parent organisation units for which to include all children, inclusive. */ private Set parents = new HashSet<>(); /** - * The groups for which members to include. + * The groups for which members to include, inclusive. */ private Set groups = new HashSet<>(); === 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 2015-09-17 14:51:08 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java 2015-09-30 18:21:31 +0000 @@ -274,21 +274,11 @@ @Override public List getOrganisationUnits( Collection groups, Collection parents ) { - List members = new ArrayList<>(); - - for ( OrganisationUnitGroup group : groups ) - { - members.addAll( group.getMembers() ); - } - - if ( parents != null && !parents.isEmpty() ) - { - List children = getOrganisationUnitsWithChildren( IdentifiableObjectUtils.getUids( parents ) ); - - members.retainAll( children ); - } - - return members; + OrganisationUnitQueryParams params = new OrganisationUnitQueryParams(); + params.setParents( Sets.newHashSet( parents ) ); + params.setGroups( Sets.newHashSet( groups ) ); + + return organisationUnitStore.getOrganisationUnits( params ); } @Override === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java 2015-09-23 18:53:55 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java 2015-09-30 18:21:31 +0000 @@ -177,10 +177,14 @@ if ( params.hasGroups() ) { + hql += hlp.whereAnd() + " ("; + for ( OrganisationUnitGroup group : params.getGroups() ) { - hql += hlp.whereAnd() + " :" + group.getUid() + " in elements(o.groups) "; + hql += " :" + group.getUid() + " in elements(o.groups) or "; } + + hql = TextUtils.removeLastOr( hql ) + ") "; } if ( params.hasLevels() ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/organisationunit/OrganisationUnitStoreTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/organisationunit/OrganisationUnitStoreTest.java 2015-09-17 13:42:30 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/organisationunit/OrganisationUnitStoreTest.java 2015-09-30 18:21:31 +0000 @@ -128,6 +128,16 @@ assertEquals( 2, ous.size() ); assertTrue( ous.containsAll( Sets.newHashSet( ouD, ouF ) ) ); + // Groups + + params = new OrganisationUnitQueryParams(); + params.setGroups( Sets.newHashSet( ogA, ogB ) ); + + ous = orgUnitStore.getOrganisationUnits( params ); + + assertEquals( 4, ous.size() ); + assertTrue( ous.containsAll( Sets.newHashSet( ouD, ouF, ouE, ouG ) ) ); + // Levels params = new OrganisationUnitQueryParams();