project QadFinancials > class BDInvoice > method ApiStdMaintainTTCalcAmounts
Description
This method is a submethod of ApiStdMaintainTT.
This method calculates the lc, cc and balance amounts. Also the Is Open flag and the status will be updated.
Parameters
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program9/bdinvoice.p)
assign tApiDInvoice.DInvoiceRateScale = 1.
if tApiDInvoice.DInvoiceCurrency_ID = viCompanyLCId or
tApiDInvoice.tcCurrencyCode = vcCompanyLC
then assign tApiDInvoice.DInvoiceExchangeRate = 1
tApiDInvoice.DInvoiceRateScale = 1
tApiDInvoice.DInvoiceOriginalDebitLC = tApiDInvoice.DInvoiceOriginalDebitTC
tApiDInvoice.DInvoiceOriginalCreditLC = tApiDInvoice.DInvoiceOriginalCreditTC.
else
if (tApiDInvoice.DInvoiceOriginalCreditLC = 0 or tApiDInvoice.DInvoiceOriginalCreditLC = ?) and
(tApiDInvoice.DInvoiceOriginalDebitLC = 0 or tApiDInvoice.DInvoiceOriginalDebitLC = ?)
then do :
<M-78 run GetExchangeRate
(input viCompanyId (iiCompanyID),
input tApiDInvoice.DInvoiceCurrency_ID (iiFromCurrencyID),
input if tApiDInvoice.DInvoiceCurrency_ID = 0 OR tApiDInvoice.DInvoiceCurrency_ID = ? then tApiDInvoice.tcCurrencyCode else '':U (icFromCurrencyCode),
input viCompanyLCId (iiToCurrencyID),
input ? (icToCurrencyCode),
input ? (iiExchangeRateTypeID),
input {&EXCHANGERATETYPE-ACCOUNTING} (icExchangeRateTypeCode),
input tApiDInvoice.DInvoicePostingDate (itValidityDate),
output tApiDInvoice.DInvoiceExchangeRate (odExchangeRate),
output tApiDInvoice.DInvoiceRateScale (odExchangeScaleFactor),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
assign tApiDInvoice.DInvoiceOriginalDebitLC = <M-3 RoundAmount
(input tApiDInvoice.DInvoiceOriginalDebitTC * tApiDInvoice.DInvoiceExchangeRate * tApiDInvoice.DInvoiceRateScale (idUnroundedAmount),
input viCompanyLCId (iiCurrencyID),
input vcCompanyLC (icCurrencyCode)) in BApplicationProperty>
tApiDInvoice.DInvoiceOriginalCreditLC = <M-4 RoundAmount
(input tApiDInvoice.DInvoiceOriginalCreditTC * tApiDInvoice.DInvoiceExchangeRate * tApiDInvoice.DInvoiceRateScale (idUnroundedAmount),
input viCompanyLCId (iiCurrencyID),
input vcCompanyLC (icCurrencyCode)) in BApplicationProperty>.
end.
else do:
if ((tApiDInvoice.DInvoiceOriginalDebitLC <> 0 and tApiDInvoice.DInvoiceOriginalDebitLC <> ?) or
(tApiDInvoice.DInvoiceOriginalCreditLC <> 0 and tApiDInvoice.DInvoiceOriginalCreditLC <> ?)) and
((tApiDInvoice.DInvoiceOriginalDebitTC <> 0 and tApiDInvoice.DInvoiceOriginalDebitTC <> ?) or
(tApiDInvoice.DInvoiceOriginalCreditTC <> 0 and tApiDInvoice.DInvoiceOriginalCreditTC <> ?))
then assign tApiDInvoice.DInvoiceRateScale = 1
tApiDInvoice.DInvoiceExchangeRate =
((if tApiDInvoice.DInvoiceOriginalDebitLC = ? then 0 else tApiDInvoice.DInvoiceOriginalDebitLC) -
(if tApiDInvoice.DInvoiceOriginalCreditLC = ? then 0 else tApiDInvoice.DInvoiceOriginalCreditLC))
/
((if tApiDInvoice.DInvoiceOriginalDebitTC = ? then 0 else tApiDInvoice.DInvoiceOriginalDebitTC) -
(if tApiDInvoice.DInvoiceOriginalCreditTC = ? then 0 else tApiDInvoice.DInvoiceOriginalCreditTC)) no-error.
end.
if tApiDInvoice.DInvoiceRateScale = 0 then assign tApiDInvoice.DInvoiceRateScale = 1.
if viCompanyCCId <> 0 and viCompanyCCId <> ?
then do:
if tApiDInvoice.tcCurrencyCode = vcCompanyCC
then assign tApiDInvoice.DInvoiceOriginalDebitCC = tApiDInvoice.DInvoiceOriginalDebitTC
tApiDInvoice.DInvoiceOriginalCreditCC = tApiDInvoice.DInvoiceOriginalCreditTC.
else if vlDomainIsStatutory = false
then assign tApiDInvoice.DInvoiceOriginalDebitCC = tApiDInvoice.DInvoiceOriginalDebitLC
tApiDInvoice.DInvoiceOriginalCreditCC = tApiDInvoice.DInvoiceOriginalCreditLC.
else if ((tApiDInvoice.DInvoiceOriginalDebitCC <> 0 and tApiDInvoice.DInvoiceOriginalDebitCC <> ?) or
(tApiDInvoice.DInvoiceOriginalCreditCC <> 0 and tApiDInvoice.DInvoiceOriginalCreditCC <> ?)) and
((tApiDInvoice.DInvoiceOriginalDebitTC <> 0 and tApiDInvoice.DInvoiceOriginalDebitTC <> ?) or
(tApiDInvoice.DInvoiceOriginalCreditTC <> 0 and tApiDInvoice.DInvoiceOriginalCreditTC <> ?))
then do:
assign tApiDInvoice.DInvoiceCCScale = 1
tApiDInvoice.DInvoiceCCRate =
((if tApiDInvoice.DInvoiceOriginalDebitCC = ? then 0 else tApiDInvoice.DInvoiceOriginalDebitCC) -
(if tApiDInvoice.DInvoiceOriginalCreditCC = ? then 0 else tApiDInvoice.DInvoiceOriginalCreditCC))
/
((if tApiDInvoice.DInvoiceOriginalDebitTC = ? then 0 else tApiDInvoice.DInvoiceOriginalDebitTC) -
(if tApiDInvoice.DInvoiceOriginalCreditTC = ? then 0 else tApiDInvoice.DInvoiceOriginalCreditTC)) no-error.
end.
else do:
<M-83 run GetExchangeRate
(input viCompanyId (iiCompanyID),
input ? (iiFromCurrencyID),
input tApiDInvoice.tcCurrencyCode (icFromCurrencyCode),
input viCompanyCCId (iiToCurrencyID),
input ? (icToCurrencyCode),
input ? (iiExchangeRateTypeID),
input {&EXCHANGERATETYPE-STATUTORY} (icExchangeRateTypeCode),
input tApiDInvoice.DInvoicePostingDate (itValidityDate),
output vdDInvoiceExchangeRate (odExchangeRate),
output vdDInvoiceExchangeRateScale (odExchangeScaleFactor),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
<M-30 run CheckExternalInvoiceApiCC
(input tApiDInvoice.tc_Rowid (icApiInvoiceRowId),
input-output vdDInvoiceExchangeRate (bdExchangeRate),
input-output vdDInvoiceExchangeRateScale (bdRateScale),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or
(viFcReturnSuper > 0 and
oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
assign tApiDInvoice.DInvoiceCCScale = vdDInvoiceExchangeRateScale
tApiDInvoice.DInvoiceCCRate = vdDInvoiceExchangeRate
tApiDInvoice.DInvoiceOriginalDebitCC = <M-81 RoundAmount
(input tApiDInvoice.DInvoiceOriginalDebitTC * vdDInvoiceExchangeRate * vdDInvoiceExchangeRateScale (idUnroundedAmount),
input viCompanyCCId (iiCurrencyID),
input vcCompanyCC (icCurrencyCode)) in BApplicationProperty>
tApiDInvoice.DInvoiceOriginalCreditCC = <M-86 RoundAmount
(input tApiDInvoice.DInvoiceOriginalCreditTC * vdDInvoiceExchangeRate * vdDInvoiceExchangeRateScale (idUnroundedAmount),
input viCompanyCCId (iiCurrencyID),
input vcCompanyCC (icCurrencyCode)) in BApplicationProperty>.
end.
end.
/* fill balance fields */
assign tApiDInvoice.DInvoiceBalanceDebitTC = tApiDInvoice.DInvoiceBalanceDebitTC + tApiDInvoice.DInvoiceOriginalDebitTC
tApiDInvoice.DInvoiceBalanceDebitLC = tApiDInvoice.DInvoiceBalanceDebitLC + tApiDInvoice.DInvoiceOriginalDebitLC
tApiDInvoice.DInvoiceBalanceDebitCC = tApiDInvoice.DInvoiceBalanceDebitCC + tApiDInvoice.DInvoiceOriginalDebitCC
tApiDInvoice.DInvoiceBalanceCreditTC = tApiDInvoice.DInvoiceBalanceCreditTC + tApiDInvoice.DInvoiceOriginalCreditTC
tApiDInvoice.DInvoiceBalanceCreditLC = tApiDInvoice.DInvoiceBalanceCreditLC + tApiDInvoice.DInvoiceOriginalCreditLC
tApiDInvoice.DInvoiceBalanceCreditCC = tApiDInvoice.DInvoiceBalanceCreditCC + tApiDInvoice.DInvoiceOriginalCreditCC.
assign tApiDInvoice.DInvoiceBalanceTC = tApiDInvoice.DInvoiceBalanceDebitTC - tApiDInvoice.DInvoiceBalanceCreditTC
tApiDInvoice.DInvoiceBalanceLC = tApiDInvoice.DInvoiceBalanceDebitLC - tApiDInvoice.DInvoiceBalanceCreditLC
tApiDInvoice.DInvoiceBalanceCC = tApiDInvoice.DInvoiceBalanceDebitCC - tApiDInvoice.DInvoiceBalanceCreditCC
tApiDInvoice.DInvoiceIsOpen = (tApiDInvoice.DInvoiceBalanceTC <> 0 or tApiDInvoice.DInvoiceBalanceLC <> 0 or tApiDInvoice.DInvoiceBalanceCC <> 0)
tApiDInvoice.tc_status = (if tApiDInvoice.tc_Status = "":U then "C":U else tApiDInvoice.tc_Status).