=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/resourcetable/ResourceTableService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/resourcetable/ResourceTableService.java 2012-11-25 20:18:52 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/resourcetable/ResourceTableService.java 2012-11-25 20:54:29 +0000 @@ -74,6 +74,9 @@ /** * Generates a resource table for all periods. + * + * @param noDisaggregation whether to include period types with higher + * frequency order than the period itself. */ - void generatePeriodTable(); + void generatePeriodTable( boolean noDisaggregation ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/resourcetable/ResourceTableStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/resourcetable/ResourceTableStore.java 2012-11-25 20:18:52 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/resourcetable/ResourceTableStore.java 2012-11-25 20:54:29 +0000 @@ -45,6 +45,7 @@ final String TABLE_NAME_ORGANISATION_UNIT_STRUCTURE = "_orgunitstructure"; final String TABLE_NAME_DATA_ELEMENT_STRUCTURE = "_dataelementstructure"; final String TABLE_NAME_PERIOD_STRUCTURE = "_periodstructure"; + final String TABLE_NAME_PERIOD_NO_DISAGGREGATION_STRUCTURE = "_period_no_disaggregation_structure"; // ------------------------------------------------------------------------- // OrganisationUnitStructure @@ -104,5 +105,5 @@ /** * Creates table. */ - void createPeriodStructure(); + void createPeriodStructure( boolean noDisaggregation ); } === 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 2012-11-25 20:18:52 +0000 +++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java 2012-11-25 20:54:29 +0000 @@ -64,6 +64,8 @@ import org.hisp.dhis.resourcetable.statement.CreateIndicatorGroupSetTableStatement; import org.hisp.dhis.resourcetable.statement.CreateOrganisationUnitGroupSetTableStatement; +import static org.hisp.dhis.resourcetable.ResourceTableStore.*; + /** * @author Lars Helge Overland * @version $Id: DefaultResourceTableService.java 5459 2008-06-26 01:12:03Z @@ -440,7 +442,7 @@ // PeriodTable // ------------------------------------------------------------------------- - public void generatePeriodTable() + public void generatePeriodTable( boolean noDisaggregation ) { // --------------------------------------------------------------------- // Create table @@ -448,18 +450,21 @@ Collection periods = periodService.getAllPeriods(); - resourceTableStore.createPeriodStructure(); + resourceTableStore.createPeriodStructure( noDisaggregation ); // --------------------------------------------------------------------- // Populate table // --------------------------------------------------------------------- + String tableName = noDisaggregation ? TABLE_NAME_PERIOD_NO_DISAGGREGATION_STRUCTURE : TABLE_NAME_PERIOD_STRUCTURE; + BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( GenericBatchHandler.class ). - setTableName( ResourceTableStore.TABLE_NAME_PERIOD_STRUCTURE ).init(); + setTableName( tableName ).init(); for ( Period period : periods ) { final Date startDate = period.getStartDate(); + final PeriodType rowType = period.getPeriodType(); final List values = new ArrayList(); @@ -467,7 +472,14 @@ for ( PeriodType periodType : PeriodType.PERIOD_TYPES ) { - values.add( periodType.createPeriod( startDate ).getIsoDate() ); + if ( rowType.getFrequencyOrder() <= periodType.getFrequencyOrder() || !noDisaggregation ) + { + values.add( periodType.createPeriod( startDate ).getIsoDate() ); + } + else + { + values.add( null ); + } } batchHandler.addObject( values ); === modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/jdbc/JdbcResourceTableStore.java' --- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/jdbc/JdbcResourceTableStore.java 2012-11-25 20:18:52 +0000 +++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/jdbc/JdbcResourceTableStore.java 2012-11-25 20:54:29 +0000 @@ -228,18 +228,20 @@ // PeriodTable // ------------------------------------------------------------------------- - public void createPeriodStructure() + public void createPeriodStructure( boolean noDisaggregation ) { + String tableName = noDisaggregation ? TABLE_NAME_PERIOD_NO_DISAGGREGATION_STRUCTURE : TABLE_NAME_PERIOD_STRUCTURE; + try { - jdbcTemplate.update( "DROP TABLE " + TABLE_NAME_PERIOD_STRUCTURE ); + jdbcTemplate.update( "DROP TABLE " + tableName ); } catch ( BadSqlGrammarException ex ) { // Do nothing, table does not exist } - String sql = "CREATE TABLE " + TABLE_NAME_PERIOD_STRUCTURE + " (periodid INTEGER NOT NULL"; + String sql = "CREATE TABLE " + tableName + " (periodid INTEGER NOT NULL"; for ( PeriodType periodType : PeriodType.PERIOD_TYPES ) { === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java 2012-11-25 20:18:52 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java 2012-11-25 20:54:29 +0000 @@ -169,7 +169,8 @@ if ( periodStructure ) { - resourceTableService.generatePeriodTable(); + resourceTableService.generatePeriodTable( false ); + resourceTableService.generatePeriodTable( true ); } log.info( "Generated resource tables" );