project QadFinancials > class BCInvoice > method UpdateCInvoiceBankToPayTC

Description

update to pay tc, with the new balance amount


Parameters


iiCInvoiceIdinputintegerCInvoice ID
idOldBalanceDebitTCinputdecimalDebit Old Balance TC
idOldBalanceCreditTCinputdecimalCredit Old Balance in TC
idMovementAmountDebitTCinputdecimalDebit Movement Amount in TC
idMovementAmountCreditTCinputdecimalCredit Movement Amount in TC
iiBankNumber_IDinputinteger
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.CreateCInvoiceMovements
method BCInvoice.UpdateCInvoiceFromAPM


program code (program4/bcinvoice.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 tCInvoice where
           tCInvoice.CInvoice_ID = iiCInvoiceId
           no-error.
if not available tCInvoice
then do:
    assign vcMessage      = trim(#T-5'The system cannot define the bank amount: invalid supplier invoice.':255(1119)t-5#) + chr(10) +  
                            trim(substitute(#T-6'Supplier invoice ID: &1.':255(1120)T-6#,string(iiCInvoiceId)))
           oiReturnStatus = -1.
    <M-4 run SetMessage (input  vcMessage (icMessage),
                 input  '':U (icArguments),
                 input  '':U (icFieldName),
                 input  '':U (icFieldValue),
                 input  'D':U (icType),
                 input  3 (iiSeverity),
                 input  '':U (icRowid),
                 input  'QADFIN-1150':U (icFcMsgNumber),
                 input  '' (icFcExplanation),
                 input  '' (icFcIdentification),
                 input  '' (icFcContext),
                 output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.

if not can-find(first tCInvoiceBank where
                      tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
                      tCInvoiceBank.tc_Status     <> "D":U)
then return.
if iiBankNumber_ID <> ? and iiBankNumber_ID <> 0
then do:
    for each tCInvoiceBank where
              tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
              tCInvoiceBank.BankNumber_ID  <> iiBankNumber_ID and
              tcinvoicebank.tc_status     <> "D":U:
        assign vdOtherBankTC = vdOtherBankTC + absolute(tCInvoiceBank.CInvoiceBankToPayTC).
    end.
    if (idOldBalanceCreditTC   = 0    and
          idOldBalanceDebitTC  = 0)   or 
       (vlIsPaySelUnconfirm    = true and 
          vdOtherBankTC        <> 0   and
          vdOtherBankTC        = abs(idOldBalanceCreditTC - idOldBalanceDebitTC))
    then do:
        find first tCInvoiceBank where
                   tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
                   tCInvoiceBank.BankNumber_ID  = iiBankNumber_ID and
                   tCInvoiceBank.tc_Status     <> "D":U
                   no-error.
        if available tCInvoiceBank
        then assign tCInvoiceBank.CInvoiceBankToPayTC = abs(idMovementAmountDebitTC - idMovementAmountCreditTC)
                    tCInvoiceBank.CInvoiceBankToPayTC = if tCInvoice.CInvoiceType = {&INVOICETYPE-INVOICECORRECTION} or
                                                           tCInvoice.CInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION}
                                                        then - tCInvoiceBank.CInvoiceBankToPayTC
                                                        else tCInvoiceBank.CInvoiceBankToPayTC
                    tCInvoiceBank.tc_Status           = if tCInvoiceBank.tc_Status = "":U
                                                        then "C":U
                                                        else tCInvoiceBank.tc_Status
                    vdTotalTC                         = vdTotalTC + tCInvoiceBank.CInvoiceBankToPayTC.
    end.
    else do:
        for each tCInvoiceBank where
                  tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
                  tCInvoiceBank.BankNumber_ID  = iiBankNumber_ID and
                  tcinvoicebank.tc_status     <> "D":U:
                  
           assign tCInvoiceBank.CInvoiceBankToPayTC = <M-38 RoundAmount
                                                               (input  absolute(tCInvoiceBank.CInvoiceBankToPayTC * (idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) / (tCInvoiceBank.CInvoiceBankToPayTC)) - vdOtherBankTC (idUnroundedAmount), 
                                                                input  0 (iiCurrencyID), 
                                                                input  tCInvoice.tcCurrencyCode (icCurrencyCode)) in business> 
                tCInvoiceBank.tc_Status           = (if tCInvoiceBank.tc_Status = "":U then "C":U else tCInvoiceBank.tc_Status)
                /* Dt/Cr segregation */
                tCInvoiceBank.CInvoiceBankToPayTC = if idOldBalanceDebitTC < 0 or idOldBalanceCreditTC < 0
                                                    then if tCInvoiceBank.CInvoiceBankToPayTC > 0
                                                         then - tCInvoiceBank.CInvoiceBankToPayTC
                                                         else tCInvoiceBank.CInvoiceBankToPayTC
                                                    else tCInvoiceBank.CInvoiceBankToPayTC
                vdTotalTC                         = vdTotalTC +  tCInvoiceBank.CInvoiceBankToPayTC.
        end.
    end.
    
    if (idOldBalanceCreditTC   <> 0 or
        idOldBalanceDebitTC    <> 0) and 
       (vdOtherBankTC          <> 0 and
        vdOtherBankTC          = abs(idOldBalanceCreditTC - idOldBalanceDebitTC))
    then do:
        for each tCInvoiceBank where
                 tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
                 tCInvoiceBank.BankNumber_ID  <> iiBankNumber_ID and
                 tcinvoicebank.tc_status      <> "D":U:
            
            assign tCInvoiceBank.CInvoiceBankToPayTC = <M-14 RoundAmount
                                                          (input  absolute(tCInvoiceBank.CInvoiceBankToPayTC * (idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) / (tCInvoiceBank.CInvoiceBankToPayTC)) (idUnroundedAmount), 
                                                           input  0 (iiCurrencyID), 
                                                           input  tCInvoice.tcCurrencyCode (icCurrencyCode)) in business>       
                   tCInvoiceBank.tc_Status           = (if tCInvoiceBank.tc_Status = "":U then "C":U else tCInvoiceBank.tc_Status)
                   /* Dt/Cr segregation */
                   tCInvoiceBank.CInvoiceBankToPayTC = if idOldBalanceDebitTC < 0 or idOldBalanceCreditTC < 0
                                                       then if tCInvoiceBank.CInvoiceBankToPayTC > 0
                                                            then - tCInvoiceBank.CInvoiceBankToPayTC
                                                            else tCInvoiceBank.CInvoiceBankToPayTC
                                                       else tCInvoiceBank.CInvoiceBankToPayTC
                   vdTotalTC                         = vdTotalTC +  tCInvoiceBank.CInvoiceBankToPayTC.
        end.
    end.

end.
else do:
    if idOldBalanceCreditTC = 0 and
       idOldBalanceDebitTC  = 0
    then do:
        find first tCInvoiceBank where
                   tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
                   tCInvoiceBank.tc_Status     <> "D":U
                   no-error.
        if available tCInvoiceBank
        then assign tCInvoiceBank.CInvoiceBankToPayTC = abs(idMovementAmountDebitTC - idMovementAmountCreditTC)
                    tCInvoiceBank.CInvoiceBankToPayTC = if tCInvoice.CInvoiceType = {&INVOICETYPE-INVOICECORRECTION} or
                                                           tCInvoice.CInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION}
                                                        then - tCInvoiceBank.CInvoiceBankToPayTC
                                                        else tCInvoiceBank.CInvoiceBankToPayTC
                    tCInvoiceBank.tc_Status           = if tCInvoiceBank.tc_Status = "":U
                                                        then "C":U
                                                        else tCInvoiceBank.tc_Status
                    vdTotalTC                         = vdTotalTC + tCInvoiceBank.CInvoiceBankToPayTC.
    end.
    else for each tCInvoiceBank where
                  tCInvoiceBank.tc_ParentRowid = tCInvoice.tc_Rowid and
                  tcinvoicebank.tc_status     <> "D":U:         
         assign tCInvoiceBank.CInvoiceBankToPayTC = <M-7 RoundAmount
                                                       (input  absolute(tCInvoiceBank.CInvoiceBankToPayTC * (idOldBalanceDebitTC - idOldBalanceCreditTC + idMovementAmountDebitTC - idMovementAmountCreditTC) / (tCInvoiceBank.CInvoiceBankToPayTC)) (idUnroundedAmount), 
                                                        input  0 (iiCurrencyID), 
                                                        input  tCInvoice.tcCurrencyCode (icCurrencyCode)) in business>       
                tCInvoiceBank.tc_Status           = (if tCInvoiceBank.tc_Status = "":U then "C":U else tCInvoiceBank.tc_Status)
                /* Dt/Cr segregation */
                tCInvoiceBank.CInvoiceBankToPayTC = if idOldBalanceDebitTC < 0 or idOldBalanceCreditTC < 0
                                                    then if tCInvoiceBank.CInvoiceBankToPayTC > 0
                                                         then - tCInvoiceBank.CInvoiceBankToPayTC
                                                         else tCInvoiceBank.CInvoiceBankToPayTC
                                                    else tCInvoiceBank.CInvoiceBankToPayTC
                vdTotalTC                         = vdTotalTC +  tCInvoiceBank.CInvoiceBankToPayTC.
    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 tCInvoiceBank where
                  tCInvoiceBank.CInvoice_ID  = tCInvoice.CInvoice_ID and
                  tcinvoicebank.tc_status   <> "D":U 
                  no-error.
        if available tCInvoiceBank
        then assign tCInvoiceBank.CInvoiceBankToPayTC = tCInvoiceBank.CInvoiceBankToPayTC - vdTotalTC
                    tCInvoiceBank.tc_status           = (if tCInvoiceBank.tc_Status = "":U then "C":U else tCInvoiceBank.tc_Status).
    end.
end.