project QadFinancials > class BDInvoice > method DefaultDuedatesForDeduction

Description

calculate deduction due date according to the credit terms.
for stage credit terms, the due date is the last stage end
date.


Parameters


icPaymentConditionCodeinputcharacter
iiPaymentConditionIDinputinteger
itDInvoiceDateinputdate
iiDInvoiceRowIDinputinteger
idDInvoiceOriginalTCinputdecimal
icCurrencyCodeinputcharacter
otDInvoiceDueDateoutputdate
otDInvoiceDiscountDueDateoutputdate
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BDInvoice.CreateDInvoicesDeduction


program code (program1/bdinvoice.p)

if icPaymentConditionCode = ?
then assign icPaymentConditionCode = "":U.

if iiPaymentConditionID = 0
then assign iiPaymentConditionID = ?.
assign vcPaymentConditionPaymentType = '':U
       oiReturnStatus = -99.
if (icPaymentConditionCode        <> "":U or
    iiPaymentConditionID          <> 0) 
then do:
     <Q-17 run PaymentConditionByIdCode (all) (Read) (NoCache)
        (input iiPaymentConditionID, (PaymentConditionId)
         input icPaymentConditionCode, (PaymentConditionCode)
         output dataset tqPaymentConditionByIdCode) in BPaymentCondition>       

     find first tqPaymentConditionByIdCode where
                   tqPaymentConditionByIdCode.tcPaymentConditionCode = icPaymentConditionCode
                   no-error.
     if not available tqPaymentConditionByIdCode
     then return.
     assign vcPaymentConditionPaymentType    = tqPaymentConditionByIdCode.tcPaymentConditionPaymentTyp
            vcPaymentConditionPeriodType     = tqPaymentConditionByIdCode.tcPaymentConditionPeriodType
            vtPaymentConditionBaseDate       = tqPaymentConditionByIdCode.ttPaymentConditionBaseDate
            viPaymentConditionDaysMonths     = tqPaymentConditionByIdCode.tiPaymentConditionDaysMonths
            viPaymentConditionSupplDays      = tqPaymentConditionByIdCode.tiPaymentConditionSupplDays
            viPaymentConditionBaseDays       = tqPaymentConditionByIdCode.tiPaymentConditionBaseDays
            viPaymentConditionDueDays        = tqPaymentConditionByIdCode.tiPaymentConditionDueDays
            iiPaymentConditionID             = tqPaymentConditionByIdCode.tiPaymentCondition_ID
            icPaymentConditionCode           = tqPaymentConditionByIdCode.tcPaymentConditionCode
            vcPaymentConditionDescription    = tqPaymentConditionByIdCode.tcPaymentConditionDescript
            vdPaymentConditionPercentage     = tqPaymentConditionByIdCode.tdPaymentConditionPercentage
            vcPaymentConditionTypediscount   = tqPaymentConditionByIdCode.tcPaymentConditionPdDiscType
            viPaymentConditionDayMthsDisc    = tqPaymentConditionByIdCode.tiPaymentConditionDayMthDisc
            viPaymentConditionSupDaysDisc    = tqPaymentConditionByIdCode.tiPaymentConditionSupDayDisc.

end. /* end if icPaymentConditionCode <> ... */
/*for stage, use the last stage date as the due date. */

if vcPaymentConditionPaymentType ={&PAYMENTCONDITIONPAYMENTTYPE-STAGED}
then do: /*stage case */
    <Q-36 run PaymentConditionStagedByPC (all) (Read) (NoCache)
       (input iiPaymentConditionID, (ParentPaymentConditionID)
        output dataset tqPaymentConditionStagedByPC) in BPaymentCondition>
    
    find last tqPaymentConditionStagedByPC where tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID = iiPaymentConditionID no-error.
    if not available tqPaymentConditionStagedByPC then return.
    assign  vcPaymentConditionPeriodType     = tqPaymentConditionStagedByPC.tcPaymentConditionPeriodType
            vtPaymentConditionBaseDate       = tqPaymentConditionStagedByPC.ttPaymentConditionBaseDate
            viPaymentConditionDaysMonths     = tqPaymentConditionStagedByPC.tiPaymentConditionDaysMonths
            viPaymentConditionSupplDays      = tqPaymentConditionStagedByPC.tiPaymentConditionSupplDays
            viPaymentConditionBaseDays       = tqPaymentConditionStagedByPC.tiPaymentConditionBaseDays
            vdPaymentConditionPercentage     = tqPaymentConditionStagedByPC.tdPaymentConditionPercentage
            vcPaymentConditionTypediscount   = tqPaymentConditionStagedByPC.tcPaymentConditionPdDiscType
            viPaymentConditionDayMthsDisc    = tqPaymentConditionStagedByPC.tiPaymentConditionDayMthDisc
            viPaymentConditionSupDaysDisc    = tqPaymentConditionStagedByPC.tiPaymentConditionSupDayDisc.
 
end.   
<I-45 {bFcStartAndOpenInstance
     &ADD-TO-TRANSACTION   = "false"
     &CLASS                = "BPaymentCondition"}>
<M-32 run CalculateDueDiscountDateNoRead
   (input  vcPaymentConditionPeriodType (icPaymentConditionPeriodType), 
    input  vtPaymentConditionBaseDate (itPaymentConditionBaseDate), 
    input  viPaymentConditionDaysMonths (iiPaymentConditionDaysMonths), 
    input  viPaymentConditionSupplDays (iiPaymentConditionSupplDays), 
    input  viPaymentConditionBaseDays (iiPaymentConditionBaseDays), 
    input  viPaymentConditionDueDays (iiPaymentConditionDueDays), 
    input  itDInvoiceDate (itInvoiceDate), 
    input  viPaymentConditionDayMthsDisc (iiPaymentConditionDayMthDisc), 
    input  viPaymentConditionSupDaysDisc (iiPaymentConditionSupDayDisc), 
    input  vcPaymentConditionTypediscount (icPaymentConditionpDiscType), 
    output otDInvoiceDueDate (otDueDate), 
    output otDInvoiceDiscountDueDate (otDiscountDate), 
    output viFcReturnSuper (oiReturnStatus)) in BPaymentCondition>

<I-14 {bFcCloseAndStopInstance
     &CLASS           = "BPaymentCondition"}>
    
if viFcReturnSuper < 0 
then do: assign oiReturnStatus = viFcReturnSuper.
         return.
end.

assign oiReturnStatus = 0.