project QadFinancials > class BCInvoice > method CreateCInvoicesValidate
Description
Validations for creation of creditor invoices
Parameters
| tOpenBalanceCI | input-output | temp-table | Open Balance |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program3/bcinvoice.p)
/* check if there is one record available */
find first tOpenBalanceCI where tOpenBalanceCI.tcCreditorCode <> "":U no-error.
if not available tOpenBalanceCI
then do:
assign oiReturnStatus = -1.
<M-1 run SetMessage
(input trim(#T-27'No input record found. You must define for which fields the value must default.':255(1236)T-27#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-662':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end.
for each tOpenBalanceCI where
tOpenBalanceCI.tcCreditorCode <> "":U:
/* Ensure the company-ID is set correctly */
if tOpenBalanceCI.tiCompanyId = 0 or
tOpenBalanceCI.tiCompanyId = ?
then assign tOpenBalanceCI.tiCompanyId = viCompanyId.
else if tOpenBalanceCI.tiCompanyId <> viCompanyId
then do :
assign vcMessage = trim(substitute(#T-12'The entity-ID of the invoice (&1) must match the entity-ID of the current-entity (&2)':255(97993011)T-12#, tOpenBalanceCI.tiCompanyId , viCompanyId))
oiReturnStatus = -1.
<M-85 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'qadfin-118224':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end. /* if tOpenBalanceCI.tiCompanyId <> viCompanyId */
/* replace unknown values */
if tOpenBalanceCI.tcAction = ? then assign tOpenBalanceCI.tcAction = "":U.
if tOpenBalanceCI.tcBankNumber = ? then assign tOpenBalanceCI.tcBankNumber = "":U.
if tOpenBalanceCI.tcCCCurrencyCode = ? then assign tOpenBalanceCI.tcCCCurrencyCode = "":U.
if tOpenBalanceCI.tiCompanyId = ? then assign tOpenBalanceCI.tiCompanyId = 0.
if tOpenBalanceCI.tcCreditorCode = ? then assign tOpenBalanceCI.tcCreditorCode = "":U.
if tOpenBalanceCI.tcReasonCode = ? then assign tOpenBalanceCI.tcReasonCode = "":U.
if tOpenBalanceCI.tcDivisionCode = ? then assign tOpenBalanceCI.tcDivisionCode = "":U.
if tOpenBalanceCI.tdExchangeRateTCLC = ? then assign tOpenBalanceCI.tdExchangeRateTCLC = 0.
if tOpenBalanceCI.tdExchangeRateScale = ? or tOpenBalanceCI.tdExchangeRateScale = 0 then assign tOpenBalanceCI.tdExchangeRateScale = 1.
if tOpenBalanceCI.tdInvoiceAmountLC = ? then assign tOpenBalanceCI.tdInvoiceAmountLC = 0.
if tOpenBalanceCI.tdInvoiceAmountTC = ? then assign tOpenBalanceCI.tdInvoiceAmountTC = 0.
if tOpenBalanceCI.tdInvoiceAmountCC = ? then assign tOpenBalanceCI.tdInvoiceAmountCC = 0.
if tOpenBalanceCI.tcInvoiceDescription = ? then assign tOpenBalanceCI.tcInvoiceDescription = "":U.
if tOpenBalanceCI.tcInvoiceReference = ? then assign tOpenBalanceCI.tcInvoiceReference = "":U.
if tOpenBalanceCI.tcInvoiceTSMNumber = ? then assign tOpenBalanceCI.tcInvoiceTSMNumber = "":U.
if tOpenBalanceCI.tcInvoiceType = ? then assign tOpenBalanceCI.tcInvoiceType = "":U.
if tOpenBalanceCI.tiInvoiceVoucher = ? then assign tOpenBalanceCI.tiInvoiceVoucher = 0.
if tOpenBalanceCI.tcJournalCode = ? then assign tOpenBalanceCI.tcJournalCode = "":U.
if tOpenBalanceCI.tcLCCurrencyCode = ? then assign tOpenBalanceCI.tcLCCurrencyCode = "":U.
if tOpenBalanceCI.tcNormalPaymentConditionCode = ? then assign tOpenBalanceCI.tcNormalPaymentConditionCode = "":U.
if tOpenBalanceCI.tcPaymentMeans = ? then assign tOpenBalanceCI.tcPaymentMeans = "":U.
if tOpenBalanceCI.tiPeriodPeriod = ? then assign tOpenBalanceCI.tiPeriodPeriod = 0.
if tOpenBalanceCI.tiPeriodYear = ? then assign tOpenBalanceCI.tiPeriodYear = 0.
if tOpenBalanceCI.tcPostingText = ? then assign tOpenBalanceCI.tcPostingText = "":U.
if tOpenBalanceCI.tcPostingType = ? then assign tOpenBalanceCI.tcPostingType = "":U.
if tOpenBalanceCI.tcTCCurrencyCode = ? then assign tOpenBalanceCI.tcTCCurrencyCode = "":U.
if tOpenBalanceCI.tcTransferAccountCostCentreCode = ? then assign tOpenBalanceCI.tcTransferAccountCostCentreCode = "":U.
if tOpenBalanceCI.tcTransferAccountDivisionCode = ? then assign tOpenBalanceCI.tcTransferAccountDivisionCode = "":U.
if tOpenBalanceCI.tcTransferAccountGLCode = ? then assign tOpenBalanceCI.tcTransferAccountGLCode = "":U.
if tOpenBalanceCI.tcTransferAccountProjectCode = ? then assign tOpenBalanceCI.tcTransferAccountProjectCode = "":U.
if tOpenBalanceCI.tlInvoiceIsERS = ? then assign tOpenBalanceCI.tlInvoiceIsERS = false.
if tOpenBalanceCI.tcVatCode = ? then assign tOpenBalanceCI.tcVatCode = "":U.
if tOpenBalanceCI.tdWHTFeeDebitTC = ? then assign tOpenBalanceCI.tdWHTFeeDebitTC = 0.
if tOpenBalanceCI.tdWHTFeeCreditTC = ? then assign tOpenBalanceCI.tdWHTFeeCreditTC = 0.
if tOpenBalanceCI.tdWHTExpenseDebitTC = ? then assign tOpenBalanceCI.tdWHTExpenseDebitTC = 0.
if tOpenBalanceCI.tdWHTExpenseCreditTC = ? then assign tOpenBalanceCI.tdWHTExpenseCreditTC = 0.
/* don't do a thing when it is not save */
if tOpenBalanceCI.tcAction <> {&DAEMONACTION-SAVE}
then do:
assign oiReturnStatus = -1.
<M-10 run SetMessage
(input trim(subst(#T-28'Action must be &1.':255(998684119)T-28#, {&DAEMONACTION-SAVE-TR})) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-707':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end.
/* ********************* */
/* Check the InvoiceType */
/* ********************* */
if tOpenBalanceCI.tcInvoiceType <> {&INVOICETYPE-INVOICE} and
tOpenBalanceCI.tcInvoiceType <> {&INVOICETYPE-CREDITNOTE} and
tOpenBalanceCI.tcInvoiceType <> {&INVOICETYPE-ADJUSTMENT} and
tOpenBalanceCI.tcInvoiceType <> {&INVOICETYPE-PREPAYMENT} and
tOpenBalanceCI.tcInvoiceType <> {&INVOICETYPE-INVOICECORRECTION} and
tOpenBalanceCI.tcInvoiceType <> {&INVOICETYPE-CREDITNOTECORRECTION}
then do:
assign vcMessage = trim(subst(#T-29'The invoice type must be &1, &2, &3, &4, &5, or &6.':255(13956)T-29#, {&INVOICETYPE-INVOICE-TR},{&INVOICETYPE-CREDITNOTE-TR},{&INVOICETYPE-ADJUSTMENT-TR},{&INVOICETYPE-PREPAYMENT-TR}, {&INVOICETYPE-INVOICECORRECTION-TR}, {&INVOICETYPE-CREDITNOTECORRECTION-TR}))
oiReturnStatus = -1.
<M-2 run SetMessage (input vcMessage (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcInvoiceType':U (icFieldName),
input tOpenBalanceCI.tcInvoiceType (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-663':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end.
/* ========================== */
/* check mandatory parameters */
/* ========================== */
if (tOpenBalanceCI.tiPeriodYear = 0 and tOpenBalanceCI.tiPeriodPeriod = 0) or
(tOpenBalanceCI.tcJournalCode = "":U)
then do:
assign oiReturnStatus = -1.
<M-5 run SetMessage
(input trim(#T-30'You must enter the GL period and daybook.':150(1064)T-30#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-665':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
/* ========================= */
/* posting date is mandatory */
/* ========================= */
if tOpenBalanceCI.ttPostingDate = ?
then do:
assign oiReturnStatus = -1.
<M-20 run SetMessage
(input trim(#T-31'You must enter the posting date.':150(1068)T-31#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1637':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
/* ========================== */
/* check Creditor Code */
/* ========================== */
if tOpenBalanceCI.tcCreditorCode = "":U
then do:
assign oiReturnStatus = -1.
<M-6 run SetMessage
(input trim(#T-32'You must enter the supplier.':150(1065)T-32#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-666':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
else do:
<Q-3 run CreditorPrim (all) (Read) (NoCache)
(input tOpenBalanceCI.tiCompanyId, (CompanyId)
input ?, (CreditorId)
input tOpenBalanceCI.tcCreditorCode, (CreditorCode)
output dataset tqCreditorPrim) in BCreditor >
find first tqCreditorPrim no-error.
if not available tqCreditorPrim
then do:
assign oiReturnStatus = -1.
<M-4 run SetMessage
(input trim(#T-33'The supplier is not defined in the system.':255(1134)T-33#) (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcCreditorCode':U (icFieldName),
input tOpenBalanceCI.tcCreditorCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-664':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end.
end.
/* ========================== */
/* check Posting Type */
/* ========================== */
if tOpenBalanceCI.tcPostingType = "":U
then do:
assign oiReturnStatus = -1.
<M-8 run SetMessage
(input trim(#T-34'You must enter the posting type.':150(1070)T-34#) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-667':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
else do:
assign vlFound = false
vcPostingTypes = {&POSTINGTYPES}.
do viCounter = num-entries(vcPostingTypes,chr(2)) to 2 by -1 :
if tOpenBalanceCI.tcPostingType = entry(viCounter,vcPostingTypes,chr(2))
then do:
assign vlFound = true.
leave.
end.
end.
if not vlFound
then do:
assign oiReturnStatus = -1.
<M-9 run SetMessage
(input trim(subst(#T-35'The posting type must be &1 or &2.':150(1071)T-35#,{&POSTINGTYPE-DEBIT-TR},{&POSTINGTYPE-CREDIT-TR})) (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcPostingType':U (icFieldName),
input tOpenBalanceCI.tcPostingType (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-668':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
end.
/* Creditor Invoice should be CREDIT, Creditor CreditNotes should be DEBIT */
if ((tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-INVOICE} or tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-INVOICECORRECTION}) and tOpenBalanceCI.tcPostingType <> {&POSTINGTYPE-CREDIT}) or
((tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-CREDITNOTE} or tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION}) and tOpenBalanceCI.tcPostingType <> {&POSTINGTYPE-DEBIT})
then do :
assign oiReturnStatus = -1.
<M-13 run SetMessage
(input trim(subst(#T-36'Posting type &1 is not valid for invoice type &2.':150(261087847)T-36#,tOpenBalanceCI.tcPostingType,tOpenBalanceCI.tcInvoiceType)) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1634':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
/* Get The JournalType */
<Q-16 run JournalByJournalLayerType (all) (Read) (NoCache)
(input ?, (JournalId)
input tOpenBalanceCI.tcJournalCode, (JournalCode)
input viCompanyId, (CompanyId)
input ?, (LayerTypeCode)
output dataset tqJournalByJournalLayerType) in BJournal >
find first tqJournalByJournalLayerType where
tqJournalByJournalLayerType.tcJournalCode = tOpenBalanceCI.tcJournalCode
no-error.
if not available tqJournalByJournalLayerType
then do:
assign oiReturnStatus = -1.
<M-19 run SetMessage
(input trim(#T-37'The daybook specified is not defined in the system.':150(1240)T-37#) (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcJournalCode':U (icFieldName),
input tOpenBalanceCI.tcJournalCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1636':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
else do :
/* Check the Invoice Type with the Journal Type */
if (tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-INVOICE} and tqJournalByJournalLayerType.tcJournalTypeCode <> {&JOURNALTYPE-CREDITORINVOICE}) or
(tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-INVOICECORRECTION} and tqJournalByJournalLayerType.tcJournalTypeCode <> {&JOURNALTYPE-CREDITORINVOICECORRECT}) or
(tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-CREDITNOTE} and tqJournalByJournalLayerType.tcJournalTypeCode <> {&JOURNALTYPE-CREDITORCREDITNOTE}) or
(tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION} and tqJournalByJournalLayerType.tcJournalTypeCode <> {&JOURNALTYPE-CREDITORCREDITNOTECORRECT}) or
(tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-ADJUSTMENT} and tqJournalByJournalLayerType.tcJournalTypeCode <> {&JOURNALTYPE-CREDITORADJUSTMENT})
then do :
assign oiReturnStatus = -1.
<M-18 run SetMessage
(input trim(subst(#T-38'Daybook &1 is not valid for invoice type &2.':150(1241)T-38#,tOpenBalanceCI.tcJournalCode,tOpenBalanceCI.tcInvoiceType)) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1635':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
if (tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-INVOICECORRECTION} or
tOpenBalanceCI.tcInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION}) and
tqJournalByJournalLayerType.tlJournalTypeIsCorrection = false
then do:
assign oiReturnStatus = -1.
<M-42 run SetMessage
(input trim(subst(#T-43'The daybook (&1) must be a correction daybook.':150(13969)T-43#,tOpenBalanceCI.tcJournalCode)) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-3150':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
end.
/* check if reason code does exist */
if tOpenBalanceCI.tcReasonCode <> "":U
then do:
<Q-25 run ReasonByIdCode (all) (Read) (NoCache)
(input ?, (ReasonId)
input tOpenBalanceCI.tcReasonCode, (ReasonCode)
output dataset tqReasonByIdCode) in BReason >
find first tqReasonByIdCode no-error.
if not available tqReasonByIdCode
then do:
assign oiReturnStatus = -1.
<M-24 run SetMessage
(input trim(#T-39'The invoice status code specified is not defined in the system.':150(1242)T-39#) (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcReasonCode':U (icFieldName),
input tOpenBalanceCI.tcReasonCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-2965':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
end.
/* Wouter - 27 jan 2005 : Test only on BankNumber when specified */
/* however, when not specified and creditor pays electronically, we continue */
if tOpenBalanceCI.tcBankNumber <> "":U
then do :
assign tOpenBalanceCI.tcBankNumber = replace(tOpenBalanceCI.tcBankNumber," ":U,"":U)
tOpenBalanceCI.tcBankNumber = replace(tOpenBalanceCI.tcBankNumber,".":U,"":U)
tOpenBalanceCI.tcBankNumber = replace(tOpenBalanceCI.tcBankNumber,"/":U,"":U)
tOpenBalanceCI.tcBankNumber = replace(tOpenBalanceCI.tcBankNumber,"-":U,"":U).
<Q-21 assign vlFcQueryRecordsAvailable = BankNumberPrim (NoCache)
(input ?, (BankNumberId)
input tqCreditorPrim.tiCreditor_ID, (ParentObjectId)
input tOpenBalanceCI.tcBankNumber, (BankNumber)
input tOpenBalanceCI.tcBankNumberExtension, (BankNumberExtension)
input ?, (BankPayFormatID)) in BBankNumber >
if not vlFcQueryRecordsAvailable
then do:
assign oiReturnStatus = -1.
<M-22 run SetMessage
(input trim(#T-41'The bank account number specified is not defined in the system.':150(1244)T-41#) (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcBankNumber':U (icFieldName),
input tOpenBalanceCI.tcBankNumber (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1640':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
end. /* tOpenBalanceCI.tcBankNumber <> "":U */
/* === Set the CC-amounts and / or CC-exchange-rate/scale in case they were left empty === */
if tOpenBalanceCI.tdInvoiceAmountCC = 0 or
tOpenBalanceCI.tdInvoiceAmountCC = ?
then do :
if viCompanyCCId = viCompanyLCId
then /* Set the CC-amount = LC-amount and set the CC-Rate/Scale = LC-Rate/Scale */
assign tOpenBalanceCI.tdInvoiceAmountCC = tOpenBalanceCI.tdInvoiceAmountLC
tOpenBalanceCI.tdExchangeRateTCCC = tOpenBalanceCI.tdExchangeRateTCLC
tOpenBalanceCI.tdCCExchangeRateScale = tOpenBalanceCI.tdExchangeRateScale.
else
if tOpenBalanceCI.tdInvoiceAmountTC <> 0 and
tOpenBalanceCI.tdInvoiceAmountTC <> ?
then do :
/* Retrieve the TCCC-Rate/Scale when empty */
if (tOpenBalanceCI.tdExchangeRateTCCC = 0 or
tOpenBalanceCI.tdExchangeRateTCCC = ?) and
(tOpenBalanceCI.tdCCExchangeRateScale = 0 or
tOpenBalanceCI.tdCCExchangeRateScale = ?)
then do :
/* Fill in the SC-amount and the TCCC-Rate/Scale based upon the TC-amount and Rate/Scale we retrieve */
<M-7 run GetExRateByEntityInvoiceFlag
(input tOpenBalanceCI.ttInvoiceDate (itCInvoiceDate),
input tOpenBalanceCI.ttPostingDate (itCInvoicePostingDate),
input ? (iiFromCurrencyId),
input tOpenBalanceCI.tcTCCurrencyCode (icFromCurrencyCode),
input viCompanyCCId (iiToCurrencyId),
input ? (icToCurrencyCode),
input 0 (iiExchangeRateTypeId),
input {&EXCHANGERATETYPE-STATUTORY} (icExchangeRateTypeCode),
output tOpenBalanceCI.tdExchangeRateTCCC (odCInvoiceExchangeRate),
output tOpenBalanceCI.tdCCExchangeRateScale (odCInvoiceRateScale),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or
(viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Return.
end. /* if (tOpenBalanceCI.tdExchangeRateTCCC = 0 or */
/* Fill in the SC-amount based upon the TC-amount and the TCCC-Rate/Scale */
assign tOpenBalanceCI.tdInvoiceAmountCC = <M-51 RoundAmount
(input tOpenBalanceCI.tdInvoiceAmountTC * tOpenBalanceCI.tdExchangeRateTCCC * tOpenBalanceCI.tdCCExchangeRateScale (idUnroundedAmount),
input viCompanyCCId (iiCurrencyID),
input ? (icCurrencyCode)) in BCInvoice>.
end. /* if tOpenBalanceCI.tdInvoiceAmountTC <> 0 and */
end. /* if tOpenBalanceCI.tdInvoiceAmountCC = 0 or */
if tOpenBalanceCI.tdInvoiceAmountCC <> 0 and
tOpenBalanceCI.tdInvoiceAmountCC <> ? and
tOpenBalanceCI.tdInvoiceAmountTC <> 0 and
tOpenBalanceCI.tdInvoiceAmountTC <> ? and
(tOpenBalanceCI.tdExchangeRateTCCC = 0 or
tOpenBalanceCI.tdExchangeRateTCCC = ?) and
(tOpenBalanceCI.tdCCExchangeRateScale = 0 or
tOpenBalanceCI.tdCCExchangeRateScale = ?)
then /* Fill in the TCCC-Rate/Scale based upon the TC-amount and the SC-amount */
assign tOpenBalanceCI.tdExchangeRateTCCC = tOpenBalanceCI.tdInvoiceAmountCC / tOpenBalanceCI.tdInvoiceAmountTC
tOpenBalanceCI.tdCCExchangeRateScale = 1.
/* Check for SC amount <> (Supplier TC * TCCC Exchange rate * Rate Scale) when TC Currency <> CC Currency */
if(vlDomainIsStatutory = true and
tOpenBalanceCI.tcTCCurrencyCode <> tOpenBalanceCI.tcCCCurrencyCode and
tOpenBalanceCI.tdInvoiceAmountCC <> 0 and
tOpenBalanceCI.tdInvoiceAmountCC <> ? and
tOpenBalanceCI.tdExchangeRateTCCC <> 0 and
tOpenBalanceCI.tdExchangeRateTCCC <> ? and
tOpenBalanceCI.tdCCExchangeRateScale <> 0 and
tOpenBalanceCI.tdCCExchangeRateScale <> ?)
then do:
assign tOpenBalanceCI.tdInvoiceAmountCC = <M-95 RoundAmount
(input tOpenBalanceCI.tdInvoiceAmountCC (idUnroundedAmount),
input viCompanyCCId (iiCurrencyID),
input ? (icCurrencyCode)) in BCInvoice>.
assign vdAmountCC = <M-77 RoundAmount
(input tOpenBalanceCI.tdInvoiceAmountTC * tOpenBalanceCI.tdExchangeRateTCCC * tOpenBalanceCI.tdCCExchangeRateScale (idUnroundedAmount),
input viCompanyCCId (iiCurrencyID),
input ? (icCurrencyCode)) in BCInvoice>.
vdRoundingDiff = absolute(vdAmountCC - tOpenBalanceCI.tdInvoiceAmountCC).
if vdRoundingDiff > 0.01
then do:
assign vcMessage = trim(subst(#T-82'There is a difference between the calculated Statutory Currency Amount &1 using the TC Invoice Amount &2 and Exchange Rate &3 compared to the SC Invoice Amount &4 . Please check.':255(306444220)T-82#,vdAmountCC,tOpenBalanceCI.tdInvoiceAmountTC,tOpenBalanceCI.tdExchangeRateTCCC,tOpenBalanceCI.tdInvoiceAmountCC))
oiReturnStatus = -1.
<M-26 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tOpenBalanceCI.tcInvoiceReference':U (icFieldName),
input tOpenBalanceCI.tcInvoiceReference (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'qadfin-629107':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
end. /* if(vlDomainIsStatutory = true and */
end. /* for each tOpenBalanceCI */