USP_COMMUNICATIONS_CREATEORUPDATEMAILING_2

This procedure creates or updates a mailing.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@COMMUNICATIONTYPECODE tinyint IN
@MAILTYPECODE tinyint IN
@MAILINGNAME nvarchar(100) IN
@MAILINGDESCRIPTION nvarchar(100) IN
@MAILDATE datetime IN
@APPEALID uniqueidentifier IN
@ADDRESSPROCESSINGOPTIONID uniqueidentifier IN
@NAMEFORMATPARAMETERID uniqueidentifier IN
@HOUSEHOLDINGTYPECODE tinyint IN
@MAILEXPORTDEFINITIONID uniqueidentifier IN
@EMAILEXPORTDEFINITIONID uniqueidentifier IN
@LETTERS xml IN
@CREATEOUTPUTIDSET bit IN
@OUTPUTIDSETNAME nvarchar(100) IN
@OVERWRITEOUTPUTIDSET bit IN
@PACKAGESITEID uniqueidentifier IN
@SEGMENTATIONMAILTYPECODE tinyint IN
@OPTIONEXCLUDEDSOLICITCODESXML xml IN

Definition

Copy


CREATE procedure dbo.USP_COMMUNICATIONS_CREATEORUPDATEMAILING_2
(
    @SEGMENTATIONID uniqueidentifier output,
    @CURRENTAPPUSERID uniqueidentifier = null,
    @CHANGEAGENTID uniqueidentifier = null,    
    @COMMUNICATIONTYPECODE tinyint = 0,
    @MAILTYPECODE tinyint = 0,    
    @MAILINGNAME nvarchar(100) = '',
    @MAILINGDESCRIPTION nvarchar(100) = '',
    @MAILDATE datetime = null,
    @APPEALID uniqueidentifier = null,        
    @ADDRESSPROCESSINGOPTIONID uniqueidentifier = null,
    @NAMEFORMATPARAMETERID uniqueidentifier = null,
    @HOUSEHOLDINGTYPECODE tinyint = 0,
    @MAILEXPORTDEFINITIONID uniqueidentifier = null,
    @EMAILEXPORTDEFINITIONID uniqueidentifier = null,
    @LETTERS xml = null,
    @CREATEOUTPUTIDSET bit = 0,
    @OUTPUTIDSETNAME nvarchar(100) = '',
    @OVERWRITEOUTPUTIDSET bit = 0,    
    @PACKAGESITEID uniqueidentifier = null, -- if set, overrides the appeal's site

    @SEGMENTATIONMAILTYPECODE tinyint = 0,
    @OPTIONEXCLUDEDSOLICITCODESXML xml = null
)
as
begin

    -- @COMMINICATIONTYPECODE - enum from MKTSegmentation table and CommunicationLetter table

    --        0 - Direct marketing effort

    --        1 - Appeal mailing

    --        2 - Event invitation

    --        3 - Acknowledgement

    --        4 - Reminders


    -- @MAILTYPECODE pertains to the MailTypeCode field in dbo.MAILPREFERENCE for constituent communication preferences

    --        0 - Revenue Acknowledgements

    --        1 - Appeals

    --        2 - Events

    --        3 - General Correspondence

    --        4 - Reminders

    --        5 - Receipts

    --        6 - Planned Gift Acknowledgements

    --        7 - Tribute Acknowledgements

    --        8 - Stewardship

    --        etc...    This code should not need to change as new types are introduced...


    -- @CHANNELCODE                0 - Mail, 1 - Email, 2 - Mail and Email

    -- @CHANNELPREFERENCECODE    0 - Email, 1 - Mail


    set nocount on;

    declare @CURRENTDATE datetime = getDate();

    if @SEGMENTATIONID is null
        set @SEGMENTATIONID = newID();

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

    begin try
        declare @ACTIVE bit;
        declare @APPEALNAME nvarchar(100) = null;
        declare @APPEALDESCRIPTION nvarchar(255) = null;
        declare @SITEID uniqueidentifier;
        declare @SEGMENTATIONACTIVATEPROCESSID uniqueidentifier;
        declare @SEGMENTATIONEXPORTPROCESSID uniqueidentifier;    
        --declare @EXCLUSIONSCHANGED bit;

        declare @OLDEXCLUDEDECEASED as bit;
        declare @OLDEXCLUDEINACTIVE as bit;
        declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE as tinyint = 0;    -- Default = Process seasonal addresses as of today


        if @COMMUNICATIONTYPECODE = 1
            set @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = 1;                -- Process seasonal addresses as of specific date (Mail date)


        select 
            @ACTIVE = [MKTSEGMENTATION].ACTIVE,
            @SEGMENTATIONACTIVATEPROCESSID = [MKTSEGMENTATIONACTIVATEPROCESS].[ID],
            @SEGMENTATIONEXPORTPROCESSID = [MKTSEGMENTATIONEXPORTPROCESS].[ID],
            @OLDEXCLUDEINACTIVE = [BUSINESSPROCESSCOMMPREF].[EXCLUDEINACTIVE]
        from dbo.[MKTSEGMENTATION]
        inner join dbo.[MKTSEGMENTATIONACTIVATEPROCESS] 
            on [MKTSEGMENTATIONACTIVATEPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
        inner join dbo.[MKTSEGMENTATIONEXPORTPROCESS] 
            on [MKTSEGMENTATIONEXPORTPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
        left join dbo.[BUSINESSPROCESSCOMMPREF] 
            on [BUSINESSPROCESSCOMMPREF].[BUSINESSPROCESSPARAMETERSETID] = [MKTSEGMENTATIONACTIVATEPROCESS].[ID]
        where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;

        if @PACKAGESITEID is null -- Retrieve the appeal information...

            select
                @APPEALNAME = [NAME],
                @APPEALDESCRIPTION = [DESCRIPTION],
                @SITEID = [SITEID]
            from 
                dbo.[APPEAL]
            where 
                [ID] = @APPEALID;
        else
            set @SITEID = @PACKAGESITEID;

        -- 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

        -- Create or update the base mailing

        if @COMMUNICATIONTYPECODE = 2 or @COMMUNICATIONTYPECODE = 4
          set @MAILINGNAME = dbo.UFN_MKTSEGMENTATION_GETUNIQUENAME(@SEGMENTATIONID, @MAILINGNAME, default);

        declare @INCLUDEONERECORDPERHOUSEHOLD bit = case @HOUSEHOLDINGTYPECODE when 0 then 1 else 0 end;

        if not exists (select 1 from dbo.MKTSEGMENTATION where ID = @SEGMENTATIONID)
            -- Insert the base mailing...

            insert into dbo.[MKTSEGMENTATION]
            (
                [ID],
                [MAILINGTYPECODE],
                [COMMUNICATIONTYPECODE],
                [NAME],
                [DESCRIPTION],
                [MAILDATE],
                [ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE],
                [ADDRESSPROCESSINGOPTIONSEASONALASOFDATE],
                [SITEID],
                [HOUSEHOLDINGTYPECODE],
                [HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD],
                [HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS],
                [HOUSEHOLDINGONERECORDPERHOUSEHOLD],
                [USEADDRESSPROCESSING],
                [ADDRESSPROCESSINGOPTIONID],
                [NAMEFORMATPARAMETERID],
                [RUNACTIVATEANDEXPORT],
                [CREATEOUTPUTIDSET],
                [OUTPUTIDSETNAME],
                [OVERWRITEOUTPUTIDSET],
                [ADDEDBYID],
                [CHANGEDBYID],
                [DATEADDED],
                [DATECHANGED]
            )
            values
            (
                @SEGMENTATIONID,
                @SEGMENTATIONMAILTYPECODE,
                @COMMUNICATIONTYPECODE,        
                @MAILINGNAME,
                @MAILINGDESCRIPTION,
                @MAILDATE,
                @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
                @MAILDATE,
                @SITEID,
                1,                                                                            -- HOUSEHOLDINGTYPECODE - Individuals and Orgs

                0,                                                                            -- HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD

                1,                                                                            -- HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS

                @INCLUDEONERECORDPERHOUSEHOLD,                                                -- HOUSEHOLDINGONERECORDPERHOUSEHOLD

                1,
                @ADDRESSPROCESSINGOPTIONID,
                @NAMEFORMATPARAMETERID,
                1,                                                                            -- RunActivateAndExport

                @CREATEOUTPUTIDSET,
                @OUTPUTIDSETNAME,
                @OVERWRITEOUTPUTIDSET,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            );

        else
            update dbo.[MKTSEGMENTATION] set
                [NAME] = @MAILINGNAME,
                [DESCRIPTION] = @MAILINGDESCRIPTION,
                [MAILDATE] = @MAILDATE,    
                [ADDRESSPROCESSINGOPTIONSEASONALASOFDATE] = @MAILDATE,
                [SITEID] = @SITEID,
--        --        [HOUSEHOLDINGTYPECODE] = @HOUSEHOLDINGTYPECODE,

--        --        [HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD] = @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD,

--        --        [HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS] = @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS,

                [HOUSEHOLDINGONERECORDPERHOUSEHOLD] = @INCLUDEONERECORDPERHOUSEHOLD,                                -- HOUSEHOLDINGONERECORDPERHOUSEHOLD

                [USEADDRESSPROCESSING] = 1,
                [ADDRESSPROCESSINGOPTIONID] = @ADDRESSPROCESSINGOPTIONID,
                [NAMEFORMATPARAMETERID] = @NAMEFORMATPARAMETERID,
                [CREATEOUTPUTIDSET] = @CREATEOUTPUTIDSET,
                [OUTPUTIDSETNAME] = @OUTPUTIDSETNAME,
                [OVERWRITEOUTPUTIDSET] = @OVERWRITEOUTPUTIDSET,
                [CHANGEDBYID] = @CHANGEAGENTID,
                [DATECHANGED] = @CURRENTDATE
            where 
                [ID] = @SEGMENTATIONID;    

        -- This offers exclusion from entire mailing, not per letter

        -- Save the excluded selections

        --exec dbo.USP_MKTSEGMENTATIONFILTERSELECTION_GETEXCLUDESELECTIONS_UPDATEFROMXML @SEGMENTATIONID, @EXCLUDESELECTIONS, @CHANGEAGENTID, @CURRENTDATE;


        -- Create budget information if it doesn't exist...

        --    Setting the actual values will be handled by the Revenue Calculator

        if not exists(select 1 from dbo.[MKTSEGMENTATIONBUDGET] where [ID] = @SEGMENTATIONID)
            insert into dbo.[MKTSEGMENTATIONBUDGET] 
                ([ID],[BUDGETAMOUNT], [ADDEDBYID], [CHANGEDBYID], [DATEADDED], [DATECHANGED])
            values 
                (@SEGMENTATIONID, 0, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

        -- Add this mailing to the PreActivationProcess table

        if not exists(select 1 from dbo.[MKTMAILINGPREACTIVATIONPROCESS] where [SEGMENTATIONID] = @SEGMENTATIONID)
            insert into dbo.[MKTMAILINGPREACTIVATIONPROCESS]
            (
                [ID],
                [SEGMENTATIONID],
                [ADDEDBYID],
                [CHANGEDBYID],
                [DATEADDED],
                [DATECHANGED]
            ) 
            values
            (
                newid(),
                @SEGMENTATIONID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            );

        -- Add the mailing to the SegmentCalculationProcess table

        if not exists(select 1 from dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS] where [SEGMENTATIONID] = @SEGMENTATIONID)
            exec dbo.[USP_MKTSEGMENTATIONSEGMENTCALCULATEPROCESS_SAVE] @SEGMENTATIONID, @CHANGEAGENTID;

        -- Add the mailing to the SegmentRefreshProcess table 

        --        Appeal Mailings only

        if @COMMUNICATIONTYPECODE = 1
            if not exists(select 1 from dbo.[MKTSEGMENTATIONSEGMENTREFRESHPROCESS] where [SEGMENTATIONID] = @SEGMENTATIONID)
                exec dbo.[USP_MKTSEGMENTATIONSEGMENTREFRESHPROCESS_SAVE] @SEGMENTATIONID, @CHANGEAGENTID;

        -- Add the mailing to the ActivationProcess table...

        --if not exists(select 1 from dbo.[MKTSEGMENTATIONACTIVATEPROCESS] where [SEGMENTATIONID] = @SEGMENTATIONID)

        if @SEGMENTATIONACTIVATEPROCESSID is null
            begin
                exec dbo.[USP_MKTSEGMENTATIONACTIVATEPROCESS_SAVE] @SEGMENTATIONID, @CHANGEAGENTID;

                -- Retrieve the activation process ID

                select
                    @SEGMENTATIONACTIVATEPROCESSID = ID
                from dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
                where SEGMENTATIONID = @SEGMENTATIONID;
            end

        -- Add the effort to the EffortExclusionsProcess table 

        exec dbo.[USP_MKTSEGMENTATION_EFFORTEXCLUSIONSPROCESS_SAVE] @SEGMENTATIONID, @CHANGEAGENTID;

        if not exists(select 1 from dbo.[BUSINESSPROCESSCOMMPREF] where [BUSINESSPROCESSPARAMETERSETID] = @SEGMENTATIONACTIVATEPROCESSID)
            exec dbo.[USP_BUSINESSPROCESSCOMMPREF_ADD]
                null,
                @CHANGEAGENTID,
                '22C3D75C-A956-4BFC-A5FD-4B866BAEF509',
                @SEGMENTATIONACTIVATEPROCESSID,
                0,                                            -- DATETYPECODE - today    

                null,
                1,                                            -- ExcludeDeceased - Always exclude deceased

                0,                                            -- ExcludeInactive - Filter should occur at the letter level

                @OPTIONEXCLUDEDSOLICITCODESXML,                -- Exclusions - Solicit Code Exclusions must happen at the letter level    for appeal mailings        

                @CURRENTAPPUSERID;

        else
            begin            
                --set @EXCLUSIONSCHANGED = dbo.[UFN_MKTSEGMENTATION_COMPARECOMMPREFS](0, null, 1, 1, @EXCLUSIONS, @OLDEXCLUSIONDATETYPECODE, @OLDEXCLUSIONASOFDATE, @OLDEXCLUDEDECEASED, @OLDEXCLUDEINACTIVE, @OLDEXCLUSIONS);


                --if @EXCLUSIONSCHANGED = 1

                    exec dbo.[USP_BUSINESSPROCESSCOMMPREF_UPDATE]
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @BUSINESSPROCESSCATALOGID = '116332AF-BB79-4608-9709-4203BD2BA318',
                        @BUSINESSPROCESSPARAMETERSETID = @SEGMENTATIONACTIVATEPROCESSID,
                        @EXCLUSIONDATETYPECODE = 0,
                        @EXCLUSIONASOFDATE = null,
                        @EXCLUDEDECEASED = 1,
                        @EXCLUDEINACTIVE = 1,
                        @EXCLUSIONS = @OPTIONEXCLUDEDSOLICITCODESXML,
                        @CURRENTAPPUSERID = @CURRENTAPPUSERID;

            end

        -- Create or update the mailing export process...        

        if @SEGMENTATIONEXPORTPROCESSID is null
            begin
                set @SEGMENTATIONEXPORTPROCESSID = newid();

                insert into dbo.[MKTSEGMENTATIONEXPORTPROCESS] (
                    [ID],
                    [SEGMENTATIONID],
                    [DESCRIPTION],
                    [MAILEXPORTDEFINITIONID],
                    [EMAILEXPORTDEFINITIONID],
                    [PHONEEXPORTDEFINITIONID],
                    [ADDEDBYID],
                    [CHANGEDBYID],
                    [DATEADDED],
                    [DATECHANGED]
                ) values (
                    @SEGMENTATIONEXPORTPROCESSID,
                    @SEGMENTATIONID,
                    '',
                    @MAILEXPORTDEFINITIONID,                                
                    @EMAILEXPORTDEFINITIONID,                    
                    null,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                )
            end

        exec dbo.[USP_MKTSEGMENTATIONSEGMENTCACHEADDRESSES_CREATETABLE] @SEGMENTATIONID;

        -- Save the activation source's information

        --    If the appeal fields do not apply to a particular mailing, 

        --        simply send in null for the Appeal field arguments

        exec dbo.[USP_MKTSEGMENTATIONACTIVATE_SAVEFIELD] @SEGMENTATIONID, @CHANGEAGENTID, 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0', null, null, @APPEALID, @APPEALNAME, @APPEALDESCRIPTION;

        exec dbo.USP_COMMUNICATIONS_CREATEORUPDATE_LETTERS @SEGMENTATIONID, @CURRENTAPPUSERID, @CHANGEAGENTID, @MAILTYPECODE, @MAILEXPORTDEFINITIONID, @EMAILEXPORTDEFINITIONID, @LETTERS;

    end try

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

    return 0;
end