project QadFinancials > class BMfgEndUser > method MaintainDataBusinessRelation

Description

This method is used to replicate end user information from Financial to MFG when modify a related business relation.


Parameters


tContactinputtemp-table
tEndUserAddressinputtemp-table
icDomainCodeinputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program3/bmfgenduser.p)

/* ====================== */
/* Check input parameters */
/* ====================== */
if not can-find(first tContact)
then return.
/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus                  = -98
       viLocalReturnStatus             = 0
       vlQueryStartedDomainBySharedSet = false 
       vcListEuMstr                    = '':U
       vcEndUserDomainCode             = icDomainCode.
/* ======================================================== */
/* Store the instance id for the Business relation instance */
/* ======================================================== */
if viBBusinessRelationMfgEndUserID = 0 or
   viBBusinessRelationMfgEndUserID = ?
then do:
     <I-32 {bFcStartAndOpenInstance
          &ADD-TO-TRANSACTION = "true"
          &CLASS              = "BBusinessRelation"}>
end. /* if viBBusinessRelationMfgEndUserID = 0     */
else do:
    <I-33 {bFcOpenInstance
         &CLASS           = "BBusinessRelation"}>
end. /* NOT if viBBusinessRelationMfgEndUserID = 0 */
/* Fill in tDebtorEndUser table */
empty temp-table tDebtorEndUser.

/* Start queries */
<Q-37 run DebtorEndUserByDebtorByAddress  (Start) in BDebtorEndUser >
<Q-38 run DebtorEndUserByDbt  (Start) in BDebtorEndUser >

for each tEndUserAddress where 
         tEndUserAddress.tc_Status = 'C':U or
         tEndUserAddress.tc_Status = 'N':U:
    <Q-35 run DebtorEndUserByDebtorByAddress (all) (Read) (NoCache)
       (input tEndUserAddress.Address_ID, (AddressID)
        input false, (DebtorEndUserIsShipto)
        input true, (DebtorEndUserIsDebtor)
        input ?, (DebtorShipToCode)
        input ?, (DebtorID)
        input ?, (CompanyId)
        output dataset tqDebtorEndUserByDebtorByAddress) in BDebtorEndUser >
    find first tqDebtorEndUserByDebtorByAddress where
               tqDebtorEndUserByDebtorByAddress.tiAddress_ID            = tEndUserAddress.Address_ID and
               tqDebtorEndUserByDebtorByAddress.tlDebtorEndUserIsShipTo = false                      and 
               tqDebtorEndUserByDebtorByAddress.tlDebtorEndUserIsDebtor = true
    no-error.
    if available tqDebtorEndUserByDebtorByAddress
    then do:
        <Q-36 run DebtorEndUserByDbt (all) (Read) (NoCache)
           (input ?, (CompanyId)
            input tqDebtorEndUserByDebtorByAddress.tiDebtor_ID, (DebtorId)
            output dataset tqDebtorEndUserByDbt) in BDebtorEndUser >
        find first tqDebtorEndUserByDbt where
                   tqDebtorEndUserByDbt.tlDebtorEndUserIsDebtor = true and
                   tqDebtorEndUserByDbt.tiDebtor_ID             = tqDebtorEndUserByDebtorByAddress.tiDebtor_ID
        no-error.
        if available tqDebtorEndUserByDbt
        then do:
            create tDebtorEndUser.           
            assign
                tDebtorEndUser.Address_ID                   = tqDebtorEndUserByDbt.tiAddress_ID
                tDebtorEndUser.Debtor_ID                    = tqDebtorEndUserByDbt.tiDebtor_ID
                tDebtorEndUser.DebtorEndUser_ID             = tqDebtorEndUserByDbt.tiDebtorEndUser_ID
                tDebtorEndUser.DebtorEndUserCode            = tqDebtorEndUserByDbt.tcDebtorEndUserCode
                tDebtorEndUser.DebtorEndUserIsDebtor        = tqDebtorEndUserByDbt.tlDebtorEndUserIsDebtor
                tDebtorEndUser.DebtorEndUserIsShipTo        = tqDebtorEndUserByDbt.tlDebtorEndUserIsShipTo
                tDebtorEndUser.LastModifiedDate             = tqDebtorEndUserByDbt.ttLastModifiedDate
                tDebtorEndUser.LastModifiedTime             = tqDebtorEndUserByDbt.tiLastModifiedTime
                tDebtorEndUser.LastModifiedUser             = tqDebtorEndUserByDbt.tcLastModifiedUser
                tDebtorEndUser.SharedSet_ID                 = tqDebtorEndUserByDbt.tiSharedSet_ID
                tDebtorEndUser.tc_Rowid                     = tqDebtorEndUserByDbt.tc_rowid
                tDebtorEndUser.tcAddressCity                = tqDebtorEndUserByDbt.tcAddressCity
                tDebtorEndUser.tcAddressEMail               = tqDebtorEndUserByDbt.tcAddressEMail
                tDebtorEndUser.tcAddressFax                 = tqDebtorEndUserByDbt.tcAddressFax
                tDebtorEndUser.tcAddressName                = tqDebtorEndUserByDbt.tcAddressName
                tDebtorEndUser.tcAddressStreet1             = tqDebtorEndUserByDbt.tcAddressStreet1
                tDebtorEndUser.tcAddressStreet2             = tqDebtorEndUserByDbt.tcAddressStreet2
                tDebtorEndUser.tcAddressStreet3             = tqDebtorEndUserByDbt.tcAddressStreet3
                tDebtorEndUser.tcAddressTelephone           = tqDebtorEndUserByDbt.tcAddressTelephone
                tDebtorEndUser.tcAddressTypeCode            = tqDebtorEndUserByDbt.tcAddressTypeCode
                tDebtorEndUser.tcAddressWebSite             = tqDebtorEndUserByDbt.tcAddressWebSite
                tDebtorEndUser.tcAddressZip                 = tqDebtorEndUserByDbt.tcAddressZip
                tDebtorEndUser.tcBusinessRelationCode       = tqDebtorEndUserByDbt.tcBusinessRelationCode
                tDebtorEndUser.tcCountryCode                = tqDebtorEndUserByDbt.tcCountryCode
                tDebtorEndUser.tcCountryDescription         = tqDebtorEndUserByDbt.tcCountryDescription
                tDebtorEndUser.tcCountyCode                 = tqDebtorEndUserByDbt.tcCountyCode
                tDebtorEndUser.tcCountyDescription          = tqDebtorEndUserByDbt.tcCountyDescription
                tDebtorEndUser.tcDebtorCode                 = tqDebtorEndUserByDbt.tcDebtorCode
                tDebtorEndUser.tcStateCode                  = tqDebtorEndUserByDbt.tcStateCode
                tDebtorEndUser.tcStateDescription           = tqDebtorEndUserByDbt.tcStateDescription
                tDebtorEndUser.tiAddressBusinessRelation_ID = tqDebtorEndUserByDbt.tiBusinessRelation_ID
                tDebtorEndUser.tiDebtorBusinessRelation_ID  = tqDebtorEndUserByDbt.tiBusinessRelation_ID
                tDebtorEndUser.tlAddressIsTemporary         = tqDebtorEndUserByDbt.tlAddressIsTemporary.
         end. /* if available tqDebtorEndUserByDbt             */
    end.      /* if available tqDebtorEndUserByDebtorByAddress */
end.          /* for each tEndUserAddress:                     */

/* Stop queries */
<Q-39 run DebtorEndUserByDebtorByAddress  (Stop) in BDebtorEndUser >
<Q-40 run DebtorEndUserByDbt  (Stop) in BDebtorEndUser >


CONVERTBLOCK:
DO:
    /* ===================================== */
    /* Check which records need to be loaded */
    /* ===================================== */
    for each tDebtorEndUser
        break by tDebtorEndUser.SharedSet_ID:
    
        /* =============== */
        /* Start the query */
        /* =============== */
        if vlQueryStartedDomainBySharedSet = false
        then do:
            <Q-1 run DomainBySharedSetDomain  (Start) in BDomain >
            assign vlQueryStartedDomainBySharedSet = true.
        end. /* if vlQueryStartedDomainBySharedSet = false */
    
        /* ======================================================================================================== */
        /* Check if the Customer End User needs to be replicated to one domain or to all domains of this shared set */
        /* If icDomainCode is left blank, all domains for this shared set will be replicated.                       */
        /* ======================================================================================================== */
        if first-of(tDebtorEndUser.SharedSet_ID)
        then do:
            <Q-2 run DomainBySharedSetDomain (all) (Read) (Cache)
               (input tDebtorEndUser.SharedSet_ID, (SharedSetId)
                input 0, (DomainID)
                input icDomainCode, (DomainCode)
                output dataset tqDomainBySharedSetDomain) in BDomain >
        end. /* if first-of(tDebtorEndUser.SharedSet_ID) */            
        for each tqDomainBySharedSetDomain where
                 tqDomainBySharedSetDomain.tiSharedSet_ID = tDebtorEndUser.SharedSet_ID and
                 tqDomainBySharedSetDomain.tcDomainCode   = icDomainCode:
            /* ============================================================ */
            /* Create a list of all teu_mstr records that need to be loaded */
            /* ============================================================ */
            <Q-3 assign vlFcQueryRecordsAvailable = EuMstrByAddrDomain (NoCache)
               (input tqDomainBySharedSetDomain.tcDomainCode, (Domain)
                input tDebtorEndUser.DebtorEndUserCode, (Addr)) in BMfgEndUser > 
            if vlFcQueryRecordsAvailable = true
            then assign vcListEuMstr = vcListEuMstr                           + 
                                       (if vcListEuMstr = '':U
                                        then '':U
                                        else chr(4))                          +
                                       tqDomainBySharedSetDomain.tcDomainCode +
                                       chr(2)                                 +
                                       tDebtorEndUser.DebtorEndUserCode.
        end. /* for each tqDomainBySharedSetDomain: */
    end.     /* for each tDebtorEndUser */
    
    if vcListEuMstr <> "" and 
       vcListEuMstr <> ?
    then do:
        /* ========================= */
        /* Load the teu_mstr records */
        /* ========================= */
        <M-4 run DataLoad
           (input  '':U (icRowids), 
            input  vcListEuMstr (icPkeys), 
            input  '':U (icObjectIds), 
            input  '':U (icFreeform), 
            input  false (ilKeepPrevious), 
            output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
        if viFcReturnSuper <> 0
        then do:
            assign viLocalReturnStatus = viFcReturnSuper.
            leave CONVERTBLOCK.
        end. /* if viFcReturnSuper <> 0 */
    end. /* if vcListEuMstr <> "" */ 
    
    /* ============================================== */
    /* Convert table tDebtorEndUser to table teu_mstr */
    /* ============================================== */
    for each tDebtorEndUser
        break by tDebtorEndUser.SharedSet_ID:
    
        /* =============== */
        /* Start the query */
        /* =============== */
        if vlQueryStartedDomainBySharedSet = false
        then do:
            <Q-5 run DomainBySharedSetDomain  (Start) in BDomain >
            assign vlQueryStartedDomainBySharedSet = true.
        end. /* if vlQueryStartedDomainBySharedSet = false */
    
        /* ======================================================================================================== */
        /* Check if the Customer End User needs to be replicated to one domain or to all domains of this shared set */
        /* If icDomainCode is left blank, all domains for this shared set will be replicated.                       */
        /* ======================================================================================================== */
        if first-of(tDebtorEndUser.SharedSet_ID)
        then do:
            if tDebtorEndUser.SharedSet_ID = 0 or
               tDebtorEndUser.SharedSet_ID = ?
            then do:
                assign vcMessage           = trim(substitute(#T-19'The shared set ID for this customer end user (&1) was not defined.':255(69601)t-19#, trim(tDebtorEndUser.DebtorEndUserCode) ))
                       viLocalReturnStatus = -3.
                <M-6 run SetMessage
                   (input  vcMessage (icMessage), 
                    input  '':U (icArguments), 
                    input  '':U (icFieldName), 
                    input  '':U (icFieldValue), 
                    input  'E':U (icType), 
                    input  1 (iiSeverity), 
                    input  '':U (icRowid), 
                    input  'QadFin-8618':U (icFcMsgNumber), 
                    input  '':U (icFcExplanation), 
                    input  '':U (icFcIdentification), 
                    input  '':U (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
                leave CONVERTBLOCK.
            end. /* if tDebtorEndUser.SharedSet_ID = 0 or */

            <Q-7 run DomainBySharedSetDomain (all) (Read) (Cache)
               (input tDebtorEndUser.SharedSet_ID, (SharedSetId)
                input 0, (DomainID)
                input icDomainCode, (DomainCode)
                output dataset tqDomainBySharedSetDomain) in BDomain >            
        end. /* if first-of(tDebtorEndUser.SharedSet_ID) */
            
        for each tqDomainBySharedSetDomain where
                 tqDomainBySharedSetDomain.tlDomainPropertyIsSetupCompl:
            /* ================================================== */
            /* Create or update teu_mstr records based on tDebtorEndUser */
            /* ================================================== */
            find first teu_mstr where
                       teu_mstr.eu_addr   = tDebtorEndUser.DebtorEndUserCode       and
                       teu_mstr.eu_domain = tqDomainBySharedSetDomain.tcDomainCode
            no-error.
            if not available teu_mstr
            then do:
                if tDebtorEndUser.tc_Status = "D"
                then next.

                <M-8 run AddDetailLine
                   (input  'eu_mstr':U (icTable), 
                    input  '':U (icParentRowid), 
                    output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
                if viFcReturnSuper <> 0
                then do:
                    assign viLocalReturnStatus = viFcReturnSuper.
                    leave CONVERTBLOCK.
                end. /* if viFcReturnSuper <> 0 */                

                assign teu_mstr.oid_eu_mstr = <M-9 GetNextOidValue  () in BMfgEndUser> no-error.
                if error-status:error
                then do:
                    assign
                        vcMessage           = trim(#T-20'The system cannot retrieve an OID value when replicating the customer end user.':255(69602)t-20#) + chr(10) +
                                              trim(substitute(#T-21'Customer End User: &1.':222(69603)T-21#, trim(tDebtorEndUser.DebtorEndUserCode)))
                        viLocalReturnStatus = -1.
                    if ERROR-STATUS:NUM-MESSAGES > 0
                    then
                        assign
                            vcMessage = vcMessage +
                                        chr(10)   + 
                                        trim(substitute(#T-22'Detailed info: &1 (&2).':255(466)T-22#,ERROR-STATUS:GET-MESSAGE(1),string(ERROR-STATUS:GET-NUMBER(1)))).
                    <M-10 run SetMessage
                       (input  vcMessage (icMessage), 
                        input  '':U (icArguments), 
                        input  '':U (icFieldName), 
                        input  '':U (icFieldValue), 
                        input  'E':U (icType), 
                        input  1 (iiSeverity), 
                        input  '':U (icRowid), 
                        input  'QadFin-8619':U (icFcMsgNumber), 
                        input  '':U (icFcExplanation), 
                        input  '':U (icFcIdentification), 
                        input  '':U (icFcContext), 
                        output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
                    leave CONVERTBLOCK.
                end. /* if error-status:error */
            end.     /* if not available teu_mstr */  
            else assign teu_mstr.tc_Status = "C":U.

            assign teu_mstr.eu_addr        = tDebtorEndUser.DebtorEndUserCode
                   teu_mstr.eu_domain      = tqDomainBySharedSetDomain.tcDomainCode
                   teu_mstr.eu_cm_nbr      = tDebtorEndUser.tcDebtorCode
                   teu_mstr.tc_Status      = (if tDebtorEndUser.tc_Status = "D":U
                                              then tDebtorEndUser.tc_Status
                                              else teu_mstr.tc_Status).

            /* get the address information from the business relation instance.*/  
            empty temp-table tEndUserAddress.
            
            assign vhFcComponent = ?.
            <M-11 run GetAddressWithID
               (input  tDebtorEndUser.address_id (iiAddressID), 
                input-output tEndUserAddress (tApiAddress), 
                output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation> 
                                                                                       
            /* find the t_saddress record we just created */
            find first tEndUserAddress where
                       tEndUserAddress.address_id = tDebtorEndUser.address_id
            no-error.
            if available tEndUserAddress
            then assign teu_mstr.eu_lang = tEndUserAddress.tcLngCode
                        teu_mstr.eu_sort = tEndUserAddress.AddressSearchName.
            for each teud_det where
                     teud_det.eud_domain = teu_mstr.eu_domain and       
                     teud_det.eud_addr   = tDebtorEndUser.DebtorEndUserCode:
                assign teud_det.tc_Status = 'D':U.
            end.
            for each tContact:
                /* Create an eud_det record for each contact assoicated with the address */           
                /* Check to see if we have an existing teud_det record for the contact*/
                find first teud_det where
                           teud_det.eud_domain = teu_mstr.eu_domain                and           
                           teud_det.eud_addr   = tDebtorEndUser.DebtorEndUserCode  and
                           teud_det.eud_sort   = tContact.ContactName
                no-error.              
                /* if we don't have eud_det record for this contact then create one */    
                if not available teud_det
                then do:            
                    <M-13 run AddDetailLine
                       (input  'eud_det':u (icTable), 
                        input  teu_mstr.tc_Rowid (icParentRowid), 
                        output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser> 
                    assign
                        teud_det.oid_eud_det = <M-14 GetNextOidValue () in BMfgEndUser>
                        teud_det.eud_ls_type = {&ADDRESSTYPECODESYSTEM-ENDUSER}                          
                        teud_det.eud_domain  = teu_mstr.eu_domain.                
                end. /* if not available teud_det */
                else assign teud_det.tc_Status = tContact.tc_Status.

                /* assign complex mapping fields */                                            
                assign
                    teud_det.eud_sort     = tContact.ContactName
                    teud_det.eud_title    = tContact.ContactTitle
                    teud_det.eud_type     = tContact.ContactFunction
                    teud_det.eud_phone    = tContact.ContactTelephone
                    teud_det.eud_fax      = tContact.ContactFax                       
                    teud_det.eud_updt     = TODAY
                    teud_det.eud_nametype = if tContact.ContactisPrimary then "P" else ""            
                    teud_det.eud_addr     = tDebtorEndUser.DebtorEndUserCode.                                              
            end. /* for each tContact */                                          
        end.     /* for each tqDomainBySharedSetDomain: */
    end.         /* for each tDebtorEndUser */    
end.             /* CONVERTBLOCK */

/* ============== */
/* Stop the query */
/* ============== */
if vlQueryStartedDomainBySharedSet = true
then do:
    <Q-15 run DomainBySharedSetDomain  (Stop) in BDomain >
    assign vlQueryStartedDomainBySharedSet = false.
end. /* if vlQueryStartedDomainBySharedSet = true */

VALIDATEBLOCK:
DO:
    if viLocalReturnStatus < 0
    then leave VALIDATEBLOCK.

    /* ========== */
    /* ValidateBC */
    /* ========== */
    <M-16 run ValidateBC  (output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
    if viFcReturnSuper <> 0
    then assign viLocalReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then leave VALIDATEBLOCK.

    /* ================== */
    /* Additional Updates */
    /* ================== */
    <M-17 run AdditionalUpdates  (output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
    if viFcReturnSuper <> 0
    then assign viLocalReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then leave VALIDATEBLOCK.
    
    /* ======== */
    /* DataSave */
    /* ======== */
    <M-18 run DataSave  (output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
    if viFcReturnSuper <> 0
    then assign viLocalReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then leave VALIDATEBLOCK.
end. /* VALIDATEBLOCK */

<I-34 {bFcCloseInstance
     &CLASS           = "BBusinessRelation"}>

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