USP_ADDRESS_UPDATEMATCHINGADDRESSES

Updates matching household addresses.

Parameters

Parameter Parameter Type Mode Description
@ADDRESSID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@ADDRESSTYPECODEID uniqueidentifier IN
@PRIMARY bit IN
@DONOTMAIL bit IN
@STARTDATE UDT_MONTHDAY IN
@ENDDATE UDT_MONTHDAY IN
@COUNTRYID uniqueidentifier IN
@STATEID uniqueidentifier IN
@ADDRESSBLOCK nvarchar(150) IN
@CITY nvarchar(50) IN
@POSTCODE nvarchar(12) IN
@CART nvarchar(10) IN
@DPC nvarchar(8) IN
@LOT nvarchar(5) IN
@OMITFROMVALIDATION bit IN
@COUNTYCODEID uniqueidentifier IN
@CONGRESSIONALDISTRICTCODEID uniqueidentifier IN
@STATEHOUSEDISTRICTCODEID uniqueidentifier IN
@STATESENATEDISTRICTCODEID uniqueidentifier IN
@LOCALPRECINCTCODEID uniqueidentifier IN
@INFOSOURCECODEID uniqueidentifier IN
@REGIONCODEID uniqueidentifier IN
@LASTVALIDATIONATTEMPTDATE datetime IN
@VALIDATIONMESSAGE nvarchar(200) IN
@CERTIFICATIONDATA int IN
@DONOTMAILREASONCODEID uniqueidentifier IN
@UPDATEFROMREVENUEBATCH bit IN
@HISTORICALSTARTDATE date IN
@HISTORICALENDDATE date IN
@INFOSOURCECOMMENTS nvarchar(256) IN
@ISCONFIDENTIAL bit IN

Definition

