Parameters
| icDPaySelLineObjectType | input | character | PaySelLineObjectType |
| iiDPaySelLineParentObject_ID | input | integer | |
| ocBusinessRelationCode | output | character | |
| ocBusinessRelationName1 | output | character | |
| ocCorporateGroupCode | output | character | |
| ocDebtorCode | output | character | |
| ocInternalNumber | output | character | |
| ocExternalNumber | output | character | |
| otDiscountDueDate | output | date | |
| odDiscountPercentage | output | decimal | |
| otInvoiceDate | output | date | |
| otDueDate | output | date | |
| ocInvoiceCurrencyCode | output | character | |
| odOpenInvoiceAmountTC | output | decimal | |
| odOriginalInvoiceAmountTC | output | decimal | |
| odOriginalInvoiceAmountNetTC | output | decimal | |
| odInvoiceRate | output | decimal | |
| odInvoiceRateScale | output | decimal | |
| itDPaySelDate | input | date | PaySelDate |
| ocDivisionCode | output | character | Sub-Account Code |
| oiMasterID | output | integer | |
| odNonDiscountableAmountTC | output | decimal | Non Discount Amount |
| ocPaymentConditionPaymentType | output | character | Normal or Staged payment condition |
| odDefaultPaymentAmountTC | output | decimal | |
| odDefaultDiscountAmountTC | output | decimal | |
| ocDInvoiceDIText | output | character | |
| oiDInvoicePostingYear | output | integer | |
| ocJournalCode | output | character | |
| oiDInvoiceVoucher | output | integer | |
| ocShipperInfo | output | character | Parameter to output shipper info |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program1/bdpaymentselection.p)
/* DInvoice lines */
if (icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-INVOICE} or
icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-INVOICECORR} or
icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-CREDITNOTE} or
icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-CREDITNOTECORR} or
icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-PREPAYMENTINV} or
icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-PREPAYMENT} or
icDPaySelLineObjectType = {&INVOICETYPE-DEDUCTION} or
icDPaySelLineObjectType = {&PAYMENTSELECTIONTYPE-ADJUSTMENT}) and
iiDPaySelLineParentObject_ID <> 0
then do:
<Q-45 run GetDInvoiceForPaymentSelection (all) (Read) (NoCache)
(input 0, (CompanyId)
input ?, (IsPaymentAllowed)
input ?, (BusinessRelationCode)
input iiDPaySelLineParentObject_ID, (DInvoice_ID)
input ?, (CurrencyCode)
input ?, (DivisionCode)
input ?, (BusinessRelationIsInterco)
input ?, (DInvoiceType)
input ?, (DInvoiceIsOpen)
input ?, (DInvoiceIsSelected)
input ?, (BusinessRelationCountryCode)
input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressTypeCode)
output dataset tqGetDInvoiceForPaymentSelection) in BDInvoice>
find first tqGetDInvoiceForPaymentSelection no-error.
if not available tqGetDInvoiceForPaymentSelection
then do:
<M-94 run SetMessage
(input #T-39'The expected customer invoice (ID = $1) was not found. Contact your system administrator to rectify any database inconsistencies. ':150(3002)T-39# (icMessage),
input string(iiDPaySelLineParentObject_ID) (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'D':U (icType),
input 2 (iiSeverity),
input '':U (icRowid),
input 'qadfin-415601':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDPaymentSelection>
assign oiReturnStatus = -98.
return.
end.
if tqGetDInvoiceForPaymentSelection.tcPaymentConditionPaymentTyp = {&PAYMENTCONDITIONPAYMENTTYPE-NORMAL}
then do:
assign vlDInvoiceIsWithOneBank = false
vlProposePayment = false
vdInvoiceAmount = if tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalDebitTC <> 0 and
tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalDebitTC <> ?
then tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalDebitTC
else tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalCreditTC
vdInvoiceBalance = if tqGetDInvoiceForPaymentSelection.tdDInvoiceBalanceDebitTC <> 0 and
tqGetDInvoiceForPaymentSelection.tdDInvoiceBalanceDebitTC <> ?
then tqGetDInvoiceForPaymentSelection.tdDInvoiceBalanceDebitTC
else tqGetDInvoiceForPaymentSelection.tdDInvoiceBalanceCreditTC.
<Q-30 run DInvoiceBankByDInvoiceID (all) (Read) (NoCache)
(input tqGetDInvoiceForPaymentSelection.tiDInvoice_ID, (DInvoiceId)
output dataset tqDInvoiceBankByDInvoiceID) in BDInvoice>
find tqDInvoiceBankByDInvoiceID no-error.
if available tqDInvoiceBankByDInvoiceID
then assign vlDInvoiceIsWithOneBank = true.
/* Propose payment if there is only one invoice bank or this is the first payment on the invoice */
if (vlDInvoiceIsWithOneBank or vdInvoiceBalance = vdInvoiceAmount)
then assign vlProposePayment = true.
/****************************************************************************************************************
Calculation of Discount Base Amount
===================================
1) In case of Discount Tax at Payment = YES
Discount Base Amount = Invoice amount with Tax *
((Invoice amount without Tax ?- Non-discountable amount) / Invoice amount without Tax) *
(Invoice open amount / Invoice amount with Tax).
2) In case of Discount Tax at Payment = NO
Discount Base Amount = (Invoice amount without Tax - Non-discountable amount) *
(Invoice open amount / Invoice amount with Tax).
*****************************************************************************************************************/
if itDPaySelDate <= tqGetDInvoiceForPaymentSelection.ttDInvoiceDiscountDueDate
then assign vdDiscountBase = if tqGetDInvoiceForPaymentSelection.tlDInvoiceIsDiscTaxAtPaym
then vdInvoiceAmount *
((vdInvoiceAmount - abs(tqGetDInvoiceForPaymentSelection.tdDInvoiceVatDebitTC - tqGetDInvoiceForPaymentSelection.tdDInvoiceVatCreditTC)) - tqGetDInvoiceForPaymentSelection.tdDInvoiceNonDiscAmtTC) /
(vdInvoiceAmount - abs(tqGetDInvoiceForPaymentSelection.tdDInvoiceVatDebitTC - tqGetDInvoiceForPaymentSelection.tdDInvoiceVatCreditTC)) *
(vdInvoiceBalance / vdInvoiceAmount)
else ((vdInvoiceAmount - abs(tqGetDInvoiceForPaymentSelection.tdDInvoiceVatDebitTC - tqGetDInvoiceForPaymentSelection.tdDInvoiceVatCreditTC)) - tqGetDInvoiceForPaymentSelection.tdDInvoiceNonDiscAmtTC) *
(vdInvoiceBalance / vdinvoiceAmount)
vdInvoiceDiscountAmount = vdDiscountBase * tqGetDInvoiceForPaymentSelection.tdPaymentConditionPercentage / 100
vdInvoicePaymentAmount = vdInvoiceBalance - vdInvoiceDiscountAmount.
else assign vdInvoiceDiscountAmount = 0
vdInvoicePaymentAmount = vdInvoiceBalance.
if vlProposePayment
then assign vdInvoiceBankPercentage = tqGetDInvoiceForPaymentSelection.tdDInvoiceBankToPayTC / vdInvoiceBalance
odDefaultDiscountAmountTC = vdInvoiceDiscountAmount * vdInvoiceBankPercentage
odDefaultPaymentAmountTC = vdInvoicePaymentAmount * vdInvoiceBankPercentage.
else assign odDefaultPaymentAmountTC = 0
odDefaultDiscountAmountTC = 0.
assign odDefaultPaymentAmountTC = <M-62 RoundAmount
(input odDefaultPaymentAmountTC (idUnroundedAmount),
input '' (iiCurrencyID),
input tqGetDInvoiceForPaymentSelection.tcCurrencyCode (icCurrencyCode)) in BDPaymentSelection>
odDefaultDiscountAmountTC = <M-38 RoundAmount
(input odDefaultDiscountAmountTC (idUnroundedAmount),
input '' (iiCurrencyID),
input tqGetDInvoiceForPaymentSelection.tcCurrencyCode (icCurrencyCode)) in BDPaymentSelection>.
end.
assign ocBusinessRelationCode = tqGetDInvoiceForPaymentSelection.tcBusinessRelationCode
ocBusinessRelationName1 = tqGetDInvoiceForPaymentSelection.tcBusinessRelationName1
ocCorporateGroupCode = tqGetDInvoiceForPaymentSelection.tcCorporateGroupCode
ocDebtorCode = tqGetDInvoiceForPaymentSelection.tcDebtorCode
oiMasterID = tqGetDInvoiceForPaymentSelection.tiDebtor_ID
ocInternalNumber = if tqGetDInvoiceForPaymentSelection.tcDInvoiceDIText = "" or
tqGetDInvoiceForPaymentSelection.tcDInvoiceDITexT = ?
then string(tqGetDInvoiceForPaymentSelection.tiPeriodYear) + "/":U +
tqGetDInvoiceForPaymentSelection.tcJournalCode + "/":U +
string(tqGetDInvoiceForPaymentSelection.tiDInvoiceVoucher,"9999999999":U)
else tqGetDInvoiceForPaymentSelection.tcDInvoiceDIText
otDiscountDueDate = tqGetDInvoiceForPaymentSelection.ttDInvoiceDiscountDueDate
odDiscountPercentage = tqGetDInvoiceForPaymentSelection.tdPaymentConditionPercentage
ocPaymentConditionPaymentType = tqGetDInvoiceForPaymentSelection.tcPaymentConditionPaymentTyp
otInvoiceDate = tqGetDInvoiceForPaymentSelection.ttDInvoiceDate
otDueDate = tqGetDInvoiceForPaymentSelection.ttDInvoiceDueDate
ocInvoiceCurrencyCode = tqGetDInvoiceForPaymentSelection.tcCurrencyCode
ocPaymentConditionPaymentType = tqGetDInvoiceForPaymentSelection.tcPaymentConditionPaymentTyp
odOpenInvoiceAmountTC = tqGetDInvoiceForPaymentSelection.tdDInvoiceBalanceDebitTC
- tqGetDInvoiceForPaymentSelection.tdDInvoiceBalanceCreditTC
odOriginalInvoiceAmountTC = tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalDebitTC
- tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalCreditTC
odOriginalInvoiceAmountNetTC = tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalDebitTC
+ tqGetDInvoiceForPaymentSelection.tdDInvoiceVatDebitTC
- tqGetDInvoiceForPaymentSelection.tdDInvoiceOriginalCreditTC
- tqGetDInvoiceForPaymentSelection.tdDInvoiceVatCreditTC
odInvoiceRate = tqGetDInvoiceForPaymentSelection.tdDInvoiceExchangeRate
odInvoiceRateScale = tqGetDInvoiceForPaymentSelection.tdDInvoiceRateScale
ocDivisionCode = tqGetDInvoiceForPaymentSelection.tcDivisionCode
odNonDiscountableAmountTC = tqGetDInvoiceForPaymentSelection.tdDInvoiceNonDiscAmtTC
ocDInvoiceDIText = tqGetDInvoiceForPaymentSelection.tcDInvoiceDIText
oiDInvoicePostingYear = tqGetDInvoiceForPaymentSelection.tiDInvoicePostingYear
ocJournalCode = tqGetDInvoiceForPaymentSelection.tcJournalCode
oiDInvoiceVoucher = tqGetDInvoiceForPaymentSelection.tiDInvoiceVoucher
ocShipperInfo = tqGetDInvoiceForPaymentSelection.tcDInvoiceShipperList.
end.