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


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BDInvoice.ApiStdMaintainTT


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).