project QadFinancials > class BCInvoice > method DefaultValuesPaymentCondition


Parameters


icPaymentConditionCodeinputcharacter
iiPaymentConditionIDinputinteger
itCInvoiceDateinputdate
icCInvoiceRowIDinputcharacter
idCInvoiceOriginalTCinputdecimal
icCurrencyCodeinputcharacter
ilCInvoiceIsTaxExcludedinputlogicalInput parameter: Supplier invoice uses tax excluded.
icPaymentConditionPaymentTypeinputcharacter
icPaymentConditionPeriodTypeinputcharacter
itPaymentConditionBaseDateinputdate
iiPaymentConditionDaysMonthsinputinteger
iiPaymentConditionSupplDaysinputinteger
iiPaymentConditionBaseDaysinputinteger
iiPaymentConditionDueDaysinputinteger
icPaymentConditionDescriptinputcharacter
idPaymentConditionPercentageinputdecimal
icPaymentConditionPdtypediscountinputcharacter
iiPaymentConditionDayMthsDiscinputinteger
iiPaymentConditionSupDaysDiscinputinteger
ocPaymentConditionPaymentTypeoutputcharacter
otCInvoiceDueDateoutputdate
otCInvoiceDiscountDueDateoutputdate
tApiCInvoiceStageoutputtemp-table
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.DefaultValuesInvoiceDate
method BCInvoice.DefaultValuesPO
method BCInvoice.DefaultValuesSupplier
method BCInvoice.UpdateCInvoiceFromAPM


program code (program3/bcinvoice.p)

empty temp-table tApiCInvoiceStage.

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

if iiPaymentConditionID = ?
then assign iiPaymentConditionID = 0.

if ilCInvoiceIsTaxExcluded = ?
then assign ilCInvoiceIsTaxExcluded = false.

/* if the tax excluded is checked on, then we have to calculated total invoice *
 * amount. This total invoice amount is used by CreateCIPosting + all          *
 * sub-methods                                                                 */
