project QadFinancials > class BCInvoice > method ReplaceCInvoicePosting
Parameters
icOrigCInvoiceRowId | input | character | |
icNewCInvoiceRowId | input | character | |
iiReplaceInvYear | input | integer | |
iiReplaceInvPeriod | input | integer | |
icReplaceInvJournal | input | character | |
iiReplaceInvVoucher | input | integer | |
itReplaceInvPostingDate | input | date | |
icReplaceInvDescription | input | character | |
icNewControlGLCode | input | character | |
icDivisionCode | input | character | |
icCostCentreCode | input | character | |
icProjectCode | input | character | |
oiCiPostingId | output | integer | |
oiMfPostingId | output | integer | |
oiBJournalEntryId | output | integer | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program3/bcinvoice.p)
/* ========================================================================================================== */
/* Replace posting created for original invoice beeing reversed and attach this new posting to new invoice */
/* ========================================================================================================== */
/* Parameters: (I) OrigCInvoiceRowId RowId of original invoice which was reversed */
/* (I) NewCInvoiceRowId RowId of new invoice which reverse original one */
/* (I) ReplaceInvYear Replace invoice year */
/* (I) ReplaceInvPeriod Replace invoice period */
/* (I) ReplaceInvJorunal Replace invoice journal */
/* (I) ReplaceInvVoucher Replace invoice voucher */
/* (I) ReplaceInvPostingDate Replace invoice posting date */
/* (I) ReplaceInvDescription Replace invoice description */
/* ========================================================================================================== */
assign oiReturnStatus = -98.
/* Get new invoice */
find tCInvoice where
tCInvoice.tc_Rowid = icNewCInvoiceRowId no-error.
if not available tCInvoice
then do:
assign vcMessage = #T-43'The system cannot find the date for the new (reverse) invoice.':255(69128)T-43#.
vcContext = "NewCInvoiceRowId=":U + icNewCInvoiceRowId.
<M-39 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'qadfin-798009':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input vcContext (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Create list of postings created for original (reversed) invoice */
assign vcPostingIdList = '':U.
for each bOrigCInvoicePosting where
bOrigCInvoicePosting.tc_ParentRowid = icOrigCInvoiceRowId:
assign vcPostingIdList = if vcPostingIdList = "":U
then string(bOrigCInvoicePosting.Posting_ID)
else vcPostingIdList + chr(4) + string(bOrigCInvoicePosting.Posting_ID).
end. /* for each tPendingVoucherUpdate */
/* Start comminication with journal entry component */
if viBJournalEntryCIID <> 0 and
viBJournalEntryCIID <> ?
then do:
<I-75 {bFcOpenInstance
&CLASS = "BJournalEntry"}>
end.
else do:
<I-35 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "true"
&CLASS = "BJournalEntry"}>
assign vlBJEIsStartedFromCI = true.
end.
assign viLocalReturn = 0.
POSTING_BLOCK:
do:
/* Load created posting for original invoice to instance of BJournal component */
if vcPostingIdList <> '':U
then do:
/* keep previous can be set on false because we only work with one invoice */
<M-44 run DataLoad
(input ? (icRowids),
input vcPostingIdList (icPkeys),
input ? (icObjectIds),
input ? (icFreeform),
input false (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0
then do:
assign vcMessage = #T-31'The system cannot reverse the original posting created for the reversed supplier invoice.':255(69126)T-31#
vcContext = "vcPostingIdList=":U + vcPostingIdList.
<M-92 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'qadfin-329827':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input vcContext (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
leave POSTING_BLOCK.
end.
end. /* if vcPostingIdList <> '':U */
if iiReplaceInvYear = ? and iiReplaceInvPeriod = ?
then do:
/* get the default period and year based on today */
assign vhFcComponent = ?.
<M-69 run GetDefaultPeriodDate
(input ? (iiYearIn),
input ? (iiPeriodIn),
input ? (itDateIn),
input true (ilOpenForPurchase),
input ? (ilOpenForSales),
input ? (ilOpenForInventory),
output iiReplaceInvYear (oiYear),
output iiReplaceInvPeriod (oiPeriod),
output vtDummy (otPostingDate),
output viFcReturnSuper (oiReturnStatus)) in BPeriod>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturn = 0 then assign viLocalReturn = viFcReturnSuper.
if viLocalReturn < 0 then leave POSTING_BLOCK.
end. /* end iiPeriodYear = ? ... */
/* Performe replace of original posting */
for each bOrigCInvoicePosting where
bOrigCInvoicePosting.tc_ParentRowID = icOrigCInvoiceRowId:
<M-55 run GetPostingRowidBasedOnPostingID
(input bOrigCInvoicePosting.Posting_ID (iiPostingID),
output vcPostingRowId (ocPostingRowid),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
if bOrigCInvoicePosting.CInvoicePostingType = {&INVOICEPOSTINGTYPE-INITIAL}
then do:
<M-9 run GetPostingHeaderByPostingId
(input bOrigCInvoicePosting.Posting_ID (iiPostingId),
input ? (icPostingRowID),
output viDummy (oiPostingYear),
output viDummy (oiPostingPeriod),
output vtDummy (otPostingDate),
output vcOrigJournalCode (ocPostingJournalCode),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
<M-82 run CreateReplaceEntry
(input vcPostingRowId (icPostingTcRowid),
input iiReplaceInvYear (iiNewPeriodYear),
input iiReplaceInvPeriod (iiNewPeriodPeriod),
input vcOrigJournalCode (icNewJournalCode),
input iiReplaceInvVoucher (iiNewVoucher),
input vtDummy (itNewPostingDate),
input icReplaceInvDescription (icNewPostingText),
output viNewPostingId (oiNewPostingID),
input ? (iiOriginVoucher),
input false (ilIsValidateJournalType),
input vcOrigJournalCode (icReportingJournalCode),
input viBQCrossCyPostingID (iiBQCrossCyPostingID),
input false (ilCallFromDaemon),
output viNewPostingLineID (oiNewPostingLineID),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
assign oiCiPostingId = viNewPostingId.
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
/* Create CInvoiceMovement for new (replace) invoice */
find bOrigCInvoiceMovement where
bOrigCInvoiceMovement.tc_ParentRowid = icOrigCInvoiceRowId and
bOrigCInvoiceMovement.CInvoiceMovementType = {&MOVEMENTTYPE-INITIAL} no-error.
if not available bOrigCInvoiceMovement
then do:
assign vcMessage = #T-79'The system cannot reverse the original posting created for the reversed supplier invoice. The system cannot find original INIT movement.':255(69127)T-79#.
vcContext = "CInvoice_ID=":U + string(bOrigCInvoicePosting.CInvoice_ID).
<M-16 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'qadfin-540167':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input vcContext (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign viLocalReturn = -1.
leave POSTING_BLOCK.
end.
<M-98 run AddDetailLine
(input 'CInvoiceMovement':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
buffer-copy bOrigCInvoiceMovement
except CInvoice_ID
CInvoiceMovement_ID
tc_ParentRowid
tc_Rowid
tc_Status
to tCInvoiceMovement.
<M-76 run GetPostingLineByGL
(input ? (icPostingRowId),
input viNewPostingId (iiPostingID),
input tCInvoice.tcControlGLCode (icGLCode),
output vcDummy (ocPostingLineRowId),
output tCInvoiceMovement.PostingLine_ID (oiPostingLineID),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
<M-42 run GetPostingInfoByPostingLineID
(input tCInvoiceMovement.PostingLine_ID (iiPostingLineID),
output tCInvoiceMovement.CInvoiceMovementPostDate (otPostingDate),
output tCInvoiceMovement.Period_ID (oiPeriodID),
output tCInvoiceMovement.CInvoiceMovementYearPeriod (oiPostingYearPeriod),
output vcDummy (ocJournalCode),
output vcDummy (ocJournalTypeCode),
output vcDummy (ocLayerTypeCode),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
/* Change control G/L account */
if icNewControlGLCode <> ? and
icNewControlGLCode <> "":U
then do:
<Q-65 run BusinessRelationByIDCodeIC (all) (Read) (NoCache)
(input ?, (BusinessRelationID)
input tCInvoice.tcBusinessRelationCode, (BusinessRelationCode)
input ?, (BusinessRelationIntercoCode)
input true, (BusinessRelationIsActive)
output dataset tqBusinessRelationByIDCodeIC) in BBusinessRelation>
find first tqBusinessRelationByIDCodeIC where
tqBusinessRelationByIDCodeIC.tcBusinessRelationCode = tCInvoice.tcBusinessRelationCode
no-lock no-error.
if available tqBusinessRelationByIDCodeIC then
assign vcBusinessRelationICCode = tqBusinessRelationByIDCodeIC.tcBusinessRelationICCode.
<M-4 run UpdatePostingLine
(input ? (icPostingLineRowId),
input tCInvoiceMovement.PostingLine_ID (iiPostingLineId),
input icNewControlGLCode (icNewGLCode),
input ? (iiNewGLId),
input true (ilIsUpdateGLAccount),
input icDivisionCode (icNewDivisionCode),
input true (ilIsUpdateDivision),
input icCostCentreCode (icNewCostCentreCode),
input true (ilIsUpdateCostCentre),
input icProjectCode (icNewProjectCode),
input true (ilIsUpdateProject),
input ? (idDebitTC),
input ? (idDebitCC),
input ? (idDebitLC),
input ? (idCreditTC),
input ? (idCreditCC),
input ? (idCreditLC),
input false (ilIsUpdateAmount),
input vcBusinessRelationICCode (icBusinessRelationIntercoCode),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
assign tCInvoice.tcControlGLCode = icNewControlGLCode
tCInvoice.ControlGL_ID = ?.
end.
end. /* if bOrigCInvoicePosting.CInvoicePostingType = {&INVOICEPOSTINGTYPE-INITIAL} */
else do:
<M-68 run GetPostingHeaderByPostingId
(input bOrigCInvoicePosting.Posting_ID (iiPostingId),
input ? (icPostingRowID),
output viDummy (oiPostingYear),
output viDummy (oiPostingPeriod),
output vtDummy (otPostingDate),
output vcOrigJournalCode (ocPostingJournalCode),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
<M-59 run CreateReplaceEntry
(input vcPostingRowId (icPostingTcRowid),
input iiReplaceInvYear (iiNewPeriodYear),
input iiReplaceInvPeriod (iiNewPeriodPeriod),
input vcOrigJournalCode (icNewJournalCode),
input 0 (iiNewVoucher),
input vtDummy (itNewPostingDate),
input icReplaceInvDescription (icNewPostingText),
output viNewPostingId (oiNewPostingID),
input ? (iiOriginVoucher),
input false (ilIsValidateJournalType),
input vcOrigJournalCode (icReportingJournalCode),
input viBQCrossCyPostingID (iiBQCrossCyPostingID),
input false (ilCallFromDaemon),
output viNewPostingLineID (oiNewPostingLineID),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
assign oiMfPostingId = viNewPostingId.
assign tCInvoice.CInvoiceBalanceCreditTC = tCInvoice.CInvoiceOriginalCreditTC
tCInvoice.CInvoiceBalanceDebitTC = tCInvoice.CInvoiceOriginalDebitTC
tCInvoice.CInvoiceBalanceCreditLC = tCInvoice.CInvoiceOriginalCreditLC
tCInvoice.CInvoiceBalanceDebitLC = tCInvoice.CInvoiceOriginalDebitLC
tCInvoice.CInvoiceBalanceCreditCC = tCInvoice.CInvoiceOriginalCreditCC
tCInvoice.CInvoiceBalanceDebitCC = tCInvoice.CInvoiceOriginaldebitCC
tCInvoice.CInvoiceBalanceTC = tCInvoice.CInvoiceBalanceDebitTC - tCInvoice.CInvoiceBalanceCreditTC
tCInvoice.CInvoiceBalanceLC = tCInvoice.CInvoiceBalanceDebitLC - tCInvoice.CInvoiceBalanceCreditLC
tCInvoice.CInvoiceBalanceCC = tCInvoice.CInvoiceBalanceDebitCC - tCInvoice.CInvoiceBalanceCreditCC
tCInvoice.CInvoiceIsOpen = tCInvoice.CInvoiceBalanceTC <> 0 or
tCInvoice.CInvoiceBalanceLC <> 0 or
tCInvoice.CInvoiceBalanceCC <> 0
tCInvoice.tc_Status = if tCInvoice.tc_Status = "":U
then "C":U
else tCInvoice.tc_Status.
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
end. /* else bOrigCInvoicePosting.CInvoicePostingType = {&INVOICEPOSTINGTYPE-INITIAL} */
/* Create CInvoicePosting record for new (replaced) posting */
<M-21 run AddDetailLine
(input 'CInvoicePosting':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
buffer-copy bOrigCInvoicePosting
except CInvoice_ID
CInvoicePosting_ID
tc_ParentRowid
tc_Rowid
tc_Status
to tCInvoicePosting.
assign tCInvoicePosting.Posting_ID = viNewPostingId.
<M-14 run GetCIRECPostingLineID
(input tCInvoicePosting.Posting_ID (iiPostingId),
output tCInvoicePosting.CIRECPostingLine_ID (oiCIRECPostingLineId),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
if viFcReturnSuper < 0 then leave POSTING_BLOCK.
for each tcinvoicevat where tCInvoiceVat.CInvoice_ID = tCInvoicePosting.CInvoice_ID and
tCInvoiceVat.tc_Status <> "D":U :
assign vipostingvatid = 0.
<M-17 run UpdateCinvoiceVatPostingVatID
(input tCInvoicePosting.Posting_ID (iiReversePostingid),
input tCInvoiceVat.TxclTaxCls (icTaxClass),
input tCInvoiceVat.TxtyTaxType (icTaxType),
input tCInvoiceVat.TxuTaxUsage (ictaxUsage),
input tCInvoiceVat.TxenvTaxEnv (icTaxEnv),
output vipostingvatid (oiPostingVatid),
input tCInvoiceVat.Vat_ID (iiVatid),
input tCInvoiceVat.tcVatCode (icvatcode),
output viFcReturnSuper (oiReturnStatus)) in BJournalEntry>
if viFcReturnSuper < 0 then viLocalReturn = viFcReturnSuper.
if vipostingvatid <> 0 and vipostingvatid <> ?
then
tCInvoiceVat.PostingVat_ID = vipostingvatid.
end.
end. /* for each bOrigCInvoicePosting where */
end. /* POSTING_BLOCK */
/* Close communication with journal entry component */
<I-8 {bFcCloseInstance
&CLASS = "BJournalEntry"}>
assign oiBJournalEntryId = viBJournalEntryCIID.
/* Return */
if viLocalReturn <> 0 then assign oiReturnStatus = viLocalReturn.
if oiReturnStatus = -98 then assign oiReturnStatus = 0.