project QadFinancials > class BDInvoice > method UpdateDInvoiceBankToPayTC


Parameters


iiDInvoiceIdinputinteger
idOldBalanceDebitTCinputdecimal
idOldBalanceCreditTCinputdecimal
idMovementAmountDebitTCinputdecimal
idMovementAmountCreditTCinputdecimal
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BDInvoice.AdditionalUpdatesAllCreateDALinkedDI
method BDInvoice.CreateDInvoiceMovements


program code (program4/bdinvoice.p)

assign vdTotalTC = 0.

    /* ===================================== */
    /* Get the CI and the currency-decimals  */
    /* Update the last Bank-record of the CI */
    /* Updated method 02/11/2004 KriLae      */
    /* ===================================== */
    find first tDInvoice where
               tDInvoice.DInvoice_ID = iiDInvoiceId
               no-error.
    if not available tDInvoice
    then do:
        assign vcMessage      = trim(#T-1'The system cannot define the bank amount. The customer invoice is invalid.':255(17141)t-1#) + chr(10) +  
                                trim(substitute(#T-2'Customer Invoice ID: &1.':255(49412)T-2#,string(iiDInvoiceId)))
               oiReturnStatus = -1.
        <M-3 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-4209':U (icFcMsgNumber), 
                     input  '' (icFcExplanation), 
                     input  '' (icFcIdentification), 
                     input  '' (icFcContext), 
                     output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
    end.

    /* Allocate evenly across banks if there is no balance */
    assign viInvoiceBankCount = 0.
    if(idOldBalanceDebitTC = 0 and idOldBalanceCreditTc = 0) then do:
        for each tDInvoiceBank where
                 tDInvoiceBank.DInvoice_ID  = tDInvoice.DInvoice_ID and
                 tDInvoicebank.tc_status   <> "D":U :
            assign viInvoiceBankCount = viInvoiceBankCount + 1.        
        end.
    end.

    if not error-status:error
    then do:
        for each tDInvoiceBank where
                 tDInvoiceBank.DInvoice_ID  = tDInvoice.DInvoice_ID and
                 tDInvoicebank.tc_status   <> "D":U :
            if(viInvoiceBankCount > 0) then do:
                assign vdInvoiceBankAmount = if tDInvoice.DInvoiceType = {&INVOICETYPE-INVOICE} or tDInvoice.DInvoiceType = {&INVOICETYPE-INVOICECORRECTION}
                                             then (idMovementAmountDebitTC - idMovementAmountCreditTC) / viInvoiceBankCount
                                             else abs(idMovementAmountDebitTC - idMovementAmountCreditTC) / viInvoiceBankCount.
            end.
            else do:
                assign vdInvoiceBankAmount = if tDInvoice.DInvoiceType = {&INVOICETYPE-INVOICE} or tDInvoice.DInvoiceType = {&INVOICETYPE-INVOICECORRECTION}
                                             then tDInvoiceBank.DInvoiceBankToPayTC * 
                                                    (idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) / 
                                                    (idOldBalanceDebitTC - idOldBalanceCreditTC)
                                             else tDInvoiceBank.DInvoiceBankToPayTC * 
                                                    abs(idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) / 
                                                    abs(idOldBalanceDebitTC - idOldBalanceCreditTC).
            end.
             
             assign tDInvoiceBank.DInvoiceBankToPayTC = <M-4 RoundAmount
                                                           (input  vdInvoiceBankAmount (idUnroundedAmount), 
                                                            input  ? (iiCurrencyID), 
                                                            input  tDInvoice.tcCurrencyCode (icCurrencyCode)) in BApplicationProperty>
                 
                    tDInvoiceBank.tc_Status           = (if tDInvoiceBank.tc_Status = "":U then "C":U else tDInvoiceBank.tc_Status)
                    /* Dt/Cr segregation */
                    tDInvoiceBank.DInvoiceBankToPayTC = if tDInvoice.DInvoiceType = {&INVOICETYPE-INVOICECORRECTION} or
                                                           tDInvoice.DInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION}
                                                        then if tDInvoiceBank.DInvoiceBankToPayTC > 0
                                                             then - tDInvoiceBank.DInvoiceBankToPayTC
                                                             else tDInvoiceBank.DInvoiceBankToPayTC
                                                        else tDInvoiceBank.DInvoiceBankToPayTC
                    vdTotalTC                         = vdTotalTC +  tDInvoiceBank.DInvoiceBankToPayTC.
        end.
    end.

    if vdTotalTC > absolute(idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) 
    then do:
        assign vdTotalTC = vdTotalTC - absolute(idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) .

        if vdTotalTC <> 0
        then do:
            find last tDInvoiceBank where
                      tDInvoiceBank.DInvoice_ID  = tDInvoice.DInvoice_ID and
                      tDInvoicebank.tc_status   <> "D":U 
                      no-error.
            if available tDInvoiceBank
            then do:
                assign tDInvoiceBank.DInvoiceBankToPayTC = tDInvoiceBank.DInvoiceBankToPayTC - vdTotalTC
                        tDInvoiceBank.tc_status           = (if tDInvoiceBank.tc_Status = "":U then "C":U else tDInvoiceBank.tc_Status).
            end.                        
        end.
    end.