UFN_ADDRESS_GETSEASONALADDRESS

Returns a table of address information based on the given constituent and date.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@DATE datetime IN

Definition

Copy


            CREATE function dbo.UFN_ADDRESS_GETSEASONALADDRESS
            (
                @CONSTITUENTID uniqueidentifier,
                @DATE datetime
            )
            returns @T table 
            (
                ADDRESSBLOCK nvarchar(150),
                CITY nvarchar(50),
                STATE nvarchar(50),
                POSTCODE nvarchar(12),
                COUNTRY nvarchar(100)
            )
            as
            begin

                declare @CURRENTMONTHDAY char(4);
                declare @MONTH char(2);
                declare @DAY char(2);

                set @MONTH = cast(month(@DATE) as char(2));
                if len(@MONTH) = 1 set @MONTH = '0' + @MONTH;

                set @DAY = cast(day(@DATE) as char(2));
                if len(@DAY) = 1 set @DAY = '0' + @DAY;

                set @CURRENTMONTHDAY = @MONTH + @DAY;

                insert into @T
                    select top 1
                        ADDRESS.ADDRESSBLOCK,
                        ADDRESS.CITY,
                        STATE.ABBREVIATION,
                        ADDRESS.POSTCODE,
                        COUNTRY.DESCRIPTION
                    from
                        dbo.ADDRESS
                    left join
                        dbo.STATE on ADDRESS.STATEID = STATE.ID
                    left join
                        dbo.COUNTRY on ADDRESS.COUNTRYID = COUNTRY.ID
                    where
                        CONSTITUENTID = @CONSTITUENTID
                        and ADDRESS.DONOTMAIL = 0
                        and STARTDATE <> '0000'

                        --determines if @DATE is between the start date and end date for the address

                        and ((cast(@CURRENTMONTHDAY as int) - cast(STARTDATE as int)) + 1231) % 1231 between 0 and ((cast(ENDDATE as int) - cast(STARTDATE as int)) + 1231) % 1231;

                -- if no address fits the date criteria, use the primary address

                if @@ROWCOUNT = 0
                begin
                    insert into @T
                        select top 1
                            ADDRESS.ADDRESSBLOCK,
                            ADDRESS.CITY,
                            STATE.ABBREVIATION,
                            ADDRESS.POSTCODE,
                            COUNTRY.DESCRIPTION
                        from
                            dbo.ADDRESS
                        left join
                            dbo.STATE on ADDRESS.STATEID = STATE.ID
                        left join
                            dbo.COUNTRY on ADDRESS.COUNTRYID = COUNTRY.ID
                        where
                            CONSTITUENTID = @CONSTITUENTID 
                            and ADDRESS.DONOTMAIL = 0
                            and ADDRESS.ISPRIMARY = 1;
                end

                return;
            end