=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-01-26 08:20:27 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-01-27 11:43:58 +0000 @@ -136,8 +136,6 @@ grid.addHeader( new GridHeader( DataQueryParams.VALUE_ID, VALUE_HEADER_NAME, Double.class.getName(), false, false ) ); - //TODO how to handle group sets? - // --------------------------------------------------------------------- // Indicators // --------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java 2013-01-22 07:59:25 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java 2013-01-27 11:43:58 +0000 @@ -94,11 +94,11 @@ List queryDimensions = params.getQueryDimensions(); SqlHelper sqlHelper = new SqlHelper(); - - String sql = "select " + getCommaDelimitedString( selectDimensions ) + ", "; //TODO - + int days = PeriodType.getPeriodTypeByName( params.getPeriodType() ).getFrequencyOrder(); + String sql = "select " + getCommaDelimitedString( selectDimensions ) + ", "; + if ( params.isAggregationType( AVERAGE_AGGREGATION ) ) { sql += "sum(daysxvalue) / " + days; === 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 2013-01-25 16:38:21 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java 2013-01-27 11:43:58 +0000 @@ -86,7 +86,7 @@ sqlCreate += col[0] + " " + col[1] + ","; } - sqlCreate += "daysxvalue double precision, value double precision)"; + sqlCreate += "daysxvalue double precision, daysno integer not null, value double precision)"; log.info( "Create SQL: " + sqlCreate ); @@ -99,14 +99,16 @@ Date startDate = period.getStartDate(); Date endDate = period.getEndDate(); - populateTable( tableName, startDate, endDate, "cast(dv.value as double precision)", "int" ); + populateTable( tableName, startDate, endDate, "cast(dv.value as double precision)", "int", "dv.value != ''" ); - populateTable( tableName, startDate, endDate, "1" , "bool" ); + populateTable( tableName, startDate, endDate, "1" , "bool", "dv.value = 'true'" ); + + populateTable( tableName, startDate, endDate, "0" , "bool", "dv.value = 'false'" ); return null; } - private void populateTable( String tableName, Date startDate, Date endDate, String valueExpression, String valueType ) + private void populateTable( String tableName, Date startDate, Date endDate, String valueExpression, String valueType, String clause ) { final String start = DateUtils.getMediumDateString( startDate ); final String end = DateUtils.getMediumDateString( endDate ); @@ -118,7 +120,7 @@ insert += col[0] + ","; } - insert += "daysxvalue, value) "; + insert += "daysxvalue, daysno, value) "; String select = "select "; @@ -127,10 +129,9 @@ select += col[2] + ","; } - select = select.replace( "organisationunitid", "sourceid" ); // Legacy fix TODO remove - select += - valueExpression + " * ps.daysno as value, " + + valueExpression + " * ps.daysno as daysxvalue, " + + "ps.daysno as daysno, " + valueExpression + " as value " + "from datavalue dv " + "left join _dataelementgroupsetstructure degs on dv.dataelementid=degs.dataelementid " + @@ -143,8 +144,8 @@ "where de.valuetype='" + valueType + "' " + "and pe.startdate >= '" + start + "' " + "and pe.startdate <= '" + end + "'" + - "and dv.value != ''" + - "and dv.value is not null"; + "and dv.value is not null " + + "and " + clause; final String sql = insert + select; === modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java' --- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java 2012-12-30 10:52:46 +0000 +++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java 2013-01-27 11:43:58 +0000 @@ -115,9 +115,11 @@ final Date currentStartDate = period.getStartDate(); final Date currentEndDate = period.getEndDate(); + final double duration = getDaysInclusive( currentStartDate, currentEndDate ); + final int dataValueLevel = aggregationCache.getLevelOfOrganisationUnit( crossTabValue.getSourceId() ); - if ( getDaysInclusive( currentStartDate, currentEndDate ) > 0 ) + if ( duration > 0 ) { for ( final Entry entry : crossTabValue.getValueMap().entrySet() ) // { === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/resources/html-report-template.html' --- dhis-2/dhis-support/dhis-support-system/src/main/resources/html-report-template.html 2013-01-25 20:45:07 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/resources/html-report-template.html 2013-01-27 11:43:58 +0000 @@ -48,6 +48,7 @@
var orgUnit = dhis2.report.organisationUnit; // An object

+var id = orgUnit.id; var name = orgUnit.name;
var shortName = orgUnit.shortName;
var code = orgUnit.code;

=== modified file 'tools/dhis-adhoc/src/main/java/org/hisp/dhis/adhoc/RunMe.java' --- tools/dhis-adhoc/src/main/java/org/hisp/dhis/adhoc/RunMe.java 2013-01-24 08:39:47 +0000 +++ tools/dhis-adhoc/src/main/java/org/hisp/dhis/adhoc/RunMe.java 2013-01-27 11:43:58 +0000 @@ -9,6 +9,12 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; /** + * The purpose of this tool is to assist in performing ad-hoc tasks which + * benefits from having the DHIS 2 service layer accessible. Examples of + * such tasks are writing complex custom data entry forms to file, generating + * custom HTML or Jasper reports, and performing database operations which + * cannot be solved using SQL. + * * This class should be executed. You can do this e.g. by choosing "Run as" - * "Java application" in your IDE. *