project QadFinancials > class BDInvoice > method UpdateDInvoiceDeductionStatus


Parameters


iiDInvoiceIDinputinteger
idPaidAmountinputdecimal
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BOpenItemAdjustment.OIAdjCommitSubOpenItemAdj


program code (program1/bdinvoice.p)

assign oiReturnStatus = -98.

<M-98 run DataLoad
   (input  '':U (icRowids), 
    input  string(iiDInvoiceID) (icPkeys), 
    input  '':U (icObjectIds), 
    input  '':U (icFreeform), 
    input  true (ilKeepPrevious), 
    output viFcReturnSuper (oiReturnStatus)) in BDInvoice>

assign viDInvoiceDeductionSeq = 0
       viDeductionCatLineId   = 0
       viDInvoiceId           = 0
       viStatusChangedInvoiceDedSeq = 0
       vdRemainingApproved    = 0
       vdRate                 = 0.   
     
empty temp-table bDeductionDetail.

for each tDInvoiceDeduction where tDInvoiceDeduction.DInvoice_ID = iiDInvoiceID:
   Create bDeductionDetail.
   buffer-copy tDInvoiceDeduction to bDeductionDetail.
end.

for each bDeductionDetail:
    assign viDInvoiceDeductionSeq = MAXIMUM(viDInvoiceDeductionSeq, bDeductionDetail.DInvoiceDeductionSequence).
end.
 
