project QadFinancials > class BDDocumentStatus > 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.


Parameters


oiReturnStatusoutputinteger


Internal usage


unused


program code (program/bddocumentstatus.p)

<ANCESTOR-CODE>
assign vcDOCUMENTTYPEDEBTORS ={&DOCUMENTTYPEDEBTORS}.
for each t_sDDocumentStatus where
         t_sDDocumentStatus.tc_Status = "D":U:
    find t_iDDocumentStatus where
         t_iDDocumentStatus.tc_Rowid = t_sDDocumentStatus.tc_Rowid
         no-error.

    <Q-2 assign vlFcQueryRecordsAvailable = DDocumentByTypeStatus (NoCache)
       (input viCompanyId, (CompanyId)
        input t_iDDocumentStatus.DDocumentStatusStatus, (DDocumentStatus)
        input t_iDDocumentStatus.DDocumentStatusDocType, (DDocumentType)
        input t_iDDocumentStatus.BankGL_ID, (GLID)) in BDDocument >

    if vlFcQueryRecordsAvailable <> false
    then do:

         /* Translated document type and status codes */
         vcDocumentType = t_iDDocumentStatus.DDocumentStatusDocType.
        do  viFcCount1=1 to num-entries(vcDOCUMENTTYPEDEBTORS,chr(2)) - 1 by 2:
            if(entry(viFcCount1 + 1,vcDOCUMENTTYPEDEBTORS,chr(2)) = t_iDDocumentStatus.DDocumentStatusDocType) then do:
                vcDocumentType = entry(viFcCount1,vcDOCUMENTTYPEDEBTORS,chr(2)).
                leave.
            end.
        end.

        vcDocumentStatus = t_iDDocumentStatus.DDocumentStatusStatus.
        do  viFcCount1=1 to num-entries(vcDOCUMENTTYPEDEBTORS,chr(2)) - 1 by 2:
            if(entry(viFcCount1 + 1,vcDOCUMENTTYPEDEBTORS,chr(2)) = t_iDDocumentStatus.DDocumentStatusStatus) then do:
                vcDocumentStatus = entry(viFcCount1,vcDOCUMENTTYPEDEBTORS,chr(2)).
                leave.
            end.
        end.

        <M-3 run SetMessage
           (input  trim(#T-9'A payment was found with type $1 and status $2. The system cannot delete the payment status.':250(960)t-9#) (icMessage), 
            input  vcDocumentType + chr(2) + vcDocumentStatus (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sDDocumentStatus.tc_Rowid (icRowid), 
            input  'QADFIN-2538':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>

        assign oiReturnStatus = -1.
    end.
end.

<Q-13 run GLByCode  (Start) in BGL >

for each t_sDDocumentStatus where
         t_sDDocumentStatus.tc_Status = "N":U or
         t_sDDocumentStatus.tc_Status = "C":U:
    if t_sDDocumentStatus.tc_Status = "C":U
    then do:
        find t_iDDocumentStatus where
             t_iDDocumentStatus.tc_Rowid = t_sDDocumentStatus.tc_Rowid
             no-error.

        <Q-4 assign vlFcQueryRecordsAvailable = DDocumentByTypeStatus (NoCache)
           (input viCompanyId, (CompanyId)
            input t_iDDocumentStatus.DDocumentStatusStatus, (DDocumentStatus)
            input t_iDDocumentStatus.DDocumentStatusDocType, (DDocumentType)
            input t_iDDocumentStatus.BankGL_ID, (GLID)) in BDDocument >

        if vlFcQueryRecordsAvailable <> false
        then do:
            assign vcDocumentStatusTr = <M-21 GetDDocumentStatusTranslation  (input  t_iDDocumentStatus.DDocumentStatusStatus (icStatus)) in BDDocumentStatus>
                   vcMessage          = trim(#T-24'A document was found with type $1 and status $2. You can no longer modify this document status.':255(999890189)T-24#).
            <M-5 run SetMessage
               (input  vcMessage (icMessage), 
                input  t_iDDocumentStatus.DDocumentStatusDocType + chr(2) + vcDocumentStatusTr (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sDDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-2539':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>

            assign oiReturnStatus = -1.
        end.
    end.
    assign vcDocumentStatusTr = <M-22 GetDDocumentStatusTranslation  (input  t_sDDocumentStatus.DDocumentStatusStatus (icStatus)) in BDDocumentStatus>.
    if (t_sDDocumentStatus.tc_Status              = "N":U                                     or
        t_sDDocumentStatus.DDocumentStatusStatus <> t_iDDocumentStatus.DDocumentStatusStatus) and
        t_sDDocumentStatus.DDocumentStatusStatus <> {&DOCUMENTSTATUS-INIT}
    then do:
        if t_sDDocumentStatus.tcGLCode = "":U or
           t_sDDocumentStatus.tcGLCode = ?
        then do:
            if(t_sDDocumentStatus.DDocumentStatusStatus = {&DOCUMENTSTATUS-PAID})
            then do:
                <Q-19 assign vlFcQueryRecordsAvailable = DDocumentStatusByTypeStatusGL (NoCache)
                   (input viCompanyId, (CompanyId)
                    input t_sDDocumentStatus.DDocumentStatusDocType, (DDocumentStatusDocumentType)
                    input {&DOCUMENTSTATUS-DISCONT}, (DDocumentStatusStatus)
                    input t_sDDocumentStatus.BankGL_ID, (BankGLId)
                    input t_sDDocumentStatus.tcBankGLCode, (BankGLCode)) in BDDocumentStatus >
            end.
            if(t_sDDocumentStatus.DDocumentStatusStatus = {&DOCUMENTSTATUS-BOUNCED})
            then do:
                <Q-20 assign vlFcQueryRecordsAvailable = DDocumentStatusByTypeStatusGL (NoCache)
                   (input viCompanyId, (CompanyId)
                    input t_sDDocumentStatus.DDocumentStatusDocType, (DDocumentStatusDocumentType)
                    input {&DOCUMENTSTATUS-PAIDCON}, (DDocumentStatusStatus)
                    input t_sDDocumentStatus.BankGL_ID, (BankGLId)
                    input t_sDDocumentStatus.tcBankGLCode, (BankGLCode)) in BDDocumentStatus >
            end.
            if ((t_sDDocumentStatus.DDocumentStatusStatus <> {&DOCUMENTSTATUS-PAID} and 
                 t_sDDocumentStatus.DDocumentStatusStatus <> {&DOCUMENTSTATUS-BOUNCED})or
                (t_sDDocumentStatus.DDocumentStatusStatus = {&DOCUMENTSTATUS-PAID} and vlFcQueryRecordsAvailable <> false) or
                (t_sDDocumentStatus.DDocumentStatusStatus = {&DOCUMENTSTATUS-BOUNCED} and vlFcQueryRecordsAvailable <> false))
            then do:
               
                <M-6 run SetMessage
                   (input  trim(#T-11'You must enter the GL account for status $1.':250(962)T-11#) (icMessage), 
                    input  vcDocumentStatusTr (icArguments), 
                    input  'tDDocumentStatus.tcGLCode':U (icFieldName), 
                    input  t_sDDocumentStatus.tcGLCode (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  t_sDDocumentStatus.tc_Rowid (icRowid), 
                    input  'QADFIN-2540':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>
    
                assign oiReturnStatus = -1.
            end.
        end.
        
        if t_sDDocumentStatus.tcJournalCode = "":U or
           t_sDDocumentStatus.tcJournalCode = ?
        then do:
             assign vcMessage = trim(#T-25'Journal is mandatory for status $1.':255(999890190)T-25#).
            <M-7 run SetMessage
               (input  vcMessage (icMessage), 
                input  vcDocumentStatusTr (icArguments), 
                input  'tDDocumentStatus.tcJournalCode':U (icFieldName), 
                input  t_sDDocumentStatus.tcJournalCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sDDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-2541':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>

            assign oiReturnStatus = -1.
        end.
    end.

    if (t_sDDocumentStatus.tc_Status              = "N":U                                     or
        t_sDDocumentStatus.tcGLCode              <> t_iDDocumentStatus.tcGLCode               or
        t_sDDocumentStatus.DDocumentStatusStatus <> t_iDDocumentStatus.DDocumentStatusStatus) and
        t_sDDocumentStatus.tcGLCode              <> "":U                                      and
        t_sDDocumentStatus.tcGLCode              <> ?
    then do:
        <Q-14 run GLByCode (all) (Read) (NoCache)
           (input t_sDDocumentStatus.Company_ID, (CompanyId)
            input t_sDDocumentStatus.tcGLCode, (GLCode)
            output dataset tqGLByCode) in BGL >

        find first tqGLByCode where
                   tqGLByCode.tcGLCode = t_sDDocumentStatus.tcGLCode
                   no-error.

        if not available tqGLByCode
        then do:
            <M-15 run SetMessage
               (input  trim(#T-13'GL account $1 cannot be found.':250(14942)t-13#) (icMessage), 
                input  t_sDDocumentStatus.tcGLCode (icArguments), 
                input  'tDDocumentStatus.tcGLCode':U (icFieldName), 
                input  t_sDDocumentStatus.tcGLCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sDDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-3528':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>

            assign oiReturnStatus = -1.
        end.
        else
        if t_sDDocumentStatus.DDocumentStatusStatus = {&DOCUMENTSTATUS-BOUNCED} and
           tqGLByCode.tcGLTypeCode               <> {&GLTYPECODE-OPEN}
        then do:
            <M-16 run SetMessage
               (input  trim(#T-14'Only GL accounts of type $1 are allowed when document status is $2.':250(14943)t-14#) (icMessage), 
                input  {&GLTYPECODE-OPEN-TR} + chr(2) + {&DOCUMENTSTATUS-BOUNCED-TR} (icArguments), 
                input  'tDDocumentStatus.tcGLCode':U (icFieldName), 
                input  t_sDDocumentStatus.tcGLCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sDDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-3529':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>

            assign oiReturnStatus = -1.
        end.
        else
        if t_sDDocumentStatus.DDocumentStatusStatus <> {&DOCUMENTSTATUS-BOUNCED} and
           tqGLByCode.tcGLTypeCode                <> {&GLTYPECODE-DDOC}
        then do:
            <M-17 run SetMessage
               (input  trim(#T-15'Only GL accounts of type $1 are allowed when document status is not $2.':250(14944)t-15#) (icMessage), 
                input  {&GLTYPECODE-DDOC-TR} + chr(2) + {&DOCUMENTSTATUS-BOUNCED-TR} (icArguments), 
                input  'tDDocumentStatus.tcGLCode':U (icFieldName), 
                input  t_sDDocumentStatus.tcGLCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sDDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-3530':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BDDocumentStatus>

            assign oiReturnStatus = -1.
        end.
    end.
end.

<Q-18 run GLByCode  (Stop) in BGL >