project QadFinancials > class BConsolid > method ValidateComponentPost


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BConsolid.ValidateComponent


program code (program4/bconsolid.p)

/* CA776127 - Method needs only to be run when new or modify */
find first t_sConsolid where
           t_sConsolid.tc_Status <> "D":U
           no-error.
if not available t_sConsolid
then return.

assign oiReturnStatus      = -98
       viLocalReturnStatus = 0.

CONSOLIDBLOCK:
for each t_sConsolid where
         t_sConsolid.tc_Status <> "D":U:

    /* ============================= */
    /* Get consolidation cycle       */
    /* ============================= */
    <Q-1 run ConsolidCycleByCompanyID (all) (Read) (NoCache)
       (input t_sConsolid.ConsolidCompany_ID, (CompanyId)
        output dataset tqConsolidCycleByCompanyID) in BConsolidCycle>

    find tqConsolidCycleByCompanyID where
         tqConsolidCycleByCompanyID.tiCompany_ID = t_sConsolid.ConsolidCompany_ID
         no-lock no-error.
    if not available tqConsolidCycleByCompanyID
    then do:
        assign vcMessage       = trim(#T-111'You first must set up the consolidation cycle for this entity.':255(999890358)T-111#)  + chr(10) + 
                                 trim(substitute(#T-253'Entity ID: &1, Entity Code: &2':255(538814005)T-253#,trim(string(t_sConsolid.ConsolidCompany_ID)),trim(t_sConsolid.tcConsolidCompanyCode)))
               viLocalReturnStatus = -1.
        <M-2 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-8913':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolid>    
        next CONSOLIDBLOCK.
    end. /* if not available tqConsolidCycleByCompanyID */
    
    if tqConsolidCycleByCompanyID.tcConsolidCycleStatus <> {&CONSOLIDCYCLESTATUS-OPERATIONAL}
    then do:        
        assign vcMessage       = trim(substitute(#T-110'You can only create a consolidation record for consolidation cycles that have status &1.':200(999890343)T-110#, trim({&CONSOLIDCYCLESTATUS-OPERATIONAL-TR}))) + chr(10) +            
                                 trim(substitute(#T-68'Entity ID: &1, Entity Code: &2.':213(999890175)T-68#, trim(string(t_sConsolid.ConsolidCompany_ID)), trim(t_sConsolid.tcConsolidCompanyCode) ))
               viLocalReturnStatus = -1.
        <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-8914':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolid>    
        leave CONSOLIDBLOCK.
    end. /* Consolidation cycle should be operational */

    /* ================================================================================== */
    /* Run ValidateComponentSub1 (Since ValidateComponent will become too big (30K limit) */
    /* ================================================================================== */
    <M-69 run ValidateComponentPostSub1  (output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and viLocalReturnStatus = 0)
    then assign viLocalReturnStatus = viFcReturnSuper.

    /* ================= */
    /* Retrieve mappings */
    /* ================= */
    <Q-83 run ConsolidCycleCompanyByCycle (all) (Read) (NoCache)
       (input tqConsolidCycleByCompanyID.tiConsolidCycle_ID, (ConsolidCycleID)
        input t_sConsolid.ConsolidCompany_ID, (CompanyId)
        output dataset tqConsolidCycleCompanyByCycle) in BConsolidCycle>

    find tqConsolidCycleCompanyByCycle where
         tqConsolidCycleCompanyByCycle.tiConsolidCycle_ID = tqConsolidCycleCompanyByCycle.tiConsolidCycle_ID and
         tqConsolidCycleCompanyByCycle.tiSourceCompany_ID = t_sConsolid.SourceCompany_ID
         no-error.
    if not available tqConsolidCycleCompanyByCycle
    then do:
        assign vcMessage           = trim(substitute(#T-85'Could not find Consolidation Cycle entity for this source entity (&1).':255(999890423)T-85#, trim(t_sConsolid.tcSourceCompanyCode) ))
               viLocalReturnStatus = -1.
        <M-86 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  'tConsolid.tcSourceCompanyCode':U (icFieldName), 
            input  t_sConsolid.tcSourceCompanyCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sConsolid.tc_Rowid (icRowid), 
            input  'QadFin-8933':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    end. /* if not available tqConsolidCycleCompanyByCycle */

    <Q-82 run COACrossRefDetByIDParentID (all) (Read) (NoCache)
       (input tqConsolidCycleCompanyByCycle.tiCOACrossRef_ID, (COACrossRefID)
        input ?, (COACrossRefDetID)
        input tqConsolidCycleByCompanyID.tiCompany_ID, (CompanyId)
        output dataset tqCOACrossRefDetByIDParentID) in BCOACrossRef>

    /* ======================================================= */
    /* All GL's should be cross-referenced (for type SEPERATE) */
    /* ======================================================= */
    if tqConsolidCycleCompanyByCycle.tcCOACrossRefType = {&COACROSSREFTYPE-SEPERATE}
    then do:
        /* ================================================================ */
        /* All GL Records from the source domain should be cross referenced */
        /* ================================================================ */
         <Q-9 run GLAnalysisSettings (all) (Read) (NoCache)
            (input t_sConsolid.SourceCompany_ID, (CompanyId)
             input '', (GLCode)
             input ?, (GLID)
             output dataset tqGLAnalysisSettings) in BGL>

        assign vcListMissingGL = "":U.
        for each tqGLAnalysisSettings:

            if not can-find (first tqCOACrossRefDetByIDParentID where
                                   tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID          = tqConsolidCycleCompanyByCycle.tiCOACrossRef_ID and 
                                   tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom = tqGLAnalysisSettings.tcGLCode)
            then do:
                if not can-find(first tqCOACrossRefDetByIDParentID where
                                      tqGLAnalysisSettings.tcGLCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom or
                                     (tqGLAnalysisSettings.tcGLCode >= tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom and
                                      tqGLAnalysisSettings.tcGLCode <= tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLTo))
                then assign vcListMissingGL = vcListMissingGL + tqGLAnalysisSettings.tcGLCode + ", ":U.
            end.                
        end. /* for each tqGLAnalysisSettings: */

        if vcListMissingGL <> "":U
        then do:
            assign vcListMissingGL     = substring(vcListMissingGL, 1, length(vcListMissingGL, "CHARACTER") - 2, "CHARACTER")
                   vcMessage           = trim(#T-79'GL Cross-reference mappings are not complete.':200(999890162)T-79#)                                               + chr(10) +
                                         trim(substitute(#T-80'COA Cross Reference: &1':255(999890163)T-80#, trim(tqConsolidCycleCompanyByCycle.tcCOACrossRefCode) )) + chr(10) +
                                         trim(substitute(#T-81'Missing GL Accounts: &1':255(999890164)T-81#, trim(vcListMissingGL) ))
                   viLocalReturnStatus = -1.
            <M-78 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sConsolid.tc_Rowid (icRowid), 
                input  'QadFin-8932':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolid>
        end. /*  if vcListMissingGL <> "":U */

        /* ====================================================================================== */
        /* Check if analysis is needed - we can only do this when the target account is specified */
        /* ====================================================================================== */
        assign vcListGLWithDivision   = "":U
               vcListGLWithCostCentre = "":U
               vcListGLWithProject    = "":U.

        if tqConsolidCycleByCompanyID.tlConsolidCycleIsWithDiv     = false or
           tqConsolidCycleByCompanyID.tlConsolidCycleIsWithCostCtr = false or
           tqConsolidCycleByCompanyID.tlConsolidCycleIsWithProject = false
        then do:

            /* ============================== */
            /* All GL Records from the Target */
            /* ============================== */
            <Q-22 run GLAnalysisSettings (all) (Read) (NoCache)
               (input tqConsolidCycleByCompanyID.tiCompany_ID, (CompanyId)
                input '', (GLCode)
                input ?, (GLID)
                output dataset tqGLAnalysisSettings) in BGL>

            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = tqConsolidCycleCompanyByCycle.tiCOACrossRef_ID and
                     tqCOACrossRefDetByIDParentID.tiTargetGL_ID    <> 0 and
                     tqCOACrossRefDetByIDParentID.tiTargetGL_ID    <> ?:
                     

                find tqGLAnalysisSettings where
                     tqGLAnalysisSettings.tiGL_ID = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
                     no-error.
                if available tqGLAnalysisSettings
                then do:
                    if tqConsolidCycleByCompanyID.tlConsolidCycleIsWithDiv = false and
                       tqGLAnalysisSettings.tlGLIsDivisionAccount                      = true
                    then assign vcListGLWithDivision = vcListGLWithDivision + tqGLAnalysisSettings.tcGLCode + ", ":U.

                    if tqConsolidCycleByCompanyID.tlConsolidCycleIsWithCostCtr = false and
                       tqGLAnalysisSettings.tlGLIsCostCentreAccount                        = true
                    then assign vcListGLWithCostCentre = vcListGLWithCostCentre + tqGLAnalysisSettings.tcGLCode + ", ":U.

                    if tqConsolidCycleByCompanyID.tlConsolidCycleIsWithProject = false and
                       tqGLAnalysisSettings.tlGLIsProjectAccount                           = true
                    then assign vcListGLWithProject = vcListGLWithProject + tqGLAnalysisSettings.tcGLCode + ", ":U.   

                end. /* if available tqGLAnalysisSettings */     

            end. /* for each tqCOACrossRefDetByIDParentID where */

        end. /* if t_sConsolidCycle.ConsolidCycleIsWithDiv = false or */

        if vcListGLWithDivision <> "":U
        then do:
            assign vcListMissingGL    = substring(vcListGLWithDivision, 1, length(vcListGLWithDivision, "CHARACTER") - 2, "CHARACTER")
                   vcMessage          = trim(#T-100'If Sub-Account is not included, consolidated GLs with Sub-Account enabled will use default values defined in the Consolidation Cycle.':200(999890165)T-100#)                                         + chr(10) +
                                        trim(substitute(#T-101'COA Cross Reference: &1':255(999890163)T-101#, trim(tqConsolidCycleCompanyByCycle.tcCOACrossRefCode) )) + chr(10) +
                                        trim(substitute(#T-102'GL Accounts with Sub-Account: &1':255(999890166)T-102#, trim(vcListGLWithDivision) )).

            if viLocalReturnStatus = 0 then viLocalReturnStatus = 1.
            <M-97 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'W':U (icType), 
                input  3 (iiSeverity), 
                input  t_sConsolid.tc_Rowid (icRowid), 
                input  'QadFin-8934':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolid>
        end. /* if vcListGLWithDivision <> "":U */

        if vcListGLWithCostCentre <> "":U
        then do:
            assign vcListMissingGL     = substring(vcListGLWithCostCentre, 1, length(vcListGLWithCostCentre, "CHARACTER") - 2, "CHARACTER")
                   vcMessage           = trim(#T-103'If Cost Center is not included, consolidated GLs with Cost Centers enabled will use default values defined in the Consolidation Cycle.':200(999890167)T-103#)                                         + chr(10) +
                                         trim(substitute(#T-104'COA Cross Reference: &1':255(999890163)T-104#, trim(tqConsolidCycleCompanyByCycle.tcCOACrossRefCode) )) + chr(10) +
                                         trim(substitute(#T-105'GL Accounts with Cost Center: &1':255(999890171)T-105#, trim(vcListGLWithCostCentre) )).
            if viLocalReturnStatus = 0 then viLocalReturnStatus = 1.
            <M-98 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'W':U (icType), 
                input  3 (iiSeverity), 
                input  t_sConsolid.tc_Rowid (icRowid), 
                input  'QadFin-8935':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolid>
        end. /* if vcListGLWithCostCentre <> "":U */

        if vcListGLWithProject <> "":U
        then do:
            assign vcListMissingGL     = substring(vcListGLWithProject, 1, length(vcListGLWithProject, "CHARACTER") - 2, "CHARACTER")
                   vcMessage           = trim(#T-106'If Projects is not included, consolidated GLs with Projects enabled will use default values defined in the Consolidation Cycle.':200(999890169)T-106#)                                         + chr(10) +
                                         trim(substitute(#T-107'COA Cross Reference: &1':255(999890163)T-107#, trim(tqConsolidCycleCompanyByCycle.tcCOACrossRefCode) )) + chr(10) +
                                         trim(substitute(#T-108'GL Accounts with Project: &1':255(999890170)T-108#, trim(vcListGLWithProject) )).
            if viLocalReturnStatus = 0 then viLocalReturnStatus = 1.
            <M-99 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'W':U (icType), 
                input  3 (iiSeverity), 
                input  t_sConsolid.tc_Rowid (icRowid), 
                input  'QadFin-8936':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolid>
        end. /* if vcListGLWithProject <> "":U */
    end. /* if tqCOACrossRefByAll.tcCOACrossRefType = {&COACROSSREFTYPE-SEPERATE} */

    /* Retrieve the mapped periods */
    <Q-114 run ConsolidPeriodXrefByPeriod (all) (Read) (NoCache)
       (input t_sConsolid.SourceCompany_ID, (CompanyId)
        input t_sConsolid.ConsolidCompany_ID, (ConsolidCompanyID)
        input '':U, (ConsolidCompanyCode)
        input ?, (SourceYear)
        input ?, (SourcePeriod)
        input ?, (TargetYear)
        input ?, (TargetPeriod)
        output dataset tqConsolidPeriodXrefByPeriod) in BConsolidPeriodXref>

    /* Retrieve periods to consolidate in Consolidation Company */
    <Q-112 run PeriodByPeriodRange (all) (Read) (NoCache)
       (input t_sConsolid.ConsolidCompany_ID, (CompanyId)
        input (t_sConsolid.tiFromPeriodYear * 100) + t_sConsolid.tiFromPeriodPeriod, (FromYearPeriod)
        input (t_sConsolid.tiToPeriodYear * 100) + t_sConsolid.tiToPeriodPeriod, (ToYearPeriod)
        output dataset tqPeriodByPeriodRange) in BPeriod >

    for each tqPeriodByPeriodRange where
             tqPeriodByPeriodRange.tiPeriodYearPeriod >= (t_sConsolid.tiFromPeriodYear * 100) + t_sConsolid.tiFromPeriodPeriod and
             tqPeriodByPeriodRange.tiPeriodYearPeriod <= (t_sConsolid.tiToPeriodYear   * 100) + t_sConsolid.tiToPeriodPeriod
             no-lock:

        /* ============================================================== */
        /* The selected companies should be X-reffed (ConsolidPeriodXref) */
        /* ============================================================== */
        find first tqConsolidPeriodXrefByPeriod where
                   tqConsolidPeriodXrefByPeriod.tiCompany_ID              = t_sConsolid.SourceCompany_ID        and
                   tqConsolidPeriodXrefByPeriod.tiConsolidationCompany_ID = t_sConsolid.ConsolidCompany_ID      and
                   tqConsolidPeriodXrefByPeriod.tiConsolidPeriodYear      = tqPeriodByPeriodRange.tiPeriodYear  and
                   tqConsolidPeriodXrefByPeriod.tiConsolidPeriodPeriod    = tqPeriodByPeriodRange.tiPeriodPeriod
                   no-error.
        if not available tqConsolidPeriodXrefByPeriod
        then do:
            assign vcMessage  = trim(substitute(#T-116'No GL period cross-reference found for GL period &1/&2 and source entity &3.':200(1345)T-116#, trim(string(tqPeriodByPeriodRange.tiPeriodYear)), trim(string(tqPeriodByPeriodRange.tiPeriodPeriod)), trim(t_sConsolid.tcSourceCompanyCode) ))
                   viLocalReturnStatus = -1.
            <M-115 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sConsolid.tc_Rowid (icRowid), 
                input  'QadFin-9077':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolid>
        end. /* if not available tqConsolidPeriodXrefByPeriod */
        else do:
            /* =========================================================== */
            /* The selected periods should be closed in the source company */
            /* =========================================================== */
            if  tqConsolidPeriodXrefByPeriod.tlPeriodIsPostingGLAllowed = true
            then do:
                assign vcMessage  = trim(substitute(#T-49'Source GL period &1/&2 is not closed for entity &3.':200(1344)T-49#, trim(string(tqPeriodByPeriodRange.tiPeriodYear)), trim(string(tqPeriodByPeriodRange.tiPeriodPeriod)), trim(t_sConsolid.tcSourceCompanyCode) ))
                       viLocalReturnStatus = -1.
                <M-27 run SetMessage
                   (input  vcMessage (icMessage), 
                    input  '':U (icArguments), 
                    input  '':U (icFieldName), 
                    input  '':U (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  t_sConsolid.tc_Rowid (icRowid), 
                    input  'QadFin-8918':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BConsolid>
            end. /* if  tqConsolidPeriodXrefByPeriod.tlPeriodIsPostingGLAllowed = true */
        end. /* else do: */
    end. /* for each tqPeriodByPeriodRange where */

    /* ================================================================== */
    /* The selected To-period should be open in the consolidation company */
    /* ================================================================== */
    <Q-29 run PeriodByYearPeriod (all) (Read) (NoCache)
       (input t_sConsolid.ConsolidCompany_ID, (CompanyId)
        input t_sConsolid.tiToPeriodYear, (PeriodYear)
        input t_sConsolid.tiToPeriodPeriod, (PeriodPeriod)
        input 0, (PeriodId)
        output dataset tqPeriodByYearPeriod) in BPeriod >
    find tqPeriodByYearPeriod where
         tqPeriodByYearPeriod.tiCompany_ID   = t_sConsolid.ConsolidCompany_ID and
         tqPeriodByYearPeriod.tiPeriodYear   = t_sConsolid.tiToPeriodYear     and
         tqPeriodByYearPeriod.tiPeriodPeriod = t_sConsolid.tiToPeriodPeriod
         no-lock no-error.
    if not available tqPeriodByYearPeriod
    then do:
        assign vcMessage           = trim(substitute(#T-51'The consolidation period (&1/&2) specified is not defined in the system.':200(63349)T-51#, trim(string(t_sConsolid.tiToPeriodYear)), trim(string(t_sConsolid.tiToPeriodPeriod)) ))
               viLocalReturnStatus = -1.
        <M-30 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sConsolid.tc_Rowid (icRowid), 
            input  'QadFin-8920':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    end. /* if not available tqPeriodByYearPeriod */
    else do:
        if tqPeriodByYearPeriod.tcPeriodStatus <> {&PERIODSTATUS-OPEN}
        then do:
            assign vcMessage           = trim(substitute(#T-52'The consolidation period (&1/&2) specified is not an open period.':200(63350)T-52#, trim(string(t_sConsolid.tiToPeriodYear)), trim(string(t_sConsolid.tiToPeriodPeriod)) ))
                   viLocalReturnStatus = -1.
            <M-31 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sConsolid.tc_Rowid (icRowid), 
                input  'QadFin-8921':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolid>
        end. /* if tqPeriodByYearPeriod.tcPeriodStatus <> {&PERIODSTATUS-OPEN} */
    end. /* else do: */
end. /* for each t_sConsolid where */

assign oiReturnStatus = viLocalReturnStatus.