project QadFinancials > class BExchangeRate > method PreValidateComponentDateTill

Description

This method is used to fill in the valid end date with the right value


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BExchangeRate.PreValidateComponent


program code (program1/bexchangerate.p)

/* ========================================================== */
/* fill in the end date based on the previous or next records */
/* ========================================================== */
assign oiReturnStatus      = -98
       viLocalReturnStatus = 0.

<Q-4 run ExchangeRateBySmallerFromDate (Start) in BExchangeRate >
<Q-7 run ExchangeRateByGreaterFromDate (Start) in BExchangeRate >

ADDUPD_BLOCK:
DO:     
    for each bExchangeRate where
             bExchangeRate.tc_Status = "N":U or
             bExchangeRate.tc_Status = "C":U or
             /* S_BTS 2428 */
             bExchangeRate.tc_Status = "D":U 
             /* E_BTS 2428 */
             by bExchangeRate.tcFromCurrencyCode
             by bExchangeRate.ExchangeRateValidDateFrom:
        
        if available bCheckExchangeRate
        then release bCheckExchangeRate.
        
        /* Check if we can find a previous exchange rate in the instance */
        for last bCheckExchangeRate where
                 bCheckExchangeRate.SharedSet_ID              = bExchangeRate.SharedSet_ID        and
                 bCheckExchangeRate.FromCurrency_ID           = bExchangeRate.FromCurrency_ID     and
                 bCheckExchangeRate.ToCurrency_ID             = bExchangeRate.ToCurrency_ID       and
                 bCheckExchangeRate.ExchangeRateType_ID       = bExchangeRate.ExchangeRateType_ID and
                 bCheckExchangeRate.tc_Status                <> "D":U                             and
                 (bCheckExchangeRate.ExchangeRateValidDateFrom < bExchangeRate.ExchangeRateValidDateFrom and
                    if vtExchangeRatePrevDateFrom <> ? 
                    then bCheckExchangeRate.ExchangeRateValidDateFrom > vtExchangeRatePrevDateFrom
                    else true )        
                  use-index DateFromIndex:
        end.       
        
        /* assigning value temp variable to store the date from for first to be used when for first is used again*/
                 
        assign vtExchangeRatePrevDateFrom = bExchangeRate.ExchangeRateValidDateFrom - 1.

        /* Retrieve the previous record and update the till-period of that record */
        <Q-2 run ExchangeRateBySmallerFromDate (all) (Read) (Cache)
          (input bExchangeRate.ExchangeRateValidDateFrom, (ValidDateFrom)
           input bExchangeRate.FromCurrency_ID, (FromCurrencyId)
           input bExchangeRate.ToCurrency_ID, (ToCurrencyId)
           input bExchangeRate.ExchangeRateType_ID, (ExchangeRateTypeId)
           input viCompanyId, (CompanyId)
           output dataset tqExchangeRateBySmallerFromDate) in BExchangeRate >

        find last tqExchangeRateBySmallerFromDate where
                  tqExchangeRateBySmallerFromDate.tc_rowid <> bExchangeRate.tc_rowid no-error.
        
        /* If the previous exchange rate is in the instance, update the till date of that record */
        if (available bCheckExchangeRate and not available tqExchangeRateBySmallerFromDate) or
           (available bCheckExchangeRate and available tqExchangeRateBySmallerFromDate and
            bCheckExchangeRate.ExchangeRateValidDateFrom >= tqExchangeRateBySmallerFromDate.ttExchangeRateValidDateFrom)
        then do:
            assign vtDateTemp = bExchangeRate.ExchangeRateValidDateFrom - 1 no-error.
           
            
            if vtDateTemp <> ?
            then assign bCheckExchangeRate.ExchangeRateValidDateTill = vtDateTemp.
                       /* bCheckExchangeRate.tc_Status                 = "":U. (if bCheckExchangeRate.tc_Status = "":U
                                                                           then "":U
                                                                           else bCheckExchangeRate.tc_Status).*/
        end.
        else do:
            if available tqExchangeRateBySmallerFromDate
            then do:
                /* ================================== */
                /* update end date of previous record */
                /* ================================== */
                if not can-find(tExchangeRate where
                                tExchangeRate.ExchangeRate_ID = tqExchangeRateBySmallerFromDate.tiExchangeRate_ID)
                then do:
                    <M-3 run DataLoad
                       (input  '':U (icRowids), 
                        input  string(tqExchangeRateBySmallerFromDate.tiExchangeRate_ID) (icPkeys), 
                        input  '':U (icObjectIds), 
                        input  '' (icFreeform), 
                        input  true (ilKeepPrevious), 
                        output viFcReturnSuper (oiReturnStatus)) in BExchangeRate>
                    if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and viLocalReturnStatus = 0)
                    then assign viLocalReturnStatus = viFcReturnSuper.
                    
                    if viLocalReturnStatus < 0
                    then leave ADDUPD_BLOCK.
                end.
                find tExchangeRate where
                     tExchangeRate.ExchangeRate_ID = tqExchangeRateBySmallerFromDate.tiExchangeRate_ID
                     no-error.
                if not available tExchangeRate
                then do:
                    assign viLocalReturnStatus = -1
                           vcMessage      = trim(substitute(#T-9'The system cannot find the exchange rate based on its ID (&1).':255(1880)T-9#,string(tqExchangeRateBySmallerFromDate.tiExchangeRate_ID))).
                    <M-6 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-161':U (icFcMsgNumber),
                        input  '' (icFcExplanation),
                        input  '' (icFcIdentification),
                        input  '' (icFcContext),
                        output viFcReturnSuper (oiReturnStatus)) in BExchangeRate>
                    leave ADDUPD_BLOCK.
                end.
                 
                assign vtDateTemp = bExchangeRate.ExchangeRateValidDateFrom - 1 no-error.
                
                if vtDateTemp <> ?
                then assign tExchangeRate.ExchangeRateValidDateTill = vtDateTemp.
                            tExchangeRate.tc_Status                 = "C":U.
                   
                
            end. /* find last tqExchangeRateBySmallerFromDate update enddate of previous record */
        end.
        
       if available bCheckExchangeRate
       then release bCheckExchangeRate.
                
        /* Check if we can find the next exchange rate in the instance */
        for first bCheckExchangeRate where
                  bCheckExchangeRate.SharedSet_ID              = bExchangeRate.SharedSet_ID        and
                  bCheckExchangeRate.FromCurrency_ID           = bExchangeRate.FromCurrency_ID     and
                  bCheckExchangeRate.ToCurrency_ID             = bExchangeRate.ToCurrency_ID       and
                  bCheckExchangeRate.ExchangeRateType_ID       = bExchangeRate.ExchangeRateType_ID and
                  bCheckExchangeRate.tc_Status                <> "D":U                             and
                  bCheckExchangeRate.ExchangeRateValidDateFrom > bExchangeRate.ExchangeRateValidDateFrom
                  use-index DateFromIndex:
        end.       

        <Q-1 run ExchangeRateByGreaterFromDate (all) (Read) (Cache)
           (input bExchangeRate.ExchangeRateValidDateFrom, (ValidDateFrom)
            input ?, (FromCurrencyId)
            input ?, (ToCurrencyId)
            input ?, (ExchangeRateTypeId)
            input ?, (CompanyId)
            input bExchangeRate.tcFromCurrencyCode, (FromCurrencyCode)
            input bExchangeRate.tcToCurrencyCode, (ToCurrencyCode)
            input bExchangeRate.tcExchangeRateTypeCode, (ExchangeRateTypeCode)
            input bExchangeRate.SharedSet_ID, (SharedSetId)
            output dataset tqExchangeRateByGreaterFromDate) in BExchangeRate >
        find first tqExchangeRateByGreaterFromDate no-error.

        /* If the previous exchange rate is in the instance, update the till date of that record */
        if (available bCheckExchangeRate and not available tqExchangeRateByGreaterFromDate) or
           (available bCheckExchangeRate and available tqExchangeRateByGreaterFromDate and
            bCheckExchangeRate.ExchangeRateValidDateFrom <= tqExchangeRateByGreaterFromDate.ttExchangeRateValidDateFrom)
        then do:
          
            assign vtDateTemp = bCheckExchangeRate.ExchangeRateValidDateFrom - 1 no-error.
           
            if vtDateTemp <> ?
            then assign bExchangeRate.ExchangeRateValidDateTill = vtDateTemp.
                      /*  bExchangeRate.tc_Status                 = "":U. (if bCheckExchangeRate.tc_Status = "":U
                                                                           then "":U
                                                                           else bCheckExchangeRate.tc_Status).*/
        end.
        else do:
            if available tqExchangeRateByGreaterFromDate
            then do:
              
                assign vtDateTemp = tqExchangeRateByGreaterFromDate.ttExchangeRateValidDateFrom - 1 no-error.
                
                if bExchangeRate.tc_Status = "N":U  /*BTS 2428*/
                then do: 
                    if vtDateTemp <> ?
                    then assign bExchangeRate.ExchangeRateValidDateTill = vtDateTemp. 
                end. 
    
                /* S_BTS 2428 */
                if bExchangeRate.tc_Status = "D":U and available tExchangeRate
                then tExchangeRate.ExchangeRateValidDateTill = vtDateTemp.
                /* E_BTS 2428 */
            end.
            else do:
                
              
                /* only assign the Till Date a biggest value when the exchange rate type allow so */
                <Q-10 run ExchangeRateTypeById (all) (Read) (NoCache)
                   (input bExchangeRate.ExchangeRateType_ID, (ExchangeRateTypeId)
                    output dataset tqExchangeRateTypeById) in BExchangeRateType >
                find first tqExchangeRateTypeById no-error.
                if (not available tqExchangeRateTypeById)                                  or 
                   (available tqExchangeRateTypeById and 
                              tqExchangeRateTypeById.tlExchangeRateTypeIsTillDate = false) or
                   (available tqExchangeRateTypeById and 
                              tqExchangeRateTypeById.tlExchangeRateTypeIsTillDate = true and
                              bExchangeRate.ExchangeRateValidDateTill             = ?)
                then do:
                  
                    assign bExchangeRate.ExchangeRateValidDateTill = vtBiggestDate.
                    /* S_BTS 2428 */
                    if bExchangeRate.tc_Status = "D":U and available tExchangeRate
                    then tExchangeRate.ExchangeRateValidDateTill = vtBiggestDate.
                    
                    
                end. /* end of if (not */
                /* E_BTS 2428 */
            end.
        end.
        /* assign the ExchangeRateValidDateTill to a value if it is still unknown value */
        if bExchangeRate.ExchangeRateValidDateTill = ?
        then assign bExchangeRate.ExchangeRateValidDateTill = vtBiggestDate.
    end.   
end. /* end of the DO block */

<Q-5 run ExchangeRateBySmallerFromDate (Stop) in BExchangeRate >
<Q-8 run ExchangeRateByGreaterFromDate (Stop) in BExchangeRate >

assign oiReturnStatus = viLocalReturnStatus.