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


iiBudgetIDinputintegerBudget ID
iiBudgetVersionIDinputintegerBudgetVersionID
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BBudget.ApiGetBudgetWBSWithFigures


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.