COMPILE ROUTINE TEST_obj_Calendar(Dummy) ROWDEF(CHARSTR) DECLARE SUBROUTINE Set_Status, Send_Info, obj_Calendar, Send_Dyn, ErrMsg DECLARE FUNCTION Get_Status, obj_Calendar $INSERT FISCAL_YR_EQUATES $INSERT FISCAL_QTR_EQUATES DEBUG CutOffDt = '6/29/2013' thisCutOffDt = ICONV(CutOffDt,'D4/') IF thisCutOffDt = '' THEN ErrMsg('Invalid Date Entered.') RETURN END CutOffDt = OCONV(thisCutOffDt,'D4/') IF CutOffDt = '' THEN RETURN FiscalYear = obj_Calendar('IRFiscalYear',CutOffDt) FWData = obj_Calendar('IRFiscalWeek',CutOffDt) FiscalWeek = FWData[1,@FM] FWStartDt = FWData[COL2()+1,@FM] FWEndDt = FWData[COL2()+1,@FM] StartDt = ICONV(FWStartDt,'D') WeekDates = '' FOR I = StartDt TO StartDt + 6 WeekDates<1,-1> = OCONV(I,'D4/') NEXT I FQData = obj_Calendar('IRFiscalQuarter',CutOffDt) FiscalQuarter = FQData<1> FQStartDt = FQData<2> FQEndDt = FQData<3> * * * * * FQRec = XLATE('FISCAL_QTR',FiscalYear:'*':FiscalQuarter,'','X') QtrStartDt = FQRec QtrEndDt = FQRec PlanIdleDts = FQRec IF QtrStartDt = '' THEN ErrMsg('Fiscal Quarter ':FiscalYear:'*':FiscalQuarter:' is missing the start date.') RETURN END IF QtrEndDt = '' THEN ErrMsg('Fiscal Quarter ':FiscalYear:'*':FiscalQuarter:' is missing the end date.') RETURN END IF QtrStartDt >= QtrEndDt THEN ErrMsg('Fiscal Quarter ':FiscalYear:'*':FiscalQuarter:' has incorrect Start and/or End dates.') RETURN END TotQtrDays = QtrEndDt - QtrStartDt + 1 QtrDaysRem = QtrEndDt - thisCutOffDt PlanIdleDaysRem = 0 PlanDtCnt = COUNT(PlanIdleDts,@VM) + (PlanIdleDts NE '') FOR I = 1 TO PlanDtCnt PlanIdleDt = PlanIdleDts<1,I> IF PlanIdleDt >= thisCutOffDt THEN PlanIdleDaysRem += 1 NEXT I PlanIdleDays = PlanDtCnt PlanWorkingDays = TotQtrDays - PlanIdleDays IF PlanWorkingDays < 0 THEN PlanWorkingDays = 0 PlanDaysRem = QtrDaysRem - PlanIdleDaysRem IF PlanDaysRem < 0 THEN PlanDaysRem = 0 BEGIN CASE CASE QtrDaysRem = '' CalDaysDelta = ICONV(FWEndDt,'D') - ICONV(FQStartDt,'D') DaysWorked = INT((CalDaysDelta/TotQtrDays) * PlanWorkingDays) CASE PlanWorkingDays > PlanDaysRem DaysWorked = PlanWorkingDays - PlanDaysRem CASE 1 DaysWorked = 0 END CASE RETURN ;* * * * * * * * * *DateIn = OCONV(Date(),'D4/') DateIn = "Feb 18, 2013" a = obj_Calendar('IRFiscalMonth',DateIn) DEBUG RETURN ; * * * * * * * * * Set_Status(0) debug MonthNos = '' MonthStartDts = '' MonthEndDts = '' YearRec = XLATE('FISCAL_YR','2014','','X') FYStartDt = YearRec FYWeeks = YearRec FYQtrKeys = YearRec QtrStartDts = XLATE('FISCAL_QTR',FYQtrKeys,FISCAL_QTR_START_DT$,'X') QtrEndDts = XLATE('FISCAL_QTR',FYQtrKeys,FISCAL_QTR_END_DT$,'X') WeekStartDts = '' WeekEndDts = '' FOR WeekNo = 1 TO FYWeeks WeekStartDts = FYStartDt + ((WeekNo - 1) * 7) BEGIN CASE CASE WeekNo <= 13 ; Qtr = 1 CASE WeekNo <= 27 ; Qtr = 2 CASE WeekNo <= 39 ; Qtr = 3 CASE 1 ; Qtr = 4 END CASE IF WeekNo = 1 THEN MonthStartDts<1,1> = WeekStartDts IF WeekNo = 5 THEN MonthStartDts<1,2> = WeekStartDts IF WeekNo = 9 THEN MonthStartDts<1,3> = WeekStartDts IF WeekNo = 14 THEN MonthStartDts<1,4> = WeekStartDts IF WeekNo = 18 THEN MonthStartDts<1,5> = WeekStartDts IF WeekNo = 22 THEN MonthStartDts<1,6> = WeekStartDts IF WeekNo = 27 THEN MonthStartDts<1,7> = WeekStartDts IF WeekNo = 31 THEN MonthStartDts<1,8> = WeekStartDts IF WeekNo = 35 THEN MonthStartDts<1,9> = WeekStartDts IF WeekNo = 40 THEN MonthStartDts<1,10> = WeekStartDts IF WeekNo = 44 THEN MonthStartDts<1,11> = WeekStartDts IF FYWeeks = 53 THEN IF WeekNo = 49 THEN MonthStartDts<1,12> = WeekStartDts END ELSE IF WeekNo = 48 THEN MonthStartDts<1,12> = WeekStartDts END CurrMonthStartDt = OCONV(MonthStartDts[-1,'B':@FM],"D4/") Send_Dyn(Qtr:' Month: ':CurrMonthStartDt:' ':WeekNo:' ':OCONV(WeekStartDts,'D4/'):' ':Qtr) NEXT WeekNo FOR I = 1 TO 12 MonthNos<1,I> = I IF I < 12 THEN MonthEndDts<1,I> = MonthStartDts<1,I+1> - 1 END ELSE MonthEndDts<1,I> = QtrEndDts<1,4> END NEXT I MonthStartDts = OCONV(MonthStartDts,'D4/') MonthEndDts = OCONV(MonthEndDts,'D4/') DEBUG GOTO Bail /* FOR Qtr = 1 TO 4 QtrRec = XLATE('FISCAL_QTR',FYQtrKeys<1,I>,'','X') QtrStartDt = QtrRec QtrEndDt = QtrRec QtrDelta = QtrEndDt - QtrStartDt QtrWeeks = INT(QtrDelta/7) + 1 FOR I = 1 TO QtrWeeks WeekStartDt = StartDt - FYStartDt WeekNo = INT(Delta/7) + 1 WeekStartDt = FYStartDate + ((WeekNo - 1) * 7) NEXT Qtr */ RETURN DateIn = '02/11/2013' WeekData = obj_Calendar('IRFiscalWeek',DateIn) IF Get_Status(errCode) THEN DEBUG END B = OCONV(DateOut,'D4/') debug * * * * * * * Bail: * * * * * * * END