Package com.sourcetap.sfa.activity

Source Code of com.sourcetap.sfa.activity.CalendarUtil

/*
*
* Copyright (c) 2004 SourceTap - www.sourcetap.com
*
*  The contents of this file are subject to the SourceTap Public License
* ("License"); You may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.sourcetap.com/license.htm
* Software distributed under the License is distributed on an  "AS IS"  basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
*/

package com.sourcetap.sfa.activity;

import java.util.Calendar;
import java.util.Date;

import org.ofbiz.base.util.Debug;
import org.ofbiz.entity.GenericDelegator;

import com.sourcetap.sfa.util.Preference;
import com.sourcetap.sfa.util.UserInfo;


/**
* DOCUMENT ME!
*
*/
public class CalendarUtil {
 
  public static final String module = CalendarUtil.class.getName();

    public static final String[] monthLabel = {
        "", "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    public static final String[] dayLabel = {
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
        "Saturday"
    };
   
    public static final int[] months = {
      Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, Calendar.JUNE,
      Calendar.JULY, Calendar.AUGUST, Calendar.SEPTEMBER, Calendar.OCTOBER, Calendar.NOVEMBER, Calendar.DECEMBER
    };
   
    public static final int[] daysInMonth = {
        0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };

    /**
     * DOCUMENT ME!
     *
     * @return
     */
    public static String[] getMonthLabels() {
        return monthLabel;
    }

    /**
     * DOCUMENT ME!
     *
     * @return
     */
    public static String[] getDayLabels() {
        return dayLabel;
    }

    /**
     * DOCUMENT ME!
     *
     * @return
     */
    public static int[] getDaysInMonth() {
        return daysInMonth;
    }

    /**
     * DOCUMENT ME!
     *
     * @param year
     * @param month
     * @param day
     *
     * @return
     */
    public static Calendar getCalendar(int year, int month, int day) {
    Calendar calendar = Calendar.getInstance();

        if (year <= 0) {
            year = calendar.get(Calendar.YEAR);
        }

        if ((month <= 0) || (month > 12)) {
            month = calendar.get(Calendar.MONTH) + 1;
        }

        if (day <= 0) {
            day = calendar.get(Calendar.DAY_OF_MONTH);
        }

        calendar.clear();

    calendar.set(Calendar.MONTH, months[month]);
    calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.DAY_OF_MONTH, day);

