USP_ADDRESS_ADD

Adds a new address for a constituent.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CONSTITUENTID 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
@HISTORICALSTARTDATE datetime IN
@RECENTMOVE bit IN
@OLDADDRESSID uniqueidentifier IN
@CART nvarchar(10) IN
@DPC nvarchar(8) IN
@LOT nvarchar(5) IN
@UPDATEMATCHINGSPOUSEADDRESSES bit IN
@UPDATEMATCHINGHOUSEHOLDADDRESSES bit 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
@INFOSOURCECOMMENTS nvarchar(256) IN
@ISCONFIDENTIAL bit IN
@CONSTITUENTDATAREVIEWROLLBACKREASONID uniqueidentifier IN
@ORIGINCODE tinyint IN
@HISTORICALENDDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_ADDRESS_ADD
            (
                @ID uniqueidentifier = null output,
                @CHANGEAGENTID uniqueidentifier = null,    
                @CONSTITUENTID uniqueidentifier,
                @ADDRESSTYPECODEID uniqueidentifier = null,
                @PRIMARY bit = 0,
                @DONOTMAIL bit = 0,
                @STARTDATE dbo.UDT_MONTHDAY = '0000',
                @ENDDATE dbo.UDT_MONTHDAY = '0000',
                @COUNTRYID uniqueidentifier,
                @STATEID uniqueidentifier = null,
                @ADDRESSBLOCK nvarchar(150) = '',
                @CITY nvarchar(50) = '',
                @POSTCODE nvarchar(12) = '',
                @HISTORICALSTARTDATE datetime = null,
                @RECENTMOVE bit = 0,
                @OLDADDRESSID uniqueidentifier = null,
                @CART nvarchar(10) = '',
                @DPC nvarchar(8) = '',
                @LOT nvarchar(5) = '',
                @UPDATEMATCHINGSPOUSEADDRESSES bit = 0,
                @UPDATEMATCHINGHOUSEHOLDADDRESSES bit = null,
                @OMITFROMVALIDATION bit = 0,                        
                @COUNTYCODEID uniqueidentifier = null,
                @CONGRESSIONALDISTRICTCODEID uniqueidentifier = null,
                @STATEHOUSEDISTRICTCODEID uniqueidentifier = null,
                @STATESENATEDISTRICTCODEID uniqueidentifier = null,
                @LOCALPRECINCTCODEID uniqueidentifier = null,
                @INFOSOURCECODEID uniqueidentifier = null,
                @REGIONCODEID uniqueidentifier = null,                    
                @LASTVALIDATIONATTEMPTDATE datetime = null,
                @VALIDATIONMESSAGE nvarchar(200) = '',
                @CERTIFICATIONDATA integer = 0,
                @DONOTMAILREASONCODEID uniqueidentifier = null,
                @INFOSOURCECOMMENTS nvarchar(256) = '',
                @ISCONFIDENTIAL bit = 0,
                @CONSTITUENTDATAREVIEWROLLBACKREASONID uniqueidentifier = null,  -- used by constituent data review

                @ORIGINCODE tinyint = 0,
                @HISTORICALENDDATE datetime = null
            ) as
                set nocount on;

                if @PRIMARY = 0 and (select count(*) from dbo.ADDRESS where CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1) = 0
                    raiserror('ERR_ADDRESS_MUSTHAVEPRIMARY', 13, 1);

                exec dbo.USP_ADDRESS_CREATE @ID output, @CHANGEAGENTID, @CONSTITUENTID, @ADDRESSTYPECODEID, @PRIMARY, @DONOTMAIL,
                    @STARTDATE, @ENDDATE, @COUNTRYID, @STATEID, @ADDRESSBLOCK, @CITY, @POSTCODE, @CART, @DPC, @LOT,
                    @UPDATEMATCHINGSPOUSEADDRESSES, @OMITFROMVALIDATION, @COUNTYCODEID, @CONGRESSIONALDISTRICTCODEID,
                    @STATEHOUSEDISTRICTCODEID, @STATESENATEDISTRICTCODEID, @LOCALPRECINCTCODEID, @INFOSOURCECODEID,
                    @REGIONCODEID, @LASTVALIDATIONATTEMPTDATE, @VALIDATIONMESSAGE, @CERTIFICATIONDATA, @DONOTMAILREASONCODEID,
                    @HISTORICALSTARTDATE, @INFOSOURCECOMMENTS, @ISCONFIDENTIAL, @ORIGINCODE, @HISTORICALENDDATE

                declare @CURRENTDATE datetime;
                set @CURRENTDATE = getdate();

                declare @EARLIESTTIMECURRENTDATE date;
                set @EARLIESTTIMECURRENTDATE = @CURRENTDATE;

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

                if @RECENTMOVE = 1
                begin
                    if @OLDADDRESSID is null
                        raiserror('BBERR_OLDADDRESSIDREQUIRED', 13, 1);
                    else 
                    begin

            declare @HISTORICALENDDATEVALUE datetime;

            if @HISTORICALSTARTDATE is null
              begin
                set @HISTORICALENDDATEVALUE = @EARLIESTTIMECURRENTDATE
              end

            if @HISTORICALSTARTDATE is not null
              begin
                declare @OLDHISTORICALSTARTDATE datetime;
                select @OLDHISTORICALSTARTDATE = HISTORICALSTARTDATE from dbo.ADDRESS where ADDRESS.ID = @OLDADDRESSID;
                if @HISTORICALSTARTDATE < @OLDHISTORICALSTARTDATE
                  set @HISTORICALENDDATEVALUE = @EARLIESTTIMECURRENTDATE
                else
                  set @HISTORICALENDDATEVALUE = @HISTORICALSTARTDATE                
              end

                        update dbo.ADDRESS
                        set
                            ISPRIMARY = 0,
                            DONOTMAIL = 1,
                            HISTORICALENDDATE = @HISTORICALENDDATEVALUE,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where ADDRESS.ID = @OLDADDRESSID
                    end
                end

                begin try
                    if @UPDATEMATCHINGHOUSEHOLDADDRESSES = 1
                    begin
                        -- if the constituent is an individual, householdid will be the household they are a member of

                        -- if the constituent is a household, householdid will be that household's id

                        declare @HOUSEHOLDID uniqueidentifier;
                        if dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1
                            set @HOUSEHOLDID = @CONSTITUENTID;
                        else
                            select
                                @HOUSEHOLDID = GM.GROUPID
                            from
                                dbo.GROUPMEMBER GM
                            left outer join
                                dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                            left outer join
                                dbo.GROUPDATA GD on GD.ID = GM.GROUPID
                            where
                                GM.MEMBERID = @CONSTITUENTID
                            and
                                GD.GROUPTYPECODE = 0
                            and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @EARLIESTTIMECURRENTDATE))
                                or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE)) 
                                or (GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE and GMDR.DATETO > @EARLIESTTIMECURRENTDATE));

                        -- create a table of all of the members of the household previously identified

                        declare @IDSTOUPDATE table(ID uniqueidentifier)
                        insert into @IDSTOUPDATE
                            select
                                GM.MEMBERID
                            from
                                dbo.GROUPMEMBER GM
                            left outer join
                                dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                            where
                                GM.GROUPID = @HOUSEHOLDID
                            and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @EARLIESTTIMECURRENTDATE))
                                or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE)) 
                                or (GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE and GMDR.DATETO > @EARLIESTTIMECURRENTDATE))
                            union all
                            select
                                @HOUSEHOLDID; -- include the household itself (for the case where the constituent is an individual)

                        delete from @IDSTOUPDATE where ID = @CONSTITUENTID;    -- (if the constituent was an individual, they'll show as a member - if they were a household it got union'd in)


                        -- create table of matching addresses

                        declare @MATCHING table(ID uniqueidentifier);
                        insert into @MATCHING
                            select
                                ID 
                            from
                                dbo.ADDRESS 
                            where
                                COUNTRYID = @COUNTRYID
                                and ( (STATEID = @STATEID) or (STATEID is null and @STATEID is null) )
                                and ADDRESSBLOCK = @ADDRESSBLOCK
                                and CITY = @CITY
                                and POSTCODE = @POSTCODE
                                and ( (ADDRESSTYPECODEID = @ADDRESSTYPECODEID) or (ADDRESSTYPECODEID is null and @ADDRESSTYPECODEID is null) )
                                and CONSTITUENTID in (select ID from @IDSTOUPDATE)
                                and HISTORICALENDDATE is null;

                        -- remove primary indicator if we're going to insert a new one

                        if @PRIMARY = 1 
                        begin
                            update dbo.ADDRESS
                            set
                                ISPRIMARY = 0,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where
                                CONSTITUENTID in (select ID from @IDSTOUPDATE)
                                and not exists (
                                    select ID 
                                    from @MATCHING
                                    where ADDRESS.ID = ID
                                )

                            -- update existing records with primary bit

                            update dbo.ADDRESS
                            set
                                ISPRIMARY = @PRIMARY,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where
                                CONSTITUENTID in (select ID from @IDSTOUPDATE)
                                and exists (
                                    select ID
                                    from @MATCHING
                                    where ADDRESS.ID = ID
                                )
                        end

                        if @RECENTMOVE = 1 
                        begin
                          --Find all addresses that match the old address for household constituents

                          declare @MATCHING_OLDADDRESS table (ID uniqueidentifier);

                          insert into @MATCHING_OLDADDRESS
                          select
                            ADDRESS.ID
         from
                            dbo.ADDRESS
                          inner join
                            dbo.ADDRESS OLDADDRESS on OLDADDRESS.ID = @OLDADDRESSID
                          where
                            ADDRESS.CONSTITUENTID in (select ID from @IDSTOUPDATE) and
                            ADDRESS.COUNTRYID = OLDADDRESS.COUNTRYID and
                            ADDRESS.ADDRESSBLOCK = OLDADDRESS.ADDRESSBLOCK and
                            ADDRESS.CITY = OLDADDRESS.CITY and
                            ADDRESS.POSTCODE = OLDADDRESS.POSTCODE and
                            (
                              (ADDRESS.STATEID = OLDADDRESS.STATEID) or
                              (ADDRESS.STATEID is null and OLDADDRESS.STATEID is null)
                            ) and
                            (
                              (ADDRESS.ADDRESSTYPECODEID = OLDADDRESS.ADDRESSTYPECODEID) or
                              (ADDRESS.ADDRESSTYPECODEID is null and OLDADDRESS.ADDRESSTYPECODEID is null)
                            );

                            --Update any household constituent's old matching addresses.  Only set the PRIMARY flag 

                            --and HISTORICALENDDATE when this is not the household constituent's primary address.


                            update
                              dbo.ADDRESS
                            set
                              ISPRIMARY = 0,
                              DONOTMAIL = 1,
                                            HISTORICALENDDATE = 
                                case
                                  when @HISTORICALSTARTDATE is null
                                    then @EARLIESTTIMECURRENTDATE
                                  when @HISTORICALSTARTDATE is not null
                                    then
                                      case
                                        when @HISTORICALSTARTDATE < HISTORICALSTARTDATE
                                          then @EARLIESTTIMECURRENTDATE
                                        else
                                          @HISTORICALSTARTDATE
                                      end
                                end,
                                            CHANGEDBYID = @CHANGEAGENTID,
                                            DATECHANGED = @CURRENTDATE
                            where
                              ID in (select ID from @MATCHING_OLDADDRESS)
                              and (@PRIMARY = 1 or ISPRIMARY = 0);
                        end

                        -- insert where there are no records with the new number

                        insert into dbo.ADDRESS
                            (CONSTITUENTID,ADDRESSTYPECODEID,DONOTMAIL,DONOTMAILREASONCODEID,STARTDATE,ENDDATE,COUNTRYID,STATEID,ADDRESSBLOCK,CITY,POSTCODE,CART,DPC,LOT,ISPRIMARY,HISTORICALSTARTDATE,ISCONFIDENTIAL,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                        select
                            IDSTOUPDATE.ID,@ADDRESSTYPECODEID,@DONOTMAIL,@DONOTMAILREASONCODEID,@STARTDATE,@ENDDATE,@COUNTRYID,@STATEID,@ADDRESSBLOCK,@CITY,@POSTCODE,@CART,@DPC,@LOT,case when ISPRIMARY = 1 then 0 else 1 end,@HISTORICALSTARTDATE,@ISCONFIDENTIAL,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE
                        from
                            @IDSTOUPDATE IDSTOUPDATE
                        left join
                            dbo.ADDRESS on ADDRESS.CONSTITUENTID = IDSTOUPDATE.ID and ISPRIMARY = 1
                        where
                            not exists (
                                select ADDRESS.ID 
                                from dbo.ADDRESS
                                inner join @MATCHING MA on MA.ID = ADDRESS.ID
                                where IDSTOUPDATE.ID = CONSTITUENTID
                            );

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

                        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
                            COUNTRYID = @COUNTRYID
                            and ((STATEID = @STATEID) or (STATEID is null and @STATEID is null) )
                            and ADDRESSBLOCK = @ADDRESSBLOCK
                            and CITY = @CITY
                            and POSTCODE = @POSTCODE
                            and ( (ADDRESSTYPECODEID = @ADDRESSTYPECODEID) or (ADDRESSTYPECODEID is null and @ADDRESSTYPECODEID is null) )
                            and CONSTITUENTID in (select ID from @IDSTOUPDATE)
                            and ID not in (select ID from dbo.ADDRESSVALIDATIONUPDATE union select ID from @MATCHING);
                    end
                end try
                begin catch
                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch

                return 0;