added LSL2 stored procedures
This commit is contained in:
666
LSL2/STPROC/OBJ_CALENDAR.txt
Normal file
666
LSL2/STPROC/OBJ_CALENDAR.txt
Normal file
@ -0,0 +1,666 @@
|
||||
COMPILE FUNCTION obj_Calendar(Method,Parms)
|
||||
/*
|
||||
General Calendar Methods
|
||||
|
||||
10/28/2004 JCH - Initial Coding
|
||||
|
||||
Properties:
|
||||
|
||||
Methods:
|
||||
|
||||
IRFiscalYear ;* Returns 4 digit IR Fiscal year for date passed in
|
||||
IRFiscalWeek ;* Returns 1 or 2 digit IR Fiscal Week for date passed in
|
||||
FiscalWeekStartDt ;* Returns starting calendar date f
|
||||
DateAddMonths ;* Return date n months from date passed in
|
||||
*/
|
||||
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Collect.IXVals, Memory_Services
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, Send_Dyn, Memory_Services
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
*$INSERT POPUP_EQUATES
|
||||
$INSERT FISCAL_YR_EQUATES
|
||||
$INSERT FISCAL_QTR_EQUATES
|
||||
$INSERT LOGICAL
|
||||
|
||||
EQU FISCAL_ENT_NO$ TO 1
|
||||
EQU FISCAL_ENT_START_DT$ TO 2
|
||||
EQU FISCAL_ENT_STOP_DT$ TO 3
|
||||
EQU FISCAL_ENT_ID$ TO 4 ;* YYYY.Q or YYYY.MM or YYYY.WW
|
||||
|
||||
|
||||
ErrTitle = 'Error in Stored Procedure "obj_Calendar"'
|
||||
ErrorMsg = ''
|
||||
|
||||
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
|
||||
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
|
||||
|
||||
IF ErrorMsg NE '' THEN
|
||||
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
|
||||
RETURN ''
|
||||
END
|
||||
|
||||
Result = ''
|
||||
|
||||
BEGIN CASE
|
||||
CASE Method = 'CurrDTM' ; GOSUB CurrDTM
|
||||
CASE Method = 'IRFiscalYear' ; GOSUB IRFiscalYear
|
||||
CASE Method = 'IRFiscalQuarter' ; GOSUB IRFiscalQuarter
|
||||
CASE Method = 'IRFiscalMonth' ; GOSUB IRFiscalMonth
|
||||
CASE Method = 'IRFiscalWeek' ; GOSUB IRFiscalWeek
|
||||
CASE Method = 'IRFiscalWeek2' ; GOSUB IRFiscalWeek2
|
||||
CASE Method = 'DateAddMonths' ; GOSUB DateAddMonths
|
||||
CASE MEthod = 'IRYearWeeks' ; GOSUB IRYearWeeks
|
||||
CASE Method = 'IRYearMonths' ; GOSUB IRYearMonths
|
||||
CASE 1
|
||||
|
||||
END CASE
|
||||
|
||||
IF ErrorMsg NE '' THEN
|
||||
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
|
||||
RETURN ''
|
||||
END
|
||||
|
||||
RETURN Result
|
||||
|
||||
|
||||
* * * * * * *
|
||||
CurrDTM:
|
||||
* * * * * * *
|
||||
|
||||
CurrDate = OCONV(Date(),'D4/')
|
||||
CurrTime = OCONV(Time(),'MTS')
|
||||
CurrDTM = CurrDate:' ':CurrTime
|
||||
|
||||
Result = CurrDTM
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRFiscalYear:
|
||||
* * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Always passed in OCONV'd format
|
||||
SkipErrors = Parms[COL2()+1,@RM]
|
||||
|
||||
If Memory_Services('IsValueExpired', 'IRFiscalyear*' : DateIn, 50, True$) then
|
||||
IF NOT(ASSIGNED(DateIn)) THEN DateIn = ''
|
||||
IF DateIn = '' THEN RETURN
|
||||
|
||||
thisDateIn = ICONV(DateIn,'D')
|
||||
|
||||
IF thisDateIn = '' THEN
|
||||
ErrorMsg = 'Invalid Date ':QUOTE(DateIn):' passed to routine. (':Method:').'
|
||||
END
|
||||
|
||||
OPEN 'FISCAL_YR' TO FiscalYrTable ELSE
|
||||
ErrMsg = 'Unable to open FISCAL_YR for read in obj_Calendar - IRFiscalYear method.'
|
||||
RETURN
|
||||
END
|
||||
|
||||
FiscalYrs = Collect.IXVals('FISCAL_YR','FISCAL_YR')
|
||||
|
||||
FiscalYearDates = ''
|
||||
FYCnt = COUNT(FiscalYrs,@FM) + (FiscalYrs NE '')
|
||||
FOR I = 1 TO FYCnt
|
||||
FiscalYr = FiscalYrs<I>
|
||||
READ FiscalYrRec FROM FiscalYrTable,FiscalYr else FiscalYrRec = ''
|
||||
If FiscalYrRec NE '' then
|
||||
FiscalYearDates<1,I,1> = FiscalYr
|
||||
FiscalYearDates<1,I,2> = FiscalYrRec<FISCAL_YR_START_DT$>
|
||||
END ;* End of FiscalYr read
|
||||
NEXT I
|
||||
|
||||
IF thisDateIn < FiscalYearDates<1,1,2> THEN
|
||||
Result = ''
|
||||
IF NOT(SkipErrors) THEN
|
||||
ErrorMsg = 'Date is earlier than earliest start date.'
|
||||
END
|
||||
RETURN
|
||||
END
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
IF thisDateIn > FiscalYearDates[-1,'B':@SVM] + 365 THEN
|
||||
Result = ''
|
||||
IF NOT(SkipErrors) THEN
|
||||
ErrorMsg = 'Date is later than latest start date plus one year.'
|
||||
END
|
||||
RETURN
|
||||
END
|
||||
|
||||
FOR I = 1 TO COUNT(FiscalYearDates,@VM) + (FiscalYearDates NE '')
|
||||
UNTIL thisDateIn < FiscalYearDates<1,I,2>
|
||||
Result = FiscalYearDates<1,I,1>
|
||||
NEXT I
|
||||
Memory_Services('SetValue', 'IRFiscalyear*' : DateIn, Result)
|
||||
end else
|
||||
Result = Memory_Services('GetValue', 'IRFiscalyear*' : DateIn)
|
||||
end
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * * *
|
||||
IRFiscalYear2:
|
||||
* * * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Always passed in OCONV'd format
|
||||
SkipErrors = Parms[COL2()+1,@RM]
|
||||
|
||||
If Memory_Services('IsValueExpired', 'IRFiscalyear2*' : DateIn, 50, True$) then
|
||||
IF NOT(ASSIGNED(DateIn)) THEN DateIn = ''
|
||||
IF DateIn = '' THEN RETURN
|
||||
|
||||
thisDateIn = ICONV(DateIn,'D')
|
||||
|
||||
IF thisDateIn = '' THEN
|
||||
ErrorMsg = 'Invalid Date ':QUOTE(DateIn):' passed to routine. (':Method:').'
|
||||
END
|
||||
|
||||
OPEN 'FISCAL_YR' TO FiscalYrTable ELSE
|
||||
ErrMsg = 'Unable to open FISCAL_YR for read in obj_Calendar - IRFiscalYear method.'
|
||||
RETURN
|
||||
END
|
||||
|
||||
FiscalYrs = Collect.IXVals('FISCAL_YR','FISCAL_YR')
|
||||
|
||||
FiscalYearDates = ''
|
||||
FYCnt = COUNT(FiscalYrs,@FM) + (FiscalYrs NE '')
|
||||
FOR I = 1 TO FYCnt
|
||||
FiscalYr = FiscalYrs<I>
|
||||
READ FiscalYrRec FROM FiscalYrTable,FiscalYr else FiscalYrRec = ''
|
||||
If FiscalYrRec NE '' then
|
||||
FiscalYearDates<1,I,1> = FiscalYr
|
||||
FiscalYearDates<1,I,2> = FiscalYrRec<FISCAL_YR_START_DT$>
|
||||
END ;* End of FiscalYr read
|
||||
NEXT I
|
||||
|
||||
IF thisDateIn < FiscalYearDates<1,1,2> THEN
|
||||
Result = ''
|
||||
IF NOT(SkipErrors) THEN
|
||||
ErrorMsg = 'Date is earlier than earliest start date.'
|
||||
END
|
||||
RETURN
|
||||
END
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
IF thisDateIn > FiscalYearDates[-1,'B':@SVM] + 365 THEN
|
||||
Result = ''
|
||||
IF NOT(SkipErrors) THEN
|
||||
ErrorMsg = 'Date is later than latest start date plus one year.'
|
||||
END
|
||||
RETURN
|
||||
END
|
||||
|
||||
FOR I = 1 TO COUNT(FiscalYearDates,@VM) + (FiscalYearDates NE '')
|
||||
UNTIL thisDateIn < FiscalYearDates<1,I,2>
|
||||
Result = FiscalYearDates<1,I,1>
|
||||
NEXT I
|
||||
Memory_Services('SetValue', 'IRFiscalyear2*' : DateIn, Result)
|
||||
end else
|
||||
Result = Memory_Services('GetValue', 'IRFiscalyear2*' : DateIn)
|
||||
end
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRFiscalQuarter:
|
||||
* * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Always passed in OCONV'd format
|
||||
|
||||
IF NOT(ASSIGNED(DateIn)) THEN DateIn = ''
|
||||
IF DateIn = '' THEN RETURN
|
||||
|
||||
GOSUB IRFiscalYear
|
||||
|
||||
CurrYear = Result
|
||||
Result = ''
|
||||
|
||||
thisDateIn = ICONV(DateIn,'D')
|
||||
|
||||
IF thisDateIn = '' THEN RETURN ;* Bad date passed in
|
||||
|
||||
FYRec = XLATE('FISCAL_YR',CurrYear,'','X')
|
||||
|
||||
QtrKeys = FYRec<FISCAL_YR_FISCAL_QTR_KEY$>
|
||||
|
||||
qCnt = COUNT(QtrKeys,@VM) + (QtrKeys NE '')
|
||||
|
||||
|
||||
QuarterNo = ''
|
||||
|
||||
FOR I = 1 TO qCnt
|
||||
FQKey = FYRec<FISCAL_YR_FISCAL_QTR_KEY$,I>
|
||||
FQRec = XLATE('FISCAL_QTR',FQKey,'','X')
|
||||
|
||||
QuarterStartDt = FQRec<FISCAL_QTR_START_DT$>
|
||||
QuarterEndDt = FQRec<FISCAL_QTR_END_DT$>
|
||||
IF thisDateIn >= QuarterStartDt AND thisDateIn <= QuarterEndDt THEN
|
||||
QuarterNo = I
|
||||
END
|
||||
|
||||
UNTIL QuarterNo NE ''
|
||||
NEXT I
|
||||
|
||||
Result = QuarterNo:@FM:OCONV(QuarterStartDt,'D4/'):@FM:OCONV(QuarterEndDt,'D4/'):@FM:CurrYear:'.':QuarterNo
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRFiscalMonth:
|
||||
* * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Always passed in OCONV'd format
|
||||
|
||||
IF NOT(ASSIGNED(DateIn)) THEN DateIn = ''
|
||||
IF DateIn = '' THEN RETURN
|
||||
|
||||
thisDateIn = ICONV(DateIn,'D')
|
||||
|
||||
IF thisDateIn = '' THEN RETURN ;* Bad date passed in
|
||||
|
||||
GOSUB IRFiscalYear
|
||||
|
||||
FiscalYear = Result
|
||||
Result = ''
|
||||
|
||||
MonthConvFlag = 1 ;* Get month data in internal format
|
||||
|
||||
GOSUB IRYearMonths
|
||||
|
||||
MonthNos = Result<1>
|
||||
MonthStartDts = Result<2>
|
||||
MonthEndDts = Result<3>
|
||||
|
||||
Result = ''
|
||||
|
||||
FOR MonthNo = 1 TO 12
|
||||
|
||||
MonthStartDt = MonthStartDts<1,MonthNo>
|
||||
MonthEndDt = MonthEndDts<1,MonthNo>
|
||||
|
||||
IF thisDateIn >= MonthStartDt AND thisDateIn <= MonthEndDt THEN
|
||||
Result = MonthNo:@FM:OCONV(MonthStartDt,'D4/'):@FM:OCONV(MonthEndDt,'D4/'):@FM:FiscalYear:'.':FMT(MonthNo,'R(0)#2')
|
||||
RETURN
|
||||
END
|
||||
NEXT MonthNo
|
||||
|
||||
RETURN
|
||||
|
||||
/*
|
||||
|
||||
Delta = thisDateIn - FYStartDate
|
||||
QuarterNo = INT(Delta/91) + 1
|
||||
WeekNo = INT(Delta/7) + 1
|
||||
|
||||
IF QuarterNo = 1 THEN
|
||||
BEGIN CASE
|
||||
CASE WeekNo >= 9
|
||||
MonthNo = 3
|
||||
MonthStartDt = FYStartDate + ((9-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 34
|
||||
|
||||
CASE WeekNo >= 5
|
||||
MonthNo = 2
|
||||
MonthStartDt = FYStartDate + ((5-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
CASE WeekNo >= 1
|
||||
MonthNo = 1
|
||||
MonthStartDt = FYStartDate
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
END CASE
|
||||
END
|
||||
|
||||
IF QuarterNo = 2 THEN
|
||||
BEGIN CASE
|
||||
CASE WeekNo >= 22
|
||||
MonthNo = 6
|
||||
MonthStartDt = FYStartDate + ((22-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 34
|
||||
|
||||
CASE WeekNo >= 18
|
||||
MonthNo = 5
|
||||
MonthStartDt = FYStartDate + ((18-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
CASE WeekNo >= 14
|
||||
MonthNo = 4
|
||||
MonthStartDt = FYStartDate + ((14-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
END CASE
|
||||
END
|
||||
|
||||
|
||||
IF QuarterNo = 3 THEN
|
||||
BEGIN CASE
|
||||
CASE WeekNo >= 35
|
||||
MonthNo = 9
|
||||
MonthStartDt = FYStartDate + ((35-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 34
|
||||
|
||||
CASE WeekNo >= 31
|
||||
MonthNo = 8
|
||||
MonthStartDt = FYStartDate + ((31-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
CASE WeekNo >= 27
|
||||
MonthNo = 7
|
||||
MonthStartDt = FYStartDate + ((27-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
END CASE
|
||||
END
|
||||
|
||||
|
||||
IF QuarterNo = 4 THEN
|
||||
BEGIN CASE
|
||||
CASE WeekNo >= 48
|
||||
MonthNo = 12
|
||||
MonthStartDt = FYStartDate + ((48-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 34
|
||||
|
||||
CASE WeekNo >= 44
|
||||
MonthNo = 11
|
||||
MonthStartDt = FYStartDate + ((44-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
CASE WeekNo >= 40
|
||||
MonthNo = 10
|
||||
MonthStartDt = FYStartDate + ((40-1) * 7)
|
||||
MonthEndDt = MonthStartDt + 27
|
||||
|
||||
END CASE
|
||||
END
|
||||
|
||||
|
||||
Result = MonthNo:@FM:OCONV(MonthStartDt,'D4/'):@FM:OCONV(MonthEndDt,'D4/'):@FM:CurrYear:'.':FMT(MonthNo,'R(0)#2')
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRFiscalWeek:
|
||||
* * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Always passed in OCONV'd format
|
||||
|
||||
IF NOT(ASSIGNED(DateIn)) THEN DateIn = ''
|
||||
IF DateIn = '' THEN RETURN
|
||||
|
||||
thisDateIn = ICONV(DateIn,'D')
|
||||
|
||||
IF thisDateIn = '' THEN RETURN ;* Bad date passed in
|
||||
|
||||
GOSUB IRFiscalYear
|
||||
|
||||
CurrYear = Result
|
||||
Result = ''
|
||||
|
||||
FYStartDate = XLATE('FISCAL_YR',CurrYear,1,'X')
|
||||
|
||||
Delta = thisDateIn - FYStartDate
|
||||
WeekNo = INT(Delta/7) + 1
|
||||
WeekStartDt = FYStartDate + ((WeekNo - 1) * 7)
|
||||
WeekEndDt = WeekStartDt + 6
|
||||
|
||||
Result = WeekNo:@FM:OCONV(WeekStartDt,'D4/'):@FM:OCONV(WeekEndDt,'D4/'):@FM:CurrYear:'.':FMT(WeekNo,'R(0)#2')
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRFiscalWeek2:
|
||||
* * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Always passed in OCONV'd format
|
||||
|
||||
IF NOT(ASSIGNED(DateIn)) THEN DateIn = ''
|
||||
IF DateIn = '' THEN RETURN
|
||||
|
||||
thisDateIn = ICONV(DateIn,'D')
|
||||
|
||||
IF thisDateIn = '' THEN RETURN ;* Bad date passed in
|
||||
|
||||
GOSUB IRFiscalYear
|
||||
|
||||
CurrYear = Result
|
||||
Result = ''
|
||||
|
||||
FYStartDate = XLATE('FISCAL_YR',CurrYear,1,'X') - 2
|
||||
|
||||
Delta = thisDateIn - FYStartDate
|
||||
WeekNo = INT(Delta/7) + 1
|
||||
WeekStartDt = (FYStartDate) + ((WeekNo - 1) * 7)
|
||||
WeekEndDt = WeekStartDt + 6
|
||||
|
||||
Result = WeekNo:@FM:OCONV(WeekStartDt,'D4/'):@FM:OCONV(WeekEndDt,'D4/'):@FM:CurrYear:'.':FMT(WeekNo,'R(0)#2')
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
DateAddMonths:
|
||||
* * * * * * *
|
||||
|
||||
DateIn = Parms[1,@RM] ;* Date passed in internal format
|
||||
Months = Parms[COL2()+1,@RM]
|
||||
|
||||
* Called from dictionary - don't throw any errors just return
|
||||
|
||||
IF DateIn = '' THEN RETURN
|
||||
IF Months = '' THEN RETURN
|
||||
|
||||
|
||||
IF NOT(NUM(DateIn)) THEN RETURN ;* Bad format on date
|
||||
IF NOT(NUM(Months)) THEN RETURN ;* Bad months parm
|
||||
|
||||
Result = DateIn + OCONV((Months*(365.25/12)),'MD0')
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRYearWeeks:
|
||||
* * * * * * *
|
||||
|
||||
IF NOT(Assigned(FiscalYear)) THEN
|
||||
FiscalYear = Parms[1,@RM]
|
||||
END
|
||||
|
||||
IF NOT(ASSIGNED(NoConvFlag)) THEN
|
||||
NoConvFlag = Parms[COL2()+1,@RM]
|
||||
END
|
||||
|
||||
IF NOT(NUM(FiscalYear)) = '' THEN RETURN ;* Bad format
|
||||
|
||||
IF FiscalYear = '' THEN RETURN
|
||||
|
||||
WeekNos = ''
|
||||
MonthNos = ''
|
||||
QtrNos = ''
|
||||
|
||||
YearRec = XLATE('FISCAL_YR',FiscalYear,'','X')
|
||||
|
||||
FYStartDt = YearRec<FISCAL_YR_START_DT$>
|
||||
FYWeeks = YearRec<FISCAL_YR_WEEKS_IN_YEAR$>
|
||||
|
||||
FYQtrKeys = YearRec<FISCAL_YR_FISCAL_QTR_KEY$>
|
||||
|
||||
fqCnt = COUNT(FYQtrKeys,@VM) + ( FYQtrKeys NE '' )
|
||||
|
||||
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
|
||||
WeekNos<1,WeekNo> = WeekNo
|
||||
WeekStartDt = FYStartDt + ((WeekNo - 1) * 7)
|
||||
WeekEndDt = WeekStartDt + 6
|
||||
|
||||
WeekStartDts<1,WeekNo> = WeekStartDt
|
||||
WeekEndDts<1,WeekNo> = WeekEndDt
|
||||
|
||||
BEGIN CASE
|
||||
CASE WeekNo <= 13 ; Qtr = 1
|
||||
CASE WeekNo <= 26 ; Qtr = 2
|
||||
CASE WeekNo <= 39 ; Qtr = 3
|
||||
CASE WeekNo <= 52 ; Qtr = 4
|
||||
CASE 1 ; Qtr = 5
|
||||
END CASE
|
||||
|
||||
IF WeekNo = 1 THEN MonthNos<1,WeekNo> = 1
|
||||
IF WeekNo = 5 THEN MonthNos<1,WeekNo> = 2
|
||||
IF WeekNo = 9 THEN MonthNos<1,WeekNo> = 3
|
||||
|
||||
IF WeekNo = 14 THEN MonthNos<1,WeekNo> = 4
|
||||
IF WeekNo = 18 THEN MonthNos<1,WeekNo> = 5
|
||||
IF WeekNo = 22 THEN MonthNos<1,WeekNo> = 6
|
||||
|
||||
IF WeekNo = 27 THEN MonthNos<1,WeekNo> = 7
|
||||
IF WeekNo = 31 THEN MonthNos<1,WeekNo> = 8
|
||||
IF WeekNo = 35 THEN MonthNos<1,WeekNo> = 9
|
||||
|
||||
IF WeekNo = 40 THEN MonthNos<1,WeekNo> = 10
|
||||
IF WeekNo = 44 THEN MonthNos<1,WeekNo> = 11
|
||||
|
||||
IF fqCnt = 4 THEN
|
||||
|
||||
IF FYWeeks = 53 THEN
|
||||
IF WeekNo = 49 THEN MonthNos<1,WeekNo> = 12 ;* This makes Month 11 5 weeks long (in addition to Month 12
|
||||
END ELSE
|
||||
IF WeekNo = 48 THEN MonthNos<1,WeekNo> = 12 ;* This makes Month 11 4 weeks long and Month 12 is 5 weeks
|
||||
END
|
||||
|
||||
END
|
||||
|
||||
IF fqCnt = 5 THEN
|
||||
|
||||
IF WeekNo = 48 THEN MonthNos<1,WeekNo> = 12
|
||||
|
||||
IF WeekNo = 53 THEN MonthNos<1,WeekNo> = 13
|
||||
IF WeekNo = 57 THEN MonthNos<1,WeekNo> = 14
|
||||
IF WeekNo = 61 THEN MonthNos<1,WeekNo> = 15
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
IF WeekStartDt = QtrStartDts<1,Qtr> THEN QtrNos<1,WeekNo> = Qtr
|
||||
|
||||
*Send_Dyn(WeekStartDt:' ':QtrStartDts<1,Qtr>:' ':Qtr)
|
||||
|
||||
NEXT WeekNo
|
||||
|
||||
IF NoConvFlag ELSE
|
||||
WeekStartDts = OCONV(WeekStartDts,'D4/')
|
||||
WeekEndDts = OCONV(WeekEndDts,'D4/')
|
||||
END
|
||||
|
||||
Result = WeekNos:@FM:WeekStartDts:@FM:WeekEndDts:@FM:MonthNos:@FM:QtrNos
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
IRYearMonths:
|
||||
* * * * * * *
|
||||
|
||||
IF NOT(Assigned(FiscalYear)) THEN
|
||||
FiscalYear = Parms[1,@RM]
|
||||
END
|
||||
|
||||
IF NOT(Assigned(MonthConvFlag)) THEN
|
||||
MonthConvFlag = Parms[COL2()+1,@RM]
|
||||
END
|
||||
|
||||
IF NOT(NUM(FiscalYear)) = '' THEN RETURN ;* Bad format
|
||||
|
||||
IF FiscalYear = '' THEN RETURN
|
||||
|
||||
MonthNos = ''
|
||||
MonthStartDts = ''
|
||||
MonthEndDts = ''
|
||||
|
||||
YearRec = XLATE('FISCAL_YR',FiscalYear,'','X')
|
||||
|
||||
FYStartDt = YearRec<FISCAL_YR_START_DT$>
|
||||
FYWeeks = YearRec<FISCAL_YR_WEEKS_IN_YEAR$>
|
||||
|
||||
FYQtrKeys = YearRec<FISCAL_YR_FISCAL_QTR_KEY$>
|
||||
|
||||
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<WeekNo> = 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<WeekNo>
|
||||
IF WeekNo = 5 THEN MonthStartDts<1,2> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 9 THEN MonthStartDts<1,3> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 14 THEN MonthStartDts<1,4> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 18 THEN MonthStartDts<1,5> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 22 THEN MonthStartDts<1,6> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 27 THEN MonthStartDts<1,7> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 31 THEN MonthStartDts<1,8> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 35 THEN MonthStartDts<1,9> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 40 THEN MonthStartDts<1,10> = WeekStartDts<WeekNo>
|
||||
IF WeekNo = 44 THEN MonthStartDts<1,11> = WeekStartDts<WeekNo>
|
||||
|
||||
IF FYWeeks = 53 THEN
|
||||
IF WeekNo = 49 THEN MonthStartDts<1,12> = WeekStartDts<WeekNo>
|
||||
END ELSE
|
||||
IF WeekNo = 48 THEN MonthStartDts<1,12> = WeekStartDts<WeekNo>
|
||||
END
|
||||
|
||||
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
|
||||
|
||||
IF MonthConvFlag NE 1 THEN
|
||||
MonthStartDts = OCONV(MonthStartDts,'D4/')
|
||||
MonthEndDts = OCONV(MonthEndDts,'D4/')
|
||||
END
|
||||
|
||||
Result = MonthNos:@FM:MonthStartDts:@FM:MonthEndDts
|
||||
|
||||
RETURN
|
||||
|
Reference in New Issue
Block a user