project QadFinancials > class BCInvoice > method DefaultValuesReason
Parameters
| icCInvoiceRowId | input | character | Row ID of the supplier invoice |
| bcReasonCode | input-output | character | |
| icJournalCode | input | character | |
| iiPostingYear | input | integer | Posting Year |
| ilCInvoiceIsInitialStatus | input | logical | Initial Status |
| iiOldVoucher | input | integer | |
| iiCInvoiceID | input | integer | |
| ocReasonAllocationStatus | output | character | |
| olCInvoiceIsInvoiceApproved | output | logical | |
| olCInvoiceIsLockPayment | output | logical | |
| olCInvoiceIsLogisticMatching | output | logical | |
| ocMFJournalCode | output | character | |
| olCInvoiceIsInitialStatus | output | logical | |
| oiCInvoiceVoucher | output | integer | |
| ocLayerTypeCode | output | character | Layer Type Code |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program3/bcinvoice.p)
/* Validate and normalize input parameters */
if bcReasonCode = ? then assign bcReasonCode = "":U.
if bcReasonCode = ? then return.
/* Get Supplier Invoice */
find tCInvoice where
tCInvoice.tc_Rowid = icCInvoiceRowId
no-error.
if tCInvoice.tc_Status <> "N":U
then find t_iCInvoice where
t_iCInvoice.tc_Rowid = tCInvoice.tc_Rowid
no-error.
if not available tCInvoice or
tCInvoice.tc_Status <> "N":U and
not available t_iCInvoice
then do:
<M-42 run SetMessage
(input #T-43'The specified supplier invoice is not defined in the system or is invalid.':80(999890907)T-43# (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'D':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-9580':U:U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Get Details about new Reason Code */
<Q-38 run ReasonBeginsCode (all) (Read) (NoCache)
(input bcReasonCode, (ReasonCode)
output dataset tqReasonBeginsCode) in BReason >
find first tqReasonBeginsCode where
tqReasonBeginsCode.tcReasonCode = bcReasonCode
no-error.
if not available tqReasonBeginsCode
then do:
find tqReasonBeginsCode where
tqReasonBeginsCode.tcReasonCode BEGINS bcReasonCode
no-error.
/* if there's only one record - ambiguous records will not be found and available will be false */
if available tqReasonBeginsCode
then assign bcReasonCode = tqReasonBeginsCode.tcReasonCode.
else do:
assign oiReturnStatus = -4.
return.
end.
end.
if not available tqReasonBeginsCode
then return.
/* ================================================================================================ *
* Change of reason code is limitted to certain transitions only *
* ================================================================================================ */
/* In activity InitialCreate invoice in Initial status can be created only */
if vcActivityCode = "InitialCreate":U and
tqReasonBeginsCode.tlReasonIsInitialStatus = false
then do:
<M-30 run SetMessage
(input #T-33'You must select an invoice status code of type Initial for initial invoices':100(69057)T-33# (icMessage),
input ' ':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input ' ':U (icRowid),
input 'QadFin-7841':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Reason code cannot be never changed from Allocation to anything else */
if tCInvoice.tc_Status <> "N" and
t_iCInvoice.CInvoiceIsInitialStatus <> true and
((t_iCInvoice.tcReasonAllocationStatus = {&ALLOCSTATUS-ALLOC} and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ALLOC}) or
(t_iCInvoice.CInvoiceAllocationStatus = {&ALLOCSTATUS-ALLOC} and
t_iCInvoice.tcReasonAllocationStatus = {&ALLOCSTATUS-ANY} and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ALLOC} and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ANY}))
then do:
assign vcMessage = #T-46'You cannot change the Invoice status code with allocation to official layer to other allocation type.':255(332032812)T-46#.
<M-44 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-9603':U:U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Reason code in Approve activity have to keep original allocation type */
if (vcActivityCode = "Approve":U or
vcActivityCode = "Release For Payment":U) and
t_iCInvoice.tcReasonAllocationStatus <> tqReasonBeginsCode.tcReasonAllocationStatus
then do:
assign vcMessage = #T-52'This activity does not allow change of Allocation type.':255(733752331)T-52#.
<M-51 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-9550':U:U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Reason code in activity Prepare Allocation can be changed to Any Or Transient */
if vcActivityCode = "Prepare Allocation":U and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-TRANSALLOC} and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ANY}
then do:
assign vcMessage = #T-50'You can select Invoice status code with Transient or Any allocation in this activity.':255(583956633)T-50#.
<M-49 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-9637':U:U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Reason code in activity Allocate can be changed to Allocation type only */
if vcActivityCode = "Allocate":U and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ALLOC} and
tqReasonBeginsCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ANY}
then do:
assign vcMessage = #T-48'You can select Invoice status code with Allocation or Any allocation in this activity.':255(606023410)T-48#.
<M-47 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-9571':U:U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
assign oiReturnStatus = -1.
return.
end.
/* Assign output values */
assign ocReasonAllocationStatus = tqReasonBeginsCode.tcReasonAllocationStatus
olCInvoiceIsInvoiceApproved = tqReasonBeginsCode.tlReasonIsInvoiceApproved
olCInvoiceIsLockPayment = tqReasonBeginsCode.tlReasonIsLockPayment
olCInvoiceIsLogisticMatching = tqReasonBeginsCode.tlReasonIsLogisticMatching
olCInvoiceIsInitialStatus = tqReasonBeginsCode.tlReasonIsInitialStatus.
/* Get details for MF Posting */
if not olCInvoiceIsLogisticMatching
then do:
<M-26 run GetMFJournal
(input viCompanyId (iiCompanyId),
input tqReasonBeginsCode.tcReasonAllocationStatus (icReasonAllocationStatus),
output ocMFJournalCode (ocMFJournalCode),
output ocLayerTypeCode (ocLayerTypeCode),
output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
end.
assign oiCInvoiceVoucher = iiOldVoucher.
/* if changing from initial to non initial */
if ilCInvoiceIsInitialStatus = true and
olCInvoiceIsInitialStatus = false
then do:
/* ============================================== */
/* Check if consecutive numbering is enabled. */
/* If so, use a temporary number. */
/* Otherwise use standard numbering functionality */
/* ============================================== */
if vlCIDomainIsConsecutNr = true
then assign viTempCInvoiceVoucher = viTempCInvoiceVoucher + 1
oiCInvoiceVoucher = viTempCInvoiceVoucher.
else do:
assign vhFcComponent = ?.
<M-27 run GetNumber
(input viCompanyId (iiCompanyId),
input iiPostingYear (iiNumbrYear),
input icJournalCode (icNumbrType),
output oiCInvoiceVoucher (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. /* else do: */
assign tCInvoice.CInvoicePostingYear = iiPostingYear
tCInvoice.tcJournalCode = icJournalCode
tCInvoice.CInvoiceVoucher = oiCInvoiceVoucher.
end.
/* release invoice number when status is changed from non-initial into initial */
if (ilCInvoiceIsInitialStatus = false and
olCInvoiceIsInitialStatus = true and
iiOldVoucher <> ? and
iiOldVoucher <> 0)
then do:
/* ============================================== */
/* Check if consecutive numbering is enabled. */
/* If so, use a temporary number. */
/* Otherwise use standard numbering functionality */
/* ============================================== */
if vlCIDomainIsConsecutNr = false
then do:
assign vhFcComponent = ?.
<M-28 run ReleaseNumber
(input viCompanyId (iiCompanyId),
input iiPostingYear (iiNumbrYear),
input icJournalCode (icNumbrType),
input iiOldVoucher (iiNumbr),
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.
assign oiCInvoiceVoucher = 0.
end.