project QadFinancials > class BDInvoice > method UpdateDInvoiceDeductionStatus
Parameters
iiDInvoiceID | input | integer | |
idPaidAmount | input | decimal | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
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.