project QadFinancials > class TSetStatutoryCurrency > method SetStatutoryCurrencyBasedOnTCCInvoice

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


ocErrorMessageoutputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method TSetStatutoryCurrency.SetStatutoryCurrencyBasedOnTC


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.