for first tDInvoice
    where tDInvoice.DInvoice_ID = iiDInvoiceID:
    assign vcParentRowid = tDInvoice.tc_Rowid.

    for each bDeductionDetail where bDeductionDetail.DInvoice_ID = iiDInvoiceID
            and bDeductionDetail.DInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT}:
        for first tDInvoiceDeduction where tDInvoiceDeduction.DInvoice_ID = iiDInvoiceID and
            tDInvoiceDeduction.DinvoiceDeductionSequence = bDeductionDetail.DInvoiceDeductionSequence:
            assign tDInvoiceDeduction.DInvoiceDeductionLC = bDeductionDetail.DInvoiceDeductionTC
                   tDInvoiceDeduction.DInvoiceDeductionCC = bDeductionDetail.DInvoiceDeductionTC
                   tDInvoiceDeduction.tc_Status           = "C":U.
        end. /*end for first*/
    end. /*end for each*/
                   
    /* ================================================================= */
    /* change the deduction state according to the paid amount.          */
    /* the new record is always the last one                             */
    /* ================================================================= */  
    for each bDeductionDetail where bDeductionDetail.DInvoice_ID = iiDInvoiceID 
            and bDeductionDetail.DInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT}:
        if idPaidAmount = bDeductionDetail.DInvoiceDeductionTC then
        do:
            for first tDInvoiceDeduction where tDInvoiceDeduction.DInvoice_ID = iiDInvoiceID and
                tDInvoiceDeduction.DinvoiceDeductionSequence = bDeductionDetail.DInvoiceDeductionSequence:
                assign viDInvoiceId                 = tDInvoiceDeduction.DInvoice_ID
                       viDeductionCatLineId         = tDInvoiceDeduction.DeductionCatLine_ID
                       tDInvoiceDeduction.tc_Status = "D":U.
            end.
                      
            viDInvoiceDeductionSeq = viDInvoiceDeductionSeq + 1.
            <M-50 run AddDetailLine
               (input  'DInvoiceDeduction':U (icTable), 
                input  vcParentRowid (icParentRowid), 
                output oiReturnStatus (oiReturnStatus)) in BDInvoice>   

            buffer-copy bDeductionDetail 
                     except bDeductionDetail.DInvoiceDeduction_ID 
                            bDeductionDetail.tc_ParentRowid
                            bDeductionDetail.tc_Rowid
                            bDeductionDetail.tc_Status
            to tDInvoiceDeduction.
     
            assign tDInvoiceDeduction.DInvoiceDeductionTC       = idPaidAmount
                   tDInvoiceDeduction.DInvoiceDeductionLC       = bDeductionDetail.DInvoiceDeductionLC
                   tDInvoiceDeduction.DInvoiceDeductionCC       = bDeductionDetail.DInvoiceDeductionCC
                   tDInvoiceDeduction.DInvoiceDeductionStatus   = {&INVOICEDEDUCTSTATUS-CREDITED}
                   tDInvoiceDeduction.DInvoiceDeductionSequence = viDInvoiceDeductionSeq
                   tDInvoiceDeduction.DeductionCatLine_ID       = viDeductionCatLineId
                   tDInvoiceDeduction.DInvoice_ID               = viDInvoiceId.
            leave.
        end.

        if idPaidAmount < bDeductionDetail.DInvoiceDeductionTC then 
        do:
            vdRemainingApproved = bDeductionDetail.DInvoiceDeductionTC - idPaidAmount.
            vdRate = vdRemainingApproved / bDeductionDetail.DInvoiceDeductionTC.
            for first tdInvoiceDeduction where 
                tDInvoiceDeduction.DinvoiceDeductionSequence = bDeductionDetail.DInvoiceDeductionSequence:
                assign  tDInvoiceDeduction.DInvoiceDeductionTC       = vdRemainingApproved
                        tDInvoiceDeduction.DInvoiceDeductionLC       = bDeductionDetail.DInvoiceDeductionLC * vdRate
                        tDInvoiceDeduction.DInvoiceDeductionCC       = bDeductionDetail.DInvoiceDeductionCC * vdRate
                        tDInvoiceDeduction.DInvoiceDeductionStatus   = {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT}
                        tDInvoiceDeduction.tc_Status                 = "C":U
                        viDInvoiceId                                 = tDInvoiceDeduction.DInvoice_ID
                        viDeductionCatLineId                         = tDInvoiceDeduction.DeductionCatLine_ID.
            end.
    
            viDInvoiceDeductionSeq = viDInvoiceDeductionSeq + 1.
            <M-61 run AddDetailLine
               (input  'DInvoiceDeduction':U (icTable), 
                input  vcParentRowid (icParentRowid), 
                output oiReturnStatus (oiReturnStatus)) in BDInvoice> 
            buffer-copy bDeductionDetail 
                     except bDeductionDetail.DInvoiceDeduction_ID 
                            bDeductionDetail.tc_ParentRowid
                            bDeductionDetail.tc_Rowid
                            bDeductionDetail.tc_Status
                     to tDInvoiceDeduction.          
            assign tDInvoiceDeduction.DInvoiceDeductionTC       = idPaidAmount
                   tDInvoiceDeduction.DInvoiceDeductionLC       = bDeductionDetail.DInvoiceDeductionLC - bDeductionDetail.DInvoiceDeductionLC * vdRate
                   tDInvoiceDeduction.DInvoiceDeductionCC       = bDeductionDetail.DInvoiceDeductionCC - bDeductionDetail.DInvoiceDeductionCC * vdRate
                   tDInvoiceDeduction.DInvoiceDeductionStatus   = {&INVOICEDEDUCTSTATUS-CREDITED}
                   tDInvoiceDeduction.DInvoiceDeductionSequence = viDInvoiceDeductionSeq
                   tDInvoiceDeduction.DeductionCatLine_ID       = viDeductionCatLineId
                   tDInvoiceDeduction.DInvoice_ID               = viDInvoiceId.
                   /* tDInvoiceDeduction.tc_ParentRowid            = vcParentRowid
                    tDInvoiceDeduction.tc_Rowid                  = string(viDInvoiceDeductionSeq) 
                   tDInvoiceDeduction.tc_Status                 = "N":U. */
             leave.
        end.
            
        if idPaidAmount > bDeductionDetail.DInvoiceDeductionTC then
        do:
            viDInvoiceDeductionSeq = viDInvoiceDeductionSeq + 1.
            idPaidAmount = idPaidAmount - bDeductionDetail.DInvoiceDeductionTC.
            for first tdInvoiceDeduction where 
                tdInvoiceDeduction.DinvoiceDeductionSequence = bDeductionDetail.DinvoiceDeductionSequence:
                assign  tdInvoiceDeduction.DinvoiceDeductionSequence = viDInvoiceDeductionSeq
                        tDInvoiceDeduction.DInvoiceDeductionTC     = bDeductionDetail.DInvoiceDeductionTC
                        tDInvoiceDeduction.DInvoiceDeductionLC     = bDeductionDetail.DInvoiceDeductionLC
                        tDInvoiceDeduction.DInvoiceDeductionCC     = bDeductionDetail.DInvoiceDeductionCC
                        tDInvoiceDeduction.DInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-CREDITED}
                        tDInvoiceDeduction.tc_Status               = "C":U.
            end.
        end. /*end for if*/
    end. /*end for each bDeductionDetail*/
end. /* end for each dinvoice*/

<M-46 run ValidateBCAndAdditionalUpdates  (output viFcReturnSuper (oiReturnStatus)) in BDInvoice>

if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.

<M-11 run DataSave  (output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper <> 0
then do:    
    assign oiReturnStatus = viFcReturnSuper.
    return.
end.

if oiReturnStatus = -98
then assign oiReturnStatus = 0.