Description
Assign the Statutory Currency Amounts based on the amounts in TC and the exchange Rate between TC and the newly entered SC.
Split into detail method, because main method would get to big.
Parameters
ocErrorMessage | output | character | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program1/tsetstatutorycurrency.p)
assign oiReturnStatus = -98
viLocalReturnStatus = 0.
STATCURRDETBLOCK:
do on error undo, return:
for each Company of Domains,
each CInvoice of Company exclusive-lock Transaction:
/* Get Exchange Rates for SC */
<M-10 run GetExchangeRate
(input CInvoice.CInvoiceCurrency_ID (iiFromCurrencyID),
input viNewSCID (iiToCurrencyID),
input viSCExchangeRateTypeID (iiExchangeRateTypeID),
input CInvoice.CInvoicePostingDate (itDate),
input viExchangeRateSharedSetID (iiSharedSetID),
output vdRate (odExchangeRate),
output vdScale (odExchangeRateScale),
output ocErrorMessage (ocErrorMessage),
output viFcReturnSuper (oiReturnStatus)) in TSetStatutoryCurrency>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave STATCURRDETBLOCK.
assign CInvoice.CInvoiceBalanceCC = <M-11 RoundSCAmount (input CInvoice.CInvoiceBalanceTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceBalanceCreditCC = <M-12 RoundSCAmount (input CInvoice.CInvoiceBalanceCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceBalanceDebitCC = <M-13 RoundSCAmount (input CInvoice.CInvoiceBalanceDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceNonDiscAmtCC = <M-14 RoundSCAmount (input CInvoice.CInvoiceNonDiscAmtTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceOriginalCreditCC = <M-15 RoundSCAmount (input CInvoice.CInvoiceOriginalCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceOriginalDebitCC = <M-16 RoundSCAmount (input CInvoice.CInvoiceOriginalDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceVatBaseCreditCC = <M-17 RoundSCAmount (input CInvoice.CInvoiceVatBaseCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceVatBaseDebitCC = <M-18 RoundSCAmount (input CInvoice.CInvoiceVatBaseDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceVatCreditCC = <M-19 RoundSCAmount (input CInvoice.CInvoiceVatCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceVatDebitCC = <M-20 RoundSCAmount (input CInvoice.CInvoiceVatDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceCCRate = vdRate
CInvoice.CInvoiceCCScale = vdScale.
/* CInvoiceStage */
for each CInvoiceStage of CInvoice exclusive-lock:
assign CInvoiceStage.CInvoiceStageAmountCC = <M-21 RoundSCAmount (input CInvoiceStage.CInvoiceStageAmountTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>.
end. /* CInvoiceStage */
/* CInvoiceVat */
for each CInvoiceVat of CInvoice exclusive-lock:
assign CInvoiceVat.CInvoiceVatVatBaseCreditCC = <M-22 RoundSCAmount (input CInvoiceVat.CInvoiceVatVatBaseCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoiceVat.CInvoiceVatVatBaseDebitCC = <M-23 RoundSCAmount (input CInvoiceVat.CInvoiceVatVatBaseDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoiceVat.CInvoiceVatVatCreditCC = <M-24 RoundSCAmount (input CInvoiceVat.CInvoiceVatVatCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoiceVat.CInvoiceVatVatDebitCC = <M-25 RoundSCAmount (input CInvoiceVat.CInvoiceVatVatDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>.
end. /* CInvoiceVat */
/* FINS-4842: Statutory currency utility should not look for Vat exchange rate if the invoice is not statutory currency related. */
if (CInvoice.CInvoiceWHTTotAmtDebitCC <> 0 and CInvoice.CInvoiceWHTTotAmtDebitCC <> ?) or
(CInvoice.CInvoiceWHTTotAmtCreditCC <> 0 and CInvoice.CInvoiceWHTTotAmtCreditCC <> ?) or
(CInvoice.CInvoiceWHTBaseAmtDebitCC <> 0 and CInvoice.CInvoiceWHTBaseAmtDebitCC <> ?) or
(CInvoice.CInvoiceWHTBaseAmtCreditCC <> 0 and CInvoice.CInvoiceWHTBaseAmtCreditCC <> ?) or
can-find(first CInvoiceWHT of CInvoice)
then do:
/* Get Exchange Rates for Tax*/
<M-47 run GetExchangeRate
(input CInvoice.CInvoiceCurrency_ID (iiFromCurrencyID),
input viNewSCID (iiToCurrencyID),
input viTXExchangeRateTypeID (iiExchangeRateTypeID),
input CInvoice.CInvoicePostingDate (itDate),
input viExchangeRateSharedSetID (iiSharedSetID),
output vdRate (odExchangeRate),
output vdScale (odExchangeRateScale),
output ocErrorMessage (ocErrorMessage),
output viFcReturnSuper (oiReturnStatus)) in TSetStatutoryCurrency>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave STATCURRDETBLOCK.
/* CInvoiceWHT */
assign CInvoice.CInvoiceWHTTotAmtDebitCC = <M-7 RoundSCAmount (input CInvoice.CInvoiceWHTTotAmtDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceWHTTotAmtCreditCC = <M-53 RoundSCAmount (input CInvoice.CInvoiceWHTTotAmtCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceWHTBaseAmtDebitCC = <M-48 RoundSCAmount (input CInvoice.CInvoiceWHTBaseAmtDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoice.CInvoiceWHTBaseAmtCreditCC = <M-68 RoundSCAmount (input CInvoice.CInvoiceWHTBaseAmtCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>.
for each CInvoiceWHT of CInvoice exclusive-lock:
assign CInvoiceWHT.CInvoiceWHTAmtDebitCC = <M-46 RoundSCAmount (input CInvoiceWHT.CInvoiceWHTAmtDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoiceWHT.CInvoiceWHTAmtCreditCC = <M-76 RoundSCAmount (input CInvoiceWHT.CInvoiceWHTAmtCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoiceWHT.CInvoiceWHTTaxFeeDebitCC = <M-61 RoundSCAmount (input CInvoiceWHT.CInvoiceWHTTaxFeeDebitTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>
CInvoiceWHT.CInvoiceWHTTaxFeeCreditCC = <M-641 RoundSCAmount (input CInvoiceWHT.CInvoiceWHTTaxFeeCreditTC * vdRate * vdScale (idUnroundedAmount)) in TSetStatutoryCurrency>.
end. /* CInvoiceWHT */
end. /* WHT amounts */
end. /* CInvoice */
end. /* STATCURRDETBLOCK */
assign oiReturnStatus = viLocalReturnStatus.