project QadFinancials > class BBudget > method ApiGetBudgetWBSWithFiguresCalculate
Description
This sub-method of ApiGetBudgetWBSWithFiguresSub perform some additional assignments to the View-tables that are the output of it's parent method.
This method was created because the parent-method could not contain all code.
Parameters
iiBudgetID | input | integer | Budget ID |
iiBudgetVersionID | input | integer | BudgetVersionID |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program9/bbudget.p)
/* ============================================================================ */
/* Add the super-level node; In case no super-level node exists, we will: */
/* - Add a super-level-node (tViewBudgetWBS and tViewBudgetWBSFigures) */
/* - Sommate all actual-figures and all budget-figures of all nodes of level 1 */
/* (the other amount will be assigned later on in this method) */
/* ============================================================================ */
ADDSUPERNODEBLOCK : DO :
if can-find (first tViewBudgetWBSFigures where
tViewBudgetWBSFigures.tiBudgetID = iiBudgetID and
tViewBudgetWBSFigures.tiBudgetWBSID = -9) or
can-find (first tViewBudgetWBS where
tViewBudgetWBS.tiBudgetWBSID = -9)
then Leave ADDSUPERNODEBLOCK.
find first btViewBudgetWBSFigures where
btViewBudgetWBSFigures.tiBudgetID = iiBudgetID
no-lock no-error.
if not available btViewBudgetWBSFigures
then leave ADDSUPERNODEBLOCK.
find btViewBudgetWBS where
btViewBudgetWBS.tiBudgetWBSID = btViewBudgetWBSFigures.tiBudgetWBSID
no-lock no-error.
if not available btViewBudgetWBS
then leave ADDSUPERNODEBLOCK.
create tViewBudgetWBS.
assign tViewBudgetWBS.tcBudgetCode = btViewBudgetWBS.tcBudgetCode
tViewBudgetWBS.tcBudgetWBSCode = btViewBudgetWBS.tcBudgetCode
tViewBudgetWBS.tcBudgetWBSCostType = {&BUDGETWBSCOSTTYPE-DIRECT}
tViewBudgetWBS.tcBudgetWBSStatus = {&BUDGETWBSSTATUS-ACTIVE}
tViewBudgetWBS.tiBudgetWBSID = 0
tViewBudgetWBS.tiParentBudgetWBSID = -9
tViewBudgetWBS.tcBudgetWBSTcRowid = string(tViewBudgetWBS.tiParentBudgetWBSID)
tViewBudgetWBS.tcCurrencyCode = "":U
tViewBudgetWBS.tcFDSType = "":U
tViewBudgetWBS.tcUnitCode = "":U.
create tViewBudgetWBSFigures.
assign tViewBudgetWBSFigures.tiBudgetWBSID = tViewBudgetWBS.tiBudgetWBSID
tViewBudgetWBSFigures.tiBudgetID = btViewBudgetWBSFigures.tiBudgetID
tViewBudgetWBSFigures.tiParentBudgetWBSID = tViewBudgetWBS.tiParentBudgetWBSID
tViewBudgetWBSFigures.tcCurrencyCode = "":U
tViewBudgetWBSFigures.tcUnitCode = "":U.
for each btViewBudgetWBSFigures where
btViewBudgetWBSFigures.tiParentBudgetWBSID = 0 :
assign tViewBudgetWBSFigures.tdBudgetCostTC = tViewBudgetWBSFigures.tdBudgetCostTC + btViewBudgetWBSFigures.tdBudgetCostTC
tViewBudgetWBSFigures.tdBudgetRevenueTC = tViewBudgetWBSFigures.tdBudgetRevenueTC + btViewBudgetWBSFigures.tdBudgetRevenueTC
tViewBudgetWBSFigures.tdBudgetQTY = tViewBudgetWBSFigures.tdBudgetQTY + btViewBudgetWBSFigures.tdBudgetQTY
tViewBudgetWBSFigures.tdPMCostTC = tViewBudgetWBSFigures.tdPMCostTC + btViewBudgetWBSFigures.tdPMCostTC
tViewBudgetWBSFigures.tdPMRevenueTC = tViewBudgetWBSFigures.tdPMRevenueTC + btViewBudgetWBSFigures.tdPMRevenueTC
tViewBudgetWBSFigures.tdPMQTY = tViewBudgetWBSFigures.tdPMQTY + btViewBudgetWBSFigures.tdPMQTY
tViewBudgetWBSFigures.tdControlCostTC = tViewBudgetWBSFigures.tdControlCostTC + btViewBudgetWBSFigures.tdControlCostTC
tViewBudgetWBSFigures.tdControlRevenueTC = tViewBudgetWBSFigures.tdControlRevenueTC + btViewBudgetWBSFigures.tdControlRevenueTC
tViewBudgetWBSFigures.tdControlQTY = tViewBudgetWBSFigures.tdControlQTY + btViewBudgetWBSFigures.tdControlQTY
tViewBudgetWBSFigures.tdCommitCostTC = tViewBudgetWBSFigures.tdCommitCostTC + btViewBudgetWBSFigures.tdCommitCostTC
tViewBudgetWBSFigures.tdCommitQTY = tViewBudgetWBSFigures.tdCommitQTY + btViewBudgetWBSFigures.tdCommitQTY
tViewBudgetWBSFigures.tdActualRevenueTC = tViewBudgetWBSFigures.tdActualRevenueTC + btViewBudgetWBSFigures.tdActualRevenueTC
tViewBudgetWBSFigures.tdActualCostTC = tViewBudgetWBSFigures.tdActualCostTC + btViewBudgetWBSFigures.tdActualCostTC
tViewBudgetWBSFigures.tdActualQTY = tViewBudgetWBSFigures.tdActualQTY + btViewBudgetWBSFigures.tdActualQTY.
end. /* for each btViewBudgetWBSFigures where */
end. /* ADDSUPERNODEBLOCK */
/* ================================================================================ */
/* Assign the calculated fields: */
/* tdActualMarginTC, tdActualPercentage, tdCompletionPercentage and tdProductionTC */
/* tdBudgetMarginTC, tdBudgetRevenueTC, tdPMMarginTC, tdPMPercentage, */
/* tdControlMarginTC, tdControlRevenueTC */
/* ================================================================================ */
for each tViewBudgetWBSFigures where
tViewBudgetWBSFigures.tiBudgetID = iiBudgetID :
assign tViewBudgetWBSFigures.tdCompletionPercentage = (if tViewBudgetWBSFigures.tdControlCostTC = 0 and
tViewBudgetWBSFigures.tdPMCostTC = 0
then 0
else 100 * (tViewBudgetWBSFigures.tdActualCostTC - tViewBudgetWBSFigures.tdCommitCostTC) /
(if tViewBudgetWBSFigures.tdControlCostTC <> 0 then tViewBudgetWBSFigures.tdControlCostTC else tViewBudgetWBSFigures.tdPMCostTC))
tViewBudgetWBSFigures.tdProductionTC = if tViewBudgetWBSFigures.tdControlRevenueTC <> 0 then
<M-7 RoundAmount
(input tViewBudgetWBSFigures.tdControlRevenueTC (idUnroundedAmount),
input ? (iiCurrencyID),
input tViewBudgetWBSFigures.tcCurrencyCode (icCurrencyCode)) in business>
else
<M-8 RoundAmount
(input tViewBudgetWBSFigures.tdPMRevenueTC * tViewBudgetWBSFigures.tdCompletionPercentage / 100 (idUnroundedAmount),
input ? (iiCurrencyID),
input tViewBudgetWBSFigures.tcCurrencyCode (icCurrencyCode)) in business>.
/* round((if tViewBudgetWBSFigures.tdControlRevenueTC <> 0 then tViewBudgetWBSFigures.tdControlRevenueTC else tViewBudgetWBSFigures.tdPMRevenueTC) * tViewBudgetWBSFigures.tdCompletionPercentage / 100 , 2). */
assign tViewBudgetWBSFigures.tdActualMarginTC = tViewBudgetWBSFigures.tdActualRevenueTC - tViewBudgetWBSFigures.tdActualCostTC
tViewBudgetWBSFigures.tdActualPercentage = (if tViewBudgetWBSFigures.tdActualRevenueTC = 0
then 0
else 100 * tViewBudgetWBSFigures.tdActualMarginTC / tViewBudgetWBSFigures.tdActualRevenueTC)
tViewBudgetWBSFigures.tdBudgetMarginTC = tViewBudgetWBSFigures.tdBudgetRevenueTC - tViewBudgetWBSFigures.tdBudgetCostTC
tViewBudgetWBSFigures.tdBudgetPercentage = (if tViewBudgetWBSFigures.tdBudgetRevenueTC = 0
then 0
else 100 * tViewBudgetWBSFigures.tdBudgetMarginTC / tViewBudgetWBSFigures.tdBudgetRevenueTC)
tViewBudgetWBSFigures.tdPMMarginTC = tViewBudgetWBSFigures.tdPMRevenueTC - tViewBudgetWBSFigures.tdPMCostTC
tViewBudgetWBSFigures.tdPMPercentage = (if tViewBudgetWBSFigures.tdPMRevenueTC = 0
then 0
else 100 * tViewBudgetWBSFigures.tdPMMarginTC / tViewBudgetWBSFigures.tdPMRevenueTC)
tViewBudgetWBSFigures.tdControlMarginTC = tViewBudgetWBSFigures.tdControlRevenueTC - tViewBudgetWBSFigures.tdControlCostTC
tViewBudgetWBSFigures.tdControlPercentage = (if tViewBudgetWBSFigures.tdControlRevenueTC = 0
then 0
else 100 * tViewBudgetWBSFigures.tdControlMarginTC / tViewBudgetWBSFigures.tdControlRevenueTC)
no-error.
end. /* for each tViewBudgetWBSFigures where */
/* ====================================================================================================== */
/* For the top-node and only in case there is no RevRecog, the POC should be calculated using the formula */
/* as in all other nodes, but the figures in the formula should be the sum of only the DirectCost-nodes. */
/* ====================================================================================================== */
if vlFiguresReadInDB = false
then do :
for each tViewBudgetWBSFigures where
tViewBudgetWBSFigures.tiBudgetID = iiBudgetID,
each tViewBudgetWBS where
tViewBudgetWBS.tiBudgetWBSID = tViewBudgetWBSFigures.tiBudgetWBSID and
tViewBudgetWBS.tcBudgetWBSCostType = {&BUDGETWBSCOSTTYPE-DIRECT} :
assign vdControlCostTC = vdControlCostTC + tViewBudgetWBSFigures.tdControlCostTC
vdPMCostTC = vdPMCostTC + tViewBudgetWBSFigures.tdPMCostTC
vdActualCostTC = vdActualCostTC + tViewBudgetWBSFigures.tdActualCostTC
vdCommitCostTC = vdCommitCostTC + tViewBudgetWBSFigures.tdCommitCostTC.
end. /* for each tViewBudgetWBSFigures where */
find first tViewBudgetWBSFigures where
tViewBudgetWBSFigures.tiBudgetID = iiBudgetID and
tViewBudgetWBSFigures.tiBudgetWBSID = 0 /* Parent-node */
no-error.
if available tViewBudgetWBSFigures
then assign tViewBudgetWBSFigures.tdCompletionPercentage =
(if vdControlCostTC = 0 and
vdPMCostTC = 0
then 0
else 100 * (vdActualCostTC - vdCommitCostTC) / (if vdControlCostTC <> 0 then vdControlCostTC else vdPMCostTC)).
end. /* if vlFiguresReadInDB = false */
/* ========================== */
/* Clear query-table contents */
/* ========================== */
empty temp-table tqBudgetByBudgetIDCodeStatus.
empty temp-table tqProjectById.
empty temp-table tqBudgetVersionByBudgetIDStat.