=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java	2010-11-20 08:35:36 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java	2011-02-23 12:57:03 +0000
@@ -169,14 +169,29 @@
         }
         
         String typeName = period.getPeriodType().getName();
+        String startDate = "";
+        String endDate = "";
 
         String keyStartDate = "format." + typeName + ".startDate";
+        if  ( !resourceBundle.getString( keyStartDate ).isEmpty() )
+        {
+         startDate = commonFormatting( period.getStartDate(), resourceBundle.getString( keyStartDate ) );
+        }
+
         String keyEndDate = "format." + typeName + ".endDate";
-        
-        String startDate = commonFormatting( period.getStartDate(), resourceBundle.getString( keyStartDate ) );
-        String endDate = commonFormatting( period.getEndDate(), resourceBundle.getString( keyEndDate ) );
-
-        return Character.toUpperCase( startDate.charAt( 0 ) ) + startDate.substring( 1 ) + endDate;
+        if  ( !resourceBundle.getString( keyEndDate ).isEmpty() )
+        {
+        endDate = commonFormatting( period.getEndDate(), resourceBundle.getString( keyEndDate ) );
+        }
+        String formattedPeriod = startDate + endDate;
+        if  ( ! formattedPeriod.isEmpty() )
+        {
+        return Character.toUpperCase( formattedPeriod.charAt( 0 ) ) + formattedPeriod.substring( 1 );
+        }
+        else
+        {
+            return null;
+        }
     }
     
     // -------------------------------------------------------------------------

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/FiscalYearJulyPeriodType.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/FiscalYearJulyPeriodType.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/FiscalYearJulyPeriodType.java	2011-02-23 14:50:31 +0000
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2004-2010, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.hisp.dhis.period;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Jason P. Pickering
+ *
+ * @version FinancialAprilPeriodType.java Feb 22 2011 10:18:07 AM
+ */
+public class FiscalYearJulyPeriodType
+    extends CalendarPeriodType
+{
+    /**
+     * The name of the FiscalYear PeriodType
+     */
+    public static final String NAME = "FiscalYear";
+
+    public static final int FREQUENCY_ORDER = 365;
+
+    // -------------------------------------------------------------------------
+    // PeriodType functionality
+    // -------------------------------------------------------------------------
+
+    @Override
+    public String getName()
+    {
+        return NAME;
+    }
+
+    @Override
+    public Period createPeriod()
+    {
+        return createPeriod( createCalendarInstance() );
+    }
+
+    @Override
+    public Period createPeriod( Date date )
+    {
+        return createPeriod( createCalendarInstance( date ) );
+    }
+
+    private Period createPeriod( Calendar cal )
+    {
+        cal.set( Calendar.YEAR, cal.get( Calendar.YEAR ) + cal.get( Calendar.MONTH ) % 7 );
+        cal.set( Calendar.MONTH, Calendar.JULY );
+        cal.set( Calendar.DATE, 1 );
+
+        Date startDate = cal.getTime();
+
+        cal.add( Calendar.YEAR, 1 );
+        cal.set( Calendar.MONTH, Calendar.JUNE );
+        cal.set (Calendar.DAY_OF_MONTH, 30);
+
+        return new Period( this, startDate, cal.getTime() );
+    }
+
+    @Override
+    public int getFrequencyOrder()
+    {
+        return FREQUENCY_ORDER;
+    }
+
+    // -------------------------------------------------------------------------
+    // CalendarPeriodType functionality
+    // -------------------------------------------------------------------------
+
+    @Override
+    public Period getNextPeriod( Period period )
+    {
+        Calendar cal = createCalendarInstance( period.getStartDate() );
+        cal.set( Calendar.YEAR, cal.get( Calendar.YEAR ) + cal.get( Calendar.MONTH ) % 7  );
+        cal.set( Calendar.MONTH, Calendar.JULY );
+        cal.set( Calendar.DATE, 1 );
+
+        Date startDate = cal.getTime();
+
+        cal.set( Calendar.YEAR, Calendar.YEAR + 1);
+        cal.set( Calendar.MONTH, Calendar.JUNE );
+        cal.set (Calendar.DAY_OF_MONTH, 30);
+
+        return new Period( this, startDate, cal.getTime() );
+    }
+
+    @Override
+    public Period getPreviousPeriod( Period period )
+    {
+        Calendar cal = createCalendarInstance( period.getStartDate() );
+        cal.set( Calendar.YEAR, cal.get( Calendar.YEAR ) - cal.get( Calendar.MONTH ) % 7  );
+        cal.set( Calendar.MONTH, Calendar.JULY );
+        cal.set( Calendar.DATE, 1 );
+
+        Date startDate = cal.getTime();
+
+        cal.set( Calendar.YEAR, Calendar.YEAR + 1);
+        cal.set( Calendar.MONTH, Calendar.JULY );
+        cal.set (Calendar.DAY_OF_MONTH, 30);
+
+        return new Period( this, startDate, cal.getTime() );
+    }
+
+    /**
+     * Generates FiscalYears for the last 5, current and next 5 years.
+     */
+    @Override
+    public List<Period> generatePeriods( Date date )
+    {
+        Calendar cal = createCalendarInstance( date );
+        cal.add( Calendar.YEAR, -5 );
+        cal.set( Calendar.MONTH, Calendar.JULY );
+        cal.set (Calendar.DAY_OF_MONTH, 1);
+
+        ArrayList<Period> fiscalYears = new ArrayList<Period>();
+
+        for ( int i = 0; i < 11; ++i )
+        {
+            Date startDate = cal.getTime();
+            cal.add( Calendar.YEAR, 1 );
+            cal.set( Calendar.MONTH, Calendar.JUNE );
+            cal.set (Calendar.DAY_OF_MONTH, 30);
+            fiscalYears.add( new Period( this, startDate, cal.getTime() ) );
+            cal.add( Calendar.DAY_OF_YEAR, 1 );
+
+        }
+
+        return fiscalYears;
+    }
+
+    @Override
+    public String getIsoDate( Period period )
+    {
+        throw new UnsupportedOperationException( "Not supported yet." );
+    }
+
+    @Override
+    public Period createPeriod( String isoDate )
+    {
+        throw new UnsupportedOperationException( "Not supported yet." );
+    }
+
+    @Override
+    public String getIsoFormat()
+    {
+        throw new UnsupportedOperationException( "Not supported yet." );
+    }
+}

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/FiscalYearOctPeriodType.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/FiscalYearOctPeriodType.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/FiscalYearOctPeriodType.java	2011-02-23 14:59:48 +0000
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2004-2010, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.hisp.dhis.period;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Jason P. Pickering
+ *
+ * @version FinancialAprilPeriodType.java Feb 22 2011 10:18:07 AM
+ */
+public class FiscalYearOctPeriodType
+    extends CalendarPeriodType
+{
+    /**
+     * The name of the FiscalYear PeriodType
+     */
+    public static final String NAME = "FiscalYear";
+
+    public static final int FREQUENCY_ORDER = 365;
+
+    // -------------------------------------------------------------------------
+    // PeriodType functionality
+    // -------------------------------------------------------------------------
+
+    @Override
+    public String getName()
+    {
+        return NAME;
+    }
+
+    @Override
+    public Period createPeriod()
+    {
+        return createPeriod( createCalendarInstance() );
+    }
+
+    @Override
+    public Period createPeriod( Date date )
+    {
+        return createPeriod( createCalendarInstance( date ) );
+    }
+
+    private Period createPeriod( Calendar cal )
+    {
+        cal.set( Calendar.YEAR, cal.get( Calendar.YEAR ) + cal.get( Calendar.MONTH ) % 10 );
+        cal.set( Calendar.MONTH, Calendar.OCTOBER );
+        cal.set( Calendar.DATE, 1 );
+
+        Date startDate = cal.getTime();
+
+        cal.add( Calendar.YEAR, 1 );
+        cal.set( Calendar.MONTH, Calendar.SEPTEMBER );
+        cal.set (Calendar.DAY_OF_MONTH, 30);
+
+        return new Period( this, startDate, cal.getTime() );
+    }
+
+    @Override
+    public int getFrequencyOrder()
+    {
+        return FREQUENCY_ORDER;
+    }
+
+    // -------------------------------------------------------------------------
+    // CalendarPeriodType functionality
+    // -------------------------------------------------------------------------
+
+    @Override
+    public Period getNextPeriod( Period period )
+    {
+        Calendar cal = createCalendarInstance( period.getStartDate() );
+        cal.set( Calendar.YEAR, cal.get( Calendar.YEAR ) + cal.get( Calendar.MONTH ) % 10  );
+        cal.set( Calendar.MONTH, Calendar.OCTOBER );
+        cal.set( Calendar.DATE, 1 );
+
+        Date startDate = cal.getTime();
+
+        cal.set( Calendar.YEAR, Calendar.YEAR + 1);
+        cal.set( Calendar.MONTH, Calendar.SEPTEMBER );
+        cal.set (Calendar.DAY_OF_MONTH, 30);
+
+        return new Period( this, startDate, cal.getTime() );
+    }
+
+    @Override
+    public Period getPreviousPeriod( Period period )
+    {
+        Calendar cal = createCalendarInstance( period.getStartDate() );
+        cal.set( Calendar.YEAR, cal.get( Calendar.YEAR ) - cal.get( Calendar.MONTH ) % 10  );
+        cal.set( Calendar.MONTH, Calendar.OCTOBER );
+        cal.set( Calendar.DATE, 1 );
+
+        Date startDate = cal.getTime();
+
+        cal.set( Calendar.YEAR, Calendar.YEAR + 1);
+        cal.set( Calendar.MONTH, Calendar.SEPTEMBER );
+        cal.set (Calendar.DAY_OF_MONTH, 30);
+
+        return new Period( this, startDate, cal.getTime() );
+    }
+
+    /**
+     * Generates FiscalYears for the last 5, current and next 5 years.
+     */
+    @Override
+    public List<Period> generatePeriods( Date date )
+    {
+        Calendar cal = createCalendarInstance( date );
+        cal.add( Calendar.YEAR, -5 );
+        cal.set( Calendar.MONTH, Calendar.OCTOBER );
+        cal.set (Calendar.DAY_OF_MONTH, 1);
+
+        ArrayList<Period> fiscalYears = new ArrayList<Period>();
+
+        for ( int i = 0; i < 11; ++i )
+        {
+            Date startDate = cal.getTime();
+            cal.add( Calendar.YEAR, 1 );
+            cal.set( Calendar.MONTH, Calendar.SEPTEMBER );
+            cal.set (Calendar.DAY_OF_MONTH, 30);
+            fiscalYears.add( new Period( this, startDate, cal.getTime() ) );
+            cal.add( Calendar.DAY_OF_YEAR, 1 );
+
+        }
+
+        return fiscalYears;
+    }
+
+    @Override
+    public String getIsoDate( Period period )
+    {
+        throw new UnsupportedOperationException( "Not supported yet." );
+    }
+
+    @Override
+    public Period createPeriod( String isoDate )
+    {
+        throw new UnsupportedOperationException( "Not supported yet." );
+    }
+
+    @Override
+    public String getIsoFormat()
+    {
+        throw new UnsupportedOperationException( "Not supported yet." );
+    }
+}

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodType.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodType.java	2011-02-15 06:22:24 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodType.java	2011-02-23 17:47:30 +0000
@@ -64,6 +64,8 @@
         periodTypes.add( new YearlyPeriodType() );
         periodTypes.add( new TwoYearlyPeriodType() );
         periodTypes.add( new FinancialAprilPeriodType() );
