project QadFinancials > class BDInvoice > method CreateFinChgInvoices
Description
Create CreateFinChgInvoices :
create finChginvoice
create di posting, cinvoicemovement
update balance and status
create DInvoiceposting
Parameters
| tDIOpenBalance | input-output | temp-table | |
| iiBJournalEntryId | input | integer | |
| iiPostingId | input | integer | |
| ocNewRecordInfo | output | character | |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program3/bdinvoice.p)
/* Replace unknown value */
if iiBJournalEntryId = ? then assign iiBJournalEntryId = 0.
if iiPostingId = ? then assign iiPostingId = 0.
for each tDIOpenBalance where
tDIOpenBalance.tcDebtorCode <> "":U
no-lock:
/* create the invoice */
<M-2 run AddDetailLine (input 'DInvoice':U (icTable),
input '':U (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
assign tDInvoice.Company_ID = tDIOpenBalance.tiCompanyId
tDInvoice.DInvoicePostingPeriod = tDIOpenBalance.tiPeriodPeriod
tDInvoice.DInvoicePostingYear = tDIOpenBalance.tiPeriodYear
tDInvoice.tcDebtorCode = tDIOpenBalance.tcDebtorCode
tDInvoice.tcDivisionCode = tDIOpenBalance.tcDivisionCode
tDInvoice.tcJournalCode = tDIOpenBalance.tcJournalCode
tDInvoice.tcReasonCode = tDIOpenBalance.tcReasonCode
tDInvoice.DInvoicePostingDate = tDIOpenBalance.ttPostingDate
tDInvoice.DInvoiceType = tDIOpenBalance.tcInvoiceType
tDInvoice.DInvoiceDate = tDIOpenBalance.ttInvoiceDate
tDInvoice.DInvoiceTaxPointDate = tDIOpenBalance.ttInvoiceTaxPointDate
tDInvoice.DInvoiceDescription = tDIOpenBalance.tcInvoiceDescription
tDInvoice.tcCurrencyCode = tDIOpenBalance.tcTCCurrencyCode
tDInvoice.tcNormalPaymentConditionCode = tDIOpenBalance.tcNormalPaymentConditionCode
tDInvoice.DInvoiceExchangeRate = tDIOpenBalance.tdExchangeRateTCLC
tDInvoice.DInvoiceRateScale = if tDIOpenBalance.tdExchangeRateScale = 0 then 1 else tDIOpenBalance.tdExchangeRateScale
tDInvoice.DInvoiceTSMNumber = tDIOpenBalance.tcInvoiceTSMNumber
tDInvoice.DInvoiceDueDate = tDIOpenBalance.ttInvoiceDueDate
tDInvoice.DInvoiceDiscountDueDate = tDIOpenBalance.ttInvoiceDiscountDueDate
tDInvoice.DInvoiceDIText = tDIOpenBalance.tcPostingText
tDInvoice.DInvoiceIsOpen = true
tDInvoice.DInvoiceIsSelected = false
tDInvoice.DInvoiceIsPaymentAllowed = false
ocNewRecordInfo = if tDIOpenBalance.tcKey <> "":U
then tDIOpenBalance.tcKey + ",":U + string(tDInvoice.DInvoice_ID)
else "":U.
if tDIOpenBalance.tcPostingType = {&POSTINGTYPE-DEBIT}
then assign tDInvoice.DInvoiceOriginalDebitTC = tDIOpenBalance.tdInvoiceAmountTC
tDInvoice.DInvoiceOriginalDebitLC = tDIOpenBalance.tdInvoiceAmountLC
tDInvoice.DInvoiceOriginalDebitCC = tDIOpenBalance.tdInvoiceAmountCC
tDInvoice.tdDInvoiceOriginalTC = tDIOpenBalance.tdInvoiceAmountTC
tDInvoice.tdDInvoiceOriginalLC = tDIOpenBalance.tdInvoiceAmountLC.
else assign tDInvoice.DInvoiceOriginalCreditTC = tDIOpenBalance.tdInvoiceAmountTC
tDInvoice.DInvoiceOriginalCreditLC = tDIOpenBalance.tdInvoiceAmountLC
tDInvoice.DInvoiceOriginalCreditCC = tDIOpenBalance.tdInvoiceAmountCC
tDInvoice.tdDInvoiceOriginalTC = tDIOpenBalance.tdInvoiceAmountTC
tDInvoice.tdDInvoiceOriginalLC = tDIOpenBalance.tdInvoiceAmountLC.
if tDIOpenBalance.tiInvoiceVoucher = 0
then do:
/* Check the type of daybook to be used. */
if vlJournalQueryStarted = FALSE
then do:
<Q-81 run JournalBeginsForJEDefault (Start) in BJournal >
assign vlJournalQueryStarted = TRUE.
end. /* if vlJournalQueryStarted = FALSE. */
<Q-61 run JournalBeginsForJEDefault (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input tDIOpenBalance.tcJournalCode, (JournalCode)
input {&JOURNALCONTROL-LOGISTIC}, (JournalControl)
input '':U, (JournalTypeCode)
output dataset tqJournalBeginsForJEDefault) in BJournal >
find first tqJournalBeginsForJEDefault where
tqJournalBeginsForJEDefault.tcJournalCode = tDIOpenBalance.tcJournalCode and
tqJournalBeginsForJEDefault.tcJournalControl = {&JOURNALCONTROL-LOGISTIC}
no-lock no-error.
if available tqJournalBeginsForJEDefault
then
assign vlJournalIsOperational = TRUE.
else
assign vlJournalIsOperational = FALSE.
/* Voucher number generation. */
if vlCCNIsConsecutNr = TRUE and
vlJournalIsOperational = FALSE
then do:
assign tDIOpenBalance.tiInvoiceVoucher = viCCNTempDInvNbr
viCCNTempDInvNbr = viCCNTempDInvNbr + 1.
end. /* if vlCCNIsConsecutNr = TRUE */
else do:
/* Reserve a number for this sheet. */
/* This number will be released again by housekeeping if the */
/* transaction was not committed by then. */
assign vhFcComponent = ?.
<M-3 run GetNumber
(input tDIOpenBalance.tiCompanyId (iiCompanyId),
input tDIOpenBalance.tiPeriodYear (iiNumbrYear),
input tDIOpenBalance.tcJournalCode (icNumbrType),
output tDIOpenBalance.tiInvoiceVoucher (oiNumber),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0
then return.
end. /* NOT if vlCCNIsConsecutNr = TRUE */
end. /* if tDIOpenBalance.tiInvoiceVoucher = 0 */
assign tDInvoice.DInvoiceVoucher = tDIOpenBalance.tiInvoiceVoucher.
if not can-do(vcCommitNumber,tDInvoice.tc_Rowid)
then assign vcCommitNumber = vcCommitNumber + ",":U + tDInvoice.tc_Rowid.
<Q-4 run DebtorByDebtor (first) (Read) (NoCache)
(input tDIOpenBalance.tiCompanyId, (CompanyId)
input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressType)
input ?, (DebtorId)
input tDIOpenBalance.tcDebtorCode, (DebtorCode)
output dataset tqDebtorByDebtor) in BDebtor >
find first tqDebtorByDebtor no-error.
if not available tqDebtorByDebtor
then do:
assign vcMessage = (#T-15'The specified customer is not defined in the system.':255(49406)t-15#)
oiReturnStatus = -1.
<M-5 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-6001':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
return.
end. /* if not available tqDebtorByDebtor */
if tDInvoice.DInvoiceType = {&INVOICETYPE-PREPAYMENT}
then do:
if tDInvoice.tcNormalPaymentConditionCode = "":U or
tDInvoice.tcNormalPaymentConditionCode = ?
then assign tDInvoice.tcNormalPaymentConditionCode = tqDebtorByDebtor.tcNormalPaymentConditionCode.
end. /* if tDInvoice.DInvoiceType = {&INVOICETYPE-PREPAYMENT} */
/* default reason of debtor if not yet filled */
if tDInvoice.tcReasonCode = "":U
then assign tDInvoice.Reason_ID = if tqDebtorByDebtor.tiReason_ID = ? then 0 else tqDebtorByDebtor.tiReason_ID
tDInvoice.tcReasonCode = if tqDebtorByDebtor.tcReasonCode = ? then "":U else tqDebtorByDebtor.tcReasonCode.
/* default own vat number, transaction end country */
<Q-6 run CompanyPropertyByBusinessRel (first) (Read) (NoCache)
(input tDIOpenBalance.tiCompanyId, (CompanyId)
input ?, (AddressType)
output dataset tqCompanyPropertyByBusinessRel) in BCompanyProperty >
find first tqCompanyPropertyByBusinessRel no-error.
if available tqCompanyPropertyByBusinessRel
then assign tDInvoice.DInvoiceOwnVatNumber = tqCompanyPropertyByBusinessRel.tcAddressTaxIDState
tDInvoice.tcOwnVatNumberCountryCode = tqCompanyPropertyByBusinessRel.tcAddressCountryCode.
/* PTW */
<M-9 run GetDebtorVatNumber
(input tqDebtorByDebtor.tcDebtorCode (icDebtorCode),
input tqDebtorByDebtor.tcBillToDebtorCode (icBillToDebtorCode),
input tqDebtorByDebtor.tcDebtorTaxIDState (icDebtorTaxIDState),
input tqDebtorByDebtor.tcCountryCode (icDebtorCountryCode),
input tqDebtorByDebtor.tlCountryIsEUCountry (ilDebtorCountryIsEUCountry),
output tDInvoice.DInvoiceDebtorVatNumber (ocDebtorVatNumber),
output tDInvoice.tcDebVatNumberCountryCode (ocDebtorVatCountryCode),
output vlTransactionEndIsEUCountry (olDebtorVatCountryIsEUCountry),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
/* VAT currency rate - VAT currency itself is defaulted in IntialData */
<M-10 run GetVatExchangeRate (input tDInvoice.tcVatCurrencyCode (icOwnVatCurrencyCode),
input tDInvoice.VatCurrency_ID (iiOwnVatCurrencyId),
input tDInvoice.tcCurrencyCode (icDInvoiceCurrencyCode),
input tDInvoice.DInvoiceCurrency_ID (iiDInvoiceCurrencyId),
input tDInvoice.DInvoiceExchangeRate (idDInvoiceExchangeRate),
input tDInvoice.DInvoiceRateScale (idDInvoiceRateScale),
input tDInvoice.DInvoiceTaxPointDate (itTaxPointDate),
output tDInvoice.DInvoiceVatExchangeRate (odVatExchangeRate),
output tDInvoice.DInvoiceVatRateScale (odVatRateScale),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
/* Create bank record */
if (tDIOpenBalance.tiBankNumber_ID <> ? and tDIOpenBalance.tiBankNumber_ID <> 0) or
(tDIOpenBalance.tcBankNumber <> ? and tDIOpenBalance.tcBankNumber <> "":U)
then do:
<M-11 run AddDetailLine (input 'DInvoiceBank':U (icTable),
input tDInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
assign tDInvoiceBank.DInvoice_ID = tDInvoice.DInvoice_ID
tDInvoiceBank.BankNumber_ID = tDIOpenBalance.tiBankNumber_ID
tDInvoiceBank.tcBankNumber = tDIOpenBalance.tcBankNumber
tDInvoiceBank.DInvoiceBankToPayTC = tDIOpenBalance.tdInvoiceAmountTC
tDInvoiceBank.tcBankNumberExtension = tDIOpenBalance.tcBankNumberExtension
tDInvoiceBank.tiParentObject_ID = tDInvoice.Debtor_ID.
end. /* if (tDIOpenBalance.tiBankNumber_ID <> ? and */
else
if tDIOpenBalance.tcDebtorCode <> '' and tDIOpenBalance.tcDebtorCode <> ?
then do:
/* Get the Default BankNumber(s) of the Customer */
<Q-95 run BankNumberByDebtor (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input tDIOpenBalance.tcDebtorCode, (DebtorCode)
input ?, (Debtor_ID)
input TRUE, (BankNumberIsDefault)
output dataset tqBankNumberByDebtor) in BBankNumberQuery>
for first tqBankNumberByDebtor where
tqBankNumberByDebtor.tcDebtorCode = tDIOpenBalance.tcDebtorCode and
tqBankNumberByDebtor.tlBankNumberIsDefault :
<M-13 run AddDetailLine
(input 'DInvoiceBank':U (icTable),
input tDInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
assign tDInvoiceBank.DInvoice_ID = tDInvoice.DInvoice_ID
tDInvoiceBank.BankNumber_ID = tqBankNumberByDebtor.tiBankNumber_ID
tDInvoiceBank.tcBankNumber = tqBankNumberByDebtor.tcBankNumber
tDInvoiceBank.DInvoiceBankToPayTC = tDIOpenBalance.tdInvoiceAmountTC
tDInvoiceBank.tcBankNumberExtension = tqBankNumberByDebtor.tcBankNumberExtension
tDInvoiceBank.tiBankPayFormat_ID = tqBankNumberByDebtor.tiBankPayFormat_ID
tDInvoiceBank.tiParentObject_ID = tqBankNumberByDebtor.tiParentObject_ID.
end. /* for first tqBankNumberByDebtor */
end. /* tDIOpenBalance.tcDebtorCode <> '' */
/* di posting */
/* i don't use it but i have to give it as input parameter so i make it empty first */
empty temp-table tDInvoiceVat.
empty temp-table tDIAccount.
assign viPostingId = 0
viRepeatingPostingID = iiPostingId. /* to make sure that in case iiPostingId = 0, it stays 0 after the first run */
/* you don't work with taxes here, so you can left those parameters on unknown value */
<M-14 run CreateDIPosting
(input tDInvoice.DInvoice_ID (iiDInvoiceId),
input ? (iiPeriodId),
input tDIOpenBalance.tiPeriodYear (iiPeriodYear),
input tDIOpenBalance.tiPeriodPeriod (iiPeriodPeriod),
input tDIOpenBalance.ttPostingDate (itPostingDate),
input ? (iiDebtorId),
input tDIOpenBalance.tcDebtorCode (icDebtorCode),
input tDIOpenBalance.tcInvoiceType (icDInvoiceType),
input ? (iiDivisionId),
input tDIOpenBalance.tcTransferAccountDivisionCode (icDivisionCode),
input ? (iiJournalId),
input tDIOpenBalance.tcJournalCode (icJournalCode),
input tDIOpenBalance.tiInvoiceVoucher (iiVoucher),
input tDIOpenBalance.ttInvoiceTaxPointDate (itTaxPointDate),
input tDIOpenBalance.tcInvoiceDescription (icDescription),
input tDIOpenBalance.tdInvoiceAmountTC (idInvoiceAmountTC),
input tDIOpenBalance.tdInvoiceAmountLC (idInvoiceAmountLC),
input tDIOpenBalance.tdInvoiceAmountCC (idInvoiceAmountCC),
input ? (iiCurrencyId),
input tDIOpenBalance.tcTCCurrencyCode (icCurrencyCode),
input tDIOpenBalance.tdExchangeRateTCLC (idExchangeRate),
input if tDIOpenBalance.tdExchangeRateScale = 0 then 1 else tDIOpenBalance.tdExchangeRateScale (idExchangeRateScale),
input tDIOpenBalance.tcPostingText (icDIText),
input tDIOpenBalance.ttInvoiceDate (itInvoiceDate),
input tDIOpenBalance.tcPostingType (icPostingType),
input-output viRepeatingPostingID (biPostingId),
input-output iiBJournalEntryId (biBJournalEntryId),
input tDIAccount (tDIAccount),
input-output tDInvoiceVat (tApiDInvoiceVat),
input tDIOpenBalance.tcTransferAccountGLCode (icGLCode),
input tDIOpenBalance.tcTransferAccountCostCentreCode (icCostCentreCode),
input tDIOpenBalance.tcTransferAccountProjectCode (icProjectCode),
input tDIOpenBalance.tlOnlyControlAccount (ilOnlyControlAccount),
input ? (icShipFromCountryCode),
input ? (icShipToCountryCode),
input ? (ilShipFromCountryIsEUCountry),
input ? (ilShipToCountryIsEUCountry),
input ? (icTxclTaxCls),
input ? (icTxuTaxUsage),
input ? (icShipToTxzTaxZone),
input ? (icTxenvTaxEnv),
input ? (icPaymentCondition),
input ? (ilIsTaxInCityFromShipTo),
input ? (ilIsTaxable),
input ? (icControlCostCentreCode),
input ? (icControlProjectCode),
input 0 (iiShipFromAddressId),
input 0 (iiShipToAddressId),
input '':U (icSoldToDebtorCode),
input ? (ilDInvoiceIsTaxExcluded),
input tqDebtorByDebtor.tcBusinessRelationCode (icBusinessRelationCode),
input tqDebtorByDebtor.tcBusinessRelationICCode (icBusinessRelationICCode),
input tqDebtorByDebtor.tiInvControlGLProfile_ID (iiInvControlGLProfileId),
input tqDebtorByDebtor.tiCnControlGLProfile_ID (iiCnControlGLProfileId),
input tqDebtorByDebtor.tiPrePayControlGLProfile_ID (iiPrepayControlGLProfileId),
input tqDebtorByDebtor.tiSalesAccountGLProfile_ID (iiSalesAccGLProfileId),
input tqDebtorByDebtor.tiFinChgGLProfile_ID (iiFinChgGLProfileId),
input tDIOpenBalance.tcDivisionCode (icControlDivisionCode),
input 0 (iiDeductionControlGLProfileId),
input ? (idExchangeRateCC),
input ? (idExchangeRateScaleCC),
output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
end. /* for each tDIOpenBalance */
if vlJournalQueryStarted = TRUE
then do:
<Q-38 run JournalBeginsForJEDefault (Stop) in BJournal >
assign vlJournalQueryStarted = FALSE.
end. /* if vlJournalQueryStarted = TRUE. */