USP_DATAFORMTEMPLATE_EDIT_ADDRESS

The save procedure used by the edit dataform template "Address Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@ADDRESSTYPECODEID uniqueidentifier IN Type
@PRIMARY bit IN Set as primary address
@DONOTMAIL bit IN Do not send mail to this address
@STARTDATE UDT_MONTHDAY IN Start date
@ENDDATE UDT_MONTHDAY IN End date
@COUNTRYID uniqueidentifier IN Country
@STATEID uniqueidentifier IN State
@ADDRESSBLOCK nvarchar(150) IN Address
@CITY nvarchar(50) IN City
@POSTCODE nvarchar(12) IN ZIP
@CART nvarchar(10) IN CART
@DPC nvarchar(8) IN DPC
@LOT nvarchar(5) IN LOT
@UPDATEMATCHINGSPOUSEADDRESSES bit IN Update matching address information for spouse
@UPDATEMATCHINGHOUSEHOLDADDRESSES bit IN Update matching addresses in household

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_ADDRESS
                (
                    @ID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier = null,
                    @ADDRESSTYPECODEID uniqueidentifier,
                    @PRIMARY bit,
                    @DONOTMAIL bit,
                    @STARTDATE dbo.UDT_MONTHDAY,
                    @ENDDATE dbo.UDT_MONTHDAY,
                    @COUNTRYID uniqueidentifier,
                    @STATEID uniqueidentifier,
                    @ADDRESSBLOCK nvarchar(150),
                    @CITY nvarchar(50),
                    @POSTCODE nvarchar(12),
                    @CART nvarchar(10),
                    @DPC nvarchar(8),
                    @LOT nvarchar(5),
                    @UPDATEMATCHINGSPOUSEADDRESSES bit,
                    @UPDATEMATCHINGHOUSEHOLDADDRESSES bit
                )
                as
                    set nocount on;

                    declare @CURRENTDATE datetime;

                    -- @UPDATEMATCHINGSPOUSEADDRESSES has been deprecated in favor of updating all of the members of a household

                    set @UPDATEMATCHINGHOUSEHOLDADDRESSES = case when @UPDATEMATCHINGSPOUSEADDRESSES = 1 then 1 else @UPDATEMATCHINGHOUSEHOLDADDRESSES end;                

                    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;

                    select
                        @CONSTITUENTID = ADDRESS.[CONSTITUENTID],
                        @OLDCOUNTRYID = ADDRESS.[COUNTRYID],
                        @OLDADDRESSBLOCK  = ADDRESS.[ADDRESSBLOCK],
                        @OLDCITY  = ADDRESS.[CITY],
                        @OLDSTATEID  = ADDRESS.[STATEID],
                        @OLDPOSTCODE  = ADDRESS.[POSTCODE],
                        @OLDADDRESSTYPECODEID = ADDRESS.[ADDRESSTYPECODEID]
                    from
                        dbo.ADDRESS
                    where
                        ADDRESS.[ID] = @ID;

                    begin try
                        if @PRIMARY = 1
                            update
                                dbo.[ADDRESS]
                            set
                                ISPRIMARY = 0,
                                DATECHANGED = @CURRENTDATE,
                                CHANGEDBYID = @CHANGEAGENTID
                            where
                                CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1 and ID <> @ID;

                        update
                            dbo.ADDRESS
                        set
                            ADDRESSTYPECODEID = @ADDRESSTYPECODEID,
                            ISPRIMARY = @PRIMARY,
                            DONOTMAIL = @DONOTMAIL,
                            STARTDATE = @STARTDATE,
                            ENDDATE = @ENDDATE,
                            COUNTRYID = @COUNTRYID,
                            STATEID = @STATEID,
                            ADDRESSBLOCK = @ADDRESSBLOCK,
                            CITY = @CITY,
                            POSTCODE = @POSTCODE,
                            CART = @CART,
                            DPC = @DPC,
                            LOT = @LOT,
                            DATECHANGED = @CURRENTDATE,
                            CHANGEDBYID = @CHANGEAGENTID
                        where 
                            ID = @ID;

                        if @UPDATEMATCHINGHOUSEHOLDADDRESSES = 1 begin
                            declare @EARLIESTTIMECURRENTDATE date;
                            set @EARLIESTTIMECURRENTDATE = getdate();

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

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

                            if @PRIMARY = 1
                                update dbo.ADDRESS
                                set
                                    ISPRIMARY = 0,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where
                                    CONSTITUENTID in (select ID from @MATCHINGCONSTITUENTS);

                            -- update the existing records

                            update dbo.ADDRESS
                            set
                                ADDRESSTYPECODEID = @ADDRESSTYPECODEID,
                                DONOTMAIL = @DONOTMAIL,
                                STARTDATE = @STARTDATE,
                                ENDDATE = @ENDDATE,
                                COUNTRYID = @COUNTRYID,
                                STATEID = @STATEID,
                                ADDRESSBLOCK = @ADDRESSBLOCK,
                                CITY = @CITY,
                                POSTCODE = @POSTCODE,
                                CART = @CART,
                                DPC = @DPC,
                                LOT = @LOT,
                                ISPRIMARY = @PRIMARY,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            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 = @ADDRESSTYPECODEID
                            and CONSTITUENTID in (select ID from @MATCHINGCONSTITUENTS);
                        end

                    end try
                    begin catch
                        exec dbo.USP_RAISE_ERROR;
                        return 1;
                    end catch

                    return 0;