TR_ADDRESS_TASYNC_I
Definition
Copy
CREATE trigger TR_ADDRESS_TASYNC_I on dbo.ADDRESS after insert not for replication
as begin
declare @CHILDRECORDS table (ADDRESSID uniqueidentifier, CONSTITUENTID uniqueidentifier, ISPRIMARY bit);
if dbo.UFN_B2T_CONTEXTISSYNC() = 0
begin
insert into dbo.TA_ADDRESS (ID, SYNCID, ACTIONCODE)
select ID, newid(), 1
from INSERTED
-- don't sync records for groups
where not exists(select 'x'
from dbo.GROUPDATA d
where d.ID = INSERTED.CONSTITUENTID
and d.GROUPTYPECODE = 1);
--
-- note that the above insert could fail if row is deleted and then reinserted w/ same ID before sync is run
-- since we would not know anything about whether the row is really the same or not, we need to throw an exception
-- to resolve, run the sync, then retry the insert
--
-- find and store all the addresses that looks the same as the record being inserted.
--
insert into @CHILDRECORDS (ADDRESSID, CONSTITUENTID, ISPRIMARY)
select a.ID, a.CONSTITUENTID, a.ISPRIMARY
from INSERTED i
inner join dbo.GROUPMEMBER m on m.GROUPID = i.CONSTITUENTID
inner join dbo.ADDRESS a on a.CONSTITUENTID = m.MEMBERID
and a.COUNTRYID = i.COUNTRYID
and a.ADDRESSBLOCK = i.ADDRESSBLOCK
and a.CITY = i.CITY
and (a.STATEID = i.STATEID or (a.STATEID is null and i.STATEID is null))
and (a.ADDRESSTYPECODEID = i.ADDRESSTYPECODEID or (a.ADDRESSTYPECODEID is null and i.ADDRESSTYPECODEID is null))
and a.POSTCODE = i.POSTCODE
and ( (a.HISTORICALSTARTDATE = i.HISTORICALSTARTDATE) or (a.HISTORICALSTARTDATE is null and i.HISTORICALSTARTDATE is null) )
and ( (a.HISTORICALENDDATE = i.HISTORICALENDDATE) or (a.HISTORICALENDDATE is null and i.HISTORICALENDDATE is null) )
union all
select a2.ID, a2.CONSTITUENTID, a2.ISPRIMARY
from INSERTED i
inner join dbo.RELATIONSHIP r on i.CONSTITUENTID=r.RELATIONSHIPCONSTITUENTID
inner join dbo.ADDRESS a2 on a2.RELATIONSHIPID=r.ID
where r.ISCONTACT=1 and
i.COUNTRYID=a2.COUNTRYID and
(i.STATEID=a2.STATEID or (i.STATEID is null and a2.STATEID is null)) and
(i.ADDRESSBLOCK=a2.ADDRESSBLOCK or (a2.ADDRESSBLOCK is null and a2.ADDRESSBLOCK is null)) and
(i.CITY=a2.CITY or (i.CITY is null and a2.CITY is null)) and
(i.POSTCODE=a2.POSTCODE or (i.POSTCODE is null and a2.POSTCODE is null)) and
((a2.HISTORICALSTARTDATE = i.HISTORICALSTARTDATE) or (a2.HISTORICALSTARTDATE is null and i.HISTORICALSTARTDATE is null)) and
((a2.HISTORICALENDDATE = i.HISTORICALENDDATE) or (a2.HISTORICALENDDATE is null and i.HISTORICALENDDATE is null));
--
-- flag additional records for when primary is inserted and the old primary for the
-- accounts has to be unflagged. This is to handle the case where the inserted record
-- is the first one for the household and a member's primary address was synced as
-- the account's primary in TA. This record now has to be unflagged as the account's
-- primary.
--
update t
set ACTIONCODE = case when t.ACTIONCODE in (1,3) then t.ACTIONCODE else 2 end
from dbo.TA_ADDRESS t, INSERTED i
where t.ID = dbo.UFN_B2T_GETACCOUNTPREFERREDADDRESS(i.CONSTITUENTID,1)
and i.ISPRIMARY = 1
--
-- When inserting a household address that matches a member's address, flag the member's
-- row for update, in this case the member's row will be deleted in TA and will be associated
-- with the household's address.
--
update dbo.TA_ADDRESS
set ACTIONCODE = case when ACTIONCODE in (1,3) then ACTIONCODE else 2 end
where ID in (select ADDRESSID from @CHILDRECORDS)
--
-- flag the members in the household for update when a primary record is inserted
-- and the constituent does not have a record or if the record matches the inserted record
-- or the record being inserted is considered the household's primary
--
update t
set t.ACTIONCODE = case when t.ACTIONCODE in (1,3) then t.ACTIONCODE else 2 end
from dbo.TA_CONSTITUENT t
inner join INSERTED i on i.CONSTITUENTID = t.ID
where i.ISPRIMARY = 1
update t
set t.ACTIONCODE = case when t.ACTIONCODE in (1,3) then t.ACTIONCODE else 2 end
from INSERTED i
cross apply dbo.UFN_B2T_GET_HOUSEHOLDANDMEMBERS(i.CONSTITUENTID, 1) m
inner join dbo.TA_CONSTITUENT t on t.ID = m.MEMBERID
where i.ISPRIMARY = 1
and NOT exists (select 'x' from dbo.ADDRESS a where t.ID = a.CONSTITUENTID)
--
--flag the contact(s) for an org constituent if that contact does not have an address
--
update t
set t.ACTIONCODE = case when t.ACTIONCODE in (1,3) then t.ACTIONCODE else 2 end
from INSERTED i
inner join dbo.RELATIONSHIP r on i.CONSTITUENTID = r.RELATIONSHIPCONSTITUENTID
inner join dbo.TA_CONSTITUENT t on t.ID = r.RECIPROCALCONSTITUENTID
where dbo.UFN_CONSTITUENT_ISORGANIZATION (i.CONSTITUENTID) = 1
and i.ISPRIMARY = 1
and NOT exists (select 'x' from dbo.ADDRESS a where t.ID = a.CONSTITUENTID)
--
-- flag constituents when inserting a master to couple to a household master. This is to update
-- the primary address IDs for the name record.
--
update dbo.TA_CONSTITUENT
set ACTIONCODE = case when ACTIONCODE in (1,3) then ACTIONCODE else 2 end
where ID in (select CONSTITUENTID from @CHILDRECORDS where ISPRIMARY = 1);
update t
set t.ACTIONCODE = case when t.ACTIONCODE in (1,3) then t.ACTIONCODE else 2 end
from dbo.TA_NAMES0 t
inner join INSERTED i on i.CONSTITUENTID = t.ID and i.ISPRIMARY = 1
-- Refresh accounts.address_sts
update dbo.TA_ACCOUNTS
set ACTIONCODE = case when ACTIONCODE in (1,3) then ACTIONCODE else 2 end
where ID in(select CONSTITUENTID from INSERTED);
end
end