/** * Get the approval level for an organisation unit that is required in order for the user to see * the data, assuming user is limited to seeing approved data only from lower approval levels. * * @param orgUnit organisation unit to test. * @param user the user. * @param approvalLevels all data approval levels. * @return required approval level for user to see the data. */ private int requiredApprovalLevel( OrganisationUnit orgUnit, User user, List<DataApprovalLevel> approvalLevels) { DataApprovalLevel userLevel = getUserApprovalLevel(orgUnit, user, approvalLevels); int totalLevels = approvalLevels.size(); return userLevel == null ? 0 : userLevel.getLevel() == totalLevels ? APPROVAL_LEVEL_UNAPPROVED : userLevel.getLevel() + 1; }
@Override public Map<OrganisationUnit, Integer> getUserReadApprovalLevels(DataApprovalLevel approvalLevel) { Map<OrganisationUnit, Integer> map = new HashMap<>(); User user = currentUserService.getCurrentUser(); Collection<OrganisationUnit> orgUnits = user.getDataViewOrganisationUnits(); if (orgUnits == null || orgUnits.isEmpty()) { orgUnits = organisationUnitService.getRootOrganisationUnits(); } for (OrganisationUnit orgUnit : orgUnits) { map.put(orgUnit, approvalLevel.getLevel()); } return map; }
@Override public void deleteDataApprovalLevel(DataApprovalLevel dataApprovalLevel) { List<DataApprovalLevel> dataApprovalLevels = getAllDataApprovalLevels(); int index = dataApprovalLevel.getLevel() - 1; if (index >= 0 && index < dataApprovalLevels.size()) { dataApprovalLevelStore.delete(dataApprovalLevel); dataApprovalLevels.remove(index); // Move up from here to end, to avoid duplicate level in database. for (int i = index; i < dataApprovalLevels.size(); i++) { update(dataApprovalLevels.get(i), i); } } }