+        periodTypes.add( new FiscalYearJulyPeriodType() );
+        periodTypes.add( new FiscalYearOctPeriodType() );
         //periodTypes.add( new OnChangePeriodType() );
         //periodTypes.add( new SurveyPeriodType() );
         

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/period/hibernate/PeriodType.hbm.xml'
--- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/period/hibernate/PeriodType.hbm.xml	2010-11-17 03:17:16 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/period/hibernate/PeriodType.hbm.xml	2011-02-23 17:43:57 +0000
@@ -31,5 +31,10 @@
       discriminator-value="Survey"/>
     <subclass name="org.hisp.dhis.period.FinancialAprilPeriodType"
       discriminator-value="FinancialApril"/>
+    <subclass name="org.hisp.dhis.period.FiscalYearJulyPeriodType"
+      discriminator-value="FiscalYearJuly"/>
+     <subclass name="org.hisp.dhis.period.FiscalYearOctPeriodType"
+      discriminator-value="FiscalYearOct"/>
+
   </class>
 </hibernate-mapping>

=== modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties'
--- dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties	2011-02-11 10:53:00 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties	2011-02-23 17:43:12 +0000
@@ -120,6 +120,7 @@
 Survey					= Survey
 Relative				= Relative
 FinancialApril			= Financial-April
+FiscalYear              = Fiscal Year
 
 format.Daily.startDate		= yyyy-MM-dd
 format.Daily.endDate		=
@@ -143,6 +144,11 @@
 format.Relative.endDate		= yyyy-MM-dd
 format.FinancialApril.startDate	= dd MMM yyyy 'to '
 format.FinancialApril.endDate= dd MMM yyyy
+format.FiscalYearOct.startDate =
+format.FiscalYearOct.endDate = 'FY' yyyy
+format.FiscalYearJuly.startDate = 'FY' yyyy '/'
+format.FiscalYearJuly.endDate = yyyy
+
 
 #-- Months and weeks ----------------------------------------------------------#
 

