project QadFinancials > class BDInvoice > method DefaultValuesPaymentCondition

Description

Called when the Payment Condition changes - defaults related fields


Parameters


icPaymentConditionCodeinputcharacter
iiPaymentConditionIDinputinteger
itDInvoiceDateinputdate
icDInvoiceRowIDinputcharacter
idDInvoiceOriginalTCinputdecimal
icCurrencyCodeinputcharacter
icPaymentConditionPaymentTypeinputcharacter
icPaymentConditionPeriodTypeinputcharacter
itPaymentConditionBaseDateinputdate
iiPaymentConditionDaysMonthsinputinteger
iiPaymentconditionSupplDaysinputinteger
iiPaymentConditionBaseDaysinputinteger
iiPaymentConditionDueDaysinputinteger
icPaymentConditionDescriptioninputcharacter
idPaymentConditionPercentageinputdecimal
icPaymentConditionPdtypediscountinputcharacter
iiPaymentConditionDayMthsDiscinputinteger
iiPaymentConditionSupDaysDiscinputinteger
ocPaymentConditionPaymentTypeoutputcharacter
otDInvoiceDueDateoutputdate
otDInvoiceDiscountDueDateoutputdate
tApiDInvoiceStageoutputtemp-table
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BDInvoice.DefaultValuesDebtor
method BDInvoice.DefaultValuesInvoiceDate


program code (program3/bdinvoice.p)

empty temp-table tApiDInvoiceStage.

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

if iiPaymentConditionID = ?
then assign iiPaymentConditionID = 0.

if (icPaymentConditionCode        <> "":U or
    iiPaymentConditionID          <> 0)   and
    icPaymentConditionPaymentType <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED}
then do:
    if iiPaymentConditionID = 0
    then do:
        <Q-1 run PaymentConditionByIdCode (all) (Read) (NoCache)
           (input ?, (PaymentConditionId)
            input icPaymentConditionCode, (PaymentConditionCode)
            output dataset tqPaymentConditionByIdCode) in BPaymentCondition >       

        find first tqPaymentConditionByIdCode where
                   tqPaymentConditionByIdCode.tcPaymentConditionCode = icPaymentConditionCode
                   no-error.
    end. /* end if iiPaymentConditionID = 0 */
    else do:
        <Q-2 run PaymentConditionByIdCode (all) (Read) (NoCache)
           (input iiPaymentConditionID, (PaymentConditionId)
            input ?, (PaymentConditionCode)
            output dataset tqPaymentConditionByIdCode) in BPaymentCondition >                
        find first tqPaymentConditionByIdCode where
                   tqPaymentConditionByIdCode.tiPaymentCondition_ID = iiPaymentConditionID
                   no-error. 
    end. /* end else if iiPaymentConditionID = 0 */

    if not available tqPaymentConditionByIdCode
    then return.

    assign ocPaymentConditionPaymentType    = tqPaymentConditionByIdCode.tcPaymentConditionPaymentTyp
           icPaymentConditionPeriodType     = tqPaymentConditionByIdCode.tcPaymentConditionPeriodType
           itPaymentConditionBaseDate       = tqPaymentConditionByIdCode.ttPaymentConditionBaseDate
           iiPaymentConditionDaysMonths     = tqPaymentConditionByIdCode.tiPaymentConditionDaysMonths
           iiPaymentConditionSupplDays      = tqPaymentConditionByIdCode.tiPaymentConditionSupplDays
           iiPaymentConditionBaseDays       = tqPaymentConditionByIdCode.tiPaymentConditionBaseDays
           iiPaymentConditionDueDays        = tqPaymentConditionByIdCode.tiPaymentConditionDueDays
           iiPaymentConditionID             = tqPaymentConditionByIdCode.tiPaymentCondition_ID
           icPaymentConditionCode           = tqPaymentConditionByIdCode.tcPaymentConditionCode
           icPaymentConditionDescription       = tqPaymentConditionByIdCode.tcPaymentConditionDescript
           idPaymentConditionPercentage     = tqPaymentConditionByIdCode.tdPaymentConditionPercentage
           icPaymentConditionPdtypediscount = tqPaymentConditionByIdCode.tcPaymentConditionPdDiscType
           iiPaymentConditionDayMthsDisc    = tqPaymentConditionByIdCode.tiPaymentConditionDayMthDisc
           iiPaymentConditionSupDaysDisc    = tqPaymentConditionByIdCode.tiPaymentConditionSupDayDisc.
end. /* end if icPaymentConditionCode <> ... */
else assign ocPaymentConditionPaymentType = icPaymentConditionPaymentType.

