project QadFinancials > class BCDocumentStatus > 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/bcdocumentstatus.p)

<ANCESTOR-CODE>

for each t_sCDocumentStatus where
         t_sCDocumentStatus.tc_Status = "D":U:
    find t_iCDocumentStatus where
         t_iCDocumentStatus.tc_Rowid = t_sCDocumentStatus.tc_Rowid
         no-error.

    <Q-16 assign vlFcQueryRecordsAvailable = CDocumentByTypeStatus (NoCache)
       (input viCompanyId, (CompanyId)
        input t_iCDocumentStatus.CDocumentStatusDocType, (CDocumentType)
        input t_iCDocumentStatus.CDocumentStatusStatus, (CDocumentStatus)
        input t_iCDocumentStatus.BankGL_ID, (GLID)) in BCDocument >

    if vlFcQueryRecordsAvailable <> false
    then do:
         
        /* Translated document type and status codes */
        vcDocumentType = t_iCDocumentStatus.CDocumentStatusDocType.

        assign vcDOCUMENTTYPECREDITORS= {&DOCUMENTTYPECREDITORS}.
        do  viFcCount1=1 to num-entries(vcDOCUMENTTYPECREDITORS,chr(2)) - 1 by 2:
            if(entry(viFcCount1 + 1,vcDOCUMENTTYPECREDITORS,chr(2)) = t_iCDocumentStatus.CDocumentStatusDocType) then do:
                vcDocumentType = entry(viFcCount1,vcDOCUMENTTYPECREDITORS,chr(2)).
                leave.
            end.
        end.

        vcDocumentStatus = t_iCDocumentStatus.CDocumentStatusStatus.
        do  viFcCount1=1 to num-entries(vcDOCUMENTTYPECREDITORS,chr(2)) - 1 by 2:
            if(entry(viFcCount1 + 1,vcDOCUMENTTYPECREDITORS,chr(2)) = t_iCDocumentStatus.CDocumentStatusStatus) then do:
                vcDocumentStatus = entry(viFcCount1,vcDOCUMENTTYPECREDITORS,chr(2)).
                leave.
            end.
        end.

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

        assign oiReturnStatus = -1.
    end.
end.

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

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

        <Q-22 assign vlFcQueryRecordsAvailable = CDocumentByTypeStatus (NoCache)
           (input viCompanyId, (CompanyId)
            input t_iCDocumentStatus.CDocumentStatusDocType, (CDocumentType)
            input t_iCDocumentStatus.CDocumentStatusStatus, (CDocumentStatus)
            input t_iCDocumentStatus.BankGL_ID, (GLID)) in BCDocument >

        if vlFcQueryRecordsAvailable <> false
        then do:
            assign vcDocumentStatusTr = <M-37 GetCDocumentStatusTranslation  (input  t_iCDocumentStatus.CDocumentStatusStatus (icStatus)) in BCDocumentStatus>.
            <M-23 run SetMessage
               (input  trim(#T-25'Document found with type $1 and status $2. Cannot modify the document status.':250(961)t-25#) (icMessage), 
                input  t_iCDocumentStatus.CDocumentStatusDocType + chr(2) + vcDocumentStatusTr (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sCDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-2516':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BCDocumentStatus>

            assign oiReturnStatus = -1.
        end.
    end.
    assign vcDocumentStatusTr = <M-36 GetCDocumentStatusTranslation  (input  t_sCDocumentStatus.CDocumentStatusStatus (icStatus)) in BCDocumentStatus>.

    if (t_sCDocumentStatus.tc_Status              = "N":U                                     or
        t_sCDocumentStatus.CDocumentStatusStatus <> t_iCDocumentStatus.CDocumentStatusStatus) and
        t_sCDocumentStatus.CDocumentStatusStatus <> {&DOCUMENTSTATUS-INIT}                    and
        t_sCDocumentStatus.CDocumentStatusStatus <> {&DOCUMENTSTATUS-VOID}
    then do:
        if t_sCDocumentStatus.tcGLCode = "":U or
           t_sCDocumentStatus.tcGLCode = ?
        then do:
            if (t_sCDocumentStatus.CDocumentStatusStatus = {&DOCUMENTSTATUS-PAID})
            then do:
                <Q-34 assign vlFcQueryRecordsAvailable = CDocumentStatusByTypeStatusGL (NoCache)
                   (input viCompanyId, (CompanyId)
                    input t_sCDocumentStatus.CDocumentStatusDocType, (CDocumentStatusDocumentType)
                    input {&DOCUMENTSTATUS-DISCONT}, (CDocumentStatusStatus)
                    input t_sCDocumentStatus.BankGL_ID, (BankGLId)
                    input t_sCDocumentStatus.tcBankGLCode, (BankGLCode)) in BCDocumentStatus >
            end.
            if (t_sCDocumentStatus.CDocumentStatusStatus = {&DOCUMENTSTATUS-BOUNCED})
            then do:
                <Q-35 assign vlFcQueryRecordsAvailable = CDocumentStatusByTypeStatusGL (NoCache)
                   (input viCompanyId, (CompanyId)
                    input t_sCDocumentStatus.CDocumentStatusDocType, (CDocumentStatusDocumentType)
                    input {&DOCUMENTSTATUS-PAIDCON}, (CDocumentStatusStatus)
                    input t_sCDocumentStatus.BankGL_ID, (BankGLId)
                    input t_sCDocumentStatus.tcBankGLCode, (BankGLCode)) in BCDocumentStatus >
            end.
            if ((t_sCDocumentStatus.CDocumentStatusStatus <> {&DOCUMENTSTATUS-PAID}  and 
                 t_sCDocumentStatus.CDocumentStatusStatus <> {&DOCUMENTSTATUS-BOUNCED})or
                (t_sCDocumentStatus.CDocumentStatusStatus = {&DOCUMENTSTATUS-BOUNCED} and vlFcQueryRecordsAvailable <> false ) or
                (t_sCDocumentStatus.CDocumentStatusStatus = {&DOCUMENTSTATUS-PAID} and vlFcQueryRecordsAvailable <> false))
            then do:
                <M-20 run SetMessage
                   (input  trim(#T-26'You must enter the GL account for status $1.':250(962)T-26#) (icMessage), 
                    input  vcDocumentStatusTr (icArguments), 
                    input  'tCDocumentStatus.tcGLCode':U (icFieldName), 
                    input  t_sCDocumentStatus.tcGLCode (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  t_sCDocumentStatus.tc_Rowid (icRowid), 
                    input  'QADFIN-2515':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BCDocumentStatus>
    
                assign oiReturnStatus = -1.
            end.
        end.

        if t_sCDocumentStatus.tcJournalCode = "":U or
           t_sCDocumentStatus.tcJournalCode = ?
        then do:
            <M-19 run SetMessage
               (input  trim(#T-27'You must enter the daybook for status $1.':250(963)T-27#) (icMessage), 
                input  vcDocumentStatusTr (icArguments), 
                input  'tCDocumentStatus.tcJournalCode':U (icFieldName), 
                input  t_sCDocumentStatus.tcJournalCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sCDocumentStatus.tc_Rowid (icRowid), 
                input  'QADFIN-2514':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BCDocumentStatus>

            assign oiReturnStatus = -1.
        end.
    end.

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

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

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

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

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

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

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