| iiBudgetID | input | integer | Budget ID |
| icIntervalType | input | character | IntervalType: W: Week M: Month |
| itStartDate | input | date | StartDate |
| iiOccurences | input | integer | Occurences |
| tNewBudgetPeriod | output | temp-table | NewBudgetPeriod: temp-table containing the newly created period records |
| oiReturnStatus | output | integer | Return status of the method. |
/* ================================================================================================= */
/* Note; in case iiBudgetID = 0 then this method is called from the Form for the BudgetCopy-activity */
/* This means only the output-table will be filled but no actions on the instance-data are performed */
/* ================================================================================================= */
/* ===================================================================================================== */
/* Reset the output temp-table */
/* ===================================================================================================== */
empty temp-table tNewBudgetPeriod.
if iiBudgetID = ? then assign iiBudgetID = 0.
/* ========================= */
/* Validations */
/* Find the tBudget record */
/* ========================= */
if icIntervalType <> "W":U and
icIntervalType <> "M":U and
icIntervalType <> "Q":U /* This set correspond with the list in method GetLists */
then do :
assign oiReturnStatus = -3
vcMessage = trim(substitute(#T-11'The interval type must be &1 (&2), &3 (&4), or &5 (&6).':255(652)t-11#,trim(#T-12'Week':20(653)t-12#),"'W'":U,trim(#T-13'Month':20(654)t-13#),"'M'":U,trim(#T-14'Quarter':20(655)t-14#),"'Q'":U)).
<M-1 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-447':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
Return.
end. /* if icIntervalType <> "W":U and */
if iiOccurences = 0 or iiOccurences = ?
then do :
assign oiReturnStatus = -3
vcMessage = trim(#T-15'You must specify the number of budget periods to create, based on the starting date.':255(656)t-15#).
<M-6 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-449':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
Return.
end. /* if icIntervalType <> "W":U and */
else do :
if iiOccurences > 54
then do :
assign oiReturnStatus = -3
vcMessage = trim(substitute(#T-16'The maximum number of occurrences is 54 (&1).':255(657)T-16#,string(iiOccurences))).
<M-7 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-450':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
Return.
end. /* if icIntervalType <> "W":U and */
end. /* not if icIntervalType <> "W":U and */
if iiBudgetID <> 0
then do :
find tbudget where
tBudget.Budget_ID = iiBudgetID
no-lock no-error.
if not available tBudget
then do :
assign oiReturnStatus = -3
vcMessage = trim(substitute(#T-17'Cannot find the budget &1.':255(658)t-17#,string(iiBudgetID))).
<M-3 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-448':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
Return.
end. /* if not available tBudget */
end. /* if iiBudgetID <> 0 */
/* ============================================================================================ */
/* Addtional validation; intervals Month and Quarter does not allow a start-date with date > 28 */
/* ============================================================================================ */
if (icIntervalType = "M":U or icIntervalType = "Q":U) and
day(itStartDate) > 28
then do :
assign oiReturnStatus = -3
vcMessage = trim(substitute(#T-18'For this interval type, the maximum value for the day of the starting date is 28.':255(659)t-18#,day(itStartDate))).
<M-10 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-452':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
Return.
end. /* if icIntervalType = "M":U or */
/* ===================================================================================================== */
/* Reset the output temp-table */
/* Create records in our instance and mark them with tc_status = NN (is reset further on in this method) */
/* ===================================================================================================== */
case icIntervalType :
when "W":U
then do :
assign vtPreviousTillDate = itStartDate - 1.
do viCounter = 1 to iiOccurences by 1 :
if iiBudgetID <> 0 and
(not can-find(first bBudgetPeriod where
bBudgetPeriod.BudgetPeriodFromDate = vtPreviousTillDate + 1 and
bBudgetPeriod.BudgetPeriodTillDate = vtPreviousTillDate + 7 and
bBudgetPeriod.tc_ParentRowid = tBudget.tc_Rowid and
bBudgetPeriod.tc_Status <> 'D':U))
then do :
<M-8 run AddDetailLine (input 'BudgetPeriod':U (icTable),
input (if iiBudgetID = 0 then '':U else tBudget.tc_Rowid) (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
assign tBudgetPeriod.BudgetPeriodFromDate = vtPreviousTillDate + 1
tBudgetPeriod.BudgetPeriodTillDate = vtPreviousTillDate + 7
tBudgetPeriod.BudgetPeriodCode = trim(#T-19'Week':10(660)t-19#) + " ":U + string(viCounter)
vtPreviousTillDate = tBudgetPeriod.BudgetPeriodTillDate.
create tNewBudgetPeriod.
buffer-copy tBudgetPeriod to tNewBudgetPeriod.
end. /* if iiBudgetID <> 0 */
if iiBudgetID = 0
then do:
create tNewBudgetPeriod.
assign tNewBudgetPeriod.BudgetPeriodFromDate = vtPreviousTillDate + 1
tNewBudgetPeriod.BudgetPeriodTillDate = vtPreviousTillDate + 7
tNewBudgetPeriod.BudgetPeriodCode = trim(#T-20'Week':10(660)t-20#) + " ":U + string(viCounter)
vtPreviousTillDate = tNewBudgetPeriod.BudgetPeriodTillDate
tNewBudgetPeriod.tc_Rowid = tNewBudgetPeriod.BudgetPeriodCode + string(tNewBudgetPeriod.BudgetPeriodTillDate)
tNewBudgetPeriod.tc_Status = "N":U.
end. /* if iiBudgetID = 0 */
end. /* do viCounter */
end. /* when "W":U */
when "M":U or
when "Q":U
then do :
assign vtNextFromDate = itStartDate
viMonthJumps = (if icIntervalType = "M":U then 1 else 3).
do viCounter = 1 to iiOccurences by 1 :
if iiBudgetID <> 0 and
(not can-find(first bBudgetPeriod where
bBudgetPeriod.BudgetPeriodFromDate <= vtNextFromDate and
bBudgetPeriod.BudgetPeriodTillDate >= vtNextFromDate and
bBudgetPeriod.tc_ParentRowid = tBudget.tc_Rowid and
bBudgetPeriod.tc_Status <> 'D':U)) /* Check if fromdate is within an existing period */
then do :
<M-9 run AddDetailLine (input 'BudgetPeriod':U (icTable),
input (if iiBudgetID = 0 then '':U else tBudget.tc_Rowid) (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
assign tBudgetPeriod.BudgetPeriodFromDate = vtNextFromDate
vtNextFromDate = date(IF month(tBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps > 12
THEN month(tBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps - 12
ELSE month(tBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps,
day(tBudgetPeriod.BudgetPeriodFromDate),
if month(tBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps > 12
then year(tBudgetPeriod.BudgetPeriodFromDate) + 1
else year(tBudgetPeriod.BudgetPeriodFromDate))
tBudgetPeriod.BudgetPeriodTillDate = vtNextFromDate - 1
viPeriodInYear = (if month(tBudgetPeriod.BudgetPeriodFromDate) <= viMonthJumps
then 1
else viPeriodInYear + 1)
tBudgetPeriod.BudgetPeriodCode = (if icIntervalType = "M":U
then trim(#T-21'Month':10(661)t-21#)
else trim(#T-22'Quarter':10(662)t-22#)) + " ":U +
string(year(tBudgetPeriod.BudgetPeriodFromDate),"9999":U) + "/":U + string(viPeriodInYear,"99":U).
create tNewBudgetPeriod.
buffer-copy tBudgetPeriod to tNewBudgetPeriod.
end. /* if iiBudgetID <> 0 */
if iiBudgetID = 0
then do:
create tNewBudgetPeriod.
assign tNewBudgetPeriod.BudgetPeriodFromDate = vtNextFromDate
vtNextFromDate = date(IF month(tNewBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps > 12
THEN month(tNewBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps - 12
ELSE month(tNewBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps,
day(tNewBudgetPeriod.BudgetPeriodFromDate),
if month(tNewBudgetPeriod.BudgetPeriodFromDate) + viMonthJumps > 12
then year(tNewBudgetPeriod.BudgetPeriodFromDate) + 1
else year(tNewBudgetPeriod.BudgetPeriodFromDate))
tNewBudgetPeriod.BudgetPeriodTillDate = vtNextFromDate - 1
viPeriodInYear = (if month(tNewBudgetPeriod.BudgetPeriodFromDate) <= viMonthJumps
then 1
else viPeriodInYear + 1)
tNewBudgetPeriod.BudgetPeriodCode = (if icIntervalType = "M":U
then trim(#T-23'Month':10(661)t-23#)
else trim(#T-24'Quarter':10(662)t-24#)) + " ":U +
string(year(tNewBudgetPeriod.BudgetPeriodFromDate),"9999":U) + "/":U + string(viPeriodInYear,"99":U)
tNewBudgetPeriod.tc_Rowid = tNewBudgetPeriod.BudgetPeriodCode + string(tNewBudgetPeriod.BudgetPeriodTillDate)
tNewBudgetPeriod.tc_Status = "N":U.
end. /* if iiBudgetID = 0 */
end. /* do viCounter */
end. /* when "M":U or "Q":U */
end case.