project QadFinancials > class BBudget > method AdditionalUpdValBudgetWBSItemRoster
Description
This method will check the realtion BudgetWBS-BudgetWBSItem and
will check the uniqueness of BudgetWBSRosterDate.
Parameters
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program4/bbudget.p)
/* =============================================================================== */
/* BudgetWBSItem-information is only allowwed for types Cost and Cost&Revenue */
/* BudgetWSBRosterDate should be unique within the BudgetWBS. */
/* For project-budgts, the roster-dates should fit the start- and end-date of the */
/* project, for G/L and CC-budgets the roster-dates should fit the budget-periods */
/* =============================================================================== */
for each tBudget where
tBudget.tc_Status <> "D":U
no-lock :
/* ============================================================ */
/* Project: Get the project start and end-date: */
/* GL/CC: Get the start and enddate of the budgetperiods */
/* ============================================================ */
if tBudget.Project_ID <> 0 and
tBudget.Project_ID <> ?
then do :
assign vtReferenceStartDate = ?
vtReferenceEndDate = ?.
<Q-6 run ProjectPrim (all) (Read) (NoCache)
(input ?, (CompanyId)
input tBudget.Project_ID, (ProjectID)
input ?, (ProjectCode)
output dataset tqProjectPrim) in BProject >
find first tqProjectPrim no-lock no-error.
if available tqProjectPrim
then do :
<Q-5 run ProjectByCode (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input tqProjectPrim.tcProjectCode, (ProjectCode)
output dataset tqProjectByCode) in BProject >
find first tqProjectByCode no-lock no-error.
if available tqProjectByCode
then assign vtReferenceStartDate = tqProjectByCode.ttProjectStartDate
vtReferenceEndDate = tqProjectByCode.ttProjectEndDate.
end. /* if available tqProjectPrim */
end. /* if (tBudget.Project_ID <> 0 and */
else do :
assign vtReferenceStartDate = ?
vtReferenceEndDate = ?.
for each tBudgetPeriod where
tBudgetPeriod.tc_ParentRowid = tBudget.tc_Rowid and
tBudgetPeriod.tc_Status <> "D":U
no-lock :
if vtReferenceStartDate = ? or
vtReferenceStartDate > tBudgetPeriod.BudgetPeriodFromDate
then assign vtReferenceStartDate = tBudgetPeriod.BudgetPeriodFromDate.
if vtReferenceEndDate = ? or
vtReferenceEndDate < tBudgetPeriod.BudgetPeriodTillDate
then assign vtReferenceEndDate = tBudgetPeriod.BudgetPeriodTillDate.
end. /* for each tBudgetPeriod */
end. /* NOT if (tBudget.Project_ID <> 0 and */
/* ============================================================ */
/* Go thrgouh all BudgetWBS of the Budget */
/* ============================================================ */
for each tBudgetWBS where
tBudgetWBS.tc_Status <> "D":U and
tBudgetWBS.tc_ParentRowid = tBudget.tc_Rowid and
tBudgetWBS.BudgetWBSCostRevenue = {&BUDGETWBSCOSTREVENUE-REVENUE}
no-lock :
assign vcBudgetWBSRosterDates = "":U.
/* ============================================================ */
/* Go thrgouh all BudgetWBSRosters of the BudgetWBS */
/* ============================================================ */
for each tBudgetWBSRoster where
tBudgetWBSRoster.tc_ParentRowid = tBudgetWBS.tc_Rowid and
(tBudgetWBSRoster.tc_Status = "C":U or
tBudgetWBSRoster.tc_Status = "N":U)
no-lock :
/* Check for unique RosterDates */
if lookup(string(tBudgetWBSRoster.BudgetWBSRosterDate),vcBudgetWBSRosterDates,",":U) > 1
then do :
assign oiReturnStatus = -1
vcDatetemp = <M-94 DisplayDate (input (tBudgetWBSRoster.BudgetWBSRosterDate) (itDate)) in BBudget>.
vcMessage = trim(substitute(#T-10'The roster date (&1) should be unique within the budget topic (&2) of the budget (&3).':255(435)t-10#,vcDatetemp,tBudgetWBS.BudgetWBSCode,tBudget.BudgetCode)).
<M-2 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tBudgetWBSRoster.BudgetWBSRosterDate':U (icFieldName),
input vcDatetemp (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input tBudgetWBSRoster.tc_Rowid (icRowid),
input 'QADFIN-1114':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
end. /* if lookup(string(tBudgetWBSRoster.BudgetWBSRosterDate),vcBudgetWBSRosterDates,",":U) > 1 */
assign vcBudgetWBSRosterDates = vcBudgetWBSRosterDates + ",":U + string(tBudgetWBSRoster.BudgetWBSRosterDate).
/* Check the RosterDate gainst the BudgetPeriods of agains the project start- and enddate */
if vtReferenceStartDate > tBudgetWBSRoster.BudgetWBSRosterDate or
vtReferenceEndDate < tBudgetWBSRoster.BudgetWBSRosterDate
then do :
assign oiReturnStatus = -1.
assign vcDatetemp = <M-1 DisplayDate (input vtReferenceStartDate (itDate)) in BBudget>
vcDatetemp1 = <M-28 DisplayDate (input (tBudgetWBSRoster.BudgetWBSRosterDate) (itDate)) in BBudget>
vcDatetemp2 = <M-21 DisplayDate (input vtReferenceEndDate (itDate)) in BBudget>.
if tBudget.Project_ID <> 0 and
tBudget.Project_ID <> ?
then assign vcMessage = trim(substitute(#T-11'The roster date (&1) should be between the start date (&2) and the end date (&3) of the project.':255(436)T-11#,string(vcDatetemp1),vcDatetemp,vcDatetemp2)).
else assign vcMessage = trim(substitute(#T-12'The roster date (&1) should be between the first start date of the budget period (&2) and the last end date of the budget period (&3).':255(437)T-12#,vcDatetemp1,vcDatetemp,vcDatetemp2)).
<M-7 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tBudgetWBSRoster.BudgetWBSRosterDate':U (icFieldName),
input vcDatetemp1 (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input tBudgetWBSRoster.tc_Rowid (icRowid),
input 'QADFIN-1172':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
end. /* if vtReferenceStartDate > tBudgetWBSRoster.BudgetWBSRosterDate or */
end. /* for each tBudgetWBSRoster where */
end. /* for each tBudgetWBS where */
/* ================================================================= */
/* All childs of deleted BudgetWBS-records shoudl be deleted as well */
/* ================================================================= */
for each tBudgetWBS where
tBudgetWBS.tc_Status = "D":U and
tBudgetWBS.tc_ParentRowid = tBudget.tc_Rowid
no-lock :
find first btBudgetWBS where
btBudgetWBS.tc_Status <> "D":U and
btBudgetWBS.tc_ParentRowid = tBudget.tc_Rowid and
btBudgetWBS.ParentBudgetWBS_ID = tBudgetWBS.BudgetWBS_ID
no-lock no-error.
if available btBudgetWBS
then do :
assign oiReturnStatus = -1
vcMessage = trim(substitute(#T-13'The budget WBS (&1) has a child node (&2) and cannot be deleted.':255(438)t-13#,tBudgetWBS.BudgetWBSCode,btBudgetWBS.BudgetWBSCode)) + chr(10) +
trim(substitute(#T-14'Budget: &1.':255(439)T-14#,tBudget.BudgetCode)) + chr(10) +
trim(substitute(#T-15'Removed budget WBS: &1.':255(440)T-15#,tBudgetWBS.BudgetWBSCode)) + chr(10) +
trim(substitute(#T-16'Child Budget WBS: &1.':255(441)T-16#,btBudgetWBS.BudgetWBSCode)).
<M-8 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input 'tBudgetWBS.BudgetWBSCode':U (icFieldName),
input tBudgetWBS.BudgetWBSCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input tBudgetWBS.tc_Rowid (icRowid),
input 'QADFIN-1320':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBudget>
end. /* if available btBudgetWBS */
end. /* for each tBudgetWBS where */
end. /* for each tBudget */
if oiReturnStatus < 0 then return.