Description
Calculate the discount.
If you run this method, you don't have to start the instance, only set the vhFcComponent = ?
Parameters
itInvoiceDate | input | date | Invoice Date |
itPaymentDate | input | date | Payment Date |
icDiscountPaymentConditionCode | input | character | Discount Payment Condition Code |
iiDiscountPaymentConditionId | input | integer | Payment Condition ID |
odDiscountPercentage | output | decimal | Discount Percentage |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program3/bpaymentcondition.p)
/* ====================== */
/* replace unknown values */
/* ====================== */
if iiDiscountPaymentConditionId = ? then assign iiDiscountPaymentConditionId = 0.
if icDiscountPaymentConditionCode = ? then assign icDiscountPaymentConditionCode = "":U.
/* ========================= */
/* validate input parameters */
/* ========================= */
if iiDiscountPaymentConditionId = 0 and icDiscountPaymentConditionCode = "":U
then do:
assign vcMessage = trim(#T-5'You must enter the discount credit terms code.':150(2947)T-5#)
oiReturnStatus = -1.
<M-1 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-753':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BPaymentCondition>
end.
/* ============================== */
/* search right payment condition */
/* ============================== */
<Q-2 run PaymentConditionByIdCode (all) (Read) (NoCache)
(input iiDiscountPaymentConditionId, (PaymentConditionId)
input if iiDiscountPaymentConditionId = 0 then icDiscountPaymentConditionCode else '':U, (PaymentConditionCode)
output dataset tqPaymentConditionByIdCode) in BPaymentCondition >
find first tqPaymentConditionByIdCode no-error.
if not available tqPaymentConditionByIdCode
then do:
assign vcMessage = trim(#T-6'The discount credit terms code cannot be found.':150(2948)t-6#)
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-755':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BPaymentCondition>
end.
/* ================================================================= */
/* calculate due date, so you can compare this with the payment date */
/* ================================================================= */
<M-7 run CalculateDueDiscountDate
(input tqPaymentConditionByIdCode.tiPaymentCondition_ID (iiPaymentConditionID),
input tqPaymentConditionByIdCode.tcPaymentConditionCode (icPaymentConditionCode),
input itInvoiceDate (itInvoiceDate),
output vtDueDate (otDueDate),
output vtDiscountDueDate (otDiscountDate),
output viFcReturnSuper (oiReturnStatus)) in BPaymentCondition>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
/* ========================================================================= */
/* if payment date is smaller or equal to due date, then you have a discount */
/* ========================================================================= */
if itPaymentDate <= vtDueDate
then assign odDiscountPercentage = tqPaymentConditionByIdCode.tdPaymentConditionPercentage.