        return calendar;
    }

  public static int convertCalendarMonthToFiscalMonth( int calMonth, int fiscalYearStartMonth )
  {
    int month = ( 12 + calMonth - fiscalYearStartMonth + 1) % 12;
    if ( month == 0)
      month = 12;
    return month;
  }
 
  public static int getQuarter( int calMonth, int fiscalYearStartMonth)
  {
    int month = convertCalendarMonthToFiscalMonth( calMonth, fiscalYearStartMonth);
    int quarter = ((month-1) / 3) + 1;
    return quarter;
  }
 
  public static String getQuarterString(int month)
  {
    return getQuarterString(month, 1);
  }
 
    /**
     * DOCUMENT ME!
     *
     * @param month
     *
     * @return
     */
    public static String getQuarterString(int month, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        String returnString = "";

    // handle fyOffset
        int quarter = getQuarter(month, fiscalYearStartMonth);

    switch ( quarter )
    {
      case 1:
        returnString = "Q1";
        break;
      case 2:
        returnString = "Q2";
        break;
      case 3:
        returnString = "Q3";
        break;
      case 4:
        returnString = "Q4";
        break;
      default:
        returnString = "Q?";
        Debug.logError("invalid quarter:" + quarter + " for m,fyM = " + month + ", " + fiscalYearStartMonth, module);
        break;       
    }

        return returnString;
    }
   

  public static String[] getQuarterMonthNames(int month, int fiscalYearStartMonth)
  {
    return getQuarterMonthLabels(month, fiscalYearStartMonth);
  }
 
    /**
     * DOCUMENT ME!
     *
     * @param month
     *
     * @return
     */
    public static String[] getQuarterMonthLabels(int month, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

    int[] monthNumbers = getQuarterMonthNumbers(month, fiscalYearStartMonth);
   
    String[] returnString = new String[3];

    for ( int i = 0; i < 3; i++)
      returnString[i] = monthLabel[ monthNumbers[i] ];

        return returnString;
    }

  public static int[] getQuarterMonthNumbers(int month, int fiscalYearStartMonth)
  {
    return getQuarterNumbers(month, fiscalYearStartMonth);
  }
    /**
     * DOCUMENT ME!
     *
     * @param month
     *
     * @return
     */
    public static int[] getQuarterNumbers(int month, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        int[] returnNumbers = new int[3];
       
    // handle fyOffset
   
    int quarter = getQuarter(month, fiscalYearStartMonth);
    int firstMonth = (fiscalYearStartMonth  + (quarter - 1)*3)%12 ;

    for ( int i = 0; i < 3; i++)
    {
      returnNumbers[i] = ((firstMonth + i) % 12 );
      if ( returnNumbers[i] == 0)
        returnNumbers[i] = 12;
    }

        return returnNumbers;
    }

    /**
     * DOCUMENT ME!
     *
     * @param month
     *
     * @return
     */
    public static int[] getPreviousQuarterNumbers(int month, int fiscalYearStartMonth) {
     
      int[] currentNumbers = getQuarterNumbers(month, fiscalYearStartMonth);

     
    int[] returnNumbers = new int[3];

      for ( int i=0; i < 3; i ++)
      {
      returnNumbers[i] = ( 12 + currentNumbers[i] - 3 ) % 12;
      if ( returnNumbers[i] == 0 )
        returnNumbers[i] = 12;
    }
             
        return returnNumbers;
    }

    /**
     * DOCUMENT ME!
     *
     * @param month
     *
     * @return
     */
    public static int[] getNextQuarterNumbers(int month, int fiscalYearStartMonth) {

    int[] currentNumbers = getQuarterNumbers(month, fiscalYearStartMonth);

        int[] returnNumbers = new int[3];

    for ( int i=0; i < 3; i ++)
    {
      returnNumbers[i] = ( currentNumbers[i] + 3 ) % 12;
      if ( returnNumbers[i] == 0 )
        returnNumbers[i] = 12;
    }

        return returnNumbers;
    }

    /**
     * DOCUMENT ME!
     *
     * @param month
     * @param year
     *
     * @return
     */
    public static Date getMinimumQuarterDate(int month, int year, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        if (year <= 0) {
            year = (Calendar.getInstance().get(Calendar.YEAR));
        }

    int monthNumbers[] = getQuarterMonthNumbers(month, fiscalYearStartMonth);
    int firstMonth = monthNumbers[0];
   
        Calendar calendar = Calendar.getInstance();
        if ( firstMonth < fiscalYearStartMonth )
          year++;
         
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, firstMonth - 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        return calendar.getTime();
    }

    /**
     * DOCUMENT ME!
     *
     * @param month
     * @param year
     *
     * @return
     */
    public static Date getMaximumQuarterDate(int month, int year, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        if (year <= 0) {
            year = (Calendar.getInstance().get(Calendar.YEAR));
        }
       
    int monthNumbers[] = getQuarterMonthNumbers(month, fiscalYearStartMonth);
    int lastMonth = monthNumbers[2] + 1;
    if (lastMonth < 12 )
      lastMonth = lastMonth % 12;

        Calendar calendar = Calendar.getInstance();

    if ( lastMonth <= fiscalYearStartMonth )
       year++;
        calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.MONTH, lastMonth - 1);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    calendar.add(Calendar.DATE, -1);
   
        return calendar.getTime();
    }


    /**
     * DOCUMENT ME!
     *
     * @param startDate
     * @param endDate
     * @param calendarReturnField
     *
     * @return
     */
    public static int differenceBetweenDates(Calendar startDate,
        Calendar endDate, int calendarReturnField) {
        int returnInt = -1;

        if (startDate.before(endDate)) {
            switch (calendarReturnField) {

            case Calendar.MONTH:

                if (startDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                    //same year
                    returnInt = (endDate.get(Calendar.MONTH -
                            startDate.get(Calendar.MONTH)));
                } else {
                    //cross years
                    returnInt = endDate.get(Calendar.MONTH) + 1;

                    if ((endDate.get(Calendar.YEAR) -
                            startDate.get(Calendar.YEAR)) > 1) {
                        int numYrs = (endDate.get(Calendar.YEAR) -
                            startDate.get(Calendar.YEAR));
                        returnInt = returnInt + (12 * numYrs);
                    }

                    returnInt = returnInt +
                        (12 - (startDate.get(Calendar.MONTH) + 1));
                }

                break;

            case Calendar.DAY_OF_MONTH:

                if (startDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                    if (startDate.get(Calendar.MONTH) == endDate.get(Calendar.MONTH)) {
                        //same year, same month
                        returnInt = (endDate.get(Calendar.DAY_OF_MONTH) -  startDate.get(Calendar.DAY_OF_MONTH));
                    } else {
                        //same year, cross months
                        returnInt = (endDate.get(Calendar.DAY_OF_YEAR) - startDate.get(Calendar.DAY_OF_YEAR));
                    }
                } else {
                    //cross years, cross months
                    //get number of days between years
                    //get number
                    //TODO: Finish this part of the method
                }

                break;

            case Calendar.DAY_OF_YEAR:

                if (startDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                    returnInt = endDate.get(Calendar.DAY_OF_YEAR) - startDate.get(Calendar.DAY_OF_YEAR);
                } else {
                    returnInt = endDate.get(Calendar.DAY_OF_YEAR);

                    if ((endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR)) > 1) {
                        int numYrs = (endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR));
                        returnInt = returnInt + (365 * numYrs);
                    }

                    returnInt = returnInt + (365 - (startDate.get(Calendar.DAY_OF_YEAR)));
                }

                break;

            case Calendar.YEAR:
                returnInt = (endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR));
                break;

            default:
                break;

            }
        }

        return returnInt;
    }
   
    public static int getFiscalYearStartMonth( GenericDelegator delegator, UserInfo userInfo )
    {
    Preference pref = Preference.getInstance(delegator);
  
    int FYStartMonth = pref.getPreference(userInfo.getPartyId(), userInfo.getAccountId(), "FISCAL_YEAR_START", 1);
   
    return FYStartMonth;
    }
   
   


}
TOP

Related Classes of com.sourcetap.sfa.activity.CalendarUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.