| icDebtorCode | input | character | The owning Debtor for the DebtorEndUser that is to be created. |
| tEnduserAddressMaster | input-output | temp-table | The address details to be used for the DebtorEndUser creation. Note: the fields is this table correspond to the ad_mstr table. |
| oiReturnStatus | output | integer | Return status of the method. |
MAIN_BLOCK:
do on error undo, leave MAIN_BLOCK:
assign oiReturnStatus = -98
viLocalReturnStatus = 0.
/* Clear the instance data */
<M-3 run ClearData (output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
empty temp-table tApiEnduserAddress.
empty temp-table tApiEnduserContact.
/* Verify the debtor code passed in points to a valid debtor */
<Q-34 run DebtorByDebtorIDCode (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input '', (DebtorId)
input icDebtorCode, (DebtorCode)
input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressType)
output dataset tqDebtorByDebtorIDCode) in BDebtor >
for first tqDebtorByDebtorIDCode:
end.
/* if no debtor record was found then return an error */
if not available tqDebtorByDebtorIDCode
then do:
assign vcMessage = #T-1'Customer ($1) could not be found.':200(31311)T-1#
viLocalReturnStatus = -1.
<M-5 run SetMessage
(input vcMessage (icMessage),
input icDebtorCode (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'QadFin-4731':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
leave MAIN_BLOCK.
end. /* end of if available tqDebtorPrim */
/* Mapp the Address data from MFG/PRO format to financial format */
if viBMfgAddress9ID = 0 or
viBMfgAddress9ID = ?
then do:
<I-6 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "true"
&CLASS = "BMfgAddress"}>
assign vlIsBMfgAddressStartedHr = true
vlIsBMfgAddressOpenedHr = true.
end.
else do:
<I-8 {bFcOpenInstance
&CLASS = "BMfgAddress"}>
assign vlIsBMfgAddressOpenedHr = true.
end. /* end if viBMfgAddress2ID */
<M-9 run MapMfgAddressData
(input temp-table tEnduserAddressMaster:default-buffer-handle (ihMfgTable),
input temp-table tApiEnduserAddress:default-buffer-handle (ihFinancialAddressTable),
input temp-table tApiEnduserContact:default-buffer-handle (ihFinancialContactTable),
output viFcReturnSuper (oiReturnStatus)) in BMfgAddress>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
/* Create/update the address in the Businress Relation */
if viBBusinessRelation6ID = 0 or
viBBusinessRelation6ID = ?
then do:
<I-11 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "true"
&CLASS = "BBusinessRelation"}>
assign vlIsBBusinessRelationStartedHr = true
vlIsBBusinessRelationOpenedHr = true.
end.
else do:
<I-22 {bFcOpenInstance
&CLASS = "BBusinessRelation"}>
assign vlIsBBusinessRelationOpenedHr = true.
end. /* end if viBBusinessRelation1ID */
<M-14 run ApiMaintainAddress
(input-output tApiEndUserAddress (tApiAddress),
input-output tApiEnduserContact (tApiContact),
input tqDebtorByDebtorIDCode.tcBusinessRelationCode (icBusinessRelationCode),
input tqDebtorByDebtorIDCode.tiBusinessRelation_ID (iiBusinessRelationID),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
/* Iterate through all the end users */
for each tEnduserAddressMaster:
/* =============================== */
/* Set Actvity */
/* =============================== */
assign vcActivityCode = "Create":U.
/* Verify that the shipto does not already exist */
<Q-15 assign vlFcQueryRecordsAvailable = DebtorEndUserPrim (NoCache)
(input tEnduserAddressMaster.ad_addr, (DebtorEndUserCode)
input '', (DebtorEndUser_ID)
input viCompanyId, (CompanyId)) in BDebtorEndUser >
if vlFcQueryRecordsAvailable
then do:
assign vcMessage = #T-23'Customer End User $1 already exists; cannot create':50(50297)T-23#
viLocalReturnStatus = -1.
<M-24 run SetMessage
(input vcMessage (icMessage),
input tEnduserAddressMaster.ad_addr (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'QadFin-4736':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
leave MAIN_BLOCK.
end. /* end of vlFcQueryRecordsAvailable */
/* Map the MFG/PRO format data passed in to Financial application data */
<M-17 run AddDetailLine
(input 'DebtorEndUser':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
if tEnduserAddressMaster.ad_addr = ""
then do:
<M-37 run ApiGenerateEndUserCode
(input tDebtorEndUser.tc_Rowid (icDebtorEndUserRowid),
output tEnduserAddressMaster.ad_addr (ocDebtorEndUserCode),
output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
end.
/* Find the financial record that maps to this MFG/PRO record */
for first tApiEnduserAddress
where tApiEnduserAddress.tc_rowid = tEnduserAddressMaster.tc_rowid:
end.
assign tDebtorEndUser.debtorEndUserCode = tEnduserAddressMaster.ad_addr
tDebtorEndUser.tcDebtorCode = icDebtorcode
tDebtorEndUser.tcAddressCity = tApiEnduserAddress.AddressCity
tDebtorEndUser.tcAddressZip = tApiEnduserAddress.AddressZip
tDebtorEndUser.tcAddressStreet1 = tApiEnduserAddress.AddressStreet1
tDebtorEndUser.tcAddressStreet2 = tApiEnduserAddress.AddressStreet2
tDebtorEndUser.tcAddressStreet3 = tApiEnduserAddress.AddressStreet3
tDebtorEndUser.address_id = tApiEnduserAddress.Address_ID
tDebtorEndUser.tcAddressTypeCode = tApiEnduserAddress.tcAddressTypeCode
tDebtorEndUser.tiAddressBusinessRelation_ID = tApiEnduserAddress.BusinessRelation_ID
tDebtorEndUser.DebtorEndUserIsDebtor = false
tDebtorEndUser.DebtorEndUserIsShipto = false
tDebtorEndUser.SharedSet_ID = tqDebtorByDebtorIDCode.tisharedset_id
tDebtorEndUser.tcBusinessRelationCode = tEnduserAddressMaster.ad_bus_relation
tDebtorEndUser.DebtorEndUserName = tApiEnduserAddress.AddressName
tEnduserAddressMaster.ad_address_id = tApiEnduserAddress.Address_ID.
/* If user specified a code check if its a shipto or debtor */
if tDebtorEndUser.debtorEndUserCode <> ""
then do:
<Q-28 assign vlFcQueryRecordsAvailable = DebtorShipToPrim (NoCache)
(input ?, (DebtorShiptoID)
input tDebtorEndUser.DebtorEndUserCode, (DebtorShiptoCode)
input viCompanyId, (CompanyId)) in BDebtorShipTo>
if vlFcQueryRecordsAvailable <> false
then assign tDebtorEndUser.DebtorEndUserIsShipto = true.
else do:
<Q-29 assign vlFcQueryRecordsAvailable = DebtorByCode (NoCache)
(input viCompanyId, (CompanyId)
input tDebtorEndUser.DebtorEndUserCode, (DebtorCode)) in BDebtor >
if vlFcQueryRecordsAvailable <> false
then assign tDebtorEndUser.DebtorEndUserIsDebtor = true.
end.
end.
end. /* end of each t_sShiptoAddressMaster */
/* Validate the component */
<M-18 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
/* Run any addional updates */
<M-19 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
/* Save the component */
<M-20 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
end. /* MAIN_BLOCK */
/* ======================================================================= *
* Error handling *
* ======================================================================= */
if viLocalReturnStatus < 0
then do:
<M-53 run StopExternalInstances (output viFcReturnSuper (oiReturnStatus)) in BDebtorEndUser>
end.
assign oiReturnStatus = viLocalReturnStatus.