project QadFinancials > class BDInvoice > method DefaultValuesDueDates

Description

Default the due date and discount due date if necessary


Parameters


tDIDefaultinputtemp-tableDefault values
tDInvoiceDefaultoutputtemp-tabledefault output values
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program3/bdinvoice.p)

/* due date */
if tDIDefault.tiNormalPaymentConditionId         <> 0 or
   tDIDefault.tcNormalPaymentConditionCode       <> "":U or
   tDInvoiceDefault.tiNormalPaymentConditionId   <> 0 or
   tDInvoiceDefault.tcNormalPaymentConditionCode <> "":U
then do:
    assign viId    = if tDIDefault.tiNormalPaymentConditionId = 0
                     then tDInvoiceDefault.tiNormalPaymentConditionId
                     else tDIDefault.tiNormalPaymentConditionId
           vcParam = if tDIDefault.tcNormalPaymentConditionCode = "":U
                     then tDInvoiceDefault.tcNormalPaymentConditionCode
                     else tDIDefault.tcNormalPaymentConditionCode.
    
    if tDInvoiceDefault.tcNormalPaymentConditionPayType = "":U
    then do:
        <Q-6 run PaymentConditionByIdCode (all) (Read) (NoCache)
           (input viId, (PaymentConditionId)
            input vcParam, (PaymentConditionCode)
            output dataset tqPaymentConditionByIdCode) in BPaymentCondition >
        for first tqPaymentConditionByIdCode where 
                  tqPaymentConditionByIdCode.tiPaymentCondition_ID  = viId or
                  tqPaymentConditionByIdCode.tcPaymentConditionCode = vcParam:
            assign vcPaymentConditionType = tqPaymentConditionByIdCode.tcPaymentConditionPaymentTyp.
        end.
    end. /* end tDInvoiceDefault.tcNormalPaymentConditionPayType = "":U */
    else assign vcPaymentConditionType = tDInvoiceDefault.tcNormalPaymentConditionPayType.

    if vcPaymentConditionType <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED}
    then do:
        <I-11 {bFcStartAndOpenInstance
             &ADD-TO-TRANSACTION = "false"
             &CLASS              = "BPaymentCondition"}>                         
        <M-5 run CalculateDueDiscountDate
           (input  viId (iiPaymentConditionID), 
            input  vcParam (icPaymentConditionCode), 
            input  tDIDefault.ttDInvoiceDate (itInvoiceDate), 
            output tDInvoiceDefault.ttDInvoiceDueDate (otDueDate), 
            output tDInvoiceDefault.ttDInvoiceDiscountDueDate (otDiscountDate), 
            output viFcReturnSuper (oiReturnStatus)) in BPaymentCondition>
        if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
        then assign oiReturnStatus = viFcReturnSuper.   

        <I-12 {bFcCloseAndStopInstance
              &CLASS           = "BPaymentCondition"}>
              
        if oiReturnStatus < 0 then return.
    end. /* end vcPaymentConditionType <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} */
    else do:
        for each tDInvoiceStage where 
                  tDInvoiceStage.tc_ParentRowid = tDInvoice.tc_Rowid:
            if tDInvoiceStage.tc_Status = "N":U
            then delete tDInvoiceStage.
            else assign tDInvoiceStage.tc_Status = "D":U.
        end. /* end for each tDInvoiceStage */

        <Q-7 run PaymentConditionStagedByPC (all) (Read) (NoCache)
           (input viID, (ParentPaymentConditionID)
            output dataset tqPaymentConditionStagedByPC) in BPaymentCondition >  

        if can-find (first tqPaymentConditionStagedByPC where
                           tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID = viId)
        then do:
            <I-13 {bFcStartAndOpenInstance
                 &ADD-TO-TRANSACTION = "false"
                 &CLASS              = "BPaymentCondition"}>
            assign vlStartBPaymentCondition = true.
        end.

        for each tqPaymentConditionStagedByPC where
                 tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID = viId:

            <M-8 run AddDetailLine
                (input  'DinvoiceStage':U (icTable), 
                 input  tDinvoice.tc_rowid (icParentRowid), 
                 output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.   
            if oiReturnStatus < 0 then leave.

            assign tDInvoiceStage.DInvoiceStageAmountTC    = <M-10 RoundAmount
                                                                (input  tDIDefault.tdDInvoiceOriginalTC * tqPaymentConditionStagedByPC.tdPaymentConditionStagedPerc / 100 (idUnroundedAmount), 
                                                                 input  ? (iiCurrencyID), 
                                                                 input  tDInvoiceDefault.tcCurrencyCode (icCurrencyCode)) in business>              
                   tDInvoiceStage.DInvoiceStagePercent         = tqPaymentConditionStagedByPC.tdPaymentConditionStagedPerc
                   tDInvoiceStage.PaymentConditionStaged_ID    = tqPaymentConditionStagedByPC.tiPaymentConditionStaged_ID
                   tDInvoiceStage.tcPaymentConditionCode       = tqPaymentConditionStagedByPC.tcPaymentConditionCode
                   tDInvoiceStage.tcPaymentConditionDescript   = tqPaymentConditionStagedByPC.tcPaymentConditionDescript
                   tDInvoiceStage.tdPaymentConditionPercentage = tqPaymentConditionStagedByPC.tdPaymentConditionPercentage.

            <M-9 run CalculateDueDiscountDateNoRead
               (input  tqPaymentConditionStagedByPC.tcPaymentConditionPeriodType (icPaymentConditionPeriodType), 
                input  tqPaymentConditionStagedByPC.ttPaymentConditionBaseDate (itPaymentConditionBaseDate), 
                input  tqPaymentConditionStagedByPC.tiPaymentConditionDaysMonths (iiPaymentConditionDaysMonths), 
                input  tqPaymentConditionStagedByPC.tiPaymentConditionSupplDays (iiPaymentConditionSupplDays), 
                input  tqPaymentConditionStagedByPC.tiPaymentConditionBaseDays (iiPaymentConditionBaseDays), 
                input  tqPaymentConditionStagedByPC.tiPaymentConditionDueDays (iiPaymentConditionDueDays), 
                input  tDIDefault.ttDInvoiceDate (itInvoiceDate), 
                input  tqPaymentConditionStagedByPC.tiPaymentConditionDayMthDisc (iiPaymentConditionDayMthDisc), 
                input  tqPaymentConditionStagedByPC.tiPaymentConditionSupDayDisc (iiPaymentConditionSupDayDisc), 
                input  tqPaymentConditionStagedByPC.tcPaymentConditionPdDiscType (icPaymentConditionpDiscType), 
                output tDInvoiceStage.DInvoiceStageDueDate (otDueDate), 
                output tDInvoiceStage.DInvoiceStageDiscDate (otDiscountDate), 
                output viExternalReturnStatus (oiReturnStatus)) in BPaymentCondition>       
            if viExternalReturnStatus < 0 or (viExternalReturnStatus > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viExternalReturnStatus.   
            if viExternalReturnStatus < 0 then leave.
        end. /* end for each tqPaymentConditionStagedByPC */

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

        for each tDinvoiceStage where 
                 tDInvoiceStage.tc_ParentRowid = tDInvoice.tc_Rowid
                 break by tDInvoiceStage.DInvoiceStageDueDate descending:
            /* assign the nearest due date to the parent invoice */
            assign tDInvoiceDefault.ttDinvoiceDueDate         = tDInvoiceStage.DInvoiceStageDueDate 
                   tDInvoiceDefault.ttDInvoiceDiscountDueDate = tDInvoiceStage.DInvoiceStageDiscDate.
        end. /* end for each tdinvoicestage */
     end. /* end else vcPaymentConditionType <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} */
end. /* end invoice id */