Listing 4 First day of the Quarter Function

FUNCTION firstdoq
PARAMETERS p_date
PRIVATE p_date, r_date, cur_set, r_year, rvalue

r_date = p_date

IF type('r_date') = 'C'
  r_date = ctod('r_date')
ENDIF

IF type('r_date') # 'D' .or. empty(r_date)
  ?? chr(7)
  rvalue = {}
ELSE
  cur_set = set('date')       &&  current date setting
  SET DATE TO american
  r_year = ltrim(str(year(r_date)))

  DO CASE

    CASE month(r_date) <= 3
      rvalue = ctod('01/01/' + r_year)

    CASE month(r_date) <= 6
      rvalue = ctod('01/04/' + r_year)

    CASE month(r_date) <= 9
      rvalue = ctod('01/07/' + r_year)

    OTHERWISE
      rvalue = ctod('01/10/' + r_year)

  ENDCASE

ENDIF

SET DATE TO &cur_set          &&  reset date setting

RETURN(rvalue)

********

