project QadFinancials > class BCInvoice > method ValidateHoldAmountAndLockPayment
Description
This method provides a central location for validating that payment for a supplier invoice does not cause the remaining invoice balance to drop below the invoice's hold amount.
There is also implemented validation for checking, whether payment is locked for this invoice.
Parameters
iiCInvoiceID | input | integer | Creditor Invoice ID |
idAllocAmount | input | decimal | Allocation Amount |
icFieldName | input | character | Field Name |
icFieldValue | input | character | Field Value |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program1/bcinvoice.p)
/* =================================================================================================== */
/* Method : ValidateHoldAmount */
/* Desc : This method validates, whether amount to be payed is greater then hold amount */
/* --------------------------------------------------------------------------------------------------- */
/* Params: (I) Name Description */
/* (O) Name Description */
/* =================================================================================================== */
assign oiReturnStatus = -98.
/* =================================================================================================== */
/* Normalize input parameters */
/* =================================================================================================== */
if iiCInvoiceID = 0 then assign iiCInvoiceID = ?.
/* =================================================================================================== */
/* Validate input parameters */
/* =================================================================================================== */
if iiCInvoiceID = ?
then do:
assign vcMessage = #T-4'You have not entered all the mandatory values.':255(63250)t-4#
vcContext = substitute("iiCInvoiceId=&1":U, iiCInvoiceID).
<M-5 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input icFieldValue (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-7994':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input vcContext (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* =================================================================================================== */
/* Get Invoice details */
/* =================================================================================================== */
<Q-10 run CInvoiceForHoldAmountVal (all) (Read) (NoCache)
(input ?, (CompanyId)
input iiCInvoiceID, (CInvoiceId)
output dataset tqCInvoiceForHoldAmountVal) in BCInvoice >
find first tqCInvoiceForHoldAmountVal no-error.
if not available tqCInvoiceForHoldAmountVal
then do:
assign vcMessage = #T-8'The system cannot read the supplier invoice definition.':255(69256)t-8#
vcContext = substitute("iiCInvoiceId=&1":U, iiCInvoiceID).
<M-7 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input icFieldValue (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-7995':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input vcContext (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* =================================================================================================== */
/* Validate Payment is not locked for this Supplier Invoice */
/* =================================================================================================== */
if tqCInvoiceForHoldAmountVal.tlCInvoiceIsLockPayment
then do:
assign vcMessage = #T-11'Payment is locked for Supplier Invoice &1. This can be changed by changing of Invoice Status Code on the Supplier Invoice.':255(413916070)T-11#
vcMessage = trim(substitute(vcMessage, tqCInvoiceForHoldAmountVal.tcCInvoiceReference))
oiReturnStatus = -1.
<M-12 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input icFieldName (icFieldName),
input icFieldValue (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'QadFin-9753':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* =================================================================================================== */
/* Validate Payment is Unapproved for this Supplier Invoice */
/* =================================================================================================== */
if tqCInvoiceForHoldAmountVal.tlCInvoiceIsInvoiceApproved = false
then do:
assign vcMessage = #T-16'Payment is Unapproved for Supplier Invoice &1. This can be changed by changing the Invoice Status Code on the Supplier Invoice':255(103340501)T-16#
vcMessage = trim(substitute(vcMessage,tqCInvoiceForHoldAmountVal.tcCInvoiceReference))
oiReturnStatus = -1.
<M-59 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input icFieldName (icFieldName),
input icFieldValue (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'qadfin-788809':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output oiReturnStatus (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* =================================================================================================== */
/* Validate hold amount is kept as unpaied on invoice */
/* =================================================================================================== */
assign vdBalance = abs(tqCInvoiceForHoldAmountVal.tdCInvoiceBalanceCreditTC
- tqCInvoiceForHoldAmountVal.tdCInvoiceBalanceDebitTC)
- idAllocAmount
vdHoldAmount = tqCInvoiceForHoldAmountVal.tdCInvoiceHoldAmountTC.
if vdHoldAmount <> 0 and
vdHoldAmount <> ? and
vdBalance < vdHoldAmount
then do:
<M-2 run SetMessage
(input trim(#T-3'Remaining balance of $1 is less than the hold amount ($2) for invoice $3.':100(56444)t-3#) (icMessage),
input STRING(vdBalance) + chr(2) + STRING(vdHoldAmount) + chr(2) + tqCInvoiceForHoldAmountVal.tcCInvoiceReference (icArguments),
input icFieldName (icFieldName),
input icFieldValue (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'QadFin-5669':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
end.
/* =================================================================================================== */
/* Return */
/* =================================================================================================== */
if oiReturnStatus = -98 then assign oiReturnStatus = 0.