Copy


            CREATE procedure dbo.USP_ADDRESS_UPDATEMATCHINGADDRESSES
            (
                @ADDRESSID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null,
                @ADDRESSTYPECODEID uniqueidentifier,
                @PRIMARY bit = null,
                @DONOTMAIL bit,
                @STARTDATE dbo.UDT_MONTHDAY = null,
                @ENDDATE dbo.UDT_MONTHDAY = null,
                @COUNTRYID uniqueidentifier,
                @STATEID uniqueidentifier,
                @ADDRESSBLOCK nvarchar(150),
                @CITY nvarchar(50),
                @POSTCODE nvarchar(12),
                @CART nvarchar(10),
                @DPC nvarchar(8),
                @LOT nvarchar(5),
                @OMITFROMVALIDATION bit,                    
                @COUNTYCODEID uniqueidentifier,
                @CONGRESSIONALDISTRICTCODEID uniqueidentifier,
                @STATEHOUSEDISTRICTCODEID uniqueidentifier = null,
                @STATESENATEDISTRICTCODEID uniqueidentifier = null,
                @LOCALPRECINCTCODEID uniqueidentifier = null,
                @INFOSOURCECODEID uniqueidentifier = null,
                @REGIONCODEID uniqueidentifier = null,
                @LASTVALIDATIONATTEMPTDATE datetime,
                @VALIDATIONMESSAGE nvarchar(200),
                @CERTIFICATIONDATA integer,
                @DONOTMAILREASONCODEID uniqueidentifier,
                -- Revenue batch's constituent edit form doesn't edit certain fields 

                -- omit those fields from being updated when @UPDATEFROMREVENUEBATCH = 1

                @UPDATEFROMREVENUEBATCH bit = 0,
                @HISTORICALSTARTDATE date = null,
                @HISTORICALENDDATE date = null,
                @INFOSOURCECOMMENTS nvarchar(256) = '',
                @ISCONFIDENTIAL bit = 0
            )
            as
                set nocount on

                declare @CURRENTDATE datetime;

                if @CHANGEAGENTID is null  
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                set @CURRENTDATE = getdate();

                declare @CONSTITUENTID uniqueidentifier;
                declare @OLDCOUNTRYID uniqueidentifier;
                declare @OLDSTATEID uniqueidentifier;
                declare @OLDADDRESSBLOCK nvarchar(150);
                declare @OLDCITY nvarchar(50);
                declare @OLDPOSTCODE nvarchar(12);
                declare @OLDADDRESSTYPECODEID uniqueidentifier;
                declare @OLDHISTORICALSTARTDATE datetime;
                declare @OLDHISTORICALENDDATE datetime;
                declare @ISGROUP bit;

                select
                    @CONSTITUENTID = ADDRESS.[CONSTITUENTID],
                    @OLDCOUNTRYID = ADDRESS.[COUNTRYID],
                    @OLDADDRESSBLOCK  = ADDRESS.[ADDRESSBLOCK],
                    @OLDCITY  = ADDRESS.[CITY],
                    @OLDSTATEID  = ADDRESS.[STATEID],
                    @OLDPOSTCODE  = ADDRESS.[POSTCODE],
                    @OLDADDRESSTYPECODEID = ADDRESS.[ADDRESSTYPECODEID],
                    @OLDHISTORICALSTARTDATE = ADDRESS.[HISTORICALSTARTDATE],
                    @OLDHISTORICALENDDATE = ADDRESS.[HISTORICALENDDATE],
                    @ISGROUP = CONSTITUENT.ISGROUP
                from
                    dbo.ADDRESS
                inner join dbo.CONSTITUENT
                    on ADDRESS.CONSTITUENTID = CONSTITUENT.ID
                where
                    ADDRESS.[ID] = @ADDRESSID;

                declare @MATCHINGCONSTITUENTS table(ID uniqueidentifier);
                insert into @MATCHINGCONSTITUENTS select CONSTITUENTID from dbo.UFN_ADDRESS_MATCHINGHOUSEHOLDRECORDS(@CONSTITUENTID, @OLDCOUNTRYID, @OLDSTATEID, @OLDADDRESSBLOCK, @OLDCITY, @OLDPOSTCODE, @OLDADDRESSTYPECODEID);

                -- create table of matching addresses

                    declare @MATCHING table(ID uniqueidentifier);
                    insert into @MATCHING
                        select
                            ID 
                        from
                            dbo.ADDRESS 
                        where
                            COUNTRYID = @OLDCOUNTRYID 
                            and ADDRESSBLOCK = @OLDADDRESSBLOCK 
                            and CITY = @OLDCITY 
                            and ( (STATEID = @OLDSTATEID) or (STATEID is null and @OLDSTATEID is null) ) 
                            and POSTCODE = @OLDPOSTCODE
                            and ( (ADDRESSTYPECODEID = @OLDADDRESSTYPECODEID) or (ADDRESSTYPECODEID is null and @OLDADDRESSTYPECODEID is null) )
                            and CONSTITUENTID in (select ID from @MATCHINGCONSTITUENTS)
                            and ( (HISTORICALSTARTDATE = @OLDHISTORICALSTARTDATE) or (HISTORICALSTARTDATE is null and @OLDHISTORICALSTARTDATE is null) ) 
                            and ( (HISTORICALENDDATE = @OLDHISTORICALENDDATE) or (HISTORICALENDDATE is null and @OLDHISTORICALENDDATE is null) );

                        /*
                          WI 254227 MMR
                          We are changing the above comparison to include HISTORICAL dates as part of the comparison if two addresses match 
                        */


                -- DanielCo[8/21/09:46721] - Do not change matching constituents' primary address

                --if @PRIMARY = 1 

                --    update dbo.ADDRESS

                --    set

                --        ISPRIMARY = 0,

                --        CHANGEDBYID = @CHANGEAGENTID,

                --        DATECHANGED = @CURRENTDATE

                --    where

                --        CONSTITUENTID in (select ID from @MATCHINGCONSTITUENTS);


                -- update the existing records

                begin try
                    update dbo.ADDRESS
                    set
                        ADDRESSTYPECODEID = @ADDRESSTYPECODEID,
                        DONOTMAIL = @DONOTMAIL,
                        DONOTMAILREASONCODEID = @DONOTMAILREASONCODEID,
                        STARTDATE = case when @UPDATEFROMREVENUEBATCH = 1 then STARTDATE else @STARTDATE end,
                        ENDDATE = case when @UPDATEFROMREVENUEBATCH = 1 then ENDDATE else @ENDDATE end,
                        COUNTRYID = @COUNTRYID,
                        STATEID = @STATEID,
                        ADDRESSBLOCK = @ADDRESSBLOCK,
                        CITY = @CITY,
                        POSTCODE = @POSTCODE,
                        CART = @CART,
                        DPC = @DPC,
                        LOT = @LOT,
                        --ISPRIMARY = case when @UPDATEFROMREVENUEBATCH = 1 then ISPRIMARY else @PRIMARY end,

                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE,
                        HISTORICALSTARTDATE = @HISTORICALSTARTDATE,
                        HISTORICALENDDATE = @HISTORICALENDDATE,
                        ISCONFIDENTIAL = @ISCONFIDENTIAL
                    where
                        exists (
                            select ID
                            from @MATCHING
                            where ID = ADDRESS.ID
                        );
                end try
                begin catch
                    if PATINDEX('%CK_ADDRESS_FORMERADDRESSCANNOTBEPRIMARY%', ERROR_MESSAGE()) > 0
                        if @ISGROUP = 1
                          raiserror('ERR_ADDRESS_GROUP_ENDDATEINVALIDIFPRIMARYFORANOTHERMEMBER', 13, 1);
                        else
                          raiserror('ERR_ADDRESS_ENDDATEINVALIDIFPRIMARYFORANOTHERMEMBER', 13, 1);
                    else
                        exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch

                -- insert address validation update data where there are no records with the new number

                update dbo.ADDRESSVALIDATIONUPDATE
                set
                    OMITFROMVALIDATION = @OMITFROMVALIDATION,
                    COUNTYCODEID = @COUNTYCODEID,
                    CONGRESSIONALDISTRICTCODEID = @CONGRESSIONALDISTRICTCODEID,
                    STATEHOUSEDISTRICTCODEID = case when @UPDATEFROMREVENUEBATCH = 1 then STATEHOUSEDISTRICTCODEID else @STATEHOUSEDISTRICTCODEID end,
                    STATESENATEDISTRICTCODEID = case when @UPDATEFROMREVENUEBATCH = 1 then STATESENATEDISTRICTCODEID else @STATESENATEDISTRICTCODEID end,
                    LOCALPRECINCTCODEID = case when @UPDATEFROMREVENUEBATCH = 1 then LOCALPRECINCTCODEID else @LOCALPRECINCTCODEID end,
                    INFOSOURCECODEID = case when @UPDATEFROMREVENUEBATCH = 1 then INFOSOURCECODEID else @INFOSOURCECODEID end,
                    INFOSOURCECOMMENTS = case when @UPDATEFROMREVENUEBATCH = 1 then INFOSOURCECOMMENTS else @INFOSOURCECOMMENTS end,
                    REGIONCODEID = case when @UPDATEFROMREVENUEBATCH = 1 then REGIONCODEID else @REGIONCODEID end,
                    LASTVALIDATIONATTEMPTDATE = @LASTVALIDATIONATTEMPTDATE,
                    VALIDATIONMESSAGE = @VALIDATIONMESSAGE,
                    CERTIFICATIONDATA = @CERTIFICATIONDATA,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where
                    exists (
                        select ID
                        from @MATCHING
                        where ID = ADDRESSVALIDATIONUPDATE.ID
                    );

                insert into dbo.ADDRESSVALIDATIONUPDATE
                    (ID, OMITFROMVALIDATION, COUNTYCODEID, CONGRESSIONALDISTRICTCODEID, STATEHOUSEDISTRICTCODEID, STATESENATEDISTRICTCODEID, LOCALPRECINCTCODEID, INFOSOURCECODEID, INFOSOURCECOMMENTS, REGIONCODEID, LASTVALIDATIONATTEMPTDATE, VALIDATIONMESSAGE, CERTIFICATIONDATA, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                select
                    ID, @OMITFROMVALIDATION, @COUNTYCODEID, @CONGRESSIONALDISTRICTCODEID, @STATEHOUSEDISTRICTCODEID, @STATESENATEDISTRICTCODEID, @LOCALPRECINCTCODEID, @INFOSOURCECODEID, @INFOSOURCECOMMENTS, @REGIONCODEID, @LASTVALIDATIONATTEMPTDATE, @VALIDATIONMESSAGE, @CERTIFICATIONDATA, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                from dbo.ADDRESS
                where
                    exists (
                        select ID
                        from @MATCHING
                        where ID = ADDRESS.ID
                        and ID not in (select ID from dbo.ADDRESSVALIDATIONUPDATE)
                    );