project QadFinancials > class BMfgAddress > method MaintainDataCreditor

Description

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


Parameters


tCreditorsToUpdateinputtemp-tabletemp-table that contains all the new/updated creditors
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/bmfgaddress.p)

assign oiReturnStatus = -98.

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

if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then Return.

/* Start the queries */
<Q-12 run AddressByType  (Start) in BBusinessRelation >
<Q-15 run CompanyBySharedSet  (Start) in BCompany >
 <Q-26 run AdMstrByDomainByCode
     (Start) in BMfgAddress >

Creditors:
for each tCreditorsToUpdate 
        where tCreditorsToUpdate.tc_Status = "N":U or
              tCreditorsToUpdate.tc_Status = "C":U or
              tCreditorsToUpdate.tc_Status = "D":U:  
    empty temp-table tAddress.   

    /* Select the HEADOFFICE address */
    <Q-9 run AddressByType (all) (Read) (NoCache)
       (input tCreditorsToUpdate.BusinessRelation_ID, (BusinessRelationID)
        input 'HEADOFFICE':U, (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.
        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.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.AddressIsTaxable      = tqAddressByType.tlAddressIsTaxable
               tAddress.AddressIsTaxInCity    = tqAddressByType.tlAddressIsTaxInCity
               tAddress.AddressTaxIDFederal   = tqAddressByType.tcAddressTaxIDFederal
               tAddress.AddressTaxIDState     = tqAddressByType.tcAddressTaxIDState
               tAddress.AddressTaxIDMisc1     = tqAddressByType.tcAddressTaxIDMisc1
               tAddress.AddressTaxIDMisc2     = tqAddressByType.tcAddressTaxIDMisc2
               tAddress.AddressTaxIDMisc3     = tqAddressByType.tcAddressTaxIDMisc3
               tAddress.TxzTaxZone            = tqAddressByType.tcTxzTaxZone
               tAddress.TxclTaxCls            = tqAddressByType.tcTxclTaxCls
               tAddress.TxuTaxUsage           = tqAddressByType.tcTxuTaxUsage
               tAddress.AddressIsTaxIncluded  = tqAddressByType.tlAddressIsTaxIncluded
               tAddress.AddressFormat         = tqAddressByType.tiAddressFormat.
        
        
        assign tAddress.tcCoCNumber = tCreditorsToUpdate.CreditorCocNumber
               tAddress.tc_status   = tCreditorsToUpdate.tc_status
               tAddress.tc_rowid    = string(tqAddressByType.tiAddress_ID).      
    end.
    
    /* Store the CreditorCode into a variable, it will be populated in ad_addr */
    assign 
            vcRelationCode = tCreditorsToUpdate.CreditorCode
           vcRelationType = "supplier":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-4 run CompanyBySharedSet (all) (Read) (NoCache)
       (input '', (CompanyId)
        input tCreditorsToUpdate.SharedSet_ID, (SharedSetId)
        output dataset tqCompanyBySharedSet) in BCompany >
    /*
    * Process the Financial Data into each of the domains returned by the above query.   
    */
     /* 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"}>

    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.
       
        if viSessionReturnStatus <> 0 
        then assign oiReturnStatus = viSessionReturnStatus.
        if viSessionReturnStatus < 0 
        then do :
            leave Creditors.
        end. /* if viFcReturnSuper < 0 */

        if vcProcessSharedSetToMFGDomain <> '':U and
           vcProcessSharedSetToMFGDomain <> ?    and
           vcProcessSharedSetToMFGDomain <> tqCompanyBySharedSet.tcDomainCode
        then next DomainLoop.    

         if tCreditorsToUpdate.tc_Status = "N":U
          then do:
         /* check if address already exists */
            <Q-31 run AdMstrByDomainByCode (all) (Read) (NoCache)
               (input vcDomain, (Domain)
                input tCreditorsToUpdate.CreditorCode, (Code)
                output dataset tqAdMstrByDomainByCode) in BMfgAddress >
                for first tqAdMstrByDomainByCode:
                    /* Address already exists so do'nt update */
                     next DomainLoop.
               end.
          end. /* end new creditor */
          if tCreditorsToUpdate.tc_Status = "D":U
          then do:
             /* check if address already exists */
             <Q-32 run AddressListDetailByDomainCode (all) (Read) (NoCache)
                (input tCreditorsToUpdate.CreditorCode, (AddressCode)
                 input vcDomain, (domain)
                 output dataset tqAddressListDetailByDomainCode) in BMfgAddressListDetail >
             for first tqAddressListDetailByDomainCode
                 where tqAddressListDetailByDomainCode.tcls_addr = tCreditorsToUpdate.CreditorCode
                   and tqAddressListDetailByDomainCode.tcls_domain = vcDomain
                   and tqAddressListDetailByDomainCode.tcls_type <> "supplier":U:
                next domainloop.
             end.
           end. /* end new debtor */
            
        /* update the MFG/PRO record */
        <M-14 run ProcessMaintainData (output viFcReturnSuper (oiReturnStatus)) in BMfgAddress>
        if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then  leave Creditors.
        
    end.
end.

/* Stop the queries */
<Q-13 run AddressByType  (Stop) in BBusinessRelation >
<Q-16 run CompanyBySharedSet  (Stop) in BCompany >
<Q-27 run AdMstrByDomainByCode
   (Stop) in BMfgAddress >


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

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