=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateUnitPeriodTypeParser.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateUnitPeriodTypeParser.java 2014-05-23 15:34:22 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateUnitPeriodTypeParser.java 2014-08-11 05:27:09 +0000 @@ -155,7 +155,12 @@ int year = Integer.parseInt( matcher.group( 1 ) ); int month = Integer.parseInt( matcher.group( 2 ) ); - DateUnit start = new DateUnit( year, month, 1 ); + if ( month < 1 || month > 6 ) + { + return null; + } + + DateUnit start = new DateUnit( year, (month * 2) - 1, 1 ); DateUnit end = new DateUnit( start ); end = getCalendar().plusMonths( end, 2 ); end = getCalendar().minusDays( end, 1 ); === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/BiMonthlyPeriodType.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/BiMonthlyPeriodType.java 2014-06-23 14:46:45 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/BiMonthlyPeriodType.java 2014-08-11 05:27:09 +0000 @@ -29,7 +29,6 @@ */ import com.google.common.collect.Lists; - import org.hisp.dhis.calendar.Calendar; import org.hisp.dhis.calendar.DateUnit; @@ -90,7 +89,7 @@ public Period getNextPeriod( Period period ) { Calendar cal = getCalendar(); - + DateUnit dateUnit = cal.fromIso( DateUnit.fromJdkDate( period.getStartDate() ) ); dateUnit = cal.plusMonths( dateUnit, 2 ); @@ -101,7 +100,7 @@ public Period getPreviousPeriod( Period period ) { Calendar cal = getCalendar(); - + DateUnit dateUnit = cal.fromIso( DateUnit.fromJdkDate( period.getStartDate() ) ); dateUnit = cal.minusMonths( dateUnit, 2 ); @@ -116,7 +115,7 @@ public List generatePeriods( DateUnit dateUnit ) { Calendar cal = getCalendar(); - + dateUnit.setMonth( 1 ); dateUnit.setDay( 1 ); @@ -141,7 +140,7 @@ public List generateRollingPeriods( DateUnit dateUnit ) { Calendar cal = getCalendar(); - + dateUnit.setDay( 1 ); dateUnit = cal.minusMonths( dateUnit, (dateUnit.getMonth() % 2) + 10 ); @@ -159,7 +158,7 @@ @Override public String getIsoDate( DateUnit dateUnit ) { - return String.format( "%d%02dB", dateUnit.getYear(), dateUnit.getMonth() ); + return String.format( "%d%02dB", dateUnit.getYear(), (dateUnit.getMonth() + 1) / 2 ); } @Override @@ -172,7 +171,7 @@ public Date getRewindedDate( Date date, Integer rewindedPeriods ) { Calendar cal = getCalendar(); - + date = date != null ? date : new Date(); rewindedPeriods = rewindedPeriods != null ? rewindedPeriods : 1; === modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/calendar/DateUnitPeriodTypeParserTest.java' --- dhis-2/dhis-api/src/test/java/org/hisp/dhis/calendar/DateUnitPeriodTypeParserTest.java 2014-08-11 05:04:02 +0000 +++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/calendar/DateUnitPeriodTypeParserTest.java 2014-08-11 05:27:09 +0000 @@ -67,8 +67,14 @@ assertEquals( new DateInterval( new DateUnit( 2014, 5, 1 ), new DateUnit( 2014, 5, 31 ) ), format.parse( "2014-05" ) ); // bi-monthly - assertEquals( new DateInterval( new DateUnit( 2014, 2, 1 ), new DateUnit( 2014, 3, 31 ) ), format.parse( "201402B" ) ); - assertEquals( new DateInterval( new DateUnit( 2014, 7, 1 ), new DateUnit( 2014, 8, 31 ) ), format.parse( "201407B" ) ); + assertNull( format.parse( "201400B" ) ); + assertNull( format.parse( "201407B" ) ); + assertEquals( new DateInterval( new DateUnit( 2014, 1, 1 ), new DateUnit( 2014, 2, 28 ) ), format.parse( "201401B" ) ); + assertEquals( new DateInterval( new DateUnit( 2014, 3, 1 ), new DateUnit( 2014, 4, 30 ) ), format.parse( "201402B" ) ); + assertEquals( new DateInterval( new DateUnit( 2014, 5, 1 ), new DateUnit( 2014, 6, 30 ) ), format.parse( "201403B" ) ); + assertEquals( new DateInterval( new DateUnit( 2014, 7, 1 ), new DateUnit( 2014, 8, 31 ) ), format.parse( "201404B" ) ); + assertEquals( new DateInterval( new DateUnit( 2014, 9, 1 ), new DateUnit( 2014, 10, 31 ) ), format.parse( "201405B" ) ); + assertEquals( new DateInterval( new DateUnit( 2014, 11, 1 ), new DateUnit( 2014, 12, 31 ) ), format.parse( "201406B" ) ); // quarter assertNull( format.parse( "2014Q0" ) ); === modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/period/StringFormatTest.java' --- dhis-2/dhis-api/src/test/java/org/hisp/dhis/period/StringFormatTest.java 2014-03-18 08:10:10 +0000 +++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/period/StringFormatTest.java 2014-08-11 05:27:09 +0000 @@ -74,7 +74,7 @@ assertEquals( "Quarter format", "2010Q1", quarter1.getIsoDate() ); assertEquals( "Semester format", "2010S1", semester1.getIsoDate() ); assertEquals( "SemesterApril format", "2010AprilS1", semesterApril1.getIsoDate() ); - assertEquals( "Bimonth format", "201003B", biMonth1.getIsoDate() ); + assertEquals( "Bimonth format", "201002B", biMonth1.getIsoDate() ); assertEquals( "Financial April", "2010April", financialApril.getIsoDate() ); assertEquals( "Financial July", "2010July", financialJuly.getIsoDate() ); assertEquals( "Financial Oct", "2010Oct", financialOct.getIsoDate() ); @@ -85,7 +85,7 @@ assertEquals( quarter1, PeriodType.getPeriodFromIsoString( "2010Q1" ) ); assertEquals( semester1, PeriodType.getPeriodFromIsoString( "2010S1" ) ); assertEquals( semesterApril1, PeriodType.getPeriodFromIsoString( "2010AprilS1" ) ); - assertEquals( biMonth1, PeriodType.getPeriodFromIsoString( "201003B" ) ); + assertEquals( biMonth1, PeriodType.getPeriodFromIsoString( "201002B" ) ); assertEquals( financialApril, PeriodType.getPeriodFromIsoString( "2010April" ) ); assertEquals( financialJuly, PeriodType.getPeriodFromIsoString( "2010July" ) ); assertEquals( financialOct, PeriodType.getPeriodFromIsoString( "2010Oct" ) );