project QadFinancials > class BCOACrossRef > method GetCOACrossRefSeparate


Parameters


iiCOACrossRefIDinputinteger
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCOACrossRef.GetCOACrossRef


program code (program6/bcoacrossref.p)

assign oiReturnStatus = -98.

/* ==============================================================================================*/
/* Find the mapping for type separate                                                            */
/* Treat the elements one by one                                                                 */
/* ==============================================================================================*/
/* Assume you want to find the mapping for 550000                                                */
/*     FROM       TO         TARGET                                                              */
/* a  550000                    X                                                                */
/* b  400000     600000         X                                                                */
/* c  55*                       X                                                                */
/* ==============================================================================================*/
/* Structure                                                                                     */
/* 1- Get the mapping for the GL Account                                                         */
/*       a Equals                                                                                */
/*       b Range                                                                                 */
/*       c wildcard                                                                              */
/* 2- Get the mapping for the Division                                                           */
/*       a Equals                                                                                */
/*       b Range                                                                                 */
/*       c wildcard                                                                              */
/* 3- Get the mapping for the CostCentre                                                         */
/*       a Equals                                                                                */
/*       b Range                                                                                 */
/*       c wildcard                                                                              */
/* 4- Get the mapping for the Project                                                            */
/*       a Equals                                                                                */
/*       b Range                                                                                 */
/*       c wildcard                                                                              */
/* ==============================================================================================*/


/* ===================================== */
/* 1- Get the mapping for the GL Account */
/* ===================================== */
assign viCountGL = 0.
for each tCOACrossRefResult where
         tCOACrossRefResult.tcGLCode > '' and
         tCOACrossRefResult.tiTargetGL_ID = 0
         break by tCOACrossRefResult.tcGLCode :

    assign viCountGL = viCountGL + 1.

    /* a- We get the Target account for each GL just once */
    if first-of (tCOACrossRefResult.tcGLCode)
    then do :

        /* Initialise */
        assign vcTargetGLCode = ''
               viTargetGL_ID  = 0
               vlGLIsDivisionAccount = no
               vlGLIsCostCentreAccount = no
               vlGLIsProjectAccount = no
               vlGLIsSafAccount = no
               vcGLExchangeMethod = ''
               vcExchangeRateTypeCode = ''.

        /* Check the From-To first on equality */          
        for each tqCOACrossRefDetByIDParentID where
                 tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID          = iiCOACrossRefID             and
                 tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom = tCOACrossRefResult.tcGLCode 
                 :
            
            /* Target must be filled in */                                         
            if (tqCOACrossRefDetByIDParentID.tiTargetGL_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetGL_ID = ?) and
               (tqCOACrossRefDetByIDParentID.tcTargetGLCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetGLCode = ?)
            then next.
            
            assign  vcTargetGLCode          = tqCOACrossRefDetByIDParentID.tcTargetGLCode
                    viTargetGL_ID           = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
                    vlGLIsDivisionAccount   = tqCOACrossRefDetByIDParentID.tlGLIsDivisionAccount
                    vlGLIsCostCentreAccount = tqCOACrossRefDetByIDParentID.tlGLIsCostCentreAccount
                    vlGLIsProjectAccount    = tqCOACrossRefDetByIDParentID.tlGLIsProjectAccount
                    vlGLIsSafAccount        = tqCOACrossRefDetByIDParentID.tlGLIsSafAccount
                    vcGLExchangeMethod      = tqCOACrossRefDetByIDParentID.tcGLExchangeMethod
                    vcExchangeRateTypeCode  = tqCOACrossRefDetByIDParentID.tcExchangeRateTypeCode.                

        end. /* for each tqCOACrossRefDetByIDParentID */
            
        if viTargetGL_ID = 0
        then do :
            /* b- Check the From-To on range  */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID          = iiCOACrossRefID              and        
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom <= tCOACrossRefResult.tcGLCode and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLTo   >= tCOACrossRefResult.tcGLCode
                     :
                     
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetGL_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetGL_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetGLCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetGLCode = ?)
                then next.
                
                assign  vcTargetGLCode          = tqCOACrossRefDetByIDParentID.tcTargetGLCode
                        viTargetGL_ID           = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
                        vlGLIsDivisionAccount   = tqCOACrossRefDetByIDParentID.tlGLIsDivisionAccount
                        vlGLIsCostCentreAccount = tqCOACrossRefDetByIDParentID.tlGLIsCostCentreAccount
                        vlGLIsProjectAccount    = tqCOACrossRefDetByIDParentID.tlGLIsProjectAccount
                        vlGLIsSafAccount        = tqCOACrossRefDetByIDParentID.tlGLIsSafAccount
                        vcGLExchangeMethod      = tqCOACrossRefDetByIDParentID.tcGLExchangeMethod
                        vcExchangeRateTypeCode  = tqCOACrossRefDetByIDParentID.tcExchangeRateTypeCode.      

            end. /* for each tqCOACrossRefDetByIDParentID */
        
        end. /* if tCOACrossRefResult.tiTargetGL_ID = 0 */
        
        if viTargetGL_ID = 0
        then do :
            /* c- Check all   */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom > '' :                     
                
                /* GL Should match */
                if not tCOACrossRefResult.tcGLCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom
                then next.
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetGL_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetGL_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetGLCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetGLCode = ?)
                then next.
                
                assign  vcTargetGLCode          = tqCOACrossRefDetByIDParentID.tcTargetGLCode
                        viTargetGL_ID           = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
                        vlGLIsDivisionAccount   = tqCOACrossRefDetByIDParentID.tlGLIsDivisionAccount
                        vlGLIsCostCentreAccount = tqCOACrossRefDetByIDParentID.tlGLIsCostCentreAccount
                        vlGLIsProjectAccount    = tqCOACrossRefDetByIDParentID.tlGLIsProjectAccount
                        vlGLIsSafAccount        = tqCOACrossRefDetByIDParentID.tlGLIsSafAccount
                        vcGLExchangeMethod      = tqCOACrossRefDetByIDParentID.tcGLExchangeMethod
                        vcExchangeRateTypeCode  = tqCOACrossRefDetByIDParentID.tcExchangeRateTypeCode.                
                        
            end. /* for each tqCOACrossRefDetByIDParentID */
        
        end. /* if tCOACrossRefResult.tiTargetGL_ID = 0 */

    end. /* first-of (tCOACrossRefResult.tcGLCode) */

    assign tCOACrossRefResult.tcTargetGLCode          = vcTargetGLCode
           tCOACrossRefResult.tiTargetGL_ID           = viTargetGL_ID
           tCOACrossRefResult.tlGLIsDivisionAccount   = vlGLIsDivisionAccount
           tCOACrossRefResult.tlGLIsCostCentreAccount = vlGLIsCostCentreAccount
           tCOACrossRefResult.tlGLIsProjectAccount    = vlGLIsProjectAccount
           tCOACrossRefResult.tlGLIsSafAccount        = vlGLIsSafAccount
           tCOACrossRefResult.tcGLExchangeMethod      = vcGLExchangeMethod
           tCOACrossRefResult.tcExchangeRateTypeCode  = vcExchangeRateTypeCode.