if ilCInvoiceIsTaxExcluded = true
then do:
    for first tCInvoice where tCInvoice.tc_Rowid = icCInvoiceRowID
    no-lock:
        <M-65 run CreatePostingCalculateTotInvAmount
           (input  tCInvoice.CInvoice_ID (iiCInvoiceId), 
            input  icCurrencyCode (icCurrencyCode), 
            input  ilCInvoiceIsTaxExcluded (ilCInvoiceIsTaxExcluded), 
            input  tCInvoiceVat (tApiCInvoiceVat), 
            input  tCInvoice.tc_Rowid (icCInvoiceRowid), 
            input  tCInvoice.CInvoiceType (icCInvoiceType), 
            input  tCInvoice.CInvoiceExchangeRate (idExchangeRate), 
            input  tCInvoice.CInvoiceRateScale (idExchangeRateScale), 
            input-output idCInvoiceOriginalTC (bdInvoiceAmountTC), 
            input-output vdCInvoiceOriginalLC (bdInvoiceAmountLC), 
            input-output vdCInvoiceOriginalCC (bdInvoiceAmountCC), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and oiReturnStatus = 0 then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then return.
    end.
end.

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.
    else do:
        <Q-10 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.

    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
           icPaymentConditionDescript       = tqPaymentConditionByIdCode.tcPaymentConditionDescript
           idPaymentConditionPercentage     = tqPaymentConditionByIdCode.tdPaymentConditionPercentage
           icPaymentConditionPdtypediscount = tqPaymentConditionByIdCode.tcPaymentConditionPdDiscType
           iiPaymentConditionDayMthsDisc    = tqPaymentConditionByIdCode.tiPaymentConditionDayMthDisc
           iiPaymentConditionSupDaysDisc    = tqPaymentConditionByIdCode.tiPaymentConditionSupDayDisc.
end.
else assign ocPaymentConditionPaymentType = icPaymentConditionPaymentType.

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

    <Q-12 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-16 {bFcStartAndOpenInstance
                  &ADD-TO-TRANSACTION = "false"
                  &CLASS              = "BPaymentCondition"}>
        assign vlStartPaymentCondition = true.
    end.

    /* Calculate stages */
    assign vdAmountToDistribute = idCInvoiceOriginalTC.
    
    for each tqPaymentConditionStagedByPC where
             tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID = iiPaymentConditionID
      break by  tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID:
        
        <M-4 run AddDetailLine
           (input  'CInvoiceStage':U (icTable), 
            input  icCInvoiceRowID (icParentRowid), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign tCInvoiceStage.CInvoiceStageAmountTC        = (if last-of(tqPaymentConditionStagedByPC.tiParentPaymentCondition_ID)
                                                              then vdAmountToDistribute
                                                              else <M-5 RoundAmount
                                                                      (input  idCInvoiceOriginalTC * tqPaymentConditionStagedByPC.tdPaymentConditionStagedPerc / 100 (idUnroundedAmount), 
                                                                       input  ? (iiCurrencyID), 
                                                                       input  icCurrencyCode (icCurrencyCode)) in business>)
               tCInvoiceStage.CInvoiceStagePercent         = tqPaymentConditionStagedByPC.tdPaymentConditionStagedPerc
               tCInvoiceStage.PaymentConditionStaged_ID    = tqPaymentConditionStagedByPC.tiPaymentConditionStaged_ID
               tCInvoiceStage.tcPaymentConditionCode       = tqPaymentConditionStagedByPC.tcPaymentConditionCode
               tCInvoiceStage.tcPaymentConditionDescript   = tqPaymentConditionStagedByPC.tcPaymentConditionDescript
               tCInvoiceStage.tdPaymentConditionPercentage = tqPaymentConditionStagedByPC.tdPaymentConditionPercentage
               tCInvoiceStage.CInvoiceStageDiscPerc        = tqPaymentConditionStagedByPC.tdPaymentConditionPercentage
               vdAmountToDistribute                        = vdAmountToDistribute - tCInvoiceStage.CInvoiceStageAmountTC.

        <M-11 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  itCInvoiceDate (itInvoiceDate), 
            input  tqPaymentConditionStagedByPC.tiPaymentConditionDayMthDisc (iiPaymentConditionDayMthDisc), 
            input  tqPaymentConditionStagedByPC.tiPaymentConditionSupDayDisc (iiPaymentConditionSupDayDisc), 
            input  tqPaymentConditionStagedByPC.tcPaymentConditionPdDiscType (icPaymentConditionpDiscType), 
            output tCInvoiceStage.CInvoiceStageDueDate (otDueDate), 
            output tCInvoiceStage.CInvoiceStageDiscDate (otDiscountDate), 
            output viExternalReturnStatus (oiReturnStatus)) in BPaymentCondition>
        if viExternalReturnStatus < 0 or
           oiReturnStatus  = 0
        then assign oiReturnStatus = viExternalReturnStatus.
        
        if viExternalReturnStatus < 0
        then leave.

        create tApiCInvoiceStage.
        raw-transfer tCInvoiceStage to tApiCInvoiceStage.
    end.

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

    for each tApiCInvoiceStage where
             tApiCInvoiceStage.tc_ParentRowid = icCInvoiceRowID
        break by tApiCInvoiceStage.CInvoiceStageDueDate descending:
        assign 
            otCInvoiceDueDate = tApiCInvoiceStage.CInvoiceStageDueDate
            otCInvoiceDiscountDueDate = tApiCInvoiceStage.CInvoiceStageDiscDate.
    end. 
        
end.
else do:
    <I-18 {bFcStartAndOpenInstance
                  &ADD-TO-TRANSACTION = "false"
                  &CLASS              = "BPaymentCondition"}>
                  
    <M-13 run CalculateDueDiscountDateNoRead
       (input  icPaymentConditionPeriodType (icPaymentConditionPeriodType), 
        input  itPaymentConditionBaseDate (itPaymentConditionBaseDate), 
        input  iiPaymentConditionDaysMonths (iiPaymentConditionDaysMonths), 
        input  iiPaymentConditionSupplDays (iiPaymentConditionSupplDays), 
        input  iiPaymentConditionBaseDays (iiPaymentConditionBaseDays), 
        input  iiPaymentConditionDueDays (iiPaymentConditionDueDays), 
        input  itCInvoiceDate (itInvoiceDate), 
        input  iiPaymentConditionDayMthsDisc (iiPaymentConditionDayMthDisc), 
        input  iiPaymentConditionSupDaysDisc (iiPaymentConditionSupDayDisc), 
        input  icPaymentConditionPdtypediscount (icPaymentConditionpDiscType), 
        output vtCInvoiceDueDate (otDueDate), 
        output vtCInvoiceDiscountDueDate (otDiscountDate), 
        output viExternalReturnStatus (oiReturnStatus)) in BPaymentCondition>

    <I-19 {bFcCloseAndStopInstance
             &CLASS           = "BPaymentCondition"}>
    if viExternalReturnStatus < 0 or
       oiReturnStatus  = 0
    then assign oiReturnStatus = viExternalReturnStatus.

         
    if viExternalReturnStatus < 0
    then return.

    assign otCInvoiceDueDate         = vtCInvoiceDueDate
           otCInvoiceDiscountDueDate = vtCInvoiceDiscountDueDate.
end.