project QadFinancials > class BPaymentCondition > method CalculateDiscountPercentage

Description

Calculate the discount.
If you run this method, you don't have to start the instance, only set the vhFcComponent = ?


Parameters


itInvoiceDateinputdateInvoice Date
itPaymentDateinputdatePayment Date
icDiscountPaymentConditionCodeinputcharacterDiscount Payment Condition Code
iiDiscountPaymentConditionIdinputintegerPayment Condition ID
odDiscountPercentageoutputdecimalDiscount Percentage
oiReturnStatusoutputintegerReturn 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.