project QadFinancials > class BConsolidPeriodXref > method ValidateComponent

Description

Write here all tests on database update (new / modify / delete) that cannot be coded with a validation mask.
The type of update can be found in tc_status (N/C/D).
If you find incorrect data, you must write an entry in tFcMessages (using SetMessage) and set the return status of this method to either +1 or -1.
Return status +1 = data will still be accepted.
Return status -1 = data will not be accepted.
This method is run from SetPublicTables, before transferring the received data into the class temp-tables.


Parameters


oiReturnStatusoutputinteger


Internal usage


unused


program code (program/bconsolidperiodxref.p)

assign oiReturnStatus = -98.

/*=============================================================================================*/
/* Place all (Consolidation)Companies in a temp-table for faster access when filling           */
/* read-only RKBF ConsolidationCompany_ID in instance temp-table.                              */
/*=============================================================================================*/
<Q-15 run CompanyPrim (all) (Read) (NoCache)
   (input ?, (LookupCompanyId)
    input ?, (CompanyCode)
    output dataset tqCompanyPrim) in BCompany >

/*=============================================================================================*/
/* Manually fill read-only RKBFs (ConsolidationCompany_ID and ConsolidationPeriod_ID)          */
/*=============================================================================================*/
for each t_sConsolidPeriodXref:
    /* Fill ConsolidationCompany_ID */
    find first tqCompanyPrim where
               tqCompanyPrim.tcCompanyCode = t_sConsolidPeriodXref.tcConsolidCompanyCode
               no-lock no-error.
    if not available(tqCompanyPrim)
    then do:
        assign vcConsPerXrefMsg = substitute(#T-25'Consolidation entity &1 not found.':200(1363)t-25#,
                                             trim(t_sConsolidPeriodXref.tcConsolidCompanyCode))
               oiReturnStatus = -1.
        <M-16 run SetMessage
           (input  trim(vcConsPerXrefMsg) (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'QADFIN-2286':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        return.
    end.
    else do:
        assign t_sConsolidPeriodXref.ConsolidationCompany_ID = tqCompanyPrim.tiCompany_ID.
    end.

    /* Fill ConsolidationPeriod_ID */
    <Q-18 run PeriodPrim (all) (Read) (NoCache)
       (input t_sConsolidPeriodXref.ConsolidationCompany_ID, (CompanyId)
        input ?, (PeriodId)
        input t_sConsolidPeriodXref.tiConsolidPeriodYear, (PeriodYear)
        input t_sConsolidPeriodXref.tiConsolidPeriodPeriod, (PeriodPeriod)
        output dataset tqPeriodPrim) in BPeriod >
    find first tqPeriodPrim where
               tqPeriodPrim.tiCompany_ID   = t_sConsolidPeriodXref.ConsolidationCompany_ID and
               tqPeriodPrim.tiPeriodYear   = t_sConsolidPeriodXref.tiConsolidPeriodYear    and
               tqPeriodPrim.tiPeriodPeriod = t_sConsolidPeriodXref.tiConsolidPeriodPeriod
               no-lock no-error.
    if not available(tqPeriodPrim)
    then do:
        assign vcConsPerXrefMsg = substitute(#T-26'Consolidation period (&1/&2) is not defined in the consolidation entity (&3).':200(1385)t-26#,
                                  trim(string(t_sConsolidPeriodXref.tiConsolidPeriodYear)),
                                  trim(string(t_sConsolidPeriodXref.tiConsolidPeriodPeriod)),
                                  trim(string(t_sConsolidPeriodXref.tcConsolidCompanyCode)))
               oiReturnStatus = -1.
        <M-19 run SetMessage
           (input  trim(vcConsPerXrefMsg) (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'QADFIN-2287':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        next.
    end.
    else do:
        assign t_sConsolidPeriodXref.ConsolidationPeriod_ID = tqPeriodPrim.tiPeriod_ID.
    end.
end.

empty temp-table tqCompanyPrim.
empty temp-table tqPeriodPrim.

/*=============================================================================================*/
/* No point in doing further validation when Consolidation Company or Consolidation Period(s)  */
/* do not exist.                                                                               */
/*=============================================================================================*/
if (oiReturnStatus < 0 and oiReturnStatus <> -98)
then return.

<ANCESTOR-CODE>

for each t_sConsolidPeriodXref:

    /*==========================================================================================*/
    /* Verify that Consolidation Company has a Consolidation Cycle record                       */
    /*==========================================================================================*/
     <Q-24 assign vlFcQueryRecordsAvailable = ConsolidCycleByCompanyID (NoCache)
        (input t_sConsolidPeriodXref.ConsolidationCompany_ID, (CompanyId)) in BConsolidCycle >
     if (vlFcQueryRecordsAvailable <> true)
     then do:
        assign vcConsPerXrefMsg = substitute(#T-27'The consolidation entity &1 has no consolidation cycle.':200(1366)t-27#,
                                             trim(t_sConsolidPeriodXref.tcConsolidCompanyCode))
               oiReturnStatus = -1.
        <M-23 run SetMessage
           (input  trim(vcConsPerXrefMsg) (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  ? (icRowid), 
            input  'QADFIN-2411':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        return.
    end.

    /*==========================================================================================*/
    /* Source Company must differ from Consolidation Company.                                   */
    /*==========================================================================================*/
    if (t_sConsolidPeriodXref.ConsolidationCompany_ID = viCompanyId)
    then do:
        assign vcConsPerXrefMsg = substitute(#T-28'The consolidation entity must match the source entity.':200(1367)t-28#)
               oiReturnStatus = -1.
        <M-1 run SetMessage
           (input  trim(vcConsPerXrefMsg) (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sConsolidPeriodXref.tc_Rowid (icRowid), 
            input  'QADFIN-2269':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        return.
    end.
end.

for each t_sConsolidPeriodXref where
         t_sConsolidPeriodXref.tc_Status = 'C':U OR
         t_sConsolidPeriodXref.tc_Status = 'N':U:
    /*================================================================================== */
    /* Start and End dates of the selected Periods should be the same                    */
    /* in the Source Company and the Consolidation Company.                              */
    /*================================================================================== */

    /* Get the Source Period */
    <Q-3 run PeriodByYearPeriod (all) (Read) (NoCache)
       (input viCompanyId, (CompanyId)
        input t_sConsolidPeriodXref.tiPeriodYear, (PeriodYear)
        input t_sConsolidPeriodXref.tiPeriodPeriod, (PeriodPeriod)
        input ?, (PeriodId)
        output dataset tqPeriodByYearPeriod) in BPeriod >
    find first tqPeriodByYearPeriod no-lock no-error.
    if not available(tqPeriodByYearPeriod)
    then do:
        assign vcConsPerXrefMsg = substitute(#T-31'Period &1/&2 is not defined in the source entity.':100(65133)t-31#,
                                             trim(string(t_sConsolidPeriodXref.tiPeriodYear)),
                                             trim(string(t_sConsolidPeriodXref.tiPeriodPeriod)))
               oiReturnStatus = -1.
        <M-11 run SetMessage
           (input  trim(vcConsPerXrefMsg) (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sConsolidPeriodXref.ConsolidPeriodXref_ID (icRowid), 
            input  'QADFIN-2272':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        next.
    end.
    else do:
        assign viPeriodYear      = tqPeriodByYearPeriod.tiPeriodYear
               viPeriodPeriod    = tqPeriodByYearPeriod.tiPeriodPeriod
               vtPeriodStartDate = tqPeriodByYearPeriod.ttPeriodStartDate
               vtPeriodEndDate   = tqPeriodByYearPeriod.ttPeriodEndDate.
    end.

    /* Get the Consolidation Period */
    <Q-5 run PeriodByYearPeriod (all) (Read) (NoCache)
       (input t_sConsolidPeriodXref.ConsolidationCompany_ID, (CompanyId)
        input t_sConsolidPeriodXref.tiConsolidPeriodYear, (PeriodYear)
        input t_sConsolidPeriodXref.tiConsolidPeriodPeriod, (PeriodPeriod)
        input ?, (PeriodId)
        output dataset tqPeriodByYearPeriod) in BPeriod >
    find first tqPeriodByYearPeriod where
               tqPeriodByYearPeriod.tiCompany_ID   = t_sConsolidPeriodXref.ConsolidationCompany_ID and
               tqPeriodByYearPeriod.tiPeriodYear   = t_sConsolidPeriodXref.tiConsolidPeriodYear    and
               tqPeriodByYearPeriod.tiPeriodPeriod = t_sConsolidPeriodXref.tiConsolidPeriodPeriod
               no-lock no-error.
    if not available(tqPeriodByYearPeriod)
    then do:
        assign vcConsPerXrefMsg = substitute(#T-29'Consolidation period &1/&2 is not defined in the consolidation entity.':200(1386)t-29#,
                                  trim(string(t_sConsolidPeriodXref.tiConsolidPeriodYear)),
                                  trim(string(t_sConsolidPeriodXref.tiConsolidPeriodPeriod)))
               oiReturnStatus = -1.
        <M-12 run SetMessage
           (input  trim(vcConsPerXrefMsg) (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sConsolidPeriodXref.ConsolidPeriodXref_ID (icRowid), 
            input  'QADFIN-2273':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        next.
    end.
    else do:
        /*==========================================================================================*/
        /* Start and End dates of Source Period must fall between                                   */
        /* Start and End dates of Consolidation Period.                                             */
        /*==========================================================================================*/
        if (vtPeriodStartDate < tqPeriodByYearPeriod.ttPeriodStartDate  or
            vtPeriodStartDate > tqPeriodByYearPeriod.ttPeriodEndDate    or
            vtPeriodEndDate   < tqPeriodByYearPeriod.ttPeriodStartDate  or
            vtPeriodEndDate   > tqPeriodByYearPeriod.ttPeriodEndDate)
        then do:
            assign vcConsPerXrefMsg = substitute(#T-30'Starting and end date of the source period (&1/&2) must fall between starting and end date of the consolidation period (&3/&4).':200(1387)T-30#,
                                      trim(string(viPeriodYear)),
                                      trim(string(viPeriodPeriod)),
                                      trim(string(tqPeriodByYearPeriod.tiPeriodYear)),
                                      trim(string(tqPeriodByYearPeriod.tiPeriodPeriod))).
            if (oiReturnStatus >= 0)
            then assign oiReturnStatus = -1.
            <M-7 run SetMessage
               (input  trim(vcConsPerXrefMsg) (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  '':U (icRowid), 
                input  'QADFIN-2270':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BConsolidPeriodXref>
        end.
    end.
end.

if oiReturnStatus = -98
then oiReturnStatus = 0.