Description
This method accepts CInvoice_ID and create a copy of this invoice
Parameters
iiOriginalCInvoiceId | input | integer | |
ilClearData | input | logical | |
icNewJournal | input | character | |
itNewPostingDate | input | date | |
iiNewYear | input | integer | |
iiNewPeriod | input | integer | |
iiNewVoucher | input | integer | |
ilRemoveOrigCInvFromInstance | input | logical | |
ocNewInvRowId | output | character | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program3/bcinvoice.p)
/* =================================================================================================== */
/* Method : CopyIntoNew */
/* Desc : This method create a copy of the supplier invoice with the input CInvoiceId */
/* --------------------------------------------------------------------------------------------------- */
/* Params: (I) iiOriginalCInvoiceId id of supplier invoice to be copied */
/* (I) ilClearData flag to determine clear data of the instance or not */
/* (I) icNewJournal Journal code of the new invoice */
/* (I) itNewPostingDate Posting Date of the new invoice */
/* (I) iiNewYear Posting Year of the new invoice */
/* (I) iiNewPeriod Posting Period of the new invoice */
/* (I) iiNewVoucher Voucher Number of the new invoice */
/* =================================================================================================== */
assign oiReturnStatus = -98.
/* =================================================================================================== */
/* Normalize input parameters */
/* =================================================================================================== */
if iiOriginalCInvoiceId = 0 then assign iiOriginalCInvoiceId = ?.
if icNewJournal = "":U then assign icNewJournal = ?.
if iiNewYear = 0 then assign iiNewYear = ?.
if iiNewPeriod = 0 then assign iiNewPeriod = ?.
if iiNewVoucher = 0 then assign iiNewVoucher = ?.
/* =================================================================================================== */
/* Validate input parameters */
/* =================================================================================================== */
if iiOriginalCInvoiceId = ?
then do:
assign vcMessage = trim(#T-1'Invalid input supplier invoice id provided':255(69100)T-1#)
vcContext = "iiOriginalCInvoiceId = ?":U .
<M-2 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-7873':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input vcContext (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* =================================================================================================== */
/* Clear the intance data otherwise it causes issues when executed multiple times */
/* =================================================================================================== */
if ilClearData = true
then do:
<M-3 run ClearData (output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
end.
/* =================================================================================================== */
/* Load the origianl invoice if it not existing in the instance */
/* =================================================================================================== */
find first tCInvoice where
tCInvoice.CInvoice_ID = iiOriginalCinvoiceId
no-error.
if not available tCInvoice
then do:
<M-4 run DataLoad
(input '':U (icRowids),
input string(iiOriginalCinvoiceId) (icPkeys),
input '':U (icObjectIds),
input '':U (icFreeform),
input not ilClearData (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0
then do:
assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do:
assign vcMessage = trim(substitute(#T-5'Data could not be loaded: unable to load the supplier invoice with ID (&1)':255(69101)T-5#,iiOriginalCInvoiceId)).
<M-6 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'S':U (icType),
input 1 (iiSeverity),
input '':U (icRowid),
input 'QadFin-7874':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
return.
end. /* if viFcReturnSuper < 0 */
end. /* if viFcReturnSuper <> 0 */
end. /* if not available tCInvoice */
/* =================================================================================================== */
/*Create CInvoice CIvnoiceBank CInvoiceBankPayCode CInvoicePO CInvoiceStage CInvoiceVat CInvoiceWHT */
/* =================================================================================================== */
/* Create CInvoice Record and copy the data in the original invoice to it */
find first bCInvoice where
bCInvoice.CInvoice_ID = iiOriginalCInvoiceId
no-error.
<M-9 run AddDetailLine
(input 'CInvoice':U (icTable),
input '':U (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
assign viOriginalPostingYear = tCInvoice.CInvoicePostingYear.
buffer-copy bCInvoice
except bCInvoice.CInvoice_ID
bCInvoice.tc_ParentRowId
bCInvoice.tc_RowId
bCInvoice.tc_Status
bCInvoice.LinkedCInvoice_ID
bCInvoice.CInvoiceRegistrationNr
to tCInvoice.
assign tCInvoice.CInvoicePostingYear = (if iiNewYear <> ? then iiNewYear else tCInvoice.CInvoicePostingYear)
tCInvoice.CInvoicePostingPeriod = (if iiNewPeriod <> ? then iiNewPeriod else tCInvoice.CInvoicePostingPeriod)
tCInvoice.tcJournalCode = (if icNewJournal <> ? then icNewJournal else tCInvoice.tcJournalCode)
tCInvoice.CInvoiceVoucher = (if iiNewVoucher <> ? then iiNewVoucher else tCInvoice.CInvoiceVoucher)
tCInvoice.CInvoiceTaxPointDate = (if itNewPostingDate <> ? and itNewPostingDate <> tCInvoice.CInvoicePostingDate then itNewPostingDate else tCInvoice.CInvoiceTaxPointDate)
tCInvoice.CInvoicePostingDate = (if itNewPostingDate <> ? then itNewPostingDate else tCInvoice.CInvoicePostingDate).
if iiNewVoucher = ?
then do:
/* Initate the CInvoiceVoucher */
/* ============================================== */
/* Check if consecutive numbering is enabled. */
/* If so, use a temporary number. */
/* Otherwise use standard numbering functionality */
/* ============================================== */
if vlCIDomainIsConsecutNr = true and
(tCInvoice.CInvoiceType <> {&INVOICETYPE-PREPAYMENT} and
tCInvoice.CInvoiceType <> {&INVOICETYPE-ADJUSTMENT})
then assign viTempCInvoiceVoucher = viTempCInvoiceVoucher + 1
tCInvoice.CInvoiceVoucher = viTempCInvoiceVoucher.
else do:
assign vhFcComponent = ?.
<M-19 run GetNumber
(input viCompanyId (iiCompanyId),
input tCInvoice.CInvoicePostingYear (iiNumbrYear),
input tCInvoice.tcJournalCode (icNumbrType),
output tCInvoice.CInvoiceVoucher (oiNumber),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
end. /* else do: */
end.
/* Registration number */
if viOriginalPostingYear <> tCInvoice.CInvoicePostingYear
then do:
assign vhFcComponent = ?.
<M-22 run ReleaseNumber
(input viCompanyId (iiCompanyId),
input 9999 (iiNumbrYear),
input {&SUPPLIERINVOICEREGNUMBER} (icNumbrType),
input tCInvoice.CInvoiceRegistrationNr (iiNumbr),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
assign vhFcComponent = ?.
<M-20 run GetNumber
(input viCompanyId (iiCompanyId),
input 9999 (iiNumbrYear),
input {&SUPPLIERINVOICEREGNUMBER} (icNumbrType),
output tCInvoice.CInvoiceRegistrationNr (oiNumber),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
end.
assign ocNewInvRowId = tCInvoice.tc_Rowid.
/* Create CInvoiceBank and CInvoiceBankPayCode records */
for each bCInvoiceBank where
bCInvoiceBank.tc_ParentRowId = bCInvoice.tc_RowId:
<M-10 run AddDetailLine
(input 'CInvoiceBank':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
buffer-copy bCInvoiceBank
except bCInvoiceBank.CInvoice_ID
bCInvoiceBank.CInvoiceBank_ID
bCInvoiceBank.tc_ParentRowId
bCInvoiceBank.tc_RowId
bCInvoiceBank.tc_Status
to tCInvoiceBank.
assign tCInvoiceBank.CInvoice_ID = tCInvoice.CInvoice_ID.
for each bCInvoiceBankPayCode where
bCInvoiceBankPayCode.tc_ParentRowId = bCInvoiceBank.tc_RowId:
<M-11 run AddDetailLine
(input 'CInvoiceBankPayCode':U (icTable),
input tCInvoiceBank.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
buffer-copy bCInvoiceBankPayCode
except bCInvoiceBankPayCode.CInvoiceBank_ID
bCInvoiceBankPayCode.CInvoiceBankPayCode_ID
bCInvoiceBankPayCode.tc_ParentRowId
bCInvoiceBankPayCode.tc_RowId
bCInvoiceBankPayCode.tc_Status
to tCInvoiceBankPayCode.
assign tCInvoiceBankPayCode.CInvoiceBank_ID = tCInvoiceBank.CInvoiceBank_ID.
end. /* for each bCInvoiceBankPayCode */
end. /* for each bCInvoiceBank */
/* Create CInvoicePO record */
for each bCInvoicePO where
bCInvoicePO.tc_ParentRowId = bCInvoice.tc_RowId:
<M-12 run AddDetailLine
(input 'CInvoicePO':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
assign tCInvoicePO.CInvoice_ID = tCInvoice.CInvoice_ID
tCInvoicePO.CInvoicePOPoDomain = bCInvoicePO.CInvoicePOPoDomain
tCInvoicePO.CInvoicePOPoNbr = bCInvoicePO.CInvoicePOPoNbr.
end.
for each tCInvoicePO where
tCInvoicePO.tc_ParentRowid = tCInvoice.tc_Rowid and
(tCInvoicePO.CInvoicePOPoNbr = "":U or
tCInvoicePO.CInvoicePOPoNbr = ?):
delete tCInvoicePO.
end.
/* Create CInvoiceStage record */
for each bCInvoiceStage where
bCInvoiceStage.tc_ParentRowId = bCInvoice.tc_RowId:
<M-13 run AddDetailLine
(input 'CInvoiceStage':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
buffer-copy bCInvoiceStage
except bCInvoiceStage.CInvoice_ID
bCInvoiceStage.CInvoiceStage_ID
bCInvoiceStage.tc_ParentRowid
bCInvoiceStage.tc_Rowid
bCInvoiceStage.tc_Status
to tCInvoiceStage.
assign tCInvoiceStage.CInvoice_ID = tCInvoice.CInvoice_ID.
end.
/* Create CInvoiceVat record */
for each bCInvoiceVat where
bCInvoiceVat.tc_ParentRowId = bCInvoice.tc_RowId:
<M-48 run AddDetailLine
(input 'CInvoiceVat':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
buffer-copy bCInvoiceVat
except bCInvoiceVat.CInvoice_ID
bCInvoiceVat.CInvoiceVat_ID
bCInvoiceVat.tc_ParentRowId
bCInvoiceVat.tc_RowID
bCInvoiceVat.tc_Status
to tCInvoiceVat.
assign tCInvoiceVat.CInvoice_ID = tCInvoice.CInvoice_ID.
/* copy any related CInvoiceWHT records
as they have a reference to CInvoiceVat_ID it needs to be done here
*/
for each bCInvoiceWHT where
bCInvoiceWHT.tc_ParentRowId = bCInvoice.tc_RowId and
bCInvoiceWHT.CInvoiceVat_ID = bCInvoiceVat.CInvoiceVat_ID:
<M-59 run AddDetailLine
(input 'CInvoiceWHT':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
buffer-copy bCInvoiceWHT
except bCInvoiceWHT.CInvoice_ID
bCInvoiceWHT.CInvoiceWHT_ID
bCInvoiceWHT.CInvoiceVat_ID
bCInvoiceWHT.tc_ParentRowId
bCInvoiceWHT.tc_RowID
bCInvoiceWHT.tc_Status
to tCInvoiceWHT.
assign tCInvoiceWHT.CInvoice_ID = tCInvoice.CInvoice_ID
tCInvoiceWHT.CInvoiceVat_ID = tCInvoiceVat.CInvoiceVat_ID.
end. /* for each bCInvoiceWHT */
end.
/* Create CInvoiceWHT which are not related to CInvoiceVAT record
i.e. created manually */
for each bCInvoiceWHT where
bCInvoiceWHT.tc_ParentRowId = bCInvoice.tc_RowId and
(bCInvoiceWHT.CInvoiceVat_ID = ? or
bCInvoiceWHT.CInvoiceVat_ID = 0
):
<M-17 run AddDetailLine
(input 'CInvoiceWHT':U (icTable),
input tCInvoice.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
buffer-copy bCInvoiceWHT
except bCInvoiceWHT.CInvoice_ID
bCInvoiceWHT.CInvoiceWHT_ID
bCInvoiceWHT.CInvoiceVat_ID
bCInvoiceWHT.tc_ParentRowId
bCInvoiceWHT.tc_RowID
bCInvoiceWHT.tc_Status
to tCInvoiceWHT.
assign tCInvoiceWHT.CInvoice_ID = tCInvoice.CInvoice_ID.
end.
/* Check, if there was already created MF posting and default MF Journal from that */
if tCInvoice.CInvoiceIsLogisticMatching = false and
tCInvoice.tcReasonAllocationStatus <> {&ALLOCSTATUS-NOALLOC} /* CA672164 */
then do:
find first bCInvoicePosting where
bCInvoicePosting.tc_ParentRowid = bCInvoice.tc_Rowid and
bCInvoicePosting.CInvoicePostingType = {&INVOICEPOSTINGTYPE-ALLOCATION}
no-error.
if available bCInvoicePosting
then do:
<Q-23 run PostingByPostingId (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input bCInvoicePosting.Posting_ID, (PostingId)
input ?, (JournalTypeCode)
output dataset tqPostingByPostingId) in BPosting >
find first tqPostingByPostingId where
tqPostingByPostingId.tiPosting_ID = bCInvoicePosting.Posting_ID
no-error.
if available tqPostingByPostingId
then assign tCInvoice.tcMFJournalCode = tqPostingByPostingId.tcJournalCode.
end. /* if available bCInvoicePosting */
end. /* if bCInvoice.CInvoiceIsLogisticMatching = true and */
/* ========================================================================================= */
/* Remove the original invoice from instance */
/* ========================================================================================= */
if ilRemoveOrigCInvFromInstance
then do:
<M-8 run RemoveInvoiceFromInstance
(input iiOriginalCInvoiceId (iiOriginalCInvoiceId),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return. end. /* if ilRemoveOriginalInvFromInstance */
/* =================================================================================================== */
/* Return */
/* =================================================================================================== */
if oiReturnStatus = -98 then assign oiReturnStatus = 0.