end.  /* for each tCOACrossRefResult */

/* ====================================== */
/* 2- Get the mapping for the Division    */
/* ====================================== */
assign viCountDIV = 0.
for each tCOACrossRefResult where
         tCOACrossRefResult.tcDivisionCode > '' and
         tCOACrossRefResult.tiTargetDivision_ID = 0
         break by tCOACrossRefResult.tcDivisionCode :
    
    assign viCountDIV = viCountDIV + 1.

    if first-of (tCOACrossRefResult.tcDivisionCode)
    then do:

        /* Initialise */
        assign vcTargetDivisionCode = ''
               viTargetDivision_ID  = 0.

        /* Check the From-To first on equality */          
        for each tqCOACrossRefDetByIDParentID where
                 tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID           = iiCOACrossRefID                   and            
                 tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom = tCOACrossRefResult.tcDivisionCode:
            
            /* Target must be filled in */                                         
            if (tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = ?) and
               (tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = ?)
            then next.
            
            assign vcTargetDivisionCode = tqCOACrossRefDetByIDParentID.tcTargetDivisionCode
                   viTargetDivision_ID  = tqCOACrossRefDetByIDParentID.tiTargetDivision_ID.
                            
        end. /* for each tqCOACrossRefDetByIDParentID */    
        
        /* Check the From-To first on range */          
        if viTargetDivision_ID = 0 
        then do:
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID           = iiCOACrossRefID                    and                
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom <= tCOACrossRefResult.tcDivisionCode and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivTo   >= tCOACrossRefResult.tcDivisionCode
                     :
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = ?)
                then next.
                
                assign vcTargetDivisionCode = tqCOACrossRefDetByIDParentID.tcTargetDivisionCode
                       viTargetDivision_ID  = tqCOACrossRefDetByIDParentID.tiTargetDivision_ID.
                                
            end. /* for each tqCOACrossRefDetByIDParentID */
        end. /* viTargetDivision_ID = 0  */
        
        if viTargetDivision_ID = 0     
        then do:   
            /* Check the From-To first on all  */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom > '' :
                
                /* Division Should match */
                if not tCOACrossRefResult.tcDivisionCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom
                then next.
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = ?)
                then next.
                
                assign vcTargetDivisionCode = tqCOACrossRefDetByIDParentID.tcTargetDivisionCode
                       viTargetDivision_ID  = tqCOACrossRefDetByIDParentID.tiTargetDivision_ID.
                                
            end. /* for each tqCOACrossRefDetByIDParentID */
            
        end. /* viTargetDivision_ID = 0  */

    end. /* first-of (tCOACrossRefResult.tcDivisionCode) */

    assign tCOACrossRefResult.tcTargetDivisionCode = vcTargetDivisionCode
           tCOACrossRefResult.tiTargetDivision_ID  = viTargetDivision_ID.