if ocPaymentConditionPaymentType = {&PAYMENTCONDITIONPAYMENTTYPE-STAGED}
then do:
    for each tDInvoiceStage where
             tDInvoiceStage.tc_ParentRowid = icDInvoiceRowID:
        if tDInvoiceStage.tc_Status = "N":U
        then delete tDInvoiceStage.
        else assign tDInvoiceStage.tc_Status = "D":U.
    end. /* end for each tDInvoiceStage */

    <Q-3 run PaymentConditionStagedByPC (all) (Read) (NoCache)
       (input iiPaymentConditionID, (ParentPaymentConditionID)
        output dataset tqPaymentConditionStagedByPC) in BPaymentCondition >
    if can-find(first tqPaymentConditionStagedByPC where
                      tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID = iiPaymentConditionID)
    then do:
        <I-8 {bFcStartAndOpenInstance
             &ADD-TO-TRANSACTION = "false"
             &CLASS              = "BPaymentCondition"}>
        assign vlStartPaymentCondition = true.
    end. /* end can-find */
    assign vdstagedTotalWithoutLast = 0.
    for each tqPaymentConditionStagedByPC where
             tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID = iiPaymentConditionID
             break by tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID:

        <M-4 run AddDetailLine
           (input  'DInvoiceStage':U (icTable), 
            input  icDInvoiceRowID (icParentRowid), 
            output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
        if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)        
        then assign oiReturnStatus = viFcReturnSuper.
        if oiReturnStatus < 0
        then leave.
        if not last-of(tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID)
        then assign tDInvoiceStage.DInvoiceStageAmountTC        = <M-5 RoundAmount
                                                                     (input  idDInvoiceOriginalTC * tqPaymentConditionStagedByPC.tdPaymentConditionStagedPerc / 100 (idUnroundedAmount), 
                                                                      input  ? (iiCurrencyID), 
                                                                      input  icCurrencyCode (icCurrencyCode)) in business>
                                  vdstagedTotalWithoutLast      = vdstagedTotalWithoutLast + tDInvoiceStage.DInvoiceStageAmountTC.
        else assign tDInvoiceStage.DInvoiceStageAmountTC        =  <M-12 RoundAmount
                                                                      (input  idDInvoiceOriginalTC - vdStagedTotalWithoutLast (idUnroundedAmount), 
                                                                       input  ? (iiCurrencyID), 
                                                                       input  icCurrencyCode (icCurrencyCode)) in business>.
            
    
        assign tDInvoiceStage.DInvoiceStagePercent         = tqPaymentConditionStagedByPC.tdPaymentConditionStagedPerc
               tDInvoiceStage.PaymentConditionStaged_ID    = tqPaymentConditionStagedByPC.tiPaymentConditionStaged_ID
               tDInvoiceStage.tcPaymentConditionCode       = tqPaymentConditionStagedByPC.tcPaymentConditionCode
               tDInvoiceStage.tcPaymentConditionDescript   = tqPaymentConditionStagedByPC.tcPaymentConditionDescript
               tDInvoiceStage.tdPaymentConditionPercentage = tqPaymentConditionStagedByPC.tdPaymentConditionPercentage
               tDInvoiceStage.DInvoiceStageDiscPerc        = tqPaymentConditionStagedByPC.tdPaymentConditionPercentage.

        <M-6 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  itDInvoiceDate (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
           oiReturnStatus  = 0
        then assign oiReturnStatus = viExternalReturnStatus.
        
        if viExternalReturnStatus < 0
        then leave.

        create tApiDInvoiceStage.
        raw-transfer tDInvoiceStage to tApiDInvoiceStage.
    end. /* end for each tqPaymentConditionStagedByPC */

    if vlStartPaymentCondition
    then do:
        <I-9 {bFcCloseAndStopInstance
             &CLASS           = "BPaymentCondition"}>
        if viExternalReturnStatus < 0 then return.
    end. /* end if vlStartPaymentCondition */

    for each tApiDInvoiceStage where
             tApiDInvoiceStage.tc_ParentRowid = icDInvoiceRowID
        break by tApiDInvoiceStage.DInvoiceStageDueDate descending:
        assign otDInvoiceDueDate         = tApiDInvoiceStage.DInvoiceStageDueDate
               otDInvoiceDiscountDueDate = tApiDInvoiceStage.DInvoiceStageDiscDate.
    end. /* end for each tApiDInvoiceStage */
end. /* end if ocPaymentConditionPaymentType = {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} */
else do:
    <I-10 {bFcStartAndOpenInstance
         &ADD-TO-TRANSACTION = "false"
         &CLASS              = "BPaymentCondition"}>
         
    <M-7 run CalculateDueDiscountDateNoRead
       (input  icPaymentConditionPeriodType (icPaymentConditionPeriodType), 
        input  itPaymentConditionBaseDate (itPaymentConditionBaseDate), 
        input  iiPaymentConditionDaysMonths (iiPaymentConditionDaysMonths), 
        input  iiPaymentConditionSupplDays (iiPaymentConditionSupplDays), 
        input  iiPaymentConditionBaseDays (iiPaymentConditionBaseDays), 
        input  iiPaymentConditionDueDays (iiPaymentConditionDueDays), 
        input  itDInvoiceDate (itInvoiceDate), 
        input  iiPaymentConditionDayMthsDisc (iiPaymentConditionDayMthDisc), 
        input  iiPaymentConditionSupDaysDisc (iiPaymentConditionSupDayDisc), 
        input  icPaymentConditionPdtypediscount (icPaymentConditionpDiscType), 
        output vtDInvoiceDueDate (otDueDate), 
        output vtDInvoiceDiscountDueDate (otDiscountDate), 
        output viExternalReturnStatus (oiReturnStatus)) in BPaymentCondition>
        
    <I-11 {bFcCloseAndStopInstance
         &CLASS           = "BPaymentCondition"}>
    
    if viExternalReturnStatus < 0 or
       oiReturnStatus  = 0
    then assign oiReturnStatus = viExternalReturnStatus.
      
    if viExternalReturnStatus < 0
    then return.

    assign otDInvoiceDueDate         = vtDInvoiceDueDate
           otDInvoiceDiscountDueDate = vtDInvoiceDiscountDueDate.
end. /* end else if ocPaymentConditionPaymentType = {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} */