project QadFinancials > class BBusinessRelation > method ValidateComponentSystemOrDomain

Description

Check if this BusinessRelation needs to be system wide or Domain specific


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BBusinessRelation.ValidateComponentPre


program code (program5/bbusinessrelation.p)

/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus      = -98
       viLocalReturnStatus = 0.

SYSTEMORDOMAINBLOCK:
do:
    /* ========================================================================================================================== */
    /* Check if the business relation already exist. (the test is also in the ancestor code, but the message is not clear enough) */
    /* ========================================================================================================================== */
    assign vcMessage = '':U.

    find bBusinessRelation where
         bBusinessRelation.BusinessRelationCode = t_sBusinessRelation.BusinessRelationCode and
         bBusinessRelation.BusinessRelationCode <> "":U and
         bBusinessRelation.tc_Rowid             <> t_sBusinessRelation.tc_Rowid
         no-lock no-error.
                                
    <Q-16 run BusinessRelationPrim (all) (Read) (NoCache)
       (input 0, (BusinessRelationId)
        input t_sBusinessRelation.BusinessRelationCode, (BusinessRelationCode)
        output dataset tqBusinessRelationPrim) in BBusinessRelation >
    find tqBusinessRelationPrim where
         tqBusinessRelationPrim.tcBusinessRelationCode = t_sBusinessRelation.BusinessRelationCode and
         tqBusinessRelationPrim.tiBusinessRelation_ID <> t_sBusinessRelation.BusinessRelation_ID
         no-lock no-error.

    if available bBusinessRelation or
       available tqBusinessRelationPrim
    then do:
        assign vcMessage           = trim(#T-17'A business relation with the same code already exists in another domain.':255(69711)t-17#) + chr(10) +
                                     trim(#T-18'You can only view domain-specific business relations in the domain in which they were created.':255(69712)t-18#)
               viLocalReturnStatus = -1.
        <M-19 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  'tBusinessRelation.BusinessRelationCode':U (icFieldName), 
            input  t_sBusinessRelation.BusinessRelationCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sBusinessRelation.tc_Rowid (icRowid), 
            input  'QadFin-8265':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
    end.

    /* ======================================================================================= */
    /* Not allowed to update a domain specific business relation from within another company   */
    /* ======================================================================================= */
    if t_sBusinessRelation.tc_Status                  = "C":U and
       available t_iBusinessRelation                          and
       t_iBusinessRelation.BusinessRelationIsDomRestr = true  and
       t_iBusinessRelation.Domain_ID                 <> viDomainID
    then do:
        <Q-4 run DomainsPrim (all) (Read) (NoCache)
           (input t_iBusinessRelation.Domain_ID, (DomainID)
            input '':U, (DomainCode)
            output dataset tqDomainsPrim) in BDomain >
        find tqDomainsPrim where
             tqDomainsPrim.tiDomain_ID = t_iBusinessRelation.Domain_ID
             no-lock no-error.
        if not available tqDomainsPrim
        then assign t_sBusinessRelation.Domain_ID = viDomainID. /* Auto-correct in case domain ID does not exist (Normally, should not occur) */
        else do:
            assign vcMessage           = trim(substitute(#T-6'This business relation is domain specific. Please update it from within domain $1.':255(69672)t-6#, tqDomainsPrim.tcDomainCode ))
                   viLocalReturnStatus = -1.
            <M-5 run SetMessage
               (input  vcMessage (icMessage), 
                input  '':U (icArguments), 
                input  'tBusinessRelation.Domain_ID':U (icFieldName), 
                input  t_sBusinessRelation.Domain_ID (icFieldValue), 
                input  'E':U (icType), 
                input  1 (iiSeverity), 
                input  t_sBusinessRelation.tc_Rowid (icRowid), 
                input  'QadFin-8250':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
            leave SYSTEMORDOMAINBLOCK.
        end. /* else do */
    end. /* if t_sBusinessRelation.tc_Status             = "C":U and */

    /* ===================================================================================== */
    /* Assign the Domain_ID (link to domain) with 0 when BusinessRelationIsDomRestr <> true. */
    /* ===================================================================================== */
    if t_sBusinessRelation.BusinessRelationIsDomRestr <> true
    then do:
        assign t_sBusinessRelation.Domain_ID = 0.
        leave SYSTEMORDOMAINBLOCK.
    end.
    
    /* ================================================================================================= */
    /* Assign the Domain_ID (link to domain) with the ID of the current domain when                      */
    /* BusinessRelationIsDomRestr = true (Business Relation is Domain specific, false means system wide) */
    /* ================================================================================================= */
    if (t_sBusinessRelation.tc_Status = "N":U and
        t_sBusinessRelation.BusinessRelationIsDomRestr = true)    or
       (t_sBusinessRelation.tc_Status = "C":U     and
        available t_iBusinessRelation             and
        t_iBusinessRelation.BusinessRelationIsDomRestr = false and
        t_sBusinessRelation.BusinessRelationIsDomRestr = true)
    then assign t_sBusinessRelation.Domain_ID = viDomainID.

    /* ======================================================================================= */
    /* If the business relation is already used for debtor/creditor, then check if the         */
    /* Shared sets for this are only used in this domain.  Otherwise we might have a debtor    */
    /* That is used in two domains, but it's business relation can only be used in one.        */
    /* ======================================================================================= */
    /* CREDITOR */
    <Q-8 assign vlFcQueryRecordsAvailable = CreditorForBusinessRelationChk (NoCache)
       (input 0, (CompanyId)
        input t_sBusinessRelation.BusinessRelation_ID, (BusinessRelationID)
        input t_sBusinessRelation.Domain_ID, (NotDomainID)) in BCreditor >
    if vlFcQueryRecordsAvailable <> false
    then do:
        assign vcMessage           = trim(#T-9'At least one supplier was found for this business relation that was used in a different domain.':255(69673)T-9#) + chr(10) +
                                     trim(#T-10'This business relation cannot be made domain specific for this domain.':255(69674)t-10#)
               viLocalReturnStatus = -1.
        <M-11 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  'tBusinessRelation.BusinessRelationIsDomRestr':U (icFieldName), 
            input  string(t_sBusinessRelation.BusinessRelationIsDomRestr) (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sBusinessRelation.tc_Rowid (icRowid), 
            input  'QadFin-8251':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
    end. /* if vlFcQueryRecordsAvailable <> false */

    /* DEBTOR */
    <Q-15 assign vlFcQueryRecordsAvailable = DebtorForBusinessRelationCheck (NoCache)
       (input 0, (CompanyId)
        input t_sBusinessRelation.BusinessRelation_ID, (BusinessRelationID)
        input t_sBusinessRelation.Domain_ID, (NotDomainID)) in BDebtor >
    if vlFcQueryRecordsAvailable <> false
    then do:
        assign vcMessage           = trim(#T-13'At least one customer found for this business relation is used in a different domain.':255(69675)t-13#) + chr(10) +
                                     trim(#T-14'This business relation cannot be made domain specific for this domain.':255(69674)t-14#)
               viLocalReturnStatus = -1.
        <M-12 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  'tBusinessRelation.BusinessRelationIsDomRestr':U (icFieldName), 
            input  string(t_sBusinessRelation.BusinessRelationIsDomRestr) (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sBusinessRelation.tc_Rowid (icRowid), 
            input  'QadFin-8252':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
    end. /* if vlFcQueryRecordsAvailable <> false */
end. /* SYSTEMORDOMAINBLOCK */

/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus = viLocalReturnStatus.