=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataapproval/DataApprovalLevelService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataapproval/DataApprovalLevelService.java 2015-03-26 14:25:02 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataapproval/DataApprovalLevelService.java 2015-04-07 12:03:39 +0000 @@ -45,10 +45,15 @@ String ID = DataApprovalLevelService.class.getName(); /** - * Integer that can be used in place of approval level + * Constant that can be used in place of approval level * for data that has not been approved at any level. */ public static final int APPROVAL_LEVEL_UNAPPROVED = 999; + + /** + * Constant representing the highest possible level of approval. + */ + public static final int APPROVAL_LEVEL_HIGHEST = 0; /** * Gets the data approval level with the given id. === modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java' --- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java 2015-04-05 20:08:26 +0000 +++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java 2015-04-07 12:03:39 +0000 @@ -28,7 +28,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.hisp.dhis.dataapproval.DataApprovalLevelService.APPROVAL_LEVEL_UNAPPROVED; +import static org.hisp.dhis.dataapproval.DataApprovalLevelService.APPROVAL_LEVEL_HIGHEST; import static org.hisp.dhis.resourcetable.ResourceTableStore.TABLE_NAME_CATEGORY_OPTION_COMBO_NAME; import static org.hisp.dhis.resourcetable.ResourceTableStore.TABLE_NAME_DATA_ELEMENT_STRUCTURE; import static org.hisp.dhis.resourcetable.ResourceTableStore.TABLE_NAME_DATE_PERIOD_STRUCTURE; @@ -376,13 +376,18 @@ final DataSet dataSet = dataElement.getDataSet(); final PeriodType periodType = dataElement.getPeriodType(); + // ----------------------------------------------------------------- + // Use highest approval level if data set does not require approval, + // or null if approval is required. + // ----------------------------------------------------------------- + values.add( dataElement.getId() ); values.add( dataElement.getUid() ); values.add( dataElement.getName() ); values.add( dataSet != null ? dataSet.getId() : null ); values.add( dataSet != null ? dataSet.getUid() : null ); values.add( dataSet != null ? dataSet.getName() : null ); - values.add( dataSet != null && dataSet.isApproveData() ? APPROVAL_LEVEL_UNAPPROVED : 0 ); + values.add( dataSet != null && dataSet.isApproveData() ? null : APPROVAL_LEVEL_HIGHEST ); values.add( periodType != null ? periodType.getId() : null ); values.add( periodType != null ? periodType.getName() : null ); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java 2015-03-13 15:48:26 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java 2015-04-07 12:03:39 +0000 @@ -238,10 +238,15 @@ populateAndLog( sql, tableName + ", " + valueType ); } + /** + * Returns sub-query for approval level. First looks for approval level in + * data element resource table which will indicate level 0 (highest) if approval + * is not required. Then looks for highest level in dataapproval table. + */ private String getApprovalSubquery() { String sql = "(" + - "select coalesce(min(dal.level), des.datasetapprovallevel) " + + "select coalesce(des.datasetapprovallevel, min(dal.level)) " + "from dataapproval da " + "inner join dataapprovallevel dal on da.dataapprovallevelid = dal.dataapprovallevelid " + "where da.periodid = dv.periodid " +