project QadFinancials > class BBudget > method AdditionalUpdValBudgetWBSItemRoster

Description

This method will check the realtion BudgetWBS-BudgetWBSItem and
will check the uniqueness of BudgetWBSRosterDate.


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BBudget.AdditionalUpdates


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.