=== 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-12-20 09:10:25 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java 2014-12-29 00:23:53 +0000 @@ -262,12 +262,19 @@ { Set userOrgUnitLevels = new HashSet<>(); + int lowestNumberOrgUnitLevel = 99999999; + for ( OrganisationUnit orgUnit : user.getOrganisationUnits() ) { int orgUnitLevel = orgUnit.hasLevel() ? orgUnit.getLevel() : organisationUnitService.getLevelOfOrganisationUnit( orgUnit.getId() ); userOrgUnitLevels.add( orgUnitLevel ); + + if ( orgUnitLevel < lowestNumberOrgUnitLevel ) + { + lowestNumberOrgUnitLevel = orgUnitLevel; + } } boolean assignedAtLevel = false; @@ -304,7 +311,8 @@ // Get new values of assignedAtLevel and approvableAtLevel for the current approval level. - assignedAtLevel = canReadThisLevel && userOrgUnitLevels.contains( approvalLevel.getOrgUnitLevel() ); + assignedAtLevel = canReadThisLevel && ( userOrgUnitLevels.contains( approvalLevel.getOrgUnitLevel() ) + || ( ( mayApproveAtLowerLevels || mayAcceptAtLowerLevels ) && approvalLevel.getOrgUnitLevel() > lowestNumberOrgUnitLevel ) ); approvableAtLevel = canReadThisLevel && ( ( mayApprove && assignedAtLevel ) || approvableAtAllLowerLevels );