end. /* Get the mapping for the Division */

/* ====================================== */
/* 3- Get the mapping for the CostCentre  */
/* ====================================== */
assign viCountCC = 0.
for each tCOACrossRefResult where
         tCOACrossRefResult.tcCostCentreCode > '' and
         tCOACrossRefResult.tiTargetCostCentre_ID = 0
         break by tCOACrossRefResult.tcCostCentreCode :
    
    assign viCountCC = viCountCC + 1.

    if first-of (tCOACrossRefResult.tcCostCentreCode)
    then do:

        /* Initialise */
        assign vcTargetCostCentreCode = ''
               viTargetCostCentre_ID  = 0
               vlCostCentreIsWithSaf  = no.

        /* Check the From-To first on equality */          
        for each tqCOACrossRefDetByIDParentID where
                 tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID          = iiCOACrossRefID                     and            
                 tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom = tCOACrossRefResult.tcCostCentreCode
                 :
            
            /* Target must be filled in */                                         
            if (tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = ?) and
               (tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = ?)
            then next.
            
            assign vcTargetCostCentreCode = tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode
                   viTargetCostCentre_ID  = tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID
                   vlCostCentreIsWithSaf  = tqCOACrossRefDetByIDParentID.tlCostCentreIsWithSaf.
                            
        end. /* for each tqCOACrossRefDetByIDParentID */
    
        if viTargetCostCentre_ID = 0
        then do :
            /* Check the From-To first on range */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID          = iiCOACrossRefID                      and                
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom <= tCOACrossRefResult.tcCostCentreCode and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCTo   >= tCOACrossRefResult.tcCostCentreCode
                     :
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = ?)
                then next.
                
                assign vcTargetCostCentreCode = tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode
                       viTargetCostCentre_ID  = tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID
                       vlCostCentreIsWithSaf  = tqCOACrossRefDetByIDParentID.tlCostCentreIsWithSaf.
                                
            end. /* for each tqCOACrossRefDetByIDParentID */
        end. /* viTargetCostCentre_ID = 0 */
        
        if viTargetCostCentre_ID = 0
        then do :
            /* Check the From-To first on all  */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom > '' : 
                
                /* CostCentre Should match */
                if not tCOACrossRefResult.tcCostCentreCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom
                then next.
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = ?)
                then next.
                
                assign vcTargetCostCentreCode = tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode
                       viTargetCostCentre_ID  = tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID
                       vlCostCentreIsWithSaf  = tqCOACrossRefDetByIDParentID.tlCostCentreIsWithSaf.
                                
            end. /* for each tqCOACrossRefDetByIDParentID */
        end. /* viTargetCostCentre_ID = 0 */
    end. /* first-of (tCOACrossRefResult.tcCostCentreCode) */

    assign tCOACrossRefResult.tcTargetCostCentreCode = vcTargetCostCentreCode
           tCOACrossRefResult.tiTargetCostCentre_ID  = viTargetCostCentre_ID
           tCOACrossRefResult.tlCostCentreIsWithSaf  = vlCostCentreIsWithSaf.

end. /* Get the mapping for the CostCentre */

/* ===================================== */
/* 4- Get the mapping for the Project    */
/* ===================================== */
assign viCountPRJ = 0.
for each tCOACrossRefResult where
         tCOACrossRefResult.tcProjectCode > '' and
         tCOACrossRefResult.tiTargetProject_ID = 0
         break by tCOACrossRefResult.tcProjectCode :

    assign viCountPRJ = viCountPRJ + 1.

    if first-of (tCOACrossRefResult.tcProjectCode)
    then do:

        /* Initialise */
        assign vcTargetProjectCode = ''
               viTargetProject_ID  = 0
               vlProjectIsWithSaf  = no.

        /* Check the From-To first on equality */          
        for each tqCOACrossRefDetByIDParentID where
                 tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID            = iiCOACrossRefID                  and            
                 tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom = tCOACrossRefResult.tcProjectCode
                 :
            
            /* Target must be filled in */                                         
            if (tqCOACrossRefDetByIDParentID.tiTargetProject_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetProject_ID = ?) and
               (tqCOACrossRefDetByIDParentID.tcTargetProjectCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetProjectCode = ?)
            then next.
            
            assign vcTargetProjectCode = tqCOACrossRefDetByIDParentID.tcTargetProjectCode
                   viTargetProject_ID  = tqCOACrossRefDetByIDParentID.tiTargetProject_ID
                   vlProjectIsWithSaf  = tqCOACrossRefDetByIDParentID.tlProjectIsWithSaf.
                            
        end. /* for each tqCOACrossRefDetByIDParentID */
    
        if viTargetProject_ID = 0
        then do :
            /* Check the From-To first on range */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID          = iiCOACrossRefID                     and                
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom <= tCOACrossRefResult.tcProjectCode and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjTo   >= tCOACrossRefResult.tcProjectCode
                     :
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetProject_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetProject_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetProjectCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetProjectCode = ?)
                then next.
                
                assign vcTargetProjectCode = tqCOACrossRefDetByIDParentID.tcTargetProjectCode
                       viTargetProject_ID  = tqCOACrossRefDetByIDParentID.tiTargetProject_ID
                   vlProjectIsWithSaf  = tqCOACrossRefDetByIDParentID.tlProjectIsWithSaf.
                                
            end. /* for each tqCOACrossRefDetByIDParentID */
        end. /* viTargetProject_ID = 0 */
        
        if viTargetProject_ID = 0 
        then do :
        
            /* Check the From-To first on all  */          
            for each tqCOACrossRefDetByIDParentID where
                     tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
                     tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom > '' :
                
                /* Project Should match */
                if not tCOACrossRefResult.tcProjectCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom
                then next.
                
                /* Target must be filled in */                                         
                if (tqCOACrossRefDetByIDParentID.tiTargetProject_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetProject_ID = ?) and
                   (tqCOACrossRefDetByIDParentID.tcTargetProjectCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetProjectCode = ?)
                then next.
                
                assign vcTargetProjectCode = tqCOACrossRefDetByIDParentID.tcTargetProjectCode
                       viTargetProject_ID  = tqCOACrossRefDetByIDParentID.tiTargetProject_ID
                       vlProjectIsWithSaf  = tqCOACrossRefDetByIDParentID.tlProjectIsWithSaf.
                                
            end. /* for each tqCOACrossRefDetByIDParentID */
            
        end. /* viTargetProject_ID = 0 */
    
    end. /* first-of (tCOACrossRefResult.tcProjectCode) */

    assign tCOACrossRefResult.tcTargetProjectCode = vcTargetProjectCode
           tCOACrossRefResult.tiTargetProject_ID  = viTargetProject_ID
           tCOACrossRefResult.tlProjectIsWithSaf  = vlProjectIsWithSaf.

end. /* Get the mapping for the Project */

<M-27 run AddAdditionalInfoInCTLOG
   (input  program-name (1) (icTrace), 
    input  'GL Reads:'  + string (viCountGL) (icParam1), 
    input  'CC Reads:' + string (viCountCC) (icParam2), 
    input  'DIV Reads:' + string (viCountDiV) (icParam3), 
    input  'PRJ Reads:' + string (viCountPRJ) (icParam4), 
    input  '' (icParam5), 
    input  '' (icParam6), 
    input  '' (icParam7), 
    input  '' (icParam8), 
    input  '' (icParam9)) in BCOACrossRef>

if oiReturnStatus = -98
then assign oiReturnStatus = 0.