USP_DATAFORMTEMPLATE_ADD_MEMBERSHIPRENEWALEFFORT

The save procedure used by the add dataform template "Membership Renewal Effort Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@MEMBERSHIPPROGRAMID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@MEMBERSHIPPROGRAMNAME nvarchar(50) IN Name
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NAME nvarchar(100) IN Name
@DESCRIPTION nvarchar(500) IN Description
@RENEWALNOTICES xml IN Renewal notices
@MEMBERSHIPLEVELS xml IN Membership levels to include
@DEFAULTCHANNEL bit IN Default channel
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_MEMBERSHIPRENEWALEFFORT
(
    @ID uniqueidentifier = null output,
    @MEMBERSHIPPROGRAMID uniqueidentifier,
    @MEMBERSHIPPROGRAMNAME nvarchar(50) = null,
    @CHANGEAGENTID uniqueidentifier = null,
    @NAME nvarchar(100) = null,
    @DESCRIPTION nvarchar(500) = null,
    @RENEWALNOTICES xml = null,
    @MEMBERSHIPLEVELS xml = null,
    @DEFAULTCHANNEL bit = 0,
    @CURRENTAPPUSERID uniqueidentifier
)
as

set nocount on;

if @ID is null
    set @ID = newid();

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

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

if @MEMBERSHIPPROGRAMNAME is null
    select @MEMBERSHIPPROGRAMNAME = NAME
    from dbo.MEMBERSHIPPROGRAM
    where ID = @MEMBERSHIPPROGRAMID;

