project QadFinancials > class BMirroringGL > method ValidateComponentPost

Description

Validations after ancestor code


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BMirroringGL.ValidateComponent


program code (program4/bmirroringgl.p)

assign 
    oiReturnStatus             = -98
    viLocalStatus              = 0
    viLocalWarningStatus       = 0
    vlStartGLForExchangeMethod = false.

for each t_sMirroringGL where 
         t_sMirroringGL.tc_Status ='N':U or 
         t_sMirroringGL.tc_Status = 'C':U :
    /*	Validate if the tcDomainCode is the same as the domain we are currently logged into.  */
   if t_sMirroringGL.tcDomainCode <> vcDomainCode
   then do:
       assign
           viLocalStatus = -1
           vcMsg         = trim(#T-67'You can only modify mirror accounting in the domain in which it has been defined.':255(69137)t-67#) 
                           + chr(10) + trim(#T-71'Mirror accounting has not been defined for the current domain.':255(69138)t-71#) .
       <M-66 run SetMessage
          (input  vcMsg (icMessage), 
           input  '' (icArguments), 
           input  'tMirroringGL.tcDomainCode':U (icFieldName), 
           input  t_sMirroringGL.tcDomainCode (icFieldValue), 
           input  'E':U (icType), 
           input  3 (iiSeverity), 
           input  t_sMirroringGL.tc_Rowid (icRowid), 
           input  'QadFin-7863':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
   end. /* if t_sMirroringGL.tcDomainCode <> vcDomainCode */

   /* Make sure when the company_id is filled, it belongs to the selected domain*/
   if t_sMirroringGL.Company_ID <>? and t_sMirroringGL.Company_ID <> 0 
   then do:
       <Q-68 assign vlFcQueryRecordsAvailable = CompanyByDomain (NoCache)
          (input t_sMirroringGL.Company_ID, (CompanyId)
           input t_sMirroringGL.Domain_ID, (DomainId)
           input true, (Active)) in BCompany >
       if not vlFcQueryRecordsAvailable 
       then do:
           assign vcMsg         = trim(substitute(#T-70'Entity &1 does not belong to domain &2.':255(68339)t-70#,
                                                  trim(t_sMirroringGL.tcCompanyCode),
                                                  trim(t_sMirroringGL.tcDomainCode)))
                  viLocalStatus = -1.
            <M-69 run SetMessage
               (input  vcMsg (icMessage), 
                input  '' (icArguments), 
                input  'tMirroringGL.tcCompanyCode':U (icFieldName), 
                input  t_sMirroringGL.tcCompanyCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sMirroringGL.tc_Rowid (icRowid), 
                input  'QadFin-7864':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
       end. /* if not vlFcQueryRecordsAvailable */
   end. /* if tMirroringGL.Company_ID <>? and tMirroringGL.Company_ID <> 0 */

      /* If the two source accounts are the same and mirror accounts are different, give an error.*/ 
    if t_sMirroringGL.Source1GL_ID         = t_sMirroringGL.Source2GL_ID         and
       t_sMirroringGL.Source1CostCentre_ID = t_sMirroringGL.Source2CostCentre_ID and 
       t_sMirroringGL.Source1Project_ID    = t_sMirroringGL.Source2Project_ID    and 
       t_sMirroringGL.Source1Division_ID   = t_sMirroringGL.Source2Division_ID
    then do:
        if t_sMirroringGL.Mirror1GL_ID         <> t_sMirroringGL.Mirror2GL_ID         or
           t_sMirroringGL.Mirror1CostCentre_ID <> t_sMirroringGL.Mirror2CostCentre_ID or 
           t_sMirroringGL.Mirror1Project_ID    <> t_sMirroringGL.Mirror2Project_ID    or 
           t_sMirroringGL.Mirror1Division_ID   <> t_sMirroringGL.Mirror2Division_ID
        then do:
            assign vcMsg         = trim(#T-47'If Source 1 Account and Source 2 Account are the same, Mirror 1 Account and Mirror 2 Account must be the same also.':255(68401)t-47#)
                   viLocalStatus = -1.
            <M-48 run SetMessage
               (input  vcMsg (icMessage), 
                input  '' (icArguments), 
                input  'tMirroringGL.tcSource1GLCode':U (icFieldName), 
                input  t_sMirroringGL.tcSource1GLCode (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  t_sMirroringGL.tc_Rowid (icRowid), 
                input  'QadFin-7603':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
        end.
    end. /* if t_sMirroringGL.Source1GL_ID = t_sMirroringGL.Source2GL_ID and*/
    else do:
    /* Make sure the comination of two source account are unique regardless of their sequence */
        find first bMirroringGL where 
                   bMirroringGL.Source2GL_ID   =  t_sMirroringGL.Source1GL_ID  and 
                   bMirroringGL.Source1GL_ID   =  t_sMirroringGL.Source2GL_ID  and
                   bMirroringGL.Company_ID     =  t_sMirroringGL.Company_ID    and
                   bMirroringGL.Domain_ID      =  t_sMirroringGL.Domain_ID     and
                   bMirroringGL.tc_Rowid       <> t_sMirroringGL.tc_Rowid
        no-error.
    
        <Q-27 assign vlFcQueryRecordsAvailable = MirroringGLBySourceGLAnalysis (NoCache)
           (input t_sMirroringGL.Company_ID, (CompanyId)
            input t_sMirroringGL.Domain_ID, (DomainId)
            input t_sMirroringGL.Source2GL_ID, (Source1GLId)
            input t_sMirroringGL.Source1GL_ID, (Source2GLId)) in BMirroringGL >
    
        if vlFcQueryRecordsAvailable or available bMirroringGL 
        then do:
            assign vcMsg = trim(substitute(#T-32'Records of the combination of the two source accounts &1 and &2 already exist.':255(68362)t-32#,
                                           trim(t_sMirroringGL.tcSource2GLCode),
                                           trim(t_sMirroringGL.tcSource1GLCode)))
                   vcMsg = vcMsg + chr(10) + trim(#T-51'Swap the two source accounts.':255(68312)t-51#).
             <M-28 run SetMessage
                (input  vcMsg (icMessage), 
                 input  '' (icArguments), 
                 input  'tMirroringGL.tcSource1GLCode':U (icFieldName), 
                 input  t_sMirroringGL.tcSource1GLCode (icFieldValue), 
                 input  'E':U (icType), 
                 input  3 (iiSeverity), 
                 input  t_sMirroringGL.tc_Rowid (icRowid), 
                 input  'QadFin-7495':U (icFcMsgNumber), 
                 input  '' (icFcExplanation), 
                 input  '' (icFcIdentification), 
                 input  '' (icFcContext), 
                 output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
             assign viLocalStatus = -1.
         end. /* if vlFcQueryRecordsAvailable or available bMirroringGL */

         /* if the two source accounts are not the same, but the mirror accounts are the same, then give a warning */
         if t_sMirroringGL.Mirror1GL_ID         = t_sMirroringGL.Mirror2GL_ID         and
            t_sMirroringGL.Mirror1CostCentre_ID = t_sMirroringGL.Mirror2CostCentre_ID and
            t_sMirroringGL.Mirror1Project_ID    = t_sMirroringGL.Mirror2Project_ID    and
            t_sMirroringGL.Mirror1Division_ID   = t_sMirroringGL.Mirror2Division_ID
         then do:
             assign vcMsg = trim(#T-65'Mirror 1 Account and Mirror 2 Account are the same.':255(68309)T-65#)
                viLocalStatus = 1.
             <M-64 run SetMessage
                (input  vcMsg (icMessage), 
                 input  '' (icArguments), 
                 input  'tMirroringGL.tcMirror1GLCode':U (icFieldName), 
                 input  t_sMirroringGL.tcMirror1GLCode (icFieldValue), 
                 input  'W':U (icType), 
                 input  4 (iiSeverity), 
                 input  t_sMirroringGL.tc_Rowid (icRowid), 
                 input  'QadFin-7861':U (icFcMsgNumber), 
                 input  '' (icFcExplanation), 
                 input  '' (icFcIdentification), 
                 input  '' (icFcContext), 
                 output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
         end. /*If the two mirror accounts are the same, give a warning */
     end.  /* else do */

  
       
   
   /*Validation on account type and system type of source accounts */
    if (
          t_sMirroringGL.tcSource1GLCode     <> ''                                 and
          t_sMirroringGL.tcSource1GLCode     <> ?                                  and
          t_sMirroringGL.tcSource1GLTypeCode <> {&GLTYPECODE-STAN}                 and
          t_sMirroringGL.tcSource1GLTypeCode <> {&GLTYPECODE-CROSS}                and
          t_sMirroringGL.tcSource1GLTypeCode <> {&GLTYPECODE-INVCTRL}              and
          t_sMirroringGL.tcSource1GLTypeCode <> {&GLTYPECODE-WIPCTRL}              and
          not (t_sMirroringGL.tcSource1GLTypeCode = {&GLTYPECODE-SYST}       and
               (t_sMirroringGL.tcSource1GLSystemType = {&GLSYSTEMTYPE-CIREC} or 
                t_sMirroringGL.tcSource1GLSystemType = {&GLSYSTEMTYPE-VOUPAY})   )
        )
    then do: 
        assign vcMsg          = trim(substitute(#T-34'Source 1 Account &1 is not one of the valid types.':255(68011)t-34#,
                                                trim(t_sMirroringGL.tcSource1GLCode)))
               vcFieldName    = 'tMirroringGL.tcSource1GLCode':U
               vcFieldValue   = t_sMirroringGL.tcSource1GLCODE 
               viLocalStatus = -1.
        <M-53 run SetMessage
         (input  vcMsg (icMessage), 
          input  '' (icArguments), 
          input  vcFieldName (icFieldName), 
          input  vcFieldValue (icFieldValue), 
          input  'E':U (icType), 
          input  3 (iiSeverity), 
          input  t_sMirroringGL.tc_Rowid (icRowid), 
          input  'QadFin-7615':U (icFcMsgNumber), 
          input  '' (icFcExplanation), 
          input  '' (icFcIdentification), 
          input  '' (icFcContext), 
          output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    end.

    if (
          t_sMirroringGL.tcSource2GLCode     <> ''                               and
          t_sMirroringGL.tcSource2GLCode     <> ?                                and
          t_sMirroringGL.tcSource2GLTypeCode <> {&GLTYPECODE-STAN}               and
          t_sMirroringGL.tcSource2GLTypeCode <> {&GLTYPECODE-CROSS}              and
          t_sMirroringGL.tcSource2GLTypeCode <> {&GLTYPECODE-INVCTRL}            and
          t_sMirroringGL.tcSource2GLTypeCode <> {&GLTYPECODE-WIPCTRL}            and
          not ( t_sMirroringGL.tcSource2GLTypeCode = {&GLTYPECODE-SYST}     and
               (t_sMirroringGL.tcSource2GLSystemType = {&GLSYSTEMTYPE-CIREC} or 
                t_sMirroringGL.tcSource2GLSystemType = {&GLSYSTEMTYPE-VOUPAY})  )
       )
    then do:
        assign vcMsg          = trim(substitute(#T-35'Source 2 Account &1 is not one of the valid types.':255(68012)t-35#,
                                                trim(t_sMirroringGL.tcSource2GLCode)))
               vcFieldName    = 'tMirroringGL.tcSource2GLCode':U 
               vcFieldValue   = t_sMirroringGL.tcSource2GLCODE
               viLocalStatus = -1.
        <M-9 run SetMessage
           (input  vcMsg (icMessage), 
            input  '' (icArguments), 
            input  vcFieldName (icFieldName), 
            input  vcFieldValue (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sMirroringGL.tc_Rowid (icRowid), 
            input  'QadFin-7479':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    end. /*end of Validation on account type and system type of source accounts */
      
  /* Validation on account type and system type of mirror accounts */
    if t_sMirroringGL.tcMirror1GLCode <> ''                      and 
       t_sMirroringGL.tcMirror1GLCode <> ?                       and
       t_sMirroringGL.tcMirror1GLTypeCode <> {&GLTYPECODE-STAN}
    then do:
        assign vcMsg         = trim(#T-37'You must specify a standard account in the Mirror 1 field.':255(68342)t-37#)
               vcFieldName   = 'tMirroringGL.tcMirror1GLCode':U
               vcFieldValue  = t_sMirroringGL.tcMirror1GLCode
               viLocalStatus = -1.
        <M-54 run SetMessage
           (input  vcMsg (icMessage), 
            input  '' (icArguments), 
            input  vcFieldName (icFieldName), 
            input  vcFieldValue (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sMirroringGL.tc_Rowid (icRowid), 
            input  'QadFin-7616':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    end. /* validation on mirror 1 account type */
      
    if t_sMirroringGL.tcMirror2GLCode <> ''                      and 
       t_sMirroringGL.tcMirror2GLCode <> ?                       and
       t_sMirroringGL.tcMirror2GLTypeCode <> {&GLTYPECODE-STAN}
    then do: 
        assign vcMsg         =trim(#T-38'You must specify a standard GL account in the Mirror 2 Account field.':255(68340)t-38#)
               vcFieldName   = 'tMirroringGL.tcMirror2GLCode':U
               vcFieldValue  = t_sMirroringGL.tcMirror2GLCode
               viLocalStatus = -1.
         <M-10 run SetMessage
            (input  vcMsg (icMessage), 
             input  '' (icArguments), 
             input  vcFieldName (icFieldName), 
             input  vcFieldValue (icFieldValue), 
             input  'E':U (icType), 
             input  3 (iiSeverity), 
             input  t_sMirroringGL.tc_Rowid (icRowid), 
             input  'QadFin-7480':U (icFcMsgNumber), 
             input  '' (icFcExplanation), 
             input  '' (icFcIdentification), 
             input  '' (icFcContext), 
             output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    end. /* validation on mirror 1 account type */
     
    /* If the Split GL Type is NOSPLIT, then Trans1Journal should be SOURCE
      and Trans2Journal should be NOSPLIT */
    if t_sMirroringGL.MirroringGLSplitGLType = {&MIRRORINGGLSPLITGLTYPE-NOSPLIT} 
    then do:
        if t_sMirroringGL.MirroringGLTrans1Journal <> {&MIRRORINGGLTRANS1JOURNAL-SOURCE} or
           t_sMirroringGL.MirroringGLTrans2Journal <> {&MIRRORINGGLTRANS2JOURNAL-NOSPLIT}
        then do:
            assign vcMsg         = trim(#T-43'When Account Split Type is no split, Transaction 1 Journal must be source daybook and Transaction 2 Journal must be no split.':255(68305)t-43#)
                   viLocalStatus = -1.
             <M-25 run SetMessage
                (input  vcMsg (icMessage), 
                 input  '' (icArguments), 
                 input  'tMirroringGL.MirroringGLSplitGLType':U (icFieldName), 
                 input  t_sMirroringGL.MirroringGLSplitGLType (icFieldValue), 
                 input  'E':U (icType), 
                 input  3 (iiSeverity), 
                 input  t_sMirroringGL.tc_Rowid (icRowid), 
                 input  'QadFin-7493':U (icFcMsgNumber), 
                 input  '' (icFcExplanation), 
                 input  '' (icFcIdentification), 
                 input  '' (icFcContext), 
                 output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
         end. /* t_sMirroringGL.MirroringGLTrans1Journal <> {&MIRRORINGGLTRANS1JOURNAL-SOURCE} */
     end. /* if(t_sMirroringGL.MirroringGLSplitGLType = {&MIRRORINGGLSPLITGLTYPE-NOSPLIT}  */

     /* If the Split GL Type is different than NOSPLIT */
     else do:
         if t_sMirroringGL.MirroringGLTrans2Journal = {&MIRRORINGGLTRANS2JOURNAL-NOSPLIT} 
         then do:
             assign vcMsg         = trim(#T-55'When Account Split Type is different than no split, Transaction 2 daybook cannot be no split.':255(68343)t-55#)
                    viLocalStatus = -1.
             <M-56 run SetMessage
                (input  vcMsg (icMessage), 
                 input  '' (icArguments), 
                 input  'tMirroringGL.MirroringGLSplitGLType':U (icFieldName), 
                 input  t_sMirroringGL.MirroringGLSplitGLType (icFieldValue), 
                 input  'E':U (icType), 
                 input  3 (iiSeverity), 
                 input  t_sMirroringGL.tc_Rowid (icRowid), 
                 input  'QadFin-7627':U (icFcMsgNumber), 
                 input  '' (icFcExplanation), 
                 input  '' (icFcIdentification), 
                 input  '' (icFcContext), 
                 output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
         end.

         if t_sMirroringGL.MirroringGLTrans1Journal <> {&MIRRORINGGLTRANS1JOURNAL-SOURCE} and
            t_sMirroringGL.MirroringGLTrans2Journal <> {&MIRRORINGGLTRANS2JOURNAL-SOURCE}
        then do:
            assign vcMsg = trim(#T-52'At least one of Transaction 1 daybook and transaction 2 daybook should be source daybook.':255(68344)t-52#)
                   viLocalStatus = -1.
            <M-44 run SetMessage
                (input  vcMsg (icMessage), 
                 input  '' (icArguments), 
                 input  'tMirroringGL.MirroringGLSplitGLType':U (icFieldName), 
                 input  t_sMirroringGL.MirroringGLSplitGLType (icFieldValue), 
                 input  'E':U (icType), 
                 input  3 (iiSeverity), 
                 input  t_sMirroringGL.tc_Rowid (icRowid), 
                 input  'QadFin-7562':U (icFcMsgNumber), 
                 input  '' (icFcExplanation), 
                 input  '' (icFcIdentification), 
                 input  '' (icFcContext), 
                 output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
        end. /* if t_sMirroringGL.MirroringGLTrans2Journal = {&MIRRORINGGLTRANS2JOURNAL-NOSPLIT} or */
    end. /*  If the Split GL Type is different than NOSPLIT  */

    /*Make sure the two mirror accounts have the same exchange method 
      If not, raise a warning 
    */
    if not vlStartGLForExchangeMethod
    then do:
        <Q-59 run GLForExchangeMethod  (Start) in BGL >
        assign vlStartGLForExchangeMethod = false.
    end.

    <Q-60 run GLForExchangeMethod (all) (Read) (Cache)
       (input ?, (CompanyId)
        input t_sMirroringGL.Mirror1GL_ID, (GLId)
        output dataset tqGLForExchangeMethod) in BGL >
    find first tqGlForExchangeMethod no-error.
    if available tqGLForExchangeMethod then
        assign vcExchangeMethod = tqGLForExchangeMethod.tcGLExchangeMethod.

    <Q-61 run GLForExchangeMethod (all) (Read) (Cache)
       (input ?, (CompanyId)
        input t_sMirroringGL.Mirror2GL_ID, (GLId)
        output dataset tqGLForExchangeMethod) in BGL >
    find first tqGlForExchangeMethod no-error.
    if available tqGLForExchangeMethod                              and 
       vcExchangeMethod <> tqGLForExchangeMethod.tcGLExchangeMethod 
    then do:
         assign vcMsg                = trim( #T-62'Mirror 1 account and mirror 2 account should have same exchange method.':255(68402)T-62#)
                viLocalWarningStatus = 1.
         <M-63 run SetMessage
            (input  vcMsg (icMessage), 
             input  '' (icArguments), 
             input  'tMirroringGL.tcMirror1GLCode':U (icFieldName), 
             input  t_sMirroringGL.tcMirror1GLCode (icFieldValue), 
             input  'W':U (icType), 
             input  4 (iiSeverity), 
             input  t_sMirroringGL.tc_Rowid (icRowid), 
             input  'QadFin-7658':U (icFcMsgNumber), 
             input  '' (icFcExplanation), 
             input  '' (icFcIdentification), 
             input  '' (icFcContext), 
             output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    end. /* Make sure the two mirror accounts have the same exchange method */

    <M-31 run ValidateComponentPostAnalysis
       (input-output vlGLByIDstarted (blGLByIdStarted), 
        input-output vlMirroringGLstarted (blMirroringGLstarted), 
        output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    if  viFcReturnSuper < 0   or 
        viFcReturnSuper <> 0 and 
        viLocalStatus   = 0
    then assign viLocalStatus = viFcReturnSuper.

    <M-41 run ValidateComponentPostAnalysis1
       (input-output vlGLByIDstarted (blGLByIDstarted), 
        input-output vlMirroringGLstarted (blMirroringGLstarted), 
        output viFcReturnSuper (oiReturnStatus)) in BMirroringGL>
    if viFcReturnSuper <  0 or 
       viFcReturnSuper <> 0 and 
       viLocalStatus   =  0
    then assign viLocalStatus = viFcReturnSuper.
end. /* for each tMirroringGL */

if vlGLByIDstarted 
then do:
    <Q-30 run GLById  (Stop) in BGL >
end.

if vlMirroringGLstarted
then do:
     <Q-57 run MirroringGLBySourceGLAnalysis  (Stop) in BMirroringGL >
end.

if vlStartGLForExchangeMethod
then do:
    <Q-58 run GLForExchangeMethod  (Stop) in BGL >
end.

assign oiReturnstatus = viLocalStatus. 
if oiReturnstatus = 0 and viLocalWarningStatus <> 0 then
    oiReturnstatus = viLocalWarningStatus.