project QadFinancials > class BExchangeRate > method PreValidateComponentDateTill
Description
This method is used to fill in the valid end date with the right value
Parameters
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
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.