USP_DATAFORMTEMPLATE_EDIT_APPEALMAILINGSETUPLETTER

Edit an appeal mailing setup letter.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CONSTITUENTRECORDTYPEID uniqueidentifier IN
@NAME nvarchar(100) IN
@CHANNELCODE tinyint IN
@MAILEXPORTDEFINITIONID uniqueidentifier IN
@MAILCONTENTHTML nvarchar(max) IN
@EMAILEXPORTDEFINITIONID uniqueidentifier IN
@NETCOMMUNITYTEMPLATEID int IN
@NETCOMMUNITYDATASOURCEID int IN
@EMAILCONTENTHTML nvarchar(max) IN
@SENDTOOPTIONCODE tinyint IN
@CONSTITUENTINCLUDECODE tinyint IN
@CONSIDERREVENUEHISTORY bit IN
@REVENUECRITERIACODE tinyint IN
@LOWREVENUEAMOUNT money IN
@HIGHREVENUEAMOUNT money IN
@SELECTIONS xml IN
@CHANNELPREFERENCECODE tinyint IN
@MAILCOST money IN
@EMAILCOST money IN
@MARGINTOP decimal(18, 0) IN
@MARGINBOTTOM decimal(18, 0) IN
@MARGINLEFT decimal(18, 0) IN
@MARGINRIGHT decimal(18, 0) IN
@PAPERSIZECODE tinyint IN
@PAPERWIDTH decimal(18, 0) IN
@PAPERHEIGHT decimal(18, 0) IN
@MKTASKLADDERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_APPEALMAILINGSETUPLETTER
(
    @ID uniqueidentifier = null output,
    @CURRENTAPPUSERID uniqueidentifier = null,
    @CHANGEAGENTID uniqueidentifier = null,
    @CONSTITUENTRECORDTYPEID uniqueidentifier,
    @NAME nvarchar(100),
    @CHANNELCODE tinyint,
    @MAILEXPORTDEFINITIONID uniqueidentifier,
    @MAILCONTENTHTML nvarchar(max),
    @EMAILEXPORTDEFINITIONID uniqueidentifier,
    @NETCOMMUNITYTEMPLATEID int,
    @NETCOMMUNITYDATASOURCEID int,
    @EMAILCONTENTHTML nvarchar(max),
    @SENDTOOPTIONCODE tinyint,
    @CONSTITUENTINCLUDECODE tinyint,
    @CONSIDERREVENUEHISTORY bit,
    @REVENUECRITERIACODE tinyint,
    @LOWREVENUEAMOUNT money,
    @HIGHREVENUEAMOUNT money,
    @SELECTIONS xml,
    @CHANNELPREFERENCECODE tinyint,
    @MAILCOST money,
    @EMAILCOST money,
    @MARGINTOP decimal,
    @MARGINBOTTOM decimal,
    @MARGINLEFT decimal,
    @MARGINRIGHT decimal,
    @PAPERSIZECODE tinyint,
    @PAPERWIDTH decimal,
    @PAPERHEIGHT decimal,
    @MKTASKLADDERID uniqueidentifier
)
as
begin    
    declare @CURRENTDATE datetime = getDate();
    declare @SEGMENTATIONID uniqueidentifier;
    declare @ACTIVE bit;
    declare @APPEALID uniqueidentifier;
    declare @CANNEDSELECTIONIDSETREGISTERID uniqueidentifier;
    declare @OLDSENDTOOPTIONCODE tinyint;
    declare @OLDCONSTITUENTINCLUDECODE tinyint;
    declare @OLDCONSIDERREVENUEHISTORY bit;
    declare @OLDREVENUECRITERIACODE tinyint;
    declare @OLDLOWREVENUEAMOUNT money;
    declare @OLDHIGHREVENUEAMOUNT money;
    declare @OLDMKTASKLADDERID uniqueidentifier;
    declare @MAILPACKAGEID uniqueidentifier;
    declare @MAILSEGMENTID uniqueidentifier;
    declare @MAILLETTERCODEID uniqueidentifier;
    declare @EMAILPACKAGEID uniqueidentifier;
    declare @EMAILSEGMENTID uniqueidentifier;
    declare @EMAILLETTERCODEID uniqueidentifier;
    declare @SEGMENTATIONSEGMENTID uniqueidentifier;
    declare @EXCLUDECONSTITSBASEDONPREFERENCE bit;
    declare @INCLUDECONSTITSWITHOUTPREFERENCE bit;
    declare @LETTERNAME nvarchar(100);
    declare @LETTERDESCRIPTION nvarchar(255);
    declare @PACKAGENAME nvarchar(100);
    declare @PACKAGEDESCRIPTION nvarchar(255);

    begin try

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

        select
            @SEGMENTATIONID = APPEALMAILINGSETUPLETTER.APPEALMAILINGSETUPID,
            @ACTIVE = coalesce(MKTSEGMENTATION.ACTIVE, 0),
            @APPEALID = APPEALMAILING.APPEALID,
            @CANNEDSELECTIONIDSETREGISTERID = APPEALMAILINGSETUPLETTER.CANNEDSELECTIONIDSETREGISTERID,
            @MAILPACKAGEID = APPEALMAILINGSETUPLETTER.MAILPACKAGEID,
            @MAILSEGMENTID = APPEALMAILINGSETUPLETTER.MAILSEGMENTID,
            @MAILLETTERCODEID = MAILPACKAGE.LETTERCODEID,
            @EMAILPACKAGEID = APPEALMAILINGSETUPLETTER.EMAILPACKAGEID,
            @EMAILSEGMENTID = APPEALMAILINGSETUPLETTER.EMAILSEGMENTID,
            @EMAILLETTERCODEID = EMAILPACKAGE.LETTERCODEID,
            @OLDSENDTOOPTIONCODE = APPEALMAILINGSETUPLETTER.SENDTOOPTIONCODE,
            @OLDCONSTITUENTINCLUDECODE = APPEALMAILINGSETUPLETTER.CONSTITUENTINCLUDECODE,
            @OLDCONSIDERREVENUEHISTORY = APPEALMAILINGSETUPLETTER.CONSIDERREVENUEHISTORY,
            @OLDLOWREVENUEAMOUNT = APPEALMAILINGSETUPLETTER.LOWREVENUEAMOUNT,
            @OLDHIGHREVENUEAMOUNT = APPEALMAILINGSETUPLETTER.HIGHREVENUEAMOUNT,
            @OLDMKTASKLADDERID = APPEALMAILINGSETUPLETTER.MKTASKLADDERID    
        from dbo.APPEALMAILINGSETUPLETTER
        left join dbo.APPEALMAILING
            on APPEALMAILINGSETUPLETTER.APPEALMAILINGSETUPID = APPEALMAILING.ID
        left join dbo.MKTSEGMENTATION
            on APPEALMAILING.ID = MKTSEGMENTATION.ID
        left join dbo.MKTPACKAGE MAILPACKAGE
            on APPEALMAILINGSETUPLETTER.MAILPACKAGEID = MAILPACKAGE.ID
        left join dbo.MKTPACKAGE EMAILPACKAGE
            on APPEALMAILINGSETUPLETTER.EMAILPACKAGEID = EMAILPACKAGE.ID

        where APPEALMAILINGSETUPLETTER.ID = @ID;

        -- Rollback active mailings to be re-activated

        if @ACTIVE = 1 or dbo.UFN_MKTSEGMENTATION_HASACTIVESEGMENTS(@SEGMENTATIONID) = 1
            begin
                declare @DELETEAPPEALINFO bit = case when @APPEALID is null then 0 else 1 end;

                exec dbo.USP_MKTSEGMENTATIONACTIVATE_ROLLBACK @SEGMENTATIONID, @CHANGEAGENTID, @DELETEAPPEALINFO, 1;
            end

        -- Delete segment and segmentation segments for Channels no longer included in the mailing

        if @CHANNELCODE = 1 and @MAILPACKAGEID is not null and @MAILSEGMENTID is not null
            begin        
                set @SEGMENTATIONSEGMENTID = null;

                select
                    @SEGMENTATIONSEGMENTID = ID
                from dbo.MKTSEGMENTATIONSEGMENT
                where SEGMENTID = @MAILSEGMENTID
                    and PACKAGEID = @MAILPACKAGEID;

                update dbo.APPEALMAILINGSETUPLETTER set
                    MAILPACKAGEID = null,
                    MAILSEGMENTID = null
                where ID = @ID;

                if @SEGMENTATIONSEGMENTID is not null
                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_DELETE @SEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                update dbo.MKTSEGMENT set
                    ISSYSTEM = 0,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @MAILSEGMENTID;
                exec dbo.USP_MKTSEGMENT_DELETE @MAILSEGMENTID, @CHANGEAGENTID, @CURRENTAPPUSERID;

                update dbo.MKTPACKAGE set
                    ISSYSTEM = 0,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @MAILPACKAGEID;
                exec dbo.USP_MKTPACKAGE_DELETE @MAILPACKAGEID, @CHANGEAGENTID;

                update dbo.LETTERCODE set
                    ISSYSTEM = 0,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @MAILLETTERCODEID;
                exec dbo.USP_LETTERCODE_DELETE @MAILLETTERCODEID, @CHANGEAGENTID;

                set @MAILSEGMENTID = null;
                set @MAILPACKAGEID = null;
                set @MAILLETTERCODEID = null;
            end

        if @CHANNELCODE = 2 and @EMAILPACKAGEID is not null and @EMAILSEGMENTID is not null
            begin    
                set @SEGMENTATIONSEGMENTID = null;

                select
                    @SEGMENTATIONSEGMENTID = ID
                from dbo.MKTSEGMENTATIONSEGMENT
                where SEGMENTID = @EMAILSEGMENTID;

                update dbo.APPEALMAILINGSETUPLETTER set
                    EMAILPACKAGEID = null,
                    EMAILSEGMENTID = null
                where ID = @ID;

                if @SEGMENTATIONSEGMENTID is not null
                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_DELETE @SEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                update dbo.MKTSEGMENT set
                    ISSYSTEM = 0,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @EMAILSEGMENTID;
                exec dbo.USP_MKTSEGMENT_DELETE @EMAILSEGMENTID, @CHANGEAGENTID, @CURRENTAPPUSERID;

                update dbo.MKTPACKAGE set
                    ISSYSTEM = 0,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @EMAILPACKAGEID;
                exec dbo.USP_MKTPACKAGE_DELETE @EMAILPACKAGEID, @CHANGEAGENTID;

                update dbo.LETTERCODE set
                    ISSYSTEM = 0,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @EMAILLETTERCODEID;
                exec dbo.USP_LETTERCODE_DELETE @EMAILLETTERCODEID, @CHANGEAGENTID;

                set @EMAILPACKAGEID = null;
                set @EMAILSEGMENTID = null;
                set @EMAILLETTERCODEID = null;
            end

        -- Using canned include options

        if @SENDTOOPTIONCODE = 0 
            begin

                if @SENDTOOPTIONCODE <> @OLDSENDTOOPTIONCODE
                    or @CONSTITUENTINCLUDECODE <> @OLDCONSTITUENTINCLUDECODE
                    or @CONSIDERREVENUEHISTORY <> @OLDCONSIDERREVENUEHISTORY
                    or @REVENUECRITERIACODE <> @OLDREVENUECRITERIACODE
                    or @LOWREVENUEAMOUNT <> @OLDLOWREVENUEAMOUNT
                    or @HIGHREVENUEAMOUNT <> @OLDHIGHREVENUEAMOUNT
                    or @CANNEDSELECTIONIDSETREGISTERID is null

                    exec dbo.USP_APPEALMAILINGSETUPLETTER_CREATEORUPDATECANNEDSELECTION
                        @CANNEDSELECTIONIDSETREGISTERID output,
                        @CURRENTAPPUSERID,
                        @CHANGEAGENTID,
                        @CONSTITUENTRECORDTYPEID,
                        @CONSTITUENTINCLUDECODE,
                        @CONSIDERREVENUEHISTORY,
                        @REVENUECRITERIACODE,
                        @LOWREVENUEAMOUNT,
                        @HIGHREVENUEAMOUNT;

                set @SELECTIONS = (
                    select
                        --newID() as ID,

                        @CANNEDSELECTIONIDSETREGISTERID as SELECTIONID,
                        'Canned Options Selection' as NAME
                    for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64
                );
            end    
        else
            if @CANNEDSELECTIONIDSETREGISTERID is not null
                begin                    
                    update dbo.APPEALMAILINGSETUPLETTER set
                        CANNEDSELECTIONIDSETREGISTERID = null
                    where ID = @ID;

                    -- Delete the segment selection records associated with the IDSetRegister

                    delete dbo.MKTSEGMENTSELECTION where SEGMENTID in (@EMAILSEGMENTID, @MAILSEGMENTID) and SELECTIONID = @CANNEDSELECTIONIDSETREGISTERID;

                    exec dbo.[USP_IDSETREGISTER_DELETEBYID_WITHCHANGEAGENTID] @CANNEDSELECTIONIDSETREGISTERID, @CHANGEAGENTID;

                    set @CANNEDSELECTIONIDSETREGISTERID = null;
                end

        set @EXCLUDECONSTITSBASEDONPREFERENCE =
            case @CHANNELCODE 
                when 0 then 1 
                else 0 
            end;

        -- If sending email or both

        if @CHANNELCODE <> 2
            begin            
                set @LETTERNAME = dbo.UFN_MKTPACKAGE_GETUNIQUENAME(left('Email Letter: ' + @NAME, 100));
                set @LETTERDESCRIPTION = 'Automatically generated email letter for ''' + @NAME + ''' appeal mailing letter'

                -- JNA Hack passing both new and old export definition ID's, which in my case are the same

                if @EMAILLETTERCODEID is null
                    exec dbo.USP_DATAFORMTEMPLATE_ADD_MKTLETTERCODE @EMAILLETTERCODEID output, 1, @CHANGEAGENTID, @LETTERNAME, @LETTERDESCRIPTION, @EMAILEXPORTDEFINITIONID, 0, '', null, @EMAILEXPORTDEFINITIONID;
                else
                    exec dbo.USP_DATAFORMTEMPLATE_EDIT_MKTLETTERCODE @EMAILLETTERCODEID, @CHANGEAGENTID, @LETTERNAME, @LETTERDESCRIPTION, null, '', '', @EMAILEXPORTDEFINITIONID, 0, 0, @EMAILEXPORTDEFINITIONID;

                -- Associate the email template with the LETTERCODE

                update dbo.LETTERCODE set
                    NETCOMMUNITYTEMPLATEID = @NETCOMMUNITYTEMPLATEID,
                    NETCOMMUNITYDATASOURCEID = @NETCOMMUNITYDATASOURCEID,
                    ISSYSTEM = 1,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @EMAILLETTERCODEID;

                -- Save the package

                set @PACKAGENAME = dbo.UFN_MKTPACKAGE_GETUNIQUENAME(left('Email Package: ' + @NAME, 100));
                set @PACKAGEDESCRIPTION = 'Automatically generated email package for ''' + @NAME + ''' appeal mailing letter';

                exec dbo.USP_MKTPACKAGE_EMAIL_SAVE @EMAILPACKAGEID output, @CHANGEAGENTID, @PACKAGENAME, @PACKAGEDESCRIPTION, '', null, @EMAILCOST, 0, null, @NETCOMMUNITYTEMPLATEID, @NETCOMMUNITYDATASOURCEID, @EMAILEXPORTDEFINITIONID, null, '', null, @CURRENTAPPUSERID;

                -- Associate the email template with the package

                update dbo.MKTPACKAGE set
                    LETTERCODEID = @EMAILLETTERCODEID,
                    NETCOMMUNITYTEMPLATEID = @NETCOMMUNITYTEMPLATEID,
                    NETCOMMUNITYDATASOURCEID = @NETCOMMUNITYDATASOURCEID,
                    ISSYSTEM = 1,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @EMAILPACKAGEID;

                -- Create the segment

                set @INCLUDECONSTITSWITHOUTPREFERENCE =
                        case @CHANNELCODE
                            when 0 then
                                case @CHANNELPREFERENCECODE
                                    when 0 then 1
                                    else 0
                                end
                            when 1 then 1
                            else 0
                        end;

                exec dbo.[USP_COMMUNICATIONS_CREATEORUPDATESEGMENT_2]
                    @EMAILSEGMENTID output,
                    @CURRENTAPPUSERID,
                    @CHANGEAGENTID,
                    @NAME,
                    @SELECTIONS,
                    1,                                                        -- MailTypeCode 1 - Appeals

                    1,                                                        -- DeliveryMethodCode 1 - Email

                    @EXCLUDECONSTITSBASEDONPREFERENCE,
                    @INCLUDECONSTITSWITHOUTPREFERENCE;
            end

        -- If sending mail or both

        if @CHANNELCODE <> 1
            begin
                set @LETTERNAME = dbo.UFN_MKTPACKAGE_GETUNIQUENAME(left('Mail Letter: ' + @NAME, 100));
                set @LETTERDESCRIPTION = 'Automatically generated mail letter for ''' + @NAME + ''' appeal mailing letter';

                -- JNA Hack passing null for old export definition ID

                if @MAILLETTERCODEID is null
                    exec dbo.USP_DATAFORMTEMPLATE_ADD_MKTLETTERCODE @MAILLETTERCODEID output, 1, @CHANGEAGENTID, @LETTERNAME, @LETTERDESCRIPTION, null, 1, '', null, @MAILEXPORTDEFINITIONID;
                else
                    exec dbo.USP_DATAFORMTEMPLATE_EDIT_MKTLETTERCODE @MAILLETTERCODEID, @CHANGEAGENTID, @LETTERNAME, @LETTERDESCRIPTION, null, '', '', null, 0, 0, @MAILEXPORTDEFINITIONID;

                update dbo.LETTERCODE set
                    HTMLTEMPLATE = @MAILCONTENTHTML,
                    ISSYSTEM = 1,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @MAILLETTERCODEID;

                --Save the package

                set @PACKAGENAME = dbo.UFN_MKTPACKAGE_GETUNIQUENAME(left('Mail Package: ' + @LETTERNAME, 100));
                set @PACKAGEDESCRIPTION = 'Automatically generated mail package for ''' + @NAME + ''' appeal mailing letter';

                if @MAILPACKAGEID is null
                    exec dbo.USP_DATAFORMTEMPLATE_ADD_MKTPACKAGE_MAIL @MAILPACKAGEID output, @CHANGEAGENTID, @PACKAGENAME, @PACKAGEDESCRIPTION, '', @MAILCOST, 0, null, null, @MAILLETTERCODEID, @MAILEXPORTDEFINITIONID, '255', null, '', null, @CURRENTAPPUSERID;
                else
                    exec dbo.USP_DATAFORMTEMPLATE_EDIT_MKTPACKAGE_MAIL @MAILPACKAGEID, @CHANGEAGENTID, @PACKAGENAME, @PACKAGEDESCRIPTION, '', null, @MAILCOST, 0, null, @MAILLETTERCODEID, @MAILEXPORTDEFINITIONID, null, '', null;

                update dbo.MKTPACKAGE set
                    ISSYSTEM = 1,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @MAILPACKAGEID;

                set @INCLUDECONSTITSWITHOUTPREFERENCE = 
                        case @CHANNELCODE 
                            when 0 then 
                                case @CHANNELPREFERENCECODE 
                                    when 1 then 1 
                                    else 0 
                                end 
                            when 2 then 1 
                            else 0 
                        end;

                -- Create or update the segment

                exec dbo.[USP_COMMUNICATIONS_CREATEORUPDATESEGMENT_2]
                    @MAILSEGMENTID output,
                    @CURRENTAPPUSERID,
                    @CHANGEAGENTID,
                    @NAME,
                    @SELECTIONS,
                    1,                                                    -- MailTypeCode 1 - Appeals

                    0,                                                    -- DeliveryMethodCode 0 - Mail

                    @EXCLUDECONSTITSBASEDONPREFERENCE,
                    @INCLUDECONSTITSWITHOUTPREFERENCE;                                
            end

        update dbo.APPEALMAILINGSETUPLETTER set
            NAME = @NAME,
            CHANNELCODE = @CHANNELCODE,
            CHANNELPREFERENCECODE = @CHANNELPREFERENCECODE,
            SENDTOOPTIONCODE = @SENDTOOPTIONCODE
            CONSTITUENTINCLUDECODE = @CONSTITUENTINCLUDECODE
            CONSIDERREVENUEHISTORY = @CONSIDERREVENUEHISTORY
            REVENUECRITERIACODE = @REVENUECRITERIACODE
            LOWREVENUEAMOUNT = @LOWREVENUEAMOUNT
            HIGHREVENUEAMOUNT = @HIGHREVENUEAMOUNT
            MAILPACKAGEID = @MAILPACKAGEID
            EMAILPACKAGEID = @EMAILPACKAGEID
            MAILSEGMENTID = @MAILSEGMENTID
            EMAILSEGMENTID = @EMAILSEGMENTID
            CANNEDSELECTIONIDSETREGISTERID = @CANNEDSELECTIONIDSETREGISTERID,
            MARGINTOP = @MARGINTOP
            MARGINBOTTOM = @MARGINBOTTOM
            MARGINLEFT = @MARGINLEFT
            MARGINRIGHT = @MARGINRIGHT
            PAPERSIZECODE = @PAPERSIZECODE
            PAPERWIDTH = @PAPERWIDTH
            PAPERHEIGHT = @PAPERHEIGHT,
            MKTASKLADDERID = @MKTASKLADDERID,
            CHANGEDBYID = @CHANGEAGENTID
            DATECHANGED = @CURRENTDATE

        where ID = @ID;

        -- if the letter has already been linked to an appeal mailing

        --    update the segmentation segments for the mailing

        if @SEGMENTATIONID is not null
            if (@MKTASKLADDERID is null and @OLDMKTASKLADDERID is not null)
                or (@MKTASKLADDERID is not null and @OLDMKTASKLADDERID is null)
                or (@MKTASKLADDERID is not null and @OLDMKTASKLADDERID is not null and @MKTASKLADDERID <> @OLDMKTASKLADDERID)
                update dbo.MKTSEGMENTATIONSEGMENT set
                    ASKLADDERID = @MKTASKLADDERID
                where SEGMENTATIONID = @SEGMENTATIONID
                    and (
                        (PACKAGEID = @MAILPACKAGEID and SEGMENTID = @MAILSEGMENTID)
                        or (PACKAGEID = @EMAILPACKAGEID and SEGMENTID = @EMAILSEGMENTID)
                    )

    end try

    begin catch
        exec dbo.[USP_RAISE_ERROR];
        return 1;
    end catch

    return 0;

end