project QadFinancials > class BBill > method GetToBillDInvoice
Description
In BIll Create and Set Bill Date Form, it had a search condition Tab Control. User can setup search condition to query the related DInvoices. This method is created to invoke internal API query to get the DInvoice for those two Forms.
Parameters
itInvoiceDateFrom | input | date | |
itInvoiceDateTo | input | date | |
icDebtorList | input | character | |
icEmployeeCode | input | character | |
icCurrencyCode | input | character | |
icInvoiceRefFrom | input | character | |
icInvoiceRefTo | input | character | |
ilIsAllEntities | input | logical | |
itFixedDueDate | input | date | |
ilIsOverwriteDueDate | input | logical | |
icActivityCode | input | character | |
iiBill_ID | input | integer | |
iiDInvoice_ID | input | integer | |
tDInvoiceToBill | output | temp-table | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program3/bbill.p)
assign oiReturnStatus = -98.
empty temp-table tDInvoiceToBill.
empty temp-table tApiBillingDueDateCache.
if icActivityCode = 'Create' or
icActivityCode = 'SetBillDate'
then do:
/* Invoice Ref To can not be null */
if itInvoiceDateTo = ? then do:
<M-25 run SetMessage
(input trim(#T-45'The Invoice Ref Date To field is mandatory.':255(949971202)T-45#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input ? (icRowid),
input 'qadfin-331703':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBill>
assign oiReturnStatus = -1.
return.
end.
if itInvoiceDateFrom <>? and itInvoiceDateFrom > itInvoiceDateTo then do:
<M-63 run SetMessage
(input trim(#T-52'The date specified in Invoice Ref Date From cannot be later than the date specified in Invoice Ref Date To.':255(573262564)T-52#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input string(itInvoiceDateFrom) (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input ? (icRowid),
input 'qadfin-128307':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBill>
assign oiReturnStatus = -1.
return.
end.
if icInvoiceRefFrom <> ? and
icInvoiceRefFrom <> '' and
icInvoiceRefTo <> ? and
icInvoiceRefTo <> '' and
icInvoiceRefFrom > icInvoiceRefTo
then do:
<M-95 run SetMessage
(input trim(#T-87'Invoice Ref To cannot precede Invoice Ref From.':255(35124550)T-87#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input ? (icRowid),
input 'qadfin-737072':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBill>
assign oiReturnStatus = -1.
return.
end.
if itFixedDueDate <> ? and (itFixedDueDate > itInvoiceDateTo or (itInvoiceDateFrom <> ? and itFixedDueDate < itInvoiceDateFrom))
then do:
<M-34 run SetMessage
(input trim(#T-88'The Fixed Bill Date must be within the time period defined in the Invoice Ref Date From-To fields.':255(131295951)T-88#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input string(itFixedDueDate) (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input ? (icRowid),
input 'qadfin-818507':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBill>
assign oiReturnStatus = -1.
return.
end.
end.
<M-93 run GetDInvoiceFromBillQuery
(input itInvoiceDateFrom (itInvoiceDateFrom),
input itInvoiceDateTo (itInvoiceDateTo),
input icDebtorList (icDebtorList),
input icEmployeeCode (icEmployeeCode),
input icCurrencyCode (icCurrencyCode),
input icInvoiceRefFrom (icInvoiceRefFrom),
input icInvoiceRefTo (icInvoiceRefTo),
input ilIsAllEntities (ilIsAllEntities),
input icActivityCode (icActivityCode),
input iiBill_ID (iiBill_ID),
input iiDInvoice_ID (iiDInvoice_ID),
output tInnerQueryDinvoiceForBill (tInnerQueryDinvoiceForBill),
output viFcReturnSuper (oiReturnStatus)) in BBill>
if can-find (first tInnerQueryDinvoiceForBill)
THEN DO:
/* Get DInvoiceVatRetByDInvoiceId */
for each tInnerQueryDinvoiceForBill where
tInnerQueryDinvoiceForBill.tcDInvoiceType <> {&INVOICETYPE-CREDITNOTECORRECTION} and
tInnerQueryDinvoiceForBill.tcDInvoiceType <> {&INVOICETYPE-INVOICECORRECTION} and
tInnerQueryDinvoiceForBill.tcPaymentConditionPaymentTyp <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} and
(tInnerQueryDinvoiceForBill.tdDInvoiceBalanceDebitTC <> 0 or
tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> 0)
break by tInnerQueryDinvoiceForBill.tiDInvoice_ID:
if first-of (tInnerQueryDinvoiceForBill.tiDInvoice_ID)
then do:
if vcDInvoiceIDList = ""
then do:
assign vcDInvoiceIDList = string(tInnerQueryDinvoiceForBill.tiDInvoice_ID).
end.
else do:
assign vcDInvoiceIDList = vcDInvoiceIDList + "," + string(tInnerQueryDinvoiceForBill.tiDInvoice_ID).
end.
/* 40 is the length of Field Name(DInvoiceVat1.DInvoice_ID*/
viLengthOfQueryString = viLengthOfQueryString + length(string(tInnerQueryDinvoiceForBill.tiDInvoice_ID), "CHARACTER") + 40.
/*To avoid 32K issue for query string, leave 2000 for query skeleton*/
if viLengthOfQueryString > 8000 then
do:
/*Just Read the DInvoiceVat record which DInvoiceVatIsAbsRet = true*/
<Q-35 run DInvoiceVatRetByDInvoiceId (first) (Append) (NoCache)
(input vcDInvoiceIDList, (DInvoiceId)
output dataset tqDInvoiceVatRetByDInvoiceId) in BDInvoice>
assign vcDInvoiceIDList = ""
viLengthOfQueryString = 0.
end. /* end if viLengthOfQueryString > 8000 */
end. /* end first-of (tInnerQueryDinvoiceForBill.tiDInvoice_ID) */
end. /* end for each tInnerQueryDinvoiceForBill */
if vcDInvoiceIDList <> "" and vcDInvoiceIDList <> ? then
do:
/*When the length of IDList is less than upper limit(9000),
or when there exists a remainder of the division (a/b), execute the query again.*/
/*Just Read the DInvoiceVat record which DInvoiceVatIsAbsRet = true*/
<Q-58 run DInvoiceVatRetByDInvoiceId (first) (Append) (NoCache)
(input vcDInvoiceIDList, (DInvoiceId)
output dataset tqDInvoiceVatRetByDInvoiceId) in BDInvoice>
end.
/* End - Get DInvoiceVatRetByDInvoiceId */
/* Create tDInvoiceToBill */
for each tInnerQueryDinvoiceForBill where
tInnerQueryDinvoiceForBill.tcPaymentConditionPaymentTyp <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED}
break by tInnerQueryDinvoiceForBill.tiDInvoice_ID:
<Q-37 run BillScheduleForDueDate (all) (Read) (NoCache)
(input tInnerQueryDinvoiceForBill.tcBillScheduleCode, (BillScheduleCode)
output dataset tqBillScheduleForDueDate) in BBillSchedule>
find first tqBillScheduleForDueDate no-error.
if available tqBillScheduleForDueDate then
do:
if tqBillScheduleForDueDate.tcBillScheduleSelectInvBasedOn = {&BILLSCHEDULESELECTINV-INVDATE} then
do:
if (itInvoiceDateFrom <> ? and
tInnerQueryDinvoiceForBill.ttDInvoiceDate > itInvoiceDateTo or
tInnerQueryDinvoiceForBill.ttDInvoiceDate < itInvoiceDateFrom) or
(itInvoiceDateFrom = ? and
itInvoiceDateTo <> ? and
tInnerQueryDinvoiceForBill.ttDInvoiceDate > itInvoiceDateTo) then next.
end.
else
do:
if (itInvoiceDateFrom <> ? and
tInnerQueryDinvoiceForBill.ttDInvoiceDueDate > itInvoiceDateTo or
tInnerQueryDinvoiceForBill.ttDInvoiceDueDate < itInvoiceDateFrom) or
(itInvoiceDateFrom = ? and
itInvoiceDateTo <> ? and
tInnerQueryDinvoiceForBill.ttDInvoiceDueDate > itInvoiceDateTo) then next.
end.
end.
assign vlIsRemove = true.
/* IsOverwriteDueDate is not check and Bill Date is not null */
if tInnerQueryDinvoiceForBill.ttDInvoiceBillDate <> ? and
ilIsOverwriteDueDate = no
then do:
<M-78 run ApiGetBillingDueDate
(input tInnerQueryDinvoiceForBill.ttDInvoiceBillDate (itInvDate),
input tInnerQueryDinvoiceForBill.tcBillScheduleCode (icBillScheduleCode),
input viCompanyId (iiCompanyId),
input tInnerQueryDinvoiceForBill.ttDInvoiceBillDate (itInvDueDate),
input itInvoiceDateFrom (itFilterRefDateFrom),
input itInvoiceDateTo (itFilterRefDateTo),
input true (ilCheckHoliday),
input true (ilIsBillDateExisting),
output vlIsRemove (olIsRemove),
output vtBillDate (otBillDate),
output vtBillDueDate (otBillDueDate),
output oiReturnStatus (oiReturnStatus)) in BBill>
end.
/* IsOverwriteDueDate and FixedDuedDate is not null */
else do:
find first tApiBillingDueDateCache where
tApiBillingDueDateCache.tiCompanyId = tInnerQueryDinvoiceForBill.tiCompany_ID and
tApiBillingDueDateCache.tcBillingScheduleCode = tInnerQueryDinvoiceForBill.tcBillScheduleCode and
tApiBillingDueDateCache.ttDInvoiceDate = tInnerQueryDinvoiceForBill.ttDInvoiceDate and
tApiBillingDueDateCache.ttDInvoiceDueDate = tInnerQueryDinvoiceForBill.ttDInvoiceDueDate no-error.
if not available tApiBillingDueDateCache then do:
if itFixedDueDate <> ? then do:
<M-80 run ApiGetBillingDueDate
(input itFixedDueDate (itInvDate),
input tInnerQueryDinvoiceForBill.tcBillScheduleCode (icBillScheduleCode),
input viCompanyId (iiCompanyId),
input itFixedDueDate (itInvDueDate),
input itInvoiceDateFrom (itFilterRefDateFrom),
input itInvoiceDateTo (itFilterRefDateTo),
input true (ilCheckHoliday),
input false (ilIsBillDateExisting),
output vlIsRemove (olIsRemove),
output vtBillDate (otBillDate),
output vtBillDueDate (otBillDueDate),
output oiReturnStatus (oiReturnStatus)) in BBill>
assign vtBillDate = itFixedDueDate
vlIsRemove = false.
end.
else do:
<M-28 run ApiGetBillingDueDate
(input tInnerQueryDinvoiceForBill.ttDInvoiceDate (itInvDate),
input tInnerQueryDinvoiceForBill.tcBillScheduleCode (icBillScheduleCode),
input viCompanyId (iiCompanyId),
input tInnerQueryDinvoiceForBill.ttDInvoiceDueDate (itInvDueDate),
input itInvoiceDateFrom (itFilterRefDateFrom),
input itInvoiceDateTo (itFilterRefDateTo),
input true (ilCheckHoliday),
input false (ilIsBillDateExisting),
output vlIsRemove (olIsRemove),
output vtBillDate (otBillDate),
output vtBillDueDate (otBillDueDate),
output oiReturnStatus (oiReturnStatus)) in BBill>
end.
create tApiBillingDueDateCache.
assign tApiBillingDueDateCache.tcBillingScheduleCode = tInnerQueryDinvoiceForBill.tcBillScheduleCode
tApiBillingDueDateCache.tiCompanyId = tInnerQueryDinvoiceForBill.tiCompany_ID
tApiBillingDueDateCache.ttDInvoiceDate = tInnerQueryDinvoiceForBill.ttDInvoiceDate
tApiBillingDueDateCache.ttDInvoiceDueDate = tInnerQueryDinvoiceForBill.ttDInvoiceDueDate
tApiBillingDueDateCache.ttBillDate = vtBillDate
tApiBillingDueDateCache.ttBillDueDate = vtBillDueDate
tApiBillingDueDateCache.tlIsRemove = vlIsRemove.
end. /* if not available tApiBillingDueDateCache then do: */
else do:
if tApiBillingDueDateCache.tlIsRemove = false then do:
assign vtBillDate = tApiBillingDueDateCache.ttBillDate
vtBillDueDate = tApiBillingDueDateCache.ttBillDueDate
vlIsRemove = false.
end.
end.
end.
/* DInvoice no need to be removed */
if vlIsRemove = false
then do:
create tDInvoiceToBill.
buffer-copy tInnerQueryDinvoiceForBill to tDinvoiceToBill.
/* IsOverwriteDueDate or Bill Date is null */
if ilIsOverwriteDueDate or tDInvoiceToBill.ttDInvoiceBillDate = ? then
assign tDInvoiceToBill.ttDInvoiceBillDate = vtBillDate
tDInvoiceToBill.ttBillDueDate = vtBillDueDate.
/* IsOverwriteDueDate is not check and Bill Date is not null */
else assign tDInvoiceToBill.ttBillDueDate = vtBillDueDate.
assign tDInvoiceToBill.tlDInvoiceIsSelected = yes
tDInvoiceToBill.tcDInvoiceBalanceCrDt = if tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> 0 and
tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> ?
then {&CREDITDEBITABBREVIATION-CREDIT}
else {&CREDITDEBITABBREVIATION-DEBIT}
tDInvoiceToBill.tcDInvoiceReference = string(tInnerQueryDinvoiceForBill.tiPeriodYear) + "/":U +
tInnerQueryDinvoiceForBill.tcJournalCode + "/":U +
string(tInnerQueryDinvoiceForBill.tiDInvoiceVoucher, "999999999":U) + "/":U +
tInnerQueryDinvoiceForBill.tcDInvoiceDescription
tDInvoiceToBill.tdDInvoiceBalance = if tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> 0 and
tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> ?
then tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC
else tInnerQueryDinvoiceForBill.tdDInvoiceBalanceDebitTC
tDInvoiceToBill.tdVatBaseTC = if tInnerQueryDinvoiceForBill.tdDInvoiceVatBaseDebitTC <> 0 and tInnerQueryDinvoiceForBill.tdDInvoiceVatBaseDebitTC <> ? then tInnerQueryDinvoiceForBill.tdDInvoiceVatBaseDebitTC else tInnerQueryDinvoiceForBill.tdDInvoiceVatBaseCreditTC
tDInvoiceToBill.tcVatBaseCrDt = if tInnerQueryDinvoiceForBill.tdDInvoiceVatBaseDebitTC <> 0 and tInnerQueryDinvoiceForBill.tdDInvoiceVatBaseDebitTC <> ? then {&CREDITDEBITABBREVIATION-DEBIT} else {&CREDITDEBITABBREVIATION-CREDIT}
tDInvoiceToBill.tdVatTC = if tInnerQueryDinvoiceForBill.tdDInvoiceVatDebitTC <> 0 and tInnerQueryDinvoiceForBill.tdDInvoiceVatDebitTC <> ? then tInnerQueryDinvoiceForBill.tdDInvoiceVatDebitTC else tInnerQueryDinvoiceForBill.tdDInvoiceVatCreditTC
tDInvoiceToBill.tcVatCrDt = if tInnerQueryDinvoiceForBill.tdDInvoiceVatDebitTC <> 0 and tInnerQueryDinvoiceForBill.tdDInvoiceVatDebitTC <> ? then {&CREDITDEBITABBREVIATION-DEBIT} else {&CREDITDEBITABBREVIATION-CREDIT}
vdInvoiceAmount = if tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> 0 and
tInnerQueryDinvoiceForBill.tdDInvoiceBalanceCreditTC <> ?
then tInnerQueryDinvoiceForBill.tdDInvoiceOriginalCreditTC
else tInnerQueryDinvoiceForBill.tdDInvoiceOriginalDebitTC
vdDefaultDiscountAmount = 0
vdDefaultPaymentAmount = 0
vdInvoiceTotalTC = 0
vlProposePayment = false
vlDInvoiceIsWithOneBank = false
tDInvoiceToBill.tdDInvoiceBalanceTCSigned = if tDInvoiceToBill.tcDInvoiceBalanceCrDt = {&CREDITDEBITABBREVIATION-CREDIT}
then (0 - tDInvoiceToBill.tdDInvoiceBalance)
else tDInvoiceToBill.tdDInvoiceBalance.
if tInnerQueryDinvoiceForBill.tcDInvoiceType = {&INVOICETYPE-DEDUCTION}
then do:
<Q-86 run GetDeductionDetailByInvoiceID (all) (Read) (NoCache)
(input ?, (CompanyId)
input tInnerQueryDinvoiceForBill.tiDInvoice_ID, (InvoiceID)
output dataset tqGetDeductionDetailByInvoiceID) in BDInvoice>
for each tqGetDeductionDetailByInvoiceID no-lock:
assign tDInvoiceToBill.tdDeductionTC = tDInvoiceToBill.tdDeductionTC + tqGetDeductionDetailByInvoiceID.tdDInvoiceDeductionTC
tDInvoiceToBill.tcDeductionCatCode = if tDInvoiceToBill.tcDeductionCatCode = '':U then tqGetDeductionDetailByInvoiceID.tcDeductionCatCode
else trim(#T-27'See details':20(648722267)T-27#)
tDInvoiceToBill.tcDInvoiceDeductionStatus = if tDInvoiceToBill.tcDInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-REJECTED} then {&INVOICEDEDUCTSTATUS-REJECTED}
else if tDInvoiceToBill.tcDInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-REJECTED} then {&INVOICEDEDUCTSTATUS-REJECTED}
else if tDInvoiceToBill.tcDInvoiceDeductionStatus = '':U then tqGetDeductionDetailByInvoiceID.tcDInvoiceDeductionStatus
else trim(#T-20'See details':20(648722267)T-20#).
end. /* end for each tqGetDeductionDetailByInvoiceID */
end. /* end if tInnerQueryDinvoiceForBill.tcDInvoiceType = {&INVOICETYPE-DEDUCTION} */
if can-find (first tqDInvoiceVatRetByDInvoiceId where
tqDInvoiceVatRetByDInvoiceId.tiDInvoice_ID = tDInvoiceToBill.tiDInvoice_ID)
then do:
assign tDInvoiceToBill.tdVatTC = tInnerQueryDinvoiceForBill.tdDInvoiceVatCreditTC - tInnerQueryDinvoiceForBill.tdDInvoiceVatDebitTC.
empty temp-table tqDInvoiceVatRetByDInvoiceId.
end.
if last-of (tInnerQueryDinvoiceForBill.tiDInvoice_ID)
then do:
assign vlDInvoiceIsWithOneBank = true.
end.
else do:
<Q-57 run DInvoiceBankByDInvoiceID (all) (Read) (NoCache)
(input tInnerQueryDinvoiceForBill.tiDInvoice_ID, (DInvoiceId)
output dataset tqDInvoiceBankByDInvoiceID) in BDInvoice>
find tqDInvoiceBankByDInvoiceID no-error.
if available tqDInvoiceBankByDInvoiceID
then assign vlDInvoiceIsWithOneBank = true.
end.
/* Propose payment if there is only one invoice bank or this is the first payment on the invoice */
if (vlDInvoiceIsWithOneBank or tDInvoiceToBill.tdDInvoiceBalance = vdInvoiceAmount) and
tInnerQueryDinvoiceForBill.tcPaymentConditionPaymentTyp <> {&PAYMENTCONDITIONPAYMENTTYPE-STAGED}
then assign vlProposePayment = true.
if vtBillDueDate <= tInnerQueryDinvoiceForBill.ttDInvoiceDiscountDueDate
then do:
/****************************************************************************************************************
Calculation of Discount Amount
==============================
1) In case of Discount Tax at Payment = YES
Discount Amount = Invoice amount with Tax *
((Invoice amount without Tax ?- Non-discountable amount) / Invoice amount without Tax) *
Discount % *
(Invoice open amount / Invoice amount with Tax).
2) In case of Discount Tax at Payment = NO
Discount Amount = (Invoice amount without Tax - Non-discountable amount) *
Discount % *
(Invoice open amount / Invoice amount with Tax).
*****************************************************************************************************************/
if tInnerQueryDinvoiceForBill.tlDInvoiceIsDiscTaxAtPaym = true
then assign vdInvoiceDefaultDiscountAmount = vdInvoiceAmount *
(((vdInvoiceAmount - tDInvoiceToBill.tdVatTC) - tDInvoiceToBill.tdDInvoiceNonDiscAmtTC) /
(vdInvoiceAmount - tDInvoiceToBill.tdVatTC)) *
(tInnerQueryDinvoiceForBill.tdPaymentConditionPercentage / 100) *
(tDInvoiceToBill.tdDInvoiceBalance / vdinvoiceAmount).
/* The discount calculation for discount at invoice or no tax discount is the same */
else assign vdInvoiceDefaultDiscountAmount = ((vdInvoiceAmount - tDInvoiceToBill.tdVatTC) - tDInvoiceToBill.tdDInvoiceNonDiscAmtTC) *
(tInnerQueryDinvoiceForBill.tdPaymentConditionPercentage / 100) *
(tDInvoiceToBill.tdDInvoiceBalance / vdinvoiceAmount).
end.
else assign vdInvoiceDefaultDiscountAmount = 0.
assign vdInvoiceDefaultPaymentAmount = tDInvoiceToBill.tdDInvoiceBalance - vdInvoiceDefaultDiscountAmount.
if vlProposePayment = true
then do:
assign vdDefaultDiscountAmount = vdDefaultDiscountAmount + vdInvoiceDefaultDiscountAmount *
tInnerQueryDinvoiceForBill.tdDInvoiceBankToPayTC / tDInvoiceToBill.tdDInvoiceBalance
vdDefaultPaymentAmount = vdDefaultPaymentAmount + vdInvoiceDefaultPaymentAmount *
tInnerQueryDinvoiceForBill.tdDInvoiceBankToPayTC / tDInvoiceToBill.tdDInvoiceBalance.
end.
if last-of (tInnerQueryDinvoiceForBill.tiDInvoice_ID)
then do:
if vlProposePayment
then do:
assign tDInvoiceToBill.tdDefaultDiscountAmount = <M-66 RoundAmount
(input vdDefaultDiscountAmount (idUnroundedAmount),
input ? (iiCurrencyID),
input tDInvoiceToBill.tcCurrencyCode (icCurrencyCode)) in BApplicationProperty>
tDInvoiceToBill.tdDefaultPaymentAmount = <M-48 RoundAmount
(input vdDefaultPaymentAmount (idUnroundedAmount),
input ? (iiCurrencyID),
input tDInvoiceToBill.tcCurrencyCode (icCurrencyCode)) in BApplicationProperty>
vdInvoiceTotalTC = tDInvoiceToBill.tdDefaultPaymentAmount +
tDInvoiceToBill.tdDefaultDiscountAmount.
/* Rounding difference compensation between dinvoice OpenAmount vs PaymentAmount */
if vlDInvoiceIsWithOneBank and
(vdInvoiceTotalTC <> tDInvoiceToBill.tdDInvoiceBalance)
then assign tDInvoiceToBill.tdDefaultPaymentAmount = tDInvoiceToBill.tdDefaultPaymentAmount +
tDInvoiceToBill.tdDInvoiceBalance - vdInvoiceTotalTC.
end.
else assign tDInvoiceToBill.tdDefaultDiscountAmount = 0
tDInvoiceToBill.tdDefaultPaymentAmount = 0.
end.
end.
end.
end.
<Q-23 run GetHolidayByYear (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input Year(itInvoiceDateTo), (Year)
output dataset tqGetHolidayByYear) in BHoliday>
find first tqGetHolidayByYear no-error.
if not available tqGetHolidayByYear then do:
<M-39 run SetMessage
(input trim(#T-83'Holidays have not been set up for the whole year.':255(283525564)T-83#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input string(vtLoopDate) (icFieldValue),
input 'W':U (icType),
input 3 (iiSeverity),
input ? (icRowid),
input 'qadfin-499784':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBill>
assign oiReturnStatus = 1.
leave.
end.
if oiReturnStatus < 0 then assign oiReturnStatus = 0.