project QadFinancials > class BCInvoice > method UpdateCInvoiceBankToPayTC
Description
update to pay tc, with the new balance amount
Parameters
| iiCInvoiceId | input | integer | CInvoice ID |
| idOldBalanceDebitTC | input | decimal | Debit Old Balance TC |
| idOldBalanceCreditTC | input | decimal | Credit Old Balance in TC |
| idMovementAmountDebitTC | input | decimal | Debit Movement Amount in TC |
| idMovementAmountCreditTC | input | decimal | Credit Movement Amount in TC |
| iiBankNumber_ID | input | integer | |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
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.