Description
This method creates the ad_mstr records in MFG/PRO for customers.
Parameters
| tDebtorsToUpdate | input | temp-table | temp-table with the creditor records |
| oiReturnStatus | output | integer | Return 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.