| icCInvoiceRowId | input | character | |
| iiCInvoiceId | input | integer | |
| iiCreditorId | input | integer | |
| icCreditorCode | input | character | |
| idCInvoiceOriginalTC | input | decimal | |
| icPONbr | input | character | |
| icCurrencyCode | input | character | |
| icDocumentReference | input | character | |
| itCInvoiceTaxPointDate | input | date | |
| icShipFromTaxZone | input | character | |
| icShipToTaxZone | input | character | |
| icTxclTaxClass | input | character | |
| icTxuTaxUsage | input | character | |
| idCInvoiceExchangeRate | input | decimal | |
| idCInvoiceRateScale | input | decimal | |
| icPaymentConditionCode | input | character | |
| itCInvoicePostingDate | input | date | |
| ilCInvoiceIsTaxable | input | logical | |
| ilCreditorIsWHT | input | logical | True if Creditor is set up for withholding tax |
| icCInvoiceType | input | character | |
| ilShipToAddressIsTaxInCity | input | logical | |
| idCInvoiceVatExchangeRate | input | decimal | |
| idCInvoiceVatRateScale | input | decimal | |
| ilCInvoiceIsLogisticMatching | input | logical | |
| iiCInvoicePostingYear | input | integer | |
| iiCInvoicePostingPeriod | input | integer | |
| icDivisionCode | input | character | |
| icJournalCode | input | character | |
| iiCInvoiceVoucher | input | integer | |
| icCInvoiceReference | input | character | |
| icCInvoiceDescription | input | character | |
| idCInvoiceOriginalLC | input | decimal | |
| icCInvoiceCIText | input | character | |
| itCInvoiceDate | input | date | |
| icCostCentreCode | input | character | |
| icProjectCode | input | character | |
| icShipToCountryCode | input | character | |
| ilShipToCountryIsEUCountry | input | logical | |
| iiShipFromAddressId | input | integer | |
| iiShipToAddressId | input | integer | |
| ilMatchingPosting | input | logical | |
| icMFJournalCode | input | character | |
| icCInvoiceMFText | input | character | |
| icBusinessRelationCode | input | character | |
| iiInvControlGLProfileId | input | integer | |
| iiCnControlGLProfileId | input | integer | |
| icBusinessRelationICCode | input | character | |
| icShipFromCountryCode | input | character | |
| ilShipFromCountryIsEUCountry | input | logical | |
| ilCInvoiceIsInitialStatus | input | logical | |
| ilCInvoiceIsTaxExcluded | input | logical | |
| idCInvoiceCCExchangeRate | input | decimal | |
| idCInvoiceCCRateScale | input | decimal | |
| ocTxenvTaxEnv | output | character | |
| oiJEInstanceId | output | integer | |
| oiCIPostingId | output | integer | |
| oiMFPostingId | output | integer | |
| dOutputDefaultValuesGenInfo | output | dataset | dOutputDefaultValuesGenInfo: dataset that is used as output dataset for the different temp-tables returned by method DefaultValuesGeneralInfo. This consists of following tables: tApiCInvoice tApiCInvoiceBank tApiCInvoiceBankPayCode tApiCInvoicePO tApiCInvoiceVat tApiCInvoiceWHT |
| oiReturnStatus | output | integer | Return status of the method. |
if icCurrencyCode = ? then assign icCurrencyCode = "":U.
empty temp-table tAccount.
empty temp-table tApiCInvoice.
empty temp-table tApiCInvoiceBank.
empty temp-table tApiCInvoiceBankPayCode.
empty temp-table tApiCInvoicePO.
empty temp-table tApiCInvoiceVat.
empty temp-table tApiCInvoiceWHT.
empty temp-table tDefaultSafsCI.
if iiCreditorId = 0 or
iiCreditorId = ?
then do:
<M-1 run SetMessage
(input trim(subst(#T-1'Invalid supplier: &1.':255(2886)T-1#, icCreditorCode)) (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input icCInvoiceRowId (icRowid),
input 'QadFin-6989':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end. /* end iiCreditorId = 0 or .. */
if icCurrencyCode = "":U
then do:
assign vcMessage = trim(substitute(#T-16'The specified currency code: &1 is invalid.':150(167)T-16#, icCurrencyCode))
oiReturnStatus = -1.
<M-14 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input icCInvoiceRowId (icRowid),
input 'QadFin-9020':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end. /* end icCurrencyCode = "":U */
else do:
<Q-19 assign vlFcQueryRecordsAvailable = CurrencyPrim (NoCache)
(input icCurrencyCode, (CurrencyCode)
input ?, (Currency_ID)) in BCurrency >
if not vlFcQueryRecordsAvailable
then do:
assign vcMessage = trim(substitute(#T-18'The specified currency code: &1 is invalid.':150(167)T-18#, icCurrencyCode))
oiReturnStatus = -1.
<M-17 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input icCInvoiceRowId (icRowid),
input 'QadFin-9021':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end. /* end if not vlFcQueryRecordsAvailable */
end. /* end else end icCurrencyCode = "":U */
if (vcActivityCode = "InitialCreate":U and ilCInvoiceIsInitialStatus = false)
then do:
<M-9 run SetMessage
(input #T-10'You must select an invoice status code of type Initial for initial invoices.':255(69053)T-10# (icMessage),
input ' ':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input icCInvoiceRowId (icRowid),
input 'QadFin-7840':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end. /* end if (vcActivityCode = "InitialCreate":U and ilCInvoiceIsInitialStatus = false) */
if viCompanyCCId <> 0 and viCompanyCCId <> ? and (idCInvoiceCCExchangeRate = 0 or idCInvoiceCCExchangeRate = ?)
then do:
if icCurrencyCode = vcCompanyCC
then assign idCInvoiceCCExchangeRate = 1
idCInvoiceCCRateScale = 1.
if vlDomainIsStatutory = false
then assign idCInvoiceCCExchangeRate = idCInvoiceExchangeRate
idCInvoiceCCRateScale = idCInvoiceRateScale.
else do:
<M-52 run GetExRateByEntityInvoiceFlag
(input itCInvoiceDate (itCInvoiceDate),
input itCInvoicePostingDate (itCInvoicePostingDate),
input ? (iiFromCurrencyId),
input icCurrencyCode (icFromCurrencyCode),
input viCompanyCCId (iiToCurrencyId),
input vcCompanyCC (icToCurrencyCode),
input ? (iiExchangeRateTypeId),
input {&EXCHANGERATETYPE-STATUTORY} (icExchangeRateTypeCode),
output idCInvoiceCCExchangeRate (odCInvoiceExchangeRate),
output idCInvoiceCCRateScale (odCInvoiceRateScale),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or
oiReturnStatus = 0
then assign oiReturnStatus = viFcReturnSuper.
end. /* end else if vlDomainIsStatutory = false */
end. /* end if viCompanyCCId <> 0 and viCompanyCCId <> ? and (idCInvoiceCCExchangeRate = 0 or idCInvoiceCCExchangeRate = ?) */
/* Get default bank number for the selected supplier */
<M-2 run DefaultValuesBank
(input iiCreditorId (iiCreditorId),
input iiCInvoiceId (iiCInvoiceId),
input icCInvoiceRowId (icRowId),
input idCInvoiceOriginalTC (idCInvoiceOriginalTC),
output tApiCInvoiceBank (tApiCInvoiceBank),
output tApiCInvoiceBankPayCode (tApiCInvoiceBankPayCode),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or
oiReturnStatus = 0
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0
then return.
/* Tax stuff */
<M-4 run DefaultValuesTax
(input icCInvoiceRowId (icCInvoiceRowid),
input iiCInvoiceId (iiCInvoiceId),
input icCurrencyCode (icCurrencyCode),
input icDocumentReference (icDocumentReference),
input itCInvoiceTaxPointDate (itTaxPointDate),
input icShipFromTaxZone (icShipFromTaxZone),
input icShipToTaxZone (icShipToTaxZone),
input icTxclTaxClass (icTxclTaxClass),
input icTxuTaxUsage (icTxuTaxUsage),
input idCInvoiceOriginalTC (idInvoiceAmountTC),
input idCInvoiceExchangeRate (idExchangeRate),
input idCInvoiceRateScale (idExchangeRateScale),
input icPaymentConditionCode (icPaymentConditionCode),
input itCInvoicePostingDate (itPostingDate),
input ilCInvoiceIsTaxable (ilTaxable),
input ilCreditorIsWHT (ilCreditorIsWht),
input icCInvoiceType (icInvoiceType),
input ilShipToAddressIsTaxInCity (ilShipToAddressIsTaxInCity),
input idCInvoiceVatExchangeRate (idVatExchangeRate),
input idCInvoiceVatRateScale (idVatRateScale),
input ilCInvoiceIsLogisticMatching (ilIsLogisticMatching),
output ocTxenvTaxEnv (ocTxenvTaxEnv),
input ilCInvoiceIsTaxExcluded (ilCInvoiceIsTaxExcluded),
input itCInvoiceDate (itCInvoiceDate),
input idCInvoiceCCExchangeRate (idCCExchangeRate),
input idCInvoiceCCRateScale (idCCExchangeRateScale),
input iiShipToAddressId (iiShipToAddressID),
input iiShipFromAddressId (iiShipFromAddressID),
input icCreditorCode (icCreditorCode),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or
oiReturnStatus = 0
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0
then return.
for each tCInvoiceVat where
tCInvoiceVat.tc_Status <> "D":U:
create tApiCInvoiceVat.
raw-transfer tCInvoiceVat to tApiCInvoiceVat.
end. /* end for each tCInvoiceVat */
for each tCInvoiceWHT where
tCInvoiceWHT.tc_Status <> "D":U:
create tApiCInvoiceWHT.
raw-transfer tCInvoiceWHT to tApiCInvoiceWHT.
end. /* end for each tCInvoiceWHT */
/* Get Default Creditor SAF's here so they don't have to be fetched twice, in CreateCIPosting and CreateMFPosting */
<Q-7 run CreditorSafDefaultForCIDef (all) (Read) (NoCache)
(input iiCreditorId, (CreditorId)
output dataset tqCreditorSafDefaultForCIDef) in BCreditor >
for each tqCreditorSafDefaultForCIDef where
tqCreditorSafDefaultForCIDef.tiCreditor_ID = iiCreditorId:
create tDefaultSafsCI.
assign tDefaultSafsCI.tcSafCode = tqCreditorSafDefaultForCIDef.tcSafCode
tDefaultSafsCI.tcSafConceptCode = tqCreditorSafDefaultForCIDef.tcSafConceptCode.
end. /* end for each tqCreditorSafDefaultForCIDef where .. */
if (ilCInvoiceIsInitialStatus = false)
then do:
/* Start and/or Open BJournalEntry */
if viBJournalEntryCIId = 0 or
viBJournalEntryCIId = ?
then do:
<I-11 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "true"
&CLASS = "BJournalEntry"}>
assign vlBJEIsStartedFromCI = true.
end. /* end if viBJournalEntryCIId = 0 or .. */
else do:
<I-12 {bFcOpenInstance
&CLASS = "BJournalEntry"}>
end. /* end else if viBJournalEntryCIId = 0 or .. */
POSTINGBLOCK : DO :
/* Create CI Posting */
<M-5 run CreateCIPosting
(input iiCInvoiceId (iiCInvoiceId),
input iiCInvoicePostingYear (iiPeriodYear),
input iiCInvoicePostingPeriod (iiPeriodPeriod),
input itCInvoicePostingDate (itPostingDate),
input iiCreditorId (iiCreditorId),
input icCreditorCode (icCreditorCode),
input icCInvoiceType (icCInvoiceType),
input icDivisionCode (icDivisionCode),
input icJournalCode (icJournalCode),
input iiCInvoiceVoucher (iiVoucher),
input itCInvoiceTaxPointDate (itTaxPointDate),
input icCInvoiceReference (icReference),
input icCInvoiceDescription (icDescription),
input idCInvoiceOriginalTC (idInvoiceAmountTC),
input idCInvoiceOriginalLC (idInvoiceAmountLC),
input ? (idInvoiceAmountCC),
input icCurrencyCode (icCurrencyCode),
input idCInvoiceExchangeRate (idExchangeRate),
input idCInvoiceRateScale (idExchangeRateScale),
input icCInvoiceCIText (icCIText),
input '':U (icPostingType),
input '':U (icGlCode),
input icCostCentreCode (icCostCentreCode),
input icProjectCode (icProjectCode),
input false (ilOnlyControlAccount),
input icShipToCountryCode (icShipToCountryCode),
input icTxclTaxClass (icTxclTaxCls),
input icTxuTaxUsage (icTxuTaxUsage),
input ocTxenvTaxEnv (icTxenvTaxEnv),
input icPaymentConditionCode (icPaymentCondition),
input ilShipToAddressIsTaxInCity (ilIsTaxInCityFromShipTo),
input icPONbr (icPoNbr),
input ilCInvoiceIsTaxable (ilIsTaxable),
input icCostCentreCode (icControlCostCentreCode),
input icProjectCode (icControlProjectCode),
input iiShipFromAddressId (iiShipFromAddressId),
input iiShipToAddressId (iiShipToAddressId),
input ilCInvoiceIsLogisticMatching (ilIsLogisticMatching),
input false (ilGetDefaultSafs),
input icBusinessRelationCode (icBusinessRelationCode),
input ? (iiPrePayControlGLProfileId),
input iiInvControlGLProfileId (iiInvControlGLProfileId),
input iiCnControlGLProfileId (iiCnControlGLProfileId),
input icCInvoiceRowId (icCInvoiceRowid),
input icBusinessRelationICCode (icBusinessRelationInterCoCode),
input icShipFromCountryCode (icShipFromCountryCode),
input ilShipFromCountryIsEUCountry (ilShipFromCountryIsEUCountry),
input icShipFromTaxZone (icCreditorTaxZone),
input ilCInvoiceIsTaxExcluded (ilCInvoiceIsTaxExcluded),
input ilCInvoiceIsInitialStatus (ilIsInitialStatus),
input-output tApiCInvoiceVat (tApiCInvoiceVat),
input tDefaultSafsCI (tDefaultSafsCI),
input no (ilHandleCommunicationWithJE),
input-output viBJournalEntryCIID (biBJournalEntryId),
input-output oiCIPostingId (biPostingId),
input idCInvoiceCCExchangeRate (idExchangeRateCC),
input idCInvoiceCCRateScale (idExchangeRateScaleCC),
input itCInvoiceDate (itInvoiceDate),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or oiReturnStatus = 0
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0
then leave POSTINGBLOCK.
assign oiJEInstanceId = viBJournalEntryCIID.
/* Create MF Posting */
if ilMatchingPosting
then do:
<M-6 run CreateMFPosting
(input iiCInvoiceId (iiCInvoiceId),
input iiCInvoicePostingYear (iiPeriodYear),
input iiCInvoicePostingPeriod (iiPeriodPeriod),
input itCInvoicePostingDate (itPostingDate),
input iiCreditorId (iiCreditorId),
input icCreditorCode (icCreditorCode),
input icCInvoiceType (icCInvoiceType),
input icDivisionCode (icDivisionCode),
input icMFJournalCode (icJournalCode),
input 0 (iiVoucher),
input idCInvoiceOriginalTC (idInvoiceAmountTC),
input icCurrencyCode (icCurrencyCode),
input icCInvoiceMFText (icMFText),
input icCostCentreCode (icCostCentreCode),
input icProjectCode (icProjectCode),
input icCInvoiceDescription (icDescription),
input idCInvoiceExchangeRate (idExchangeRate),
input idCInvoiceRateScale (idExchangeRateScale),
input ilCInvoiceIsLogisticMatching (ilIsLogisticMatching),
input icBusinessRelationCode (icBusinessRelationCode),
input icBusinessRelationICCode (icBusinessRelationICCode),
input icCInvoiceRowId (icCInvoiceRowid),
input icCInvoiceReference (icCInvoiceReference),
input false (ilGetDefaultSafs),
input tAccount (tAccount),
input tApiCInvoiceVat (tApiCInvoiceVat),
input tDefaultSafsCI (tDefaultSafsCI),
input no (ilHandleCommunicationWithJE),
input ilCInvoiceIsTaxExcluded (ilCInvoiceIsTaxExcluded),
input itCInvoiceDate (itCInvoiceDate),
input idCInvoiceCCExchangeRate (idCCExchangeRate),
input idCInvoiceCCRateScale (idCCExchangeRateScale),
input-output oiMFPostingId (biPostingId),
output vcDummy (ocCInvoiceAllocationStatus),
output viDummy (oiBJournalEntryId),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or oiReturnStatus = 0
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0
then leave POSTINGBLOCK.
end. /* end if ilMatchingPosting */
END. /* end POSTINGBLOCK */
/* If an error was raised during the posting block then we want to remove any postings that might have been created from the instance*/
if oiReturnStatus < 0 and (oiCIPostingId <> 0 or oiMFPostingId <> 0)
then do:
<M-20 run MarkInstanceDataAsDeleted
(input string(oiCIPostingId) + ',' + string(oiMFPostingId) (icPostingIDToDelete),
input '' (icPostingLineIDToDelete),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper < 0 or oiReturnStatus = 0
then assign oiReturnStatus = viFcReturnSuper.
end. /* end if oiReturnStatus < 0 and (oiCIPostingId <> 0 or oiMFPostingId <> 0) */
<I-13 {bFcCloseInstance
&CLASS = "BJournalEntry"}>
if oiReturnStatus < 0 then return.
end. /* if not CInvoiceIsInitialStatus */
find tCInvoice where
tCInvoice.tc_Rowid = icCInvoiceRowId
no-error.
if available tCInvoice
then do:
create tApiCInvoice.
raw-transfer tCInvoice to tApiCInvoice.
end. /* end if available tCInvoice */