project QadFinancials > class BMfgAddress > method MaintainDataDebtor

Description

This method creates the ad_mstr records in MFG/PRO for customers.


Parameters


tDebtorsToUpdateinputtemp-tabletemp-table with the creditor records
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program3/bmfgaddress.p)

assign oiReturnStatus = -98.

<M-20 run ClearData (output viFcReturnSuper (oiReturnStatus)) in BMfgAddress>
/* clear the tAddress temp table */

empty temp-table tAddress.
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then Return.

/* start queries */
<Q-17 run AddressByType  (Start) in BBusinessRelation >
<Q-16 run CompanyBySharedSet  (Start) in BCompany >
<Q-32 run AddressListDetailByDomainCode
   (Start) in BMfgAddressListDetail >
<Q-34 run AdMstrByDomainByCode
   (Start) in BMfgAddress >


debtor:
for each tDebtorsToUpdate 
    where tDebtorsToUpdate.tc_status = "N":U 
           or  tDebtorsToUpdate.tc_status = "C":U              
           or  tDebtorsToUpdate.tc_status = "D":U:               
    empty temp-table tAddress.         
     
    /* Select the HEADOFFICE address */
    <Q-12 run AddressByType (all) (Read) (NoCache)
       (input tDebtorsToUpdate.BusinessRelation_ID, (BusinessRelationID)
        input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressType)
        output dataset tqAddressByType) in BBusinessRelation >

    /* Copy the resultset into the Address Temp-table */
    /* Using the tqAddressByType temptable to populate the ad_mstr does not work */
    
    for each tqAddressByType :

        create tAddress.
        viCounter = viCounter + 1.
        assign tAddress.Address_ID            = tqAddressByType.tiAddress_ID
               tAddress.AddressStreet1        = tqAddressByType.tcAddressStreet1
               tAddress.AddressStreet2        = tqAddressByType.tcAddressStreet2
               tAddress.AddressStreet3        = tqAddressByType.tcAddressStreet3
               tAddress.AddressZip            = tqAddressByType.tcAddressZip
               tAddress.AddressCity           = tqAddressByType.tcAddressCity
               tAddress.AddressTelephone      = tqAddressByType.tcAddressTelephone
               tAddress.AddressEMail          = tqAddressByType.tcAddressEMail
               tAddress.AddressWebSite        = tqAddressByType.tcAddressWebSite
               tAddress.AddressFax            = tqAddressByType.tcAddressFax 
               tAddress.Country_ID            = tqAddressByType.tiCountry_ID
               tAddress.BusinessRelation_ID   = tqAddressByType.tiBusinessRelation_ID
               tAddress.AddressType_ID        = tqAddressByType.tiAddressType_ID
               tAddress.Lng_ID                = tqAddressByType.tiLng_ID
               tAddress.State_ID              = tqAddressByType.tiState_ID
               tAddress.County_ID             = tqAddressByType.tiCounty_ID
               tAddress.AddressPostalAddress1 = tqAddressByType.tcAddressPostalAddress1
               tAddress.AddressPostalAddress2 = tqAddressByType.tcAddressPostalAddress2
               tAddress.AddressIsSendToPostal = tqAddressByType.tlAddressIsSendToPostal
               tAddress.AddressState          = tqAddressByType.tcAddressState
               tAddress.AddressPostalZip      = tqAddressByType.tcAddressPostalZip
               tAddress.AddressPostalCity     = tqAddressByType.tcAddressPostalCity
               tAddress.AddressCounty         = tqAddressByType.tcAddressCounty 
               tAddress.AddressIsTaxable      = tDebtorsToUpdate.DebtorIsTaxable
               tAddress.AddressIsTaxInCity    = tDebtorsToUpdate.DebtorIsTaxInCity
               tAddress.AddressTaxIDFederal   = tDebtorsToUpdate.DebtorTaxIDFederal
               tAddress.AddressTaxIDState     = tDebtorsToUpdate.DebtorTaxIDState
               tAddress.AddressTaxIDMisc1     = tDebtorsToUpdate.DebtorTaxIDMisc1
               tAddress.AddressTaxIDMisc2     = tDebtorsToUpdate.DebtorTaxIDMisc2
               tAddress.AddressTaxIDMisc3     = tDebtorsToUpdate.DebtorTaxIDMisc3
               tAddress.TxzTaxZone            = tDebtorsToUpdate.TxzTaxZone
               tAddress.TxclTaxCls            = tDebtorsToUpdate.TxclTaxCls
               tAddress.TxuTaxUsage           = tDebtorsToUpdate.TxuTaxUsage
               tAddress.AddressIsTaxIncluded  = tDebtorsToUpdate.DebtorIsTaxIncluded
               tAddress.AddressLogicKeyString = tqAddressByType.tcAddressLogicKeyString
               tAddress.tcCountyCode          = tqAddressByType.tcCountyCode
               tAddress.tcStateCode           = tqAddressByType.tcStateCode
               tAddress.tcCountryCode         = tqAddressByType.tcCountryCode
               tAddress.tcAddressTypeCode     = tqAddressByType.tcAddressTypeCode
               tAddress.tcLngCode             = tqAddressByType.tcLngCode
               tAddress.AddressName           = tqAddressByType.tcAddressName
               tAddress.AddressSearchName     = tqAddressByType.tcAddressSearchName
               tAddress.tcLngCode             = tqAddressByType.tcLngCode
               tAddress.LastModifiedDate      = tqAddressByType.ttLastModifiedDate
               tAddress.LastModifiedTime      = tqAddressByType.tiLastModifiedTime
               tAddress.LastModifiedUser      = tqAddressByType.tcLastModifiedUser
               tAddress.AddressFormat         = tqAddressByType.tiAddressFormat
               tAddress.tc_Rowid              = string(viCounter).
                  
        assign tAddress.tc_status =  tDebtorsToUpdate.tc_status
               tAddress.tc_Rowid  = string(tqAddressByType.tiAddress_ID).        
    end.
    
    /* Store the Debtor code into a variable, it will be populated in ad_addr */
    assign vcRelationCode = tDebtorsToUpdate.DebtorCode
           vcRelationType = "customer":U.

    /* Addresses are system wide date, so we need to use the SystemWideToMfg pattern.
     * However, we are processing Creditors, which use the SharedSetToMfg pattern.
     * We need to copy the address information (system wide data) to all domains where the 
     * creditor is added. To achieve this we determine all the companies that uses the creditor 
     * shared set, get the domains and for each domain we run MaintainData and follow
     * the SystemWideToMFG pattern.
     */ 
    
    <Q-9 run CompanyBySharedSet (all) (Read) (NoCache)
          (input '', (CompanyId)
           input tDebtorsToUpdate.SharedSet_ID, (SharedSetId)
           output dataset tqCompanyBySharedSet) in BCompany >
    /*
    * Process the Financial Data into each of the domains returned by the above query.   
    */
    DomainLoop:
    for each tqCompanyBySharedSet where
             tqCompanyBySharedSet.tlDomainPropertyIsSetupCompl = true
             break by tqCompanyBySharedSet.tcDomainCode:

        if not first-of(tqCompanyBySharedSet.tcDomainCode) then
           next DomainLoop.

        /* save the domain code which is currently being processed */
        assign vcDomain = tqCompanyBySharedSet.tcDomainCode.

        /* Check if we need to replicate to one domain or to all */  
        <I-23 {bFcOpenInstance
            &CLASS           = "Session"}>
        <M-24 run GetCharacterValue
           (input  'ProcessSharedSetToMFGDomainCode':U (icName), 
            output vcProcessSharedSetToMFGDomain (ocValue), 
            output viSessionReturnStatus (oiReturnStatus)) in Session>
        <I-25 {bFcCloseInstance
            &CLASS           = "Session"}>

        if viSessionReturnStatus <> 0 
        then assign oiReturnStatus = viSessionReturnStatus.
        if viSessionReturnStatus < 0 
        then do :
            leave debtor.
        end. /* if viFcReturnSuper < 0 */
        if vcProcessSharedSetToMFGDomain <> '':U and
           vcProcessSharedSetToMFGDomain <> ?    and
           vcProcessSharedSetToMFGDomain <> tqCompanyBySharedSet.tcDomainCode
        then next DomainLoop. 

        if tDebtorsToUpdate.tc_Status = "N":U or 
            tDebtorsToUpdate.tc_Status = "C":U
        then do:
         /* check if address already exists */
            <Q-28 run AdMstrByDomainByCode (all) (Read) (NoCache)
               (input vcDomain, (Domain)
                input tDebtorsToUpdate.DebtorCode, (Code)
                output dataset tqAdMstrByDomainByCode) in BMfgAddress >
             if tDebtorsToUpdate.tc_Status = "N":U 
             then do:  
                 for first tqAdMstrByDomainByCode
                    where tqAdMstrByDomainByCode.tcad_addr = tDebtorsToUpdate.DebtorCode:
                        /* Address already exists so do'nt update */
                    next DomainLoop.
                 end.
             end.
             else do:
                 for first tqAdMstrByDomainByCode
                    where tqAdMstrByDomainByCode.tcad_addr = tDebtorsToUpdate.DebtorCode:
                       /* Assign the current owning value so it doesn't get overwritten */
                    assign vcRelatedCustomer = tqAdMstrByDomainByCode.tcad_ref.
                 end.
             end.            
        end. /* end new creditor */

        if tDebtorsToUpdate.tc_Status = "D":U
        then do:
             /* check if address already exists */
             <Q-30 run AddressListDetailByDomainCode (all) (Read) (NoCache)
                (input tDebtorsToUpdate.DebtorCode, (AddressCode)
                 input vcDomain, (domain)
                 output dataset tqAddressListDetailByDomainCode) in BMfgAddressListDetail >
             for first tqAddressListDetailByDomainCode
                 where tqAddressListDetailByDomainCode.tcls_addr = tDebtorsToUpdate.DebtorCode
                   and tqAddressListDetailByDomainCode.tcls_domain = vcDomain
                   and tqAddressListDetailByDomainCode.tcls_type <> "customer":U:
                next domainloop.
             end.
        end. /* end new debtor */

        
        /* update the MFG/PRO record */
        <M-21 run ProcessMaintainData (output viFcReturnSuper (oiReturnStatus)) in BMfgAddress>
        if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then leave debtor.
        
    end.
end.

/* stop  queries */
<Q-18 run AddressByType  (Stop) in BBusinessRelation >
<Q-19 run CompanyBySharedSet  (Stop) in BCompany >
<Q-31 run AddressListDetailByDomainCode
   (Stop) in BMfgAddressListDetail >
<Q-33 run AdMstrByDomainByCode
   (Stop) in BMfgAddress >

if oiReturnStatus =  -98 or oiReturnStatus > 0
then do:
    <M-22 run ProcessMaintainDataSave (output viFcReturnSuper (oiReturnStatus)) in BMfgAddress>
    if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0 then Return.
end.

/* ======================== */
/* Set ReturnStatus = OK    */
/* ======================== */
if oiReturnStatus = -98
then assign oiReturnStatus = 0.