project QadFinancials > class BReason > method ValidateComponent
Description
Write here all tests on database update (new / modify / delete) that cannot be coded with a validation mask.
The type of update can be found in tc_status (N/C/D).
If you find incorrect data, you must write an entry in tFcMessages (using SetMessage) and set the return status of this method to either +1 or -1.
Return status +1 = data will still be accepted.
Return status -1 = data will not be accepted.
This method is run from SetPublicTables, before transferring the received data into the class temp-tables.
Validations:
- When the flag "Initial Status" is checked: the Lock Payment is checked; the Invoice Approved is un-checked; the Allocation Status is "No Allocation".
- Initial status flag can only be set if the allocation status is "No Allocation".
- Logistic matching is allowed only if the allocation status is None, Allocation or Any.
Parameters
oiReturnStatus | output | integer | |
Internal usage
unused
program code (program/breason.p)
<ANCESTOR-CODE>
for each t_sReason where
t_sReason.tc_Status = "N":U or t_sReason.tc_Status = "C":U:
/* When the flag "Initial Status" is checked:
the Lock Payment is checked;
the Invoice Approved is un-checked;
the Allocation Status is "No Allocation"*/
if t_sReason.ReasonIsInitialStatus
then do:
if ( (not t_sReason.ReasonIsLockPayment) or
(t_sReason.ReasonIsInvoiceApproved) or
(t_sReason.ReasonAllocationStatus <> {&ALLOCSTATUS-NOALLOC}) )
then do:
assign vcMessage = trim(#T-24'An Invoice Status cannot be of Initial status unless it is also Locked for Payment, is not Approved and has an Allocation Status of No Allocation':150(71116)T-24#)
oiReturnStatus = -1.
<M-25 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 't_sReason.ReasonIsInitialStatus':U (icFieldName),
input t_sReason.ReasonIsInitialStatus (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-7993':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
end.
/* Initial status flag can only be set if the allocation status is "No Allocation"*/
if t_sReason.ReasonIsInitialStatus and t_sReason.ReasonAllocationStatus <> {&ALLOCSTATUS-NOALLOC}
then do:
assign vcMessage = trim(#T-22'Allocation status must be No Allocation to set initial status field.':150(68776)t-22#)
oiReturnStatus = -1.
<M-23 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.ReasonAllocationStatus':U (icFieldName),
input t_sReason.ReasonAllocationStatus (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-7825':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end. /* End - if t_sReason.ReasonIsInitialStatus and t_sReason.ReasonAllocationStatus */
/* Logistic matching is allowed only if the allocation status is None, Allocation or Any */
if t_sReason.ReasonIsLogisticMatching
then do:
if t_sReason.ReasonAllocationStatus <> {&ALLOCSTATUS-NOALLOC} and
t_sReason.ReasonAllocationStatus <> {&ALLOCSTATUS-ALLOC} and
t_sReason.ReasonAllocationStatus <> {&ALLOCSTATUS-ANY}
then do:
assign vcMessage = trim(#T-1'The allocation status for receiver matching must be set to Any, No Allocation, or Allocation.':150(65361)t-1#)
oiReturnStatus = -1.
<M-2 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.ReasonAllocationStatus':U (icFieldName),
input t_sReason.ReasonAllocationStatus (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6431':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
if t_sReason.ReasonAllocationStatus = {&ALLOCSTATUS-NOALLOC}
then do:
if (t_sReason.MatchingReason_ID = ? or t_sReason.MatchingReason_ID = 0) and
(t_sReason.tcMatchingReasonCode = ? or t_sReason.tcMatchingReasonCode = "":U)
then do:
assign vcMessage = trim(#T-3'You must specify the Status after Matching for the receiver matching.':150(63284)t-3#)
oiReturnStatus = -1.
<M-4 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.MatchingReason_ID':U (icFieldName),
input t_sReason.MatchingReason_ID (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6432':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
else do: /* Matching reason is specified */
<Q-5 run ReasonByIdCode (all) (Read) (NoCache)
(input t_sReason.MatchingReason_ID, (ReasonId)
input t_sReason.tcMatchingReasonCode, (ReasonCode)
output dataset tqReasonByIdCode) in BReason >
find first tqReasonByIdCode no-error.
if not available tqReasonByIdCode
then do:
assign vcMessage = trim(substitute(#T-6'The invoice status code (&1) specifed for the After Matching status is invalid.':150(63287)t-6#,t_sReason.tcMatchingReasonCode))
oiReturnStatus = -1.
<M-7 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-6433':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
else if tqReasonByIdCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ALLOC}
then do:
assign vcMessage = trim(#T-21'The After Matching status must have the Allocation option selected.':150(63286)t-21#)
oiReturnStatus = -1.
<M-20 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'ReasonAllocationStatus':U (icFieldName),
input tqReasonByIdCode.tcReasonAllocationStatus (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6998':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end. /* else if tqReasonByIdCode.tcReasonAllocationStatus <> {&ALLOCSTATUS-ALLOC} */
end. /* else do: /* Matching reason is specified */ */
end. /* if t_sReason.ReasonAllocationStatus = {&ALLOCSTATUS-NOALLOC} */
end. /* if t_sReason.ReasonIsLogisticMatching */
if t_sReason.tc_Status = "C":U
then do:
find first t_iReason where
t_iReason.tc_Rowid = t_sReason.tc_Rowid no-error.
if not available t_iReason
then next.
if (t_iReason.ReasonAllocationStatus <> t_sReason.ReasonAllocationStatus or
t_iReason.ReasonIsLogisticMatching <> t_sReason.ReasonIsLogisticMatching)
then do:
<Q-10 assign vlFcQueryRecordsAvailable = ReasonByMatchingReasonId (NoCache) (input t_sReason.Reason_ID, (MatchingReasonId)) in BReason >
if vlFcQueryRecordsAvailable <> false
then do:
if t_iReason.ReasonAllocationStatus <> t_sReason.ReasonAllocationStatus
then do:
assign vcMessage = trim(#T-11'You cannot modify the allocation status. The invoice status code is defined as the Status After Match status of another invoice status.':255(64058)t-11#)
oiReturnStatus = -1.
<M-12 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.ReasonAllocationStatus':U (icFieldName),
input t_sReason.ReasonAllocationStatus (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6675':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
if t_iReason.ReasonIsLogisticMatching <> t_sReason.ReasonIsLogisticMatching
then do:
assign vcMessage = trim(#T-13'You cannot modify thereceiver matching setting. The invoice status code is defined as the Status After Match status of another invoice status.':255(64059)t-13#)
oiReturnStatus = -1.
<M-14 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.ReasonIsLogisticMatching':U (icFieldName),
input t_sReason.ReasonIsLogisticMatching (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6676':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
end. /* Reason has been used as MatchReason */
<Q-15 assign vlFcQueryRecordsAvailable = CInvoiceByReasonID (NoCache)
(input ?, (CompanyId)
input t_sReason.Reason_ID, (ReasonId)) in BCInvoice >
if vlFcQueryRecordsAvailable <> false
then do:
if t_iReason.ReasonAllocationStatus <> t_sReason.ReasonAllocationStatus
then do:
assign vcMessage = trim(#T-16'You cannot modify the allocation status. The invoice status code is defined as the Status Before Match status on a supplier invoice.':255(64060)t-16#)
oiReturnStatus = -1.
<M-17 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.ReasonAllocationStatus':U (icFieldName),
input t_sReason.ReasonAllocationStatus (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6677':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
if t_iReason.ReasonIsLogisticMatching <> t_sReason.ReasonIsLogisticMatching
then do:
assign vcMessage = trim(#T-18'You cannot modify the receiver matching setting. The invoice status code is defined as the Status Before Match on a supplier invoice.':255(64061)t-18#)
oiReturnStatus = -1.
<M-19 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tReason.ReasonIsLogisticMatching':U (icFieldName),
input t_sReason.ReasonIsLogisticMatching (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-6678':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReason>
end.
end. /* Reason has been used as before match code in supplier invoice */
end. /* Allocation or logistic matching changed */
end. /* t_sReason.tc_Status = "C" */
end. /* for each t_sReason */