USP_DATAFORMTEMPLATE_VIEW_WEBFORMS_MEMBERSHIP_BYEMAILJOBRECIPIENT

The load procedure used by the view dataform template "Web Forms Membership By Email Job Recipient"

Parameters

Parameter Parameter Type Mode Description
@ID nvarchar(40) IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@CONSTITUENTID uniqueidentifier INOUT Constituent ID
@MEMBERSHIPID uniqueidentifier INOUT Membership ID
@MEMBERSHIPPROGRAMID uniqueidentifier INOUT Program
@MEMBERSHIPLEVELID uniqueidentifier INOUT Level
@MEMBERSHIPLEVELTERMID uniqueidentifier INOUT Term
@MEMBERSHIPLEVELTYPECODEID uniqueidentifier INOUT Type
@EXPIRATIONDATE datetime INOUT Expiration date
@NUMBEROFCHILDREN smallint INOUT No. of children
@ISGIFT bit INOUT Is gift
@SENDRENEWALCODE smallint INOUT Send renewal notice to
@GIVENBYID uniqueidentifier INOUT Given by
@GIFTERFIRSTNAME nvarchar(50) INOUT Gifter first name
@GIFTERKEYNAME nvarchar(100) INOUT Gifter last name
@STATUSCODE tinyint INOUT STATUSCODE
@MEMBERS xml INOUT MEMBERS
@EMAILTRACKINGID uniqueidentifier INOUT Email tracking ID
@BACKOFFICERECORDID bigint INOUT
@SEQUENCEID int INOUT
@GIFTERSEQUENCEID int INOUT

Definition

Copy

            CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_WEBFORMS_MEMBERSHIP_BYEMAILJOBRECIPIENT
            (
                @ID nvarchar(40),
                @DATALOADED bit = 0 output,
                @CONSTITUENTID uniqueidentifier = null output,
                @MEMBERSHIPID uniqueidentifier = null output,
                @MEMBERSHIPPROGRAMID uniqueidentifier = null output,
                @MEMBERSHIPLEVELID uniqueidentifier = null output,
                @MEMBERSHIPLEVELTERMID uniqueidentifier = null output,
                @MEMBERSHIPLEVELTYPECODEID uniqueidentifier = null output,
                @EXPIRATIONDATE datetime = null output,
                @NUMBEROFCHILDREN smallint = null output,
                @ISGIFT bit = null output,
                @SENDRENEWALCODE smallint = null output,
                @GIVENBYID uniqueidentifier = null output,
                @GIFTERFIRSTNAME nvarchar(50) = null output,
                @GIFTERKEYNAME nvarchar(100) = null output,
                @STATUSCODE tinyint = null output,
                @MEMBERS xml = null output,
                @EMAILTRACKINGID uniqueidentifier = null output,
                @BACKOFFICERECORDID bigint = null output,
                @SEQUENCEID integer = null output,
                @GIFTERSEQUENCEID integer = null output
            )
            as
                set nocount on;

                set @DATALOADED = 0;

                declare @CURRENTDATE datetime = getdate();

                declare @EMAILJOBRECIPIENTID int;
                declare @FINDERNUMBER bigint;

                declare @SEPARATOR tinyint;
                select @SEPARATOR = CHARINDEX('|', @ID);
                if @SEPARATOR = 0
                    set @SEPARATOR = len(@ID)

                set @EMAILJOBRECIPIENTID = cast(left(@ID, @SEPARATOR - 1) as integer)
                set @FINDERNUMBER = cast(right(@ID, len(@ID) - @SEPARATOR) as bigint)

                if @EMAILJOBRECIPIENTID = 0
                    return 0;

                select 
                    @BACKOFFICERECORDID = [BackOfficeSystemPeople].[BackofficeRecordID],
                    @EMAILTRACKINGID = [EmailJob_Recipient].[MERGEID]
                from dbo.[EmailJob_Recipient]
                inner join dbo.[BackOfficeSystemPeople]
                    on  [EmailJob_Recipient].[BackOfficeSystemPeopleID] = [BackOfficeSystemPeople].[ID]
                where [EmailJob_Recipient].[ID] = @EMAILJOBRECIPIENTID;

                if @FINDERNUMBER is null or @FINDERNUMBER = 0
                    set @FINDERNUMBER = @BACKOFFICERECORDID;

                -- Find the mailing for this finder number
                declare @SQL nvarchar(max);
                declare @PARAMS nvarchar(200);
                declare @MAILINGID uniqueidentifier = dbo.[UFN_MKTSEGMENTATIONFINDERNUMBER_GETSEGMENTATION](@FINDERNUMBER);
                declare @ACTIVATEDMAILINGTABLE nvarchar(128) = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@MAILINGID);

                --Getting constituent and membership id
                --Making sure output table has the membership id column
                if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where [TABLE_NAME] = @ACTIVATEDMAILINGTABLE and [COLUMN_NAME] = 'MEMBERSHIPID')
                begin
                    set @SQL = 
                        'select
                            @CONSTITUENTID = [DONORID],
                            @MEMBERSHIPID = [MEMBERSHIPID]
                        from dbo.[' + @ACTIVATEDMAILINGTABLE + ']
                        where [FINDERNUMBER] = @FINDERNUMBER';

                    set @PARAMS = '@FINDERNUMBER bigint, @CONSTITUENTID uniqueidentifier output, @MEMBERSHIPID uniqueidentifier output';
                    exec sp_executesql @SQL, @PARAMS, @FINDERNUMBER = @FINDERNUMBER, @CONSTITUENTID = @CONSTITUENTID output, @MEMBERSHIPID = @MEMBERSHIPID output;
                end
                else
                begin
                    set @SQL = 
                        'select @CONSTITUENTID = [DONORID]
                        from dbo.[' + @ACTIVATEDMAILINGTABLE + ']
                        where [FINDERNUMBER] = @FINDERNUMBER';

                    set @PARAMS = '@FINDERNUMBER bigint, @CONSTITUENTID uniqueidentifier output';
                    exec sp_executesql @SQL, @PARAMS, @FINDERNUMBER = @FINDERNUMBER, @CONSTITUENTID = @CONSTITUENTID output;
                end

                --The membership id should have been set, but let's do our best to figure out what it should have been if not
                if @MEMBERSHIPID is null
                begin
                    select @MEMBERSHIPPROGRAMID =  [APPEAL].[MEMBERSHIPPROGRAMID]
                    from dbo.[MKTSEGMENTATION] with (nolock)
                    inner join dbo.[MKTSEGMENTATIONACTIVATE] with (nolock) on 
                        [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and
                        [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0' --Constituent marketing information record source
                    inner join dbo.[APPEAL] with (nolock) on
                        [MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID] = [APPEAL].[ID]
                    where [MKTSEGMENTATION].[ID] = @MAILINGID;

                    select top 1 @MEMBERSHIPID = [MEMBERSHIP].[ID]
                    from dbo.[MEMBER] with (nolock)
                    inner join dbo.[MEMBERSHIP] with (nolock) on
                        [MEMBER].[MEMBERSHIPID] = [MEMBERSHIP].[ID]
                    inner join dbo.[MEMBERSHIPLEVEL] with (nolock) on
                        [MEMBERSHIP].[MEMBERSHIPLEVELID] = [MEMBERSHIPLEVEL].[ID]
                    cross apply(
                        select dateadd(month, [MEMBERSHIPLEVEL].[AFTEREXPIRATION], [MEMBERSHIP].[EXPIRATIONDATE]) as [END]
                    ) as [RENEWALWINDOW]
                    cross apply(
                        select datediff(day, @CURRENTDATE, [RENEWALWINDOW].[END]) as [DIFFERENCE]
                    ) as [WINDOWCLOSING]
                    where 
                        (
                            [MEMBERSHIP].[MEMBERSHIPPROGRAMID] = @MEMBERSHIPPROGRAMID or
                            @MEMBERSHIPPROGRAMID is null
                        ) and
                        [MEMBERSHIP].[STATUSCODE] <> 2 and --2: Canceled
                        [MEMBER].[ISDROPPED] = 0 and
                        (
                            [MEMBER].[CONSTITUENTID] = @CONSTITUENTID or
                            [MEMBERSHIP].[GIVENBYID] = @CONSTITUENTID
                        )
                    order by abs([WINDOWCLOSING].[DIFFERENCE]) asc --Getting the membership closest to falling out of the renewal window
                end
                else
                begin
                    --If we do have a membership, let's make sure it's still active
                    if not exists(
                        select 1 
                        from dbo.[MEMBERSHIP] with (nolock)
                        inner join dbo.[MEMBER] with (nolock) on
                            [MEMBERSHIP].[ID] = [MEMBER].[MEMBERSHIPID]
                        where
                            [MEMBERSHIP].[ID] = @MEMBERSHIPID and
                            [MEMBERSHIP].[STATUSCODE] <> 2 and --2: Canceled
                            [MEMBER].[ISDROPPED] = 0
                    )
                        set @MEMBERSHIPID = null;
                end

                if @MEMBERSHIPID is null
                    return 0;

                select
                    @DATALOADED = 1,
                    @MEMBERSHIPPROGRAMID =[MEMBERSHIP].[MEMBERSHIPPROGRAMID],
                    @MEMBERSHIPLEVELID = [MEMBERSHIP].[MEMBERSHIPLEVELID],
                    @MEMBERSHIPLEVELTERMID = [MEMBERSHIP].[MEMBERSHIPLEVELTERMID],
                    @MEMBERSHIPLEVELTYPECODEID = [MEMBERSHIP].[MEMBERSHIPLEVELTYPECODEID],
                    @EXPIRATIONDATE = [MEMBERSHIP].[EXPIRATIONDATE],
                    @NUMBEROFCHILDREN = [MEMBERSHIP].[NUMBEROFCHILDREN],
                    @ISGIFT = [MEMBERSHIP].[ISGIFT],
                    @SENDRENEWALCODE = [MEMBERSHIP].[SENDRENEWALCODE],
                    @GIVENBYID = [MEMBERSHIP].[GIVENBYID],
                    @STATUSCODE = [MEMBERSHIP].[STATUSCODE],
                    @MEMBERS = (
                        select
                            [MEMBER].[ID] as [MEMBERID],
                            [MEMBER].[CONSTITUENTID],
                            [MEMBER].[ISPRIMARY],
                            [CONSTITUENT].[FIRSTNAME],
                            [CONSTITUENT].[KEYNAME],
                            [TITLECODE].[DESCRIPTION] as [TITLE]
                        from dbo.[MEMBER] with (nolock)
                        inner join dbo.[CONSTITUENT] with (nolock)
                            on [MEMBER].[CONSTITUENTID] = [CONSTITUENT].[ID]
                        left join dbo.[TITLECODE]
                            on [CONSTITUENT].[TITLECODEID] = [TITLECODE].[ID]
                        where
                            [MEMBERSHIP].[ID] = [MEMBER].[MEMBERSHIPID] and
                            [MEMBER].[ISDROPPED] = 0
                        order by [MEMBER].[ISPRIMARY] desc
                        for xml raw ('ITEM'), type, elements, root('MEMBERS'), binary base64
                    )
                from dbo.[MEMBERSHIP]
                where [MEMBERSHIP].[ID] = @MEMBERSHIPID;

                select @SEQUENCEID = [SEQUENCEID]
                from dbo.[CONSTITUENT] where [ID] = @CONSTITUENTID

                select @GIFTERSEQUENCEID = [SEQUENCEID]
                from dbo.[CONSTITUENT] where [ID] = @GIVENBYID

                if @ISGIFT = 1
                begin
                    --See if giver is the recipient of the email and default their name is so       
                    --Option 1: Checking to see if the back office record id happens to be the giver's sequence ID (should be case in 2.9)
                    if exists(select 1 from dbo.[CONSTITUENT] where [ID] = @GIVENBYID and [SEQUENCEID] = @BACKOFFICERECORDID)
                        select
                            @GIFTERFIRSTNAME = [FIRSTNAME],
                            @GIFTERKEYNAME = [KEYNAME]
                        from dbo.[CONSTITUENT] with (nolock)
                        where [ID] = @GIVENBYID
                    --Option 2: See if the membership is set to send renewals to the giver and then check if the email address of the recipient exists on the giver's record
                    else if @SENDRENEWALCODE in (0,2)
                    begin
                        declare @GIVEREMAILADDRESS nvarchar(255)
                        select @GIVEREMAILADDRESS = [EmailAddress] from dbo.[EmailJob_Recipient] where [ID] = @EMAILJOBRECIPIENTID
                        if exists(select 1 from dbo.[EMAILADDRESS] where [CONSTITUENTID]  = @GIVENBYID and [EMAILADDRESS] = @GIVEREMAILADDRESS)
                        begin
                            select
                                @GIFTERFIRSTNAME = [FIRSTNAME],
                                @GIFTERKEYNAME = [KEYNAME]
                            from dbo.[CONSTITUENT] with (nolock)
                            where [ID] = @GIVENBYID
                        end
                        else if @SENDRENEWALCODE = 2
                            set @ISGIFT = 0
                    end
                    --Otherwise, let's not call this a gift
                    else
                        set @ISGIFT = 0
                end

                return 0;