begin try

    if not exists (select ID from dbo.MKTEXPORTDEFINITION
                    where ID in ('079E3C09-1D86-4B6B-AD25-85C606E4761B', '0CB53337-8979-419C-A782-42A6D983DACB'))
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NOEXPORTDEFINITIONCONFIGURATIONDATA', 13, 1)
        return 1
    end

    if not exists (select ID from dbo.ADDRESSPROCESSINGOPTION
                    where ID = '12825E0C-DFC4-4C1A-A512-E26194EB6237')
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NOADDRESSPROCESSINGOPTIONCONFIGURATIONDATA', 13, 1)
        return 1
    end

    if not exists (select ID from dbo.NAMEFORMATPARAMETER
                    where ID = '4AFC6309-E26A-4012-95C8-8A59EE751EE5')
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NONAMEFORMATPARAMETERCONFIGURATIONDATA', 13, 1)
        return 1
    end

    if exists (select ID from dbo.MKTMEMBERSHIPMAILINGTEMPLATE 
                where NAME = @NAME)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
        return 1
    end

    if not exists (select T.item.value('(ID)[1]','uniqueidentifier')
            from @MEMBERSHIPLEVELS.nodes('/MEMBERSHIPLEVELS/ITEM') T(item)
            where T.item.value('(SELECTED)[1]','bit') = 1)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NOMEMBERSHIPLEVELSELECTED', 13, 1)
        return 1
    end

    if not exists (select T.item.value('(ID)[1]','uniqueidentifier')
            from @RENEWALNOTICES.nodes('/RENEWALNOTICES/ITEM') T(item)
            where T.item.value('(SELECTED)[1]','bit') = 1)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NORENEWALNOTICESELECTED', 13, 1)
        return 1
    end

    if not exists (select T.item.value('(ID)[1]','uniqueidentifier'),
                    T.item.value('(TIMETOEXPIRATION)[1]','integer'),
                    T.item.value('(MAILPACKAGEID)[1]','uniqueidentifier'),
                    T.item.value('(EMAILPACKAGEID)[1]','uniqueidentifier')
          from @RENEWALNOTICES.nodes('/RENEWALNOTICES/ITEM') T(item)
        where T.item.value('(SELECTED)[1]','bit') = 1
            and ((not T.item.value('(MAILPACKAGEID)[1]','uniqueidentifier') is null)
            or (not T.item.value('(EMAILPACKAGEID)[1]','uniqueidentifier') is null)))
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NOPACKAGESELECTED', 13, 1)
        return 1
    end

    declare @SITEID uniqueidentifier
    --If site is required for the current user, then get the site from the membership program
    if dbo.UFN_SITEREQUIREDFORUSER(@CURRENTAPPUSERID) = 1 
        select @SITEID = MEMBERSHIPPROGRAM.SITEID
        from dbo.MEMBERSHIPPROGRAM
        where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID

    ---------------------------------------------------------
    -- 1. Create Membership Renewal Effort Template
    ---------------------------------------------------------
    -- 1.1 Create appeal
    declare @APPEALID uniqueidentifier;
    exec dbo.USP_DATAFORMTEMPLATE_ADD_APPEAL
        @APPEALID output,
        @CHANGEAGENTID ,    
        @NAME,                  --@NAME
        @NAME,                  --@DESCRIPTION
        null,                   --@APPEALCATEGORYCODEID    
     null,                   --@BUSINESSUNITCODEID
        @CURRENTDATE,           --@STARTDATE
        null,                   --@ENDDATE
        0,                      --@GOAL
        null,                   --@APPEALREPORT1CODEID
        @SITEID,                --@SITEID
        @MEMBERSHIPPROGRAMID,
        @CURRENTAPPUSERID

    if @APPEALID is null
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEAPPEAL', 13, 1)
        return 1
    end

    -- 1.2 Create template
    declare @APPEALINFORMATION xml
    set @APPEALINFORMATION = (
        select 
            [QUERYVIEWCATALOG].[DISPLAYNAME] as "RECORDSOURCENAME",
            [MKTAPPEALRECORDSOURCE].[SEARCHLISTCATALOGID] as "SEARCHLISTCATALOGID",
            [MKTAPPEALRECORDSOURCE].[ID] as "RECORDSOURCEID",
            @APPEALID as APPEALSYSTEMID,
            @NAME as APPEALID,
            @NAME as APPEALDESCRIPTION
        from dbo.[MKTAPPEALRECORDSOURCE] inner join QUERYVIEWCATALOG on [MKTAPPEALRECORDSOURCE].[ID] = [QUERYVIEWCATALOG].[ID]
        where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([QUERYVIEWCATALOG].[ID]) = 1
        for xml raw('ITEM'),type,elements,root('APPEALINFORMATION'),BINARY BASE64
    )

    exec dbo.USP_DATAFORMTEMPLATE_ADD_MKTMEMBERSHIPMAILINGTEMPLATE
        @ID output,
        @CURRENTAPPUSERID,
        @CHANGEAGENTID,    
        '',                       --@CODE
        @NAME,                    --@NAME
        @DESCRIPTION,             --@DESCRIPTION
        null,                     --@INCLUDESELECTIONS
        null,                     --@EXCLUDESELECTIONS
        null,                     --@SOURCECODEID
        null,                     --@ITEMLIST
        @SITEID,                    --@SITEID
        0,                        --@EXCLUSIONDATETYPECODE
        null,                     --@EXCLUSIONASOFDATE
        1,                        --@EXCLUDEDECEASED
        1,                        --@EXCLUDEINACTIVE
        null,                     --@EXCLUSIONS
        1,                        --@USEADDRESSPROCESSING
        '12825E0C-DFC4-4C1A-A512-E26194EB6237',                     --@ADDRESSPROCESSINGOPTIONID
        '4AFC6309-E26A-4012-95C8-8A59EE751EE5',                     --@NAMEFORMATPARAMETERID
        0,                        --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
        @CURRENTDATE,                     --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
        null,                     --@ACTIVATIONKPIS
        0,                        --@USEKPISASDEFAULT
        @APPEALINFORMATION,       --@APPEALINFORMATION
        1,                        --@RUNACTIVATEANDEXPORT
        '',                       --@EXPORTDESCRIPTION
        '079E3C09-1D86-4B6B-AD25-85C606E4761B',   --@MAILEXPORTDEFINITIONID
        '0CB53337-8979-419C-A782-42A6D983DACB',   --@EMAILEXPORTDEFINITIONID
        null,                     --@PHONEEXPORTDEFINITIONID
        null,                     --@CODEVALUEID
        1,                        --@RUNSEGMENTATIONSEGMENTREFRESHPROCESS
        0                         --@CACHESOURCEANALYSISRULEDATA
    if @ID is null
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEMEMBERSHIPMAILINGTEMPLATE', 13, 1)
        return 1
    end

    -- Create membership renewal effort process record if necessary
    if not exists (select 1 from dbo.MKTMEMBERSHIPRENEWALEFFORTPROCESS where MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID)
        insert into dbo.[MKTMEMBERSHIPRENEWALEFFORTPROCESS] (
          [ID],
          [MEMBERSHIPPROGRAMID],
          [MEMBERSHIPMAILINGTEMPLATEID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        ) values (
          newid(),
          @MEMBERSHIPPROGRAMID,
          @ID,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        );

    ---------------------------------------------------------
    -- 2. Create Membership Rules (one rule for each package)
    ---------------------------------------------------------
    declare @SELECTED bit
    declare @TIMETOEXPIRATION int
    declare @MAILPACKAGEID uniqueidentifier
    declare @EMAILPACKAGEID uniqueidentifier

    declare @SMARTQUERYNAME nvarchar(255)
    declare @SMARTQUERYINSTANCEID uniqueidentifier
    declare @SMARTQUERYCATALOGID uniqueidentifier
    declare @TVFNAME nvarchar(128)
    declare @TVFPARAMETERVALUES nvarchar(max)
    declare @DATAFORMITEMFILTERXML xml
    declare @IDSETREGISTERID uniqueidentifier
    declare @QUERYVIEWCATALOGID uniqueidentifier
    declare @T1 table([VALUE] uniqueidentifier, [LABEL] nvarchar(255))
    declare @SELECTIONS xml
    declare @SEGMENTID uniqueidentifier
    declare @SEGMENTNAME nvarchar(100)
    declare @RULEID uniqueidentifier
    declare @LEVELID uniqueidentifier
    declare @LEVELNAME nvarchar(50)
    declare @FILTERSELECTION uniqueidentifier
    declare @PRIMARYKEYFIELD nvarchar(128)
    declare @STATICTABLE nvarchar(128)

    declare @MAILINGPREFERENCESMARTQUERYNAME nvarchar(255)
    declare @MAILINGPREFERENCESMARTQUERYINSTANCEID uniqueidentifier
    declare @MAILINGPREFERENCESMARTQUERYCATALOGID uniqueidentifier
    declare @MAILINGPREFERENCETVFNAME nvarchar(128)
    declare @MAILINGPREFERENCETVFPARAMETERVALUES nvarchar(max)
    declare @MAILINGPREFERENCEDATAFORMITEMFILTERXML xml
    declare @MAILINGPREFERENCEEMAILIDSETREGISTERID uniqueidentifier
    declare @MAILINGPREFERENCEMAILIDSETREGISTERID uniqueidentifier
    declare @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID uniqueidentifier
    declare @MAILINGPREFERENCEBOTHEXCEPTEMAILIDSETREGISTERID uniqueidentifier

    declare @PACKAGEEXPORTDEFINITIONNOTFORMEMBERSHIP nvarchar(255)
    declare @EXPORTRECORDTYPEID uniqueidentifier

    select @MAILINGPREFERENCESMARTQUERYCATALOGID = ID, @MAILINGPREFERENCETVFNAME = TVFNAME
    from dbo.SMARTQUERYCATALOG 
    where NAME = 'Membership Mailing Preference Smart Query'

    -- 2.0 Create smart query (static) selections for mailing preference
    -- 2.0.1 Email preference selection
    set @MAILINGPREFERENCESMARTQUERYNAME = null

    set @MAILINGPREFERENCESMARTQUERYNAME = @NAME + ' - Mailing Preference - Email'

    if exists (select ID from dbo.SMARTQUERYINSTANCE 
                where NAME = @MAILINGPREFERENCESMARTQUERYNAME)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
        return 1
    end

      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = newid()

      set @MAILINGPREFERENCEDATAFORMITEMFILTERXML = '
        <DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
            <Values>
                <fv ID="MEMBERSHIPPROGRAMID">
                    <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + '</Value>
                </fv>
                <fv ID="MAILINGPREFERENCE">
                    <Value xsi:type="xsd:string">1</Value>
                </fv>
                <fv ID="INCLUDENOPREFERENCE">
                    <Value xsi:type="xsd:boolean">true</Value>
                </fv>
                <fv ID="EXCLUDEPREFERENCE" />
            </Values>
        </DataFormItem>
      ';

      set @MAILINGPREFERENCETVFPARAMETERVALUES = 'N''' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + ''' /*@MEMBERSHIPPROGRAMID*/,
                                  1 /*@MAILINGPREFERENCE*/,
                                  1 /*@INCLUDENOPREFERENCE*/,
                                  null /*@EXCLUDEPREFERENCE*/,
                                  ''' + convert(nvarchar(50), @CURRENTAPPUSERID) + ''' /*@CURRENTAPPUSERID*/,
                                  2147483647 /*@MAXROWS*/
      '

    -- Create smart query instance
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATE] 
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@ID
          @MAILINGPREFERENCESMARTQUERYCATALOGID,   --@SMARTQUERYCATALOGID
          @MAILINGPREFERENCESMARTQUERYNAME,        --@NAME
          @MAILINGPREFERENCESMARTQUERYNAME,        --@DESCRIPTION
          null,                                    --@QUERYCATEGORYCODEID
          null,                                    --@DATAFORMINSTANCEID
          @MAILINGPREFERENCEDATAFORMITEMFILTERXML, --@DATAFORMITEMFILTERXML
          1,                                      --@OTHERSCANMODIFY
          @CURRENTAPPUSERID,                      --@APPUSERID
          @CHANGEAGENTID,                         --@CHANGEAGENTID
          @SITEID,                                   --@SITEID
          0                                       --@MOBILIZE

    -- Create table for static selection
    exec [dbo].[USP_SMARTQUERYINSTANCE_CREATESTATICTABLE]
        @MAILINGPREFERENCESMARTQUERYINSTANCEID

    -- Insert static selection table
    select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
        inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
    where SMARTQUERYINSTANCE.ID = @MAILINGPREFERENCESMARTQUERYINSTANCEID;

      set @STATICTABLE = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@MAILINGPREFERENCESMARTQUERYINSTANCEID);

    exec ('insert into ' + @STATICTABLE +
            ' select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from dbo.' + @MAILINGPREFERENCETVFNAME + '(' + @MAILINGPREFERENCETVFPARAMETERVALUES + ')')

      set @MAILINGPREFERENCEEMAILIDSETREGISTERID = null

      -- Create ID set record
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@SMARTQUERYINSTANCEID
          @MAILINGPREFERENCETVFNAME,               --@TVFNAME
          @MAILINGPREFERENCETVFPARAMETERVALUES,    --@TVFPARAMETERVALUES
          1,                      --@ISSTATIC
          1,                      --@USEINQUERYDESIGNER
          null,                   --@NUMROWS
          @CHANGEAGENTID,
          @MAILINGPREFERENCEEMAILIDSETREGISTERID output

    if @MAILINGPREFERENCEEMAILIDSETREGISTERID is null
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEIDSETREGISTER', 13, 1)
        return 1
    end

    -- 2.0.2 Mail preference selection
    set @MAILINGPREFERENCESMARTQUERYNAME = null
      set @MAILINGPREFERENCESMARTQUERYNAME = @NAME + ' - Mailing Preference - Mail'

    if exists (select ID from dbo.SMARTQUERYINSTANCE 
                where NAME = @MAILINGPREFERENCESMARTQUERYNAME)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
        return 1
    end

      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = null
      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = newid()

      set @MAILINGPREFERENCEDATAFORMITEMFILTERXML = '
          <DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
            <Values>
                <fv ID="MEMBERSHIPPROGRAMID">
                    <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + '</Value>
                </fv>
                <fv ID="MAILINGPREFERENCE">
                    <Value xsi:type="xsd:string">0</Value>
                </fv>
                <fv ID="INCLUDENOPREFERENCE">
                    <Value xsi:type="xsd:boolean">true</Value>
                </fv>
                <fv ID="EXCLUDEPREFERENCE" />
            </Values>
        </DataFormItem>
      ';

      set @MAILINGPREFERENCETVFPARAMETERVALUES = 'N''' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + ''' /*@MEMBERSHIPPROGRAMID*/,
                                  0 /*@MAILINGPREFERENCE*/,
                                  1 /*@INCLUDENOPREFERENCE*/,
                                  null /*@EXCLUDEPREFERENCE*/,
                                  ''' + convert(nvarchar(50), @CURRENTAPPUSERID) + ''' /*@CURRENTAPPUSERID*/,
                                  2147483647 /*@MAXROWS*/
      '

    -- Create smart query instance
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATE] 
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@ID
          @MAILINGPREFERENCESMARTQUERYCATALOGID,   --@SMARTQUERYCATALOGID
          @MAILINGPREFERENCESMARTQUERYNAME,        --@NAME
          @MAILINGPREFERENCESMARTQUERYNAME,        --@DESCRIPTION
          null,                                    --@QUERYCATEGORYCODEID
          null,                                    --@DATAFORMINSTANCEID
          @MAILINGPREFERENCEDATAFORMITEMFILTERXML, --@DATAFORMITEMFILTERXML
          1,                                      --@OTHERSCANMODIFY
          @CURRENTAPPUSERID,                      --@APPUSERID
          @CHANGEAGENTID,                         --@CHANGEAGENTID
          @SITEID,                                   --@SITEID
          0                                       --@MOBILIZE

    -- Create table for static selection
    exec [dbo].[USP_SMARTQUERYINSTANCE_CREATESTATICTABLE]
        @MAILINGPREFERENCESMARTQUERYINSTANCEID

    -- Insert static selection table
    select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
        inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
    where SMARTQUERYINSTANCE.ID = @MAILINGPREFERENCESMARTQUERYINSTANCEID;

      set @STATICTABLE = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@MAILINGPREFERENCESMARTQUERYINSTANCEID);

    exec ('insert into ' + @STATICTABLE +
            ' select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from dbo.' + @MAILINGPREFERENCETVFNAME + '(' + @MAILINGPREFERENCETVFPARAMETERVALUES + ')')

      set @MAILINGPREFERENCEMAILIDSETREGISTERID = null

      -- Create ID set record
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@SMARTQUERYINSTANCEID
          @MAILINGPREFERENCETVFNAME,               --@TVFNAME
          @MAILINGPREFERENCETVFPARAMETERVALUES,    --@TVFPARAMETERVALUES
          1,                      --@ISSTATIC
          1,                      --@USEINQUERYDESIGNER
          null,                   --@NUMROWS
          @CHANGEAGENTID,
          @MAILINGPREFERENCEMAILIDSETREGISTERID output

    if @MAILINGPREFERENCEMAILIDSETREGISTERID is null
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEIDSETREGISTER', 13, 1)
        return 1
    end

    -- 2.0.3 This selection is used when there is only email package selected
    set @MAILINGPREFERENCESMARTQUERYNAME = null;
    set @MAILINGPREFERENCESMARTQUERYNAME = @NAME + ' - Mailing Preference - Both (Exclude mail only)';

    if exists (select ID from dbo.SMARTQUERYINSTANCE 
                where NAME = @MAILINGPREFERENCESMARTQUERYNAME)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1);
        return 1;
    end

      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = null;
      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = newid();

      set @MAILINGPREFERENCEDATAFORMITEMFILTERXML = '
        <DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
            <Values>
                <fv ID="MEMBERSHIPPROGRAMID">
                    <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + '</Value>
                </fv>
                <fv ID="MAILINGPREFERENCE" >
                    <Value xsi:type="xsd:string">1</Value>
                </fv>
                <fv ID="INCLUDENOPREFERENCE">
                    <Value xsi:type="xsd:boolean">true</Value>
                </fv>
                <fv ID="EXCLUDEPREFERENCE">
                    <Value xsi:type="xsd:string">1</Value>
                </fv>
            </Values>
        </DataFormItem>
      ';

      set @MAILINGPREFERENCETVFPARAMETERVALUES = 'N''' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + ''' /*@MEMBERSHIPPROGRAMID*/,
                                  1 /*@MAILINGPREFERENCE*/,
                                  1 /*@INCLUDENOPREFERENCE*/,
                                  1 /*@EXCLUDEPREFERENCE*/,
                                  ''' + convert(nvarchar(50), @CURRENTAPPUSERID) + ''' /*@CURRENTAPPUSERID*/,
                                  2147483647 /*@MAXROWS*/
      '

    -- Create smart query instance
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATE] 
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@ID
          @MAILINGPREFERENCESMARTQUERYCATALOGID,   --@SMARTQUERYCATALOGID
          @MAILINGPREFERENCESMARTQUERYNAME,        --@NAME
          @MAILINGPREFERENCESMARTQUERYNAME,        --@DESCRIPTION
          null,                                    --@QUERYCATEGORYCODEID
          null,                                    --@DATAFORMINSTANCEID
          @MAILINGPREFERENCEDATAFORMITEMFILTERXML, --@DATAFORMITEMFILTERXML
          1,                                      --@OTHERSCANMODIFY
          @CURRENTAPPUSERID,                      --@APPUSERID
          @CHANGEAGENTID,                         --@CHANGEAGENTID
          @SITEID,                                   --@SITEID
          0                         --@MOBILIZE

    -- Create table for static selection
    exec [dbo].[USP_SMARTQUERYINSTANCE_CREATESTATICTABLE]
        @MAILINGPREFERENCESMARTQUERYINSTANCEID

    -- Insert static selection table
    select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
        inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
    where SMARTQUERYINSTANCE.ID = @MAILINGPREFERENCESMARTQUERYINSTANCEID;

      set @STATICTABLE = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@MAILINGPREFERENCESMARTQUERYINSTANCEID);

    exec ('insert into ' + @STATICTABLE +
            ' select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from dbo.' + @MAILINGPREFERENCETVFNAME + '(' + @MAILINGPREFERENCETVFPARAMETERVALUES + ')')

      set @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID = null

      -- Create ID set record
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@SMARTQUERYINSTANCEID
          @MAILINGPREFERENCETVFNAME,               --@TVFNAME
          @MAILINGPREFERENCETVFPARAMETERVALUES,    --@TVFPARAMETERVALUES
          1,                      --@ISSTATIC
          1,                      --@USEINQUERYDESIGNER
          null,                   --@NUMROWS
          @CHANGEAGENTID,
          @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID output

    if @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID is null
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEIDSETREGISTER', 13, 1)
        return 1
    end

    -- 2.0.3 This selection is used when there is only mail package selected
    set @MAILINGPREFERENCESMARTQUERYNAME = null;
    set @MAILINGPREFERENCESMARTQUERYNAME = @NAME + ' - Mailing Preference - Both (Exclude email only)';

    if exists (select ID from dbo.SMARTQUERYINSTANCE 
                where NAME = @MAILINGPREFERENCESMARTQUERYNAME)
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1);
        return 1;
    end

      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = null;
      set @MAILINGPREFERENCESMARTQUERYINSTANCEID = newid();

      set @MAILINGPREFERENCEDATAFORMITEMFILTERXML = '
        <DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
            <Values>
                <fv ID="MEMBERSHIPPROGRAMID">
                    <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + '</Value>
                </fv>
                <fv ID="MAILINGPREFERENCE" >
                    <Value xsi:type="xsd:string">0</Value>
                </fv>
                <fv ID="INCLUDENOPREFERENCE">
                    <Value xsi:type="xsd:boolean">true</Value>
                </fv>
                <fv ID="EXCLUDEPREFERENCE">
                    <Value xsi:type="xsd:string">0</Value>
                </fv>
            </Values>
        </DataFormItem>
      ';

      set @MAILINGPREFERENCETVFPARAMETERVALUES = 'N''' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + ''' /*@MEMBERSHIPPROGRAMID*/,
                                  0 /*@MAILINGPREFERENCE*/,
                                  1 /*@INCLUDENOPREFERENCE*/,
                                  0 /*@EXCLUDEPREFERENCE*/,
                                  ''' + convert(nvarchar(50), @CURRENTAPPUSERID) + ''' /*@CURRENTAPPUSERID*/,
                                  2147483647 /*@MAXROWS*/
      '

    -- Create smart query instance
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATE] 
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@ID
          @MAILINGPREFERENCESMARTQUERYCATALOGID,   --@SMARTQUERYCATALOGID
          @MAILINGPREFERENCESMARTQUERYNAME,        --@NAME
          @MAILINGPREFERENCESMARTQUERYNAME,        --@DESCRIPTION
          null,                                    --@QUERYCATEGORYCODEID
          null,                                    --@DATAFORMINSTANCEID
          @MAILINGPREFERENCEDATAFORMITEMFILTERXML, --@DATAFORMITEMFILTERXML
          1,                                      --@OTHERSCANMODIFY
          @CURRENTAPPUSERID,                      --@APPUSERID
          @CHANGEAGENTID,                         --@CHANGEAGENTID
          @SITEID,                                   --@SITEID
          0                                       --@MOBILIZE

    -- Create table for static selection
    exec [dbo].[USP_SMARTQUERYINSTANCE_CREATESTATICTABLE]
        @MAILINGPREFERENCESMARTQUERYINSTANCEID

    -- Insert static selection table
    select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
        inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
    where SMARTQUERYINSTANCE.ID = @MAILINGPREFERENCESMARTQUERYINSTANCEID;

      set @STATICTABLE = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@MAILINGPREFERENCESMARTQUERYINSTANCEID);

    exec ('insert into ' + @STATICTABLE +
            ' select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from dbo.' + @MAILINGPREFERENCETVFNAME + '(' + @MAILINGPREFERENCETVFPARAMETERVALUES + ')')

      set @MAILINGPREFERENCEBOTHEXCEPTEMAILIDSETREGISTERID = null

      -- Create ID set record
      exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
          @MAILINGPREFERENCESMARTQUERYINSTANCEID,  --@SMARTQUERYINSTANCEID
          @MAILINGPREFERENCETVFNAME,               --@TVFNAME
          @MAILINGPREFERENCETVFPARAMETERVALUES,    --@TVFPARAMETERVALUES
          1,                      --@ISSTATIC
          1,                      --@USEINQUERYDESIGNER
          null,                   --@NUMROWS
          @CHANGEAGENTID,
          @MAILINGPREFERENCEBOTHEXCEPTEMAILIDSETREGISTERID output

    if @MAILINGPREFERENCEBOTHEXCEPTEMAILIDSETREGISTERID is null
    begin
        raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEIDSETREGISTER', 13, 1)
        return 1
    end

    select @SMARTQUERYCATALOGID = ID, @TVFNAME = TVFNAME
        from dbo.SMARTQUERYCATALOG 
        where NAME = 'Membership Smart Query'

    declare PACKAGE cursor for
        select T.item.value('(SELECTED)[1]','bit'),
                    T.item.value('(TIMETOEXPIRATION)[1]','integer'),
                    T.item.value('(MAILPACKAGEID)[1]','uniqueidentifier'),
                    T.item.value('(EMAILPACKAGEID)[1]','uniqueidentifier')
          from @RENEWALNOTICES.nodes('/RENEWALNOTICES/ITEM') T(item)
        where T.item.value('(SELECTED)[1]','bit') = 1

    open PACKAGE
    fetch next from PACKAGE into @SELECTED, @TIMETOEXPIRATION, @MAILPACKAGEID, @EMAILPACKAGEID
    while @@fetch_status = 0
    begin

        -- 2.0 Check if the export definition in the package is membership export definition
        if not @MAILPACKAGEID is null
        begin
            set @EXPORTRECORDTYPEID = null
            select @EXPORTRECORDTYPEID = EXPORTDEFINITION.RECORDTYPEID
            from dbo.MKTPACKAGE inner join dbo.EXPORTDEFINITION on MKTPACKAGE.EXPORTDEFINITIONID = EXPORTDEFINITION.ID
            where MKTPACKAGE.ID = @MAILPACKAGEID

            if @EXPORTRECORDTYPEID is null
                select @EXPORTRECORDTYPEID = EXPORTDEFINITION.RECORDTYPEID
                from dbo.MKTPACKAGE 
                    inner join dbo.LETTERCODE on MKTPACKAGE.LETTERCODEID = LETTERCODE.ID
                    inner join dbo.EXPORTDEFINITION on LETTERCODE.EXPORTDEFINITIONID = EXPORTDEFINITION.ID
                where MKTPACKAGE.ID = @MAILPACKAGEID

            if @EXPORTRECORDTYPEID is null
                select @EXPORTRECORDTYPEID = EXPORTDEFINITION.RECORDTYPEID
                from dbo.MKTPACKAGE 
                    inner join dbo.EXPORTDEFINITION on dbo.UFN_MKTEXPORTDEFINITION_GETIDFROMNETCOMMUNITYDATASOURCEID(MKTPACKAGE.NETCOMMUNITYDATASOURCEID) = EXPORTDEFINITION.ID
                where MKTPACKAGE.ID = @MAILPACKAGEID

            if (not @EXPORTRECORDTYPEID is null ) and dbo.UFN_MKTEXPORTDEFINITION_GETMAILINGTYPECODEFROMRECORDTYPEID(@EXPORTRECORDTYPEID) <> 2
            begin
                set @PACKAGEEXPORTDEFINITIONNOTFORMEMBERSHIP = 'The mail package for "' + case @TIMETOEXPIRATION 
                      when 0 then '3 months before expiration'
                      when 1 then '2 months before expiration'
                      when 2 then '1 month before expiration'
                      when 3 then 'Month of expiration'
                      when 4 then '1 month after expiration'
                    when 5 then '2 months after expiration'
                      when 6 then '3 months after expiration'
                    end + '" contains an invalid export definition. Please select a new package, or edit the current package to include a membership renewal export definition.'
                raiserror(@PACKAGEEXPORTDEFINITIONNOTFORMEMBERSHIP, 13, 1)
                return 1
            end
        end

        if not @EMAILPACKAGEID is null
        begin
            set @EXPORTRECORDTYPEID = null
            select @EXPORTRECORDTYPEID = EXPORTDEFINITION.RECORDTYPEID
            from dbo.MKTPACKAGE inner join dbo.EXPORTDEFINITION on MKTPACKAGE.EXPORTDEFINITIONID = EXPORTDEFINITION.ID
            where MKTPACKAGE.ID = @EMAILPACKAGEID

            if @EXPORTRECORDTYPEID is null
                select @EXPORTRECORDTYPEID = EXPORTDEFINITION.RECORDTYPEID
                from dbo.MKTPACKAGE 
                    inner join dbo.LETTERCODE on MKTPACKAGE.LETTERCODEID = LETTERCODE.ID
                    inner join dbo.EXPORTDEFINITION on LETTERCODE.EXPORTDEFINITIONID = EXPORTDEFINITION.ID
                where MKTPACKAGE.ID = @EMAILPACKAGEID

            if @EXPORTRECORDTYPEID is null
                select @EXPORTRECORDTYPEID = EXPORTDEFINITION.RECORDTYPEID
                from dbo.MKTPACKAGE 
                    inner join dbo.EXPORTDEFINITION on dbo.UFN_MKTEXPORTDEFINITION_GETIDFROMNETCOMMUNITYDATASOURCEID(MKTPACKAGE.NETCOMMUNITYDATASOURCEID) = EXPORTDEFINITION.ID
                where MKTPACKAGE.ID = @EMAILPACKAGEID

            if (not @EXPORTRECORDTYPEID is null ) and dbo.UFN_MKTEXPORTDEFINITION_GETMAILINGTYPECODEFROMRECORDTYPEID(@EXPORTRECORDTYPEID) <> 2
            begin
                set @PACKAGEEXPORTDEFINITIONNOTFORMEMBERSHIP = 'The email package of "' + case @TIMETOEXPIRATION 
                      when 0 then '3 months before expiration'
                      when 1 then '2 months before expiration'
                      when 2 then '1 month before expiration'
                      when 3 then 'Month of expiration'
                      when 4 then '1 month after expiration'
                      when 5 then '2 months after expiration'
                      when 6 then '3 months after expiration'
                    end + '" contains an invalid export definition. Please select a new package, or edit the current package to include a membership renewal export definition.'
                raiserror(@PACKAGEEXPORTDEFINITIONNOTFORMEMBERSHIP, 13, 1)
                return 1
            end
        end

        -- 2.1 Create smart query (static) selections
        set @SMARTQUERYNAME = null

        set @SMARTQUERYNAME = @NAME + ' - ' + case @TIMETOEXPIRATION 
          when 0 then '3 months before expiration'
          when 1 then '2 months before expiration'
          when 2 then '1 month before expiration'
          when 3 then 'Month of expiration'
          when 4 then '1 month after expiration'
          when 5 then '2 months after expiration'
          when 6 then '3 months after expiration'
        end

        if exists (select ID from dbo.SMARTQUERYINSTANCE 
                    where NAME = @SMARTQUERYNAME)
        begin
            raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
            return 1
        end

            set @SMARTQUERYINSTANCEID = newid()

            set @DATAFORMITEMFILTERXML = '
                <DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
                  <Values>
                    <fv ID="TIERCODEID" />
                    <fv ID="MEMBERSHIPLEVELID" />
                    <fv ID="STATUS" />
                    <fv ID="MEMBERSHIPLEVELTYPECODEID" />
                    <fv ID="MEMBERSHIPPROGRAMID">
                      <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + '</Value>
                    </fv>
                    <fv ID="CHECKEXPIRATIONDATE">
                      <Value xsi:type="xsd:boolean">true</Value>
                    </fv>
                    <fv ID="MONTHSTOEXPIRATION">
                      <Value xsi:type="xsd:int">' + case @TIMETOEXPIRATION 
                                                        when 0 then '3'
                                                        when 1 then '2'
                                                        when 2 then '1'
                                                        when 3 then '0'
                                                        when 4 then '-1'
                                                        when 5 then '-2'
                                                        when 6 then '-3'
                                                    end + '</Value>
                    </fv>
                  </Values>
                </DataFormItem>
            '

            set @TVFPARAMETERVALUES = 'N''' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + ''' /*@MEMBERSHIPPROGRAMID*/,
                                        null /*@MEMBERSHIPLEVELID*/,
                                        null /*@STATUS*/,
                                        null /*@MEMBERSHIPLEVELTYPECODEID*/,
                                        null /*@TIERCODEID*/,
                                        1 /*@CHECKEXPIRATIONDATE*/,
                                        ' + case @TIMETOEXPIRATION 
                                                        when 0 then '3'
                                                        when 1 then '2'
                                                        when 2 then '1'
                                                        when 3 then '0'
                                                        when 4 then '-1'
                                                        when 5 then '-2'
                                                        when 6 then '-3'
                                            end + '/*@MONTHSTOEXPIRATION*/,
                                        ''' + convert(nvarchar(50), @CURRENTAPPUSERID) + ''' /*@CURRENTAPPUSERID*/,
                                        2147483647 /*@MAXROWS*/
            '

        -- Create smart query instance
            exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATE] 
                @SMARTQUERYINSTANCEID,  --@ID
                @SMARTQUERYCATALOGID,   --@SMARTQUERYCATALOGID
                @SMARTQUERYNAME,        --@NAME
                @SMARTQUERYNAME,        --@DESCRIPTION
                null,                   --@QUERYCATEGORYCODEID
                null,                   --@DATAFORMINSTANCEID
                @DATAFORMITEMFILTERXML, --@DATAFORMITEMFILTERXML
                1,                      --@OTHERSCANMODIFY
                @CURRENTAPPUSERID,      --@APPUSERID
                @CHANGEAGENTID,         --@CHANGEAGENTID
                @SITEID,                   --@SITEID
                0                       --@MOBILIZE

        -- Create table for static selection
        exec [dbo].[USP_SMARTQUERYINSTANCE_CREATESTATICTABLE]
            @SMARTQUERYINSTANCEID

        -- Insert static selection table
        select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
            inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
        where SMARTQUERYINSTANCE.ID = @SMARTQUERYINSTANCEID;

          set @STATICTABLE = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@SMARTQUERYINSTANCEID);

        exec ('insert into ' + @STATICTABLE +
                ' select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from dbo.' + @TVFNAME + '(' + @TVFPARAMETERVALUES + ')')

            set @IDSETREGISTERID = null

            -- Create ID set record
            exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
                @SMARTQUERYINSTANCEID,  --@SMARTQUERYINSTANCEID
                @TVFNAME,               --@TVFNAME
                @TVFPARAMETERVALUES,    --@TVFPARAMETERVALUES
                1,                      --@ISSTATIC
                1,                      --@USEINQUERYDESIGNER
                null,                   --@NUMROWS
                @CHANGEAGENTID,
                @IDSETREGISTERID output

        if @IDSETREGISTERID is null
        begin
            raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEIDSETREGISTER', 13, 1)
            return 1
        end

            -- 2.2 Create segments and rules
            if dbo.[UFN_MKTSELECTION_SMARTQUERIESEXIST](3) = 0
            begin
                -- No membership-based smart queries exist
                raiserror('ERR_MEMBERSHIPRENEWALEFFORT_NOSMARTQUERIESEXIST', 13, 1);
                return 1;
            end

            insert into @T1
                exec dbo.[USP_SIMPLEDATALIST_MKTRECORDSSOURCE] @CURRENTAPPUSERID;
            select @QUERYVIEWCATALOGID = [VALUE]
            from @T1

        if @DEFAULTCHANNEL = 1
        begin
            -- Create email segment first, then mail segment
                if @EMAILPACKAGEID is not null
                begin
                    if @MAILPACKAGEID is not null
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEEMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)
                    else
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)

                -- Create segment
                      set @SEGMENTID = newid()

                      set @SEGMENTNAME = @NAME + ' - ' + case @TIMETOEXPIRATION 
                          when 0 then '3 months before expiration'
                          when 1 then '2 months before expiration'
                          when 2 then '1 month before expiration'
                          when 3 then 'Month of expiration'
                          when 4 then '1 month after expiration'
                          when 5 then '2 months after expiration'
                          when 6 then '3 months after expiration'
                      end + ' (email)'

                if exists (select ID from dbo.MKTSEGMENT 
                            where NAME = @SEGMENTNAME)
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
                    return 1
                end

                      exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTMEMBERSHIP]
                            @SEGMENTID output,
                            @CHANGEAGENTID,    
                            @QUERYVIEWCATALOGID,
                            @SEGMENTNAME,
                            '',
                            '',
                            @SELECTIONS,
                            null,
                            null,
                            null

                if @SEGMENTID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATESEGMENT', 13, 1)
                    return 1
                end

                -- Create rules
                set @RULEID = null

                exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTMEMBERSHIPMAILINGTEMPLATERULE]
                    @RULEID output,
                    @CHANGEAGENTID,    
                    @ID,            --@MEMBERSHIPMAILINGTEMPLATEID
                    @SEGMENTID,     --@SEGMENTID
                    '',             --@CODEID
                    '',             --@TESTSEGMENTCODE
                    @EMAILPACKAGEID,--@PACKAGEID
                    '',             --@PACKAGECODE
                    0,              --@RESPONSERATE
                    0,              --@GIFTAMOUNT
                    null,           --@ASKLADDERID
                    1,              --@OVERRIDEADDRESSPROCESSING
                    1,              --@USEADDRESSPROCESSING
                    '12825E0C-DFC4-4C1A-A512-E26194EB6237',           --@ADDRESSPROCESSINGOPTIONID
                    0,              --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
                    @CURRENTDATE,   --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
                    '4AFC6309-E26A-4012-95C8-8A59EE751EE5',           --@NAMEFORMATPARAMETERID
                    null,           --@CODEVALUEID
                    null,           --@PACKAGECODEVALUEID
                    null,           --@TESTSEGMENTCODEVALUEID
                    '',             --@CHANNELSOURCECODE
                    null            --@CHANNELSOURCECODEVALUEID  

                if @RULEID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATERULE', 13, 1)
                    return 1
                end

                end

                if @MAILPACKAGEID is not null
                begin
                    if @EMAILPACKAGEID is not null
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)
                    else
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)


                -- Create segment
                      set @SEGMENTID = newid()

                      set @SEGMENTNAME = @NAME + ' - ' + case @TIMETOEXPIRATION 
                          when 0 then '3 months before expiration'
                          when 1 then '2 months before expiration'
                          when 2 then '1 month before expiration'
                          when 3 then 'Month of expiration'
                          when 4 then '1 month after expiration'
                          when 5 then '2 months after expiration'
                          when 6 then '3 months after expiration'
                      end + ' (mail)'

                if exists (select ID from dbo.MKTSEGMENT 
                            where NAME = @SEGMENTNAME)
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
                    return 1
                end

                      exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTMEMBERSHIP]
                            @SEGMENTID output,
                            @CHANGEAGENTID,    
                            @QUERYVIEWCATALOGID,
                            @SEGMENTNAME,
                            '',
                            '',
                            @SELECTIONS,
                            null,
                            null,
                            null

                if @SEGMENTID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATESEGMENT', 13, 1)
                    return 1
                end

                -- Create rules
                set @RULEID = null

                exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTMEMBERSHIPMAILINGTEMPLATERULE]
                    @RULEID output,
                    @CHANGEAGENTID,    
                    @ID,            --@MEMBERSHIPMAILINGTEMPLATEID
                    @SEGMENTID,     --@SEGMENTID
                    '',             --@CODEID
                    '',             --@TESTSEGMENTCODE
                    @MAILPACKAGEID, --@PACKAGEID
                    '',             --@PACKAGECODE
                    0,              --@RESPONSERATE
                    0,              --@GIFTAMOUNT
                    null,           --@ASKLADDERID
                    1,              --@OVERRIDEADDRESSPROCESSING
                    1,              --@USEADDRESSPROCESSING
                    '12825E0C-DFC4-4C1A-A512-E26194EB6237',           --@ADDRESSPROCESSINGOPTIONID
                    0,              --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
                    @CURRENTDATE,   --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
                    '4AFC6309-E26A-4012-95C8-8A59EE751EE5',           --@NAMEFORMATPARAMETERID
                    null,           --@CODEVALUEID
                    null,           --@PACKAGECODEVALUEID
                    null,           --@TESTSEGMENTCODEVALUEID
                    '',             --@CHANNELSOURCECODE
                    null            --@CHANNELSOURCECODEVALUEID

                if @RULEID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATERULE', 13, 1)
                    return 1
                end

            end
        end
        else
        begin
            -- Create mail segment first, then email segment
                if @MAILPACKAGEID is not null
                begin
                    if @EMAILPACKAGEID is not null
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)
                    else
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEBOTHEXCEPTEMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)


                -- Create segment
                      set @SEGMENTID = newid()

                      set @SEGMENTNAME = @NAME + ' - ' + case @TIMETOEXPIRATION 
                          when 0 then '3 months before expiration'
                          when 1 then '2 months before expiration'
                          when 2 then '1 month before expiration'
                          when 3 then 'Month of expiration'
                          when 4 then '1 month after expiration'
                          when 5 then '2 months after expiration'
                          when 6 then '3 months after expiration'
                      end + ' (mail)'

                if exists (select ID from dbo.MKTSEGMENT 
                            where NAME = @SEGMENTNAME)
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
                    return 1
                end

                      exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTMEMBERSHIP]
                            @SEGMENTID output,
                            @CHANGEAGENTID,    
                            @QUERYVIEWCATALOGID,
                            @SEGMENTNAME,
                            '',
                            '',
                            @SELECTIONS,
                            null,
                            null,
                            null

                if @SEGMENTID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATESEGMENT', 13, 1)
                    return 1
                end

                -- Create rules
                set @RULEID = null

                exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTMEMBERSHIPMAILINGTEMPLATERULE]
                    @RULEID output,
                    @CHANGEAGENTID,    
                    @ID,            --@MEMBERSHIPMAILINGTEMPLATEID
                    @SEGMENTID,     --@SEGMENTID
                    '',             --@CODEID
                    '',             --@TESTSEGMENTCODE
                    @MAILPACKAGEID, --@PACKAGEID
                    '',             --@PACKAGECODE
                    0,              --@RESPONSERATE
                    0,              --@GIFTAMOUNT
                    null,           --@ASKLADDERID
                    1,              --@OVERRIDEADDRESSPROCESSING
                    1,              --@USEADDRESSPROCESSING
                    '12825E0C-DFC4-4C1A-A512-E26194EB6237',           --@ADDRESSPROCESSINGOPTIONID
                    0,              --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
                    @CURRENTDATE,   --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
                    '4AFC6309-E26A-4012-95C8-8A59EE751EE5',           --@NAMEFORMATPARAMETERID
                    null,           --@CODEVALUEID
                    null,           --@PACKAGECODEVALUEID
                    null,           --@TESTSEGMENTCODEVALUEID
                    '',             --@CHANNELSOURCECODE
                    null            --@CHANNELSOURCECODEVALUEID

                if @RULEID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATERULE', 13, 1)
                    return 1
                end

            end

            if @EMAILPACKAGEID is not null
                begin
                    if @MAILPACKAGEID is not null
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEEMAILIDSETREGISTERID) as SELECTIONS
                                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)
                    else
                        set @SELECTIONS = (select SELECTIONID from (select @IDSETREGISTERID as SELECTIONID
                                        union select @MAILINGPREFERENCEBOTHEXCEPTMAILIDSETREGISTERID) as SELECTIONS
                           for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64)


                      -- Create segment
                      set @SEGMENTID = newid()

                      set @SEGMENTNAME = @NAME + ' - ' + case @TIMETOEXPIRATION 
                          when 0 then '3 months before expiration'
                          when 1 then '2 months before expiration'
                          when 2 then '1 month before expiration'
                          when 3 then 'Month of expiration'
                          when 4 then '1 month after expiration'
                          when 5 then '2 months after expiration'
                          when 6 then '3 months after expiration'
                      end + ' (email)'

                if exists (select ID from dbo.MKTSEGMENT 
                            where NAME = @SEGMENTNAME)
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
                    return 1
                end

                      exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTMEMBERSHIP]
                            @SEGMENTID output,
                            @CHANGEAGENTID,    
                            @QUERYVIEWCATALOGID,
                            @SEGMENTNAME,
                            '',
                            '',
                            @SELECTIONS,
                            null,
                            null,
                            null

                if @SEGMENTID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATESEGMENT', 13, 1)
                    return 1
                end

                -- Create rules
                set @RULEID = null

                exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTMEMBERSHIPMAILINGTEMPLATERULE]
                    @RULEID output,
                    @CHANGEAGENTID,    
                    @ID,            --@MEMBERSHIPMAILINGTEMPLATEID
                    @SEGMENTID,     --@SEGMENTID
                    '',             --@CODEID
                    '',             --@TESTSEGMENTCODE
                    @EMAILPACKAGEID,--@PACKAGEID
                    '',             --@PACKAGECODE
                    0,              --@RESPONSERATE
                    0,              --@GIFTAMOUNT
                    null,           --@ASKLADDERID
                    1,              --@OVERRIDEADDRESSPROCESSING
                    1,              --@USEADDRESSPROCESSING
                    '12825E0C-DFC4-4C1A-A512-E26194EB6237',           --@ADDRESSPROCESSINGOPTIONID
                    0,              --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
                    @CURRENTDATE,   --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
                    '4AFC6309-E26A-4012-95C8-8A59EE751EE5',           --@NAMEFORMATPARAMETERID
                    null,           --@CODEVALUEID
                    null,           --@PACKAGECODEVALUEID
                    null,           --@TESTSEGMENTCODEVALUEID
                    '',             --@CHANNELSOURCECODE
                    null            --@CHANNELSOURCECODEVALUEID  

                if @RULEID is null
                begin
                    raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATERULE', 13, 1)
                    return 1
                end

                end

        end

        fetch next from PACKAGE into @SELECTED, @TIMETOEXPIRATION, @MAILPACKAGEID, @EMAILPACKAGEID
    end
    close PACKAGE
    deallocate PACKAGE

    -- 3. Create universe if not all the membership program levels are selected
    if exists (select T.item.value('(ID)[1]','uniqueidentifier')
                from @MEMBERSHIPLEVELS.nodes('/MEMBERSHIPLEVELS/ITEM') T(item)
                where T.item.value('(SELECTED)[1]','bit') = 0)
    begin
        declare LEVELS cursor for
            select T.item.value('(ID)[1]','uniqueidentifier'), T.item.value('(NAME)[1]','nvarchar(50)')
            from @MEMBERSHIPLEVELS.nodes('/MEMBERSHIPLEVELS/ITEM') T(item)
            where T.item.value('(SELECTED)[1]','bit') = 1
        open LEVELS
        fetch next from LEVELS into @LEVELID, @LEVELNAME
        while @@fetch_status = 0
        begin
            -- 3.1 Create smart query selections
            set @SMARTQUERYNAME = null

                set @SMARTQUERYNAME = @NAME + ' - ' + @LEVELNAME + ' level'

            if exists (select ID from dbo.SMARTQUERYINSTANCE 
                        where NAME = @SMARTQUERYNAME)
            begin
                raiserror('ERR_MEMBERSHIPRENEWALEFFORT_DUPLICATENAME', 13, 1)
                return 1
            end

                set @SMARTQUERYINSTANCEID = newid()

                set @DATAFORMITEMFILTERXML = '
                    <DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
                      <Values>
                        <fv ID="TIERCODEID" />
                        <fv ID="MEMBERSHIPLEVELID">
                          <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @LEVELID) + '</Value>
                        </fv>
                        <fv ID="STATUS" />
                        <fv ID="MEMBERSHIPLEVELTYPECODEID" />
                        <fv ID="MEMBERSHIPPROGRAMID">
                          <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + '</Value>
                        </fv>
                        <fv ID="CHECKEXPIRATIONDATE">
                          <Value xsi:type="xsd:boolean">false</Value>
                        </fv>
                        <fv ID="MONTHSTOEXPIRATION" />
                      </Values>
                    </DataFormItem>
                '

                set @TVFPARAMETERVALUES = 'N''' + convert(nvarchar(50), @MEMBERSHIPPROGRAMID) + ''' /*@MEMBERSHIPPROGRAMID*/,
                                            ''' + convert(nvarchar(50), @LEVELID) + ''' /*@MEMBERSHIPLEVELID*/,
                                            null /*@STATUS*/,
                                            null /*@MEMBERSHIPLEVELTYPECODEID*/,
                                            null /*@TIERCODEID*/,
                                            0 /*@CHECKEXPIRATIONDATE*/,
                                            null /*@MONTHSTOEXPIRATION*/,
                                            ''' + convert(nvarchar(50), @CURRENTAPPUSERID) + ''' /*@CURRENTAPPUSERID*/,
                                            2147483647 /*@MAXROWS*/
                '

                exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATE] 
                    @SMARTQUERYINSTANCEID,  --@ID
                    @SMARTQUERYCATALOGID,   --@SMARTQUERYCATALOGID
                    @SMARTQUERYNAME,        --@NAME
                    @SMARTQUERYNAME,        --@DESCRIPTION
                    null,                   --@QUERYCATEGORYCODEID
                    null,                   --@DATAFORMINSTANCEID
                    @DATAFORMITEMFILTERXML, --@DATAFORMITEMFILTERXML
                    1,                      --@OTHERSCANMODIFY
                    @CURRENTAPPUSERID,      --@APPUSERID
                    @CHANGEAGENTID,         --@CHANGEAGENTID
                    @SITEID,                   --@SITEID
                    0                       --@MOBILIZE

                -- Create table for static selection
                exec [dbo].[USP_SMARTQUERYINSTANCE_CREATESTATICTABLE]
                    @SMARTQUERYINSTANCEID

                -- Insert static selection table
                select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
                    inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
                where SMARTQUERYINSTANCE.ID = @SMARTQUERYINSTANCEID;

                set @STATICTABLE = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@SMARTQUERYINSTANCEID);

                exec ('insert into ' + @STATICTABLE +
                        ' select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from dbo.' + @TVFNAME + '(' + @TVFPARAMETERVALUES + ')')

                set @IDSETREGISTERID = null

                exec [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
                    @SMARTQUERYINSTANCEID,
                    @TVFNAME,
                    @TVFPARAMETERVALUES,
                    1,
                    1,
                    null,
                    @CHANGEAGENTID,
                    @IDSETREGISTERID output

            if @IDSETREGISTERID is null
            begin
                raiserror('ERR_MEMBERSHIPRENEWALEFFORT_CREATEIDSETREGISTER', 13, 1)
                return 1
            end

      -- Create filter selection in universe
            set @FILTERSELECTION = null
            exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTMEMBERSHIPMAILINGTEMPLATEFILTERSELECTION]
              @FILTERSELECTION output,
              @CHANGEAGENTID,
              @ID,
              1,
              @IDSETREGISTERID

            fetch next from LEVELS into @LEVELID, @LEVELNAME
        end
        close LEVELS
        deallocate LEVELS

    end

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

return 0