USP_APPEALMAILING_COPY

Executes the "Appeal Mailing: Copy" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT Input parameter indicating the ID of the record being updated.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the update.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy


CREATE procedure dbo.[USP_APPEALMAILING_COPY]
(
  @ID uniqueidentifier output,
  @CHANGEAGENTID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier = null
)
as
  set nocount on;

  declare @NEWAPPEALMAILINGID uniqueidentifier;
  declare @APPEALID uniqueidentifier;
  declare @NAME nvarchar(100);
  declare @DESCRIPTION nvarchar(255);
  declare @MAILDATE datetime;
  declare @FIXEDCOST money;
  declare @MKTPACKAGEID uniqueidentifier;
  declare @IDSETREGISTERID uniqueidentifier;
  declare @HOUSEHOLDINGTYPECODE tinyint;
  declare @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD bit;
  declare @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS bit;
  declare @HOUSEHOLDINGONERECORDPERHOUSEHOLD bit;
  declare @EXCLUSIONDATETYPECODE tinyint;
  declare @EXCLUSIONASOFDATE datetime;
  declare @EXCLUDEDECEASED bit;
  declare @EXCLUDEINACTIVE bit;
  declare @EXCLUSIONS xml;
  declare @USEADDRESSPROCESSING bit;
  declare @ADDRESSPROCESSINGOPTIONID uniqueidentifier;
  declare @NAMEFORMATPARAMETERID uniqueidentifier;
  declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint;
  declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime;
  declare @LABELFILENAME nvarchar(255);
  declare @LABELFILE varbinary(max);
  declare @CREATEOUTPUTIDSET bit;
  declare @OUTPUTIDSETNAME nvarchar(100);
  declare @OVERWRITEOUTPUTIDSET bit;
  declare @ISHYBRID bit;
  declare @MAILINGBUDGET money;
  declare @SELECTEDSELECTIONS xml;
  declare @EXCLUDEDSELECTIONS xml;
  declare @CHANNELCODE tinyint;
  declare @CHANNELPREFERENCECODE tinyint;
  declare @MAILPACKAGEID uniqueidentifier;
  declare @EMAILPACKAGEID uniqueidentifier;
  declare @BASECURRENCYID uniqueidentifier;
  declare @MKTASKLADDERID uniqueidentifier;

  declare @LETTERS xml;
  declare @MAILEXPORTDEFINITIONID uniqueidentifier;
  declare @EMAILEXPORTDEFINITIONID uniqueidentifier;

  begin try
    set @NEWAPPEALMAILINGID = newid();

    --Copy KPIs from existing mailing

    declare @ACTIVATIONKPIS xml;
    declare @KPITABLE as table
    (
      [KPICATALOGID] uniqueidentifier,
      [SELECTED] bit,
      [NAME] nvarchar(255),
      [GOALTYPECODE] tinyint,
      [DEFAULT] bit,
      [LOCKED] bit,
      [TEMPLATETYPECODE] tinyint
    );

    insert into @KPITABLE
      exec dbo.[USP_MKTSEGMENTATIONACTIVATEKPI_GETFIELDS] @ID, 1;

    set @ACTIVATIONKPIS = 
      (select 
         [KPICATALOGID],
         [SELECTED],
         [NAME],
         [GOALTYPECODE],
         [DEFAULT]
       from @KPITABLE 
       where [SELECTED] = 1
       for xml raw('ITEM'), type, elements, root('ACTIVATIONKPIS'), binary base64);

    --Grab the source appeal mailing's information...

    select
      @APPEALID = [APPEALMAILING].[APPEALID],
      @NAME = dbo.[UFN_MKTSEGMENTATION_GETUNIQUENAME](@NEWAPPEALMAILINGID, [MKTSEGMENTATION].[NAME], null),
      @DESCRIPTION = [MKTSEGMENTATION].[DESCRIPTION],
      @MAILDATE = [MKTSEGMENTATION].[MAILDATE],
      @FIXEDCOST = [MKTSEGMENTATIONBUDGET].[FIXEDCOST],
      @MKTPACKAGEID = [MKTSEGMENTATIONSEGMENT].[PACKAGEID],
      @IDSETREGISTERID = [MKTSEGMENTSELECTION].[SELECTIONID],
      @HOUSEHOLDINGTYPECODE = 
        case when [APPEALMAILINGSETUP].[ID] is null
          then [MKTSEGMENTATION].[HOUSEHOLDINGTYPECODE]
          else [APPEALMAILINGSETUP].[HOUSEHOLDINGTYPECODE]
        end,
      @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = [MKTSEGMENTATION].[HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD],
      @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = [MKTSEGMENTATION].[HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS],
      @HOUSEHOLDINGONERECORDPERHOUSEHOLD = [MKTSEGMENTATION].[HOUSEHOLDINGONERECORDPERHOUSEHOLD],
      @EXCLUSIONDATETYPECODE = [BUSINESSPROCESSCOMMPREF].[DATETYPECODE],
      @EXCLUSIONASOFDATE = [BUSINESSPROCESSCOMMPREF].[ASOFDATE],
      @EXCLUDEDECEASED = [BUSINESSPROCESSCOMMPREF].[EXCLUDEDECEASED],
      @EXCLUDEINACTIVE = [BUSINESSPROCESSCOMMPREF].[EXCLUDEINACTIVE],
      @EXCLUSIONS = dbo.[UFN_BUSINESSPROCESSCOMMPREF_GETEXCLUSIONS_TOITEMLISTXML]([MKTSEGMENTATIONACTIVATEPROCESS].[ID]),
      @USEADDRESSPROCESSING = MKTSEGMENTATION.USEADDRESSPROCESSING,
      @ADDRESSPROCESSINGOPTIONID = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONID],
      @NAMEFORMATPARAMETERID = [MKTSEGMENTATION].[NAMEFORMATPARAMETERID],
      @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE],
      @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONSEASONALASOFDATE],
      @LABELFILENAME = [APPEALMAILING].[LABELFILENAME],
      @LABELFILE = [APPEALMAILING].[LABELFILE],
      @CREATEOUTPUTIDSET = [MKTSEGMENTATION].[CREATEOUTPUTIDSET],
      @OUTPUTIDSETNAME = (case when [MKTSEGMENTATION].[CREATEOUTPUTIDSET] = 1 and [MKTSEGMENTATION].[OVERWRITEOUTPUTIDSET] = 0 and dbo.UFN_BUSINESSPROCESS_IDSETEXISTS(MKTSEGMENTATION.OUTPUTIDSETNAME) = 1 then dbo.[UFN_MKTSELECTION_GETUNIQUENAME]([MKTSEGMENTATION].[OUTPUTIDSETNAME]) else [MKTSEGMENTATION].[OUTPUTIDSETNAME] end),
      @OVERWRITEOUTPUTIDSET = [MKTSEGMENTATION].[OVERWRITEOUTPUTIDSET],
      @ISHYBRID = (case when [APPEALMAILINGSETUP].[ID] is not null then 1 else 0 end),
      @MAILINGBUDGET = MKTSEGMENTATIONBUDGET.BUDGETAMOUNT,
      @SELECTEDSELECTIONS = isnull(dbo.UFN_APPEALMAILINGSETUP_GETSELECTIONS_TOITEMLISTXML(APPEALMAILINGSETUP.ID), dbo.[UFN_MKTSEGMENT_GETSELECTIONS_TOITEMLISTXML]([MKTSEGMENTATIONSEGMENT].[SEGMENTID], @CURRENTAPPUSERID)),
      @EXCLUDEDSELECTIONS = dbo.[UFN_MKTSEGMENTATIONFILTERSELECTION_GETEXCLUDESELECTIONS_TOITEMLISTXML]([MKTSEGMENTATION].[ID]),
      @CHANNELCODE = [APPEALMAILINGSETUP].[CHANNELCODE],
      @CHANNELPREFERENCECODE = [APPEALMAILINGSETUP].[CHANNELPREFERENCECODE],
      @MAILPACKAGEID = [APPEALMAILINGSETUP].[MAILPACKAGEID],
      @EMAILPACKAGEID = [APPEALMAILINGSETUP].[EMAILPACKAGEID],
      @BASECURRENCYID = [MKTSEGMENTATION].[BASECURRENCYID],
      @MKTASKLADDERID = [APPEALMAILINGSETUP].[MKTASKLADDERID],
      @MAILEXPORTDEFINITIONID = [APPEALMAILINGSETUP].[MAILEXPORTDEFINITIONID],
      @EMAILEXPORTDEFINITIONID = [APPEALMAILINGSETUP].[EMAILEXPORTDEFINITIONID]
    from dbo.[APPEALMAILING]
    inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [APPEALMAILING].[ID]
    inner join dbo.[MKTSEGMENTATIONBUDGET] on [MKTSEGMENTATIONBUDGET].[ID] = [MKTSEGMENTATION].[ID]
    inner join dbo.[MKTSEGMENTATIONACTIVATEPROCESS] on [MKTSEGMENTATIONACTIVATEPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
    inner join dbo.[BUSINESSPROCESSCOMMPREF] on [BUSINESSPROCESSCOMMPREF].[BUSINESSPROCESSPARAMETERSETID] = [MKTSEGMENTATIONACTIVATEPROCESS].[ID]
    left join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [APPEALMAILING].[MKTSEGMENTATIONSEGMENTID]
    left join dbo.[MKTSEGMENTSELECTION] on [MKTSEGMENTSELECTION].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
    left join dbo.[APPEALMAILINGSETUP] on [APPEALMAILINGSETUP].[ID] = [APPEALMAILING].[ID]
    where [APPEALMAILING].[ID] = @ID;

    --Delete the exclusion IDs from the xml so it will create new exclusions when we save below...

    if @EXCLUSIONS is not null
      set @EXCLUSIONS.modify('delete /EXCLUSIONS/ITEM/ID');

    if @ISHYBRID = 0
      begin
        --Create a copy of the source appeal mailing....

        exec dbo.[USP_DATAFORMTEMPLATE_ADD_APPEALMAILING]
          @ID = @NEWAPPEALMAILINGID,
          @APPEALID = @APPEALID,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID,
          @CHANGEAGENTID = @CHANGEAGENTID,
          @NAME = @NAME,
          @DESCRIPTION = @DESCRIPTION,
          @MAILDATE = @MAILDATE,
          @FIXEDCOST = @FIXEDCOST,
          @MAILINGBUDGET = @MAILINGBUDGET,
          @MKTPACKAGEID = @MKTPACKAGEID,
          @IDSETREGISTERID = @IDSETREGISTERID,
          @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE,
          @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD,
          @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS,
          @HOUSEHOLDINGONERECORDPERHOUSEHOLD = @HOUSEHOLDINGONERECORDPERHOUSEHOLD,
          @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE,
          @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE,
          @EXCLUDEDECEASED = @EXCLUDEDECEASED,
          @EXCLUDEINACTIVE = @EXCLUDEINACTIVE,
          @EXCLUSIONS = @EXCLUSIONS,
          @LABELFILENAME = @LABELFILENAME,
          @LABELFILE = @LABELFILE,
          @CREATEOUTPUTIDSET = @CREATEOUTPUTIDSET,
          @OUTPUTIDSETNAME = @OUTPUTIDSETNAME,
          @OVERWRITEOUTPUTIDSET = @OVERWRITEOUTPUTIDSET,
          @USEADDRESSPROCESSING = @USEADDRESSPROCESSING,
          @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID,
          @NAMEFORMATPARAMETERID = @NAMEFORMATPARAMETERID,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE,
          @USEKPISASDEFAULT = 0,
          @ACTIVATIONKPIS = @ACTIVATIONKPIS,
          @BASECURRENCYID = @BASECURRENCYID;
      end
    else
      begin

        set @LETTERS = (
          SELECT 
            newID() as ID,
            COMMUNICATIONLETTER.RUNNOW,
            COMMUNICATIONLETTER.RUNSCHEDULED,
            COMMUNICATIONLETTER.SEQUENCE,
            COMMUNICATIONLETTER.NAME,
            COMMUNICATIONLETTER.CHANNELCODE,
            COMMUNICATIONLETTER.CHANNELPREFERENCECODE,
            COMMUNICATIONLETTER.OUTPUTTYPECODE,
            COMMUNICATIONLETTER.INCLUDEINACTIVE,
            COMMUNICATIONLETTER.MKTASKLADDERID,
            APPEALMAILINGSETUP.MAILEXPORTDEFINITIONID,
            COMMUNICATIONLETTER.MAILCONTENTHTML,
            APPEALMAILINGSETUP.EMAILEXPORTDEFINITIONID,
            COMMUNICATIONLETTER.EMAILCONTENTHTML,
            COMMUNICATIONLETTER.EMAILSUBJECT,
            COMMUNICATIONLETTER.EMAILFROMADDRESS,
            COMMUNICATIONLETTER.EMAILFROMDISPLAYNAME,
            COMMUNICATIONLETTER.EMAILREPLYTOADDRESS,
            COMMUNICATIONLETTER.PAPERSIZECODE,
            COMMUNICATIONLETTER.MARGINTOP,
            COMMUNICATIONLETTER.MARGINBOTTOM,
            COMMUNICATIONLETTER.MARGINLEFT,
            COMMUNICATIONLETTER.MARGINRIGHT,
            null as MAILPACKAGEID,
            null as MAILSEGMENTID,
            null as EMAILPACKAGEID,
            null as EMAILSEGMENTID,
            cast((
              SELECT 
                null as ID, 
                [NAME], 
                [SELECTIONID]
              FROM dbo.[UFN_COMMUNICATIONLETTER_GETINCLUDEDSELECTIONS](COMMUNICATIONLETTER.ID)
              for xml raw('ITEM'),type,elements,root('SELECTIONS'),BINARY BASE64
            ) as nvarchar(max)) as SELECTIONSXML,
            cast((
              SELECT 
                newID() as ID, 
                [NAME], 
                [SELECTIONID]
              FROM dbo.[UFN_COMMUNICATIONLETTER_GETEXCLUDEDSELECTIONS](COMMUNICATIONLETTER.ID)
              for xml raw('ITEM'),type,elements,root('EXCLUDEDSELECTIONS'),BINARY BASE64
            ) as nvarchar(max)) as EXCLUDEDSELECTIONSXML,
            cast((
              SELECT 
                newID() as ID, 
                [NAME], 
                [SOLICITCODEID], 
                [TYPE]
              FROM dbo.[UFN_COMMUNICATIONLETTER_GETEXCLUDEDSOLICITCODES](COMMUNICATIONLETTER.ID)
              for xml raw('ITEM'),type,elements,root('EXCLUDEDSOLICITCODES'),BINARY BASE64
            ) as nvarchar(max)) as EXCLUDEDSOLICITCODESXML,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.EXCLUDEBASEDONRECENTCOMMUNICATION,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.NUMRECENTCOMMUNICATIONPERIODS,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.RECENTCOMMUNICATIONPERIODTYPECODE,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.EXCLUDEBASEDONTOTALCOMMUNICATIONSINPASTYEAR,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.NUMTOTALCOMMUNICATIONSINPASTYEAR,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.EXCLUDEBASEDONRECENTGIVING,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.NUMRECENTGIVINGPERIODS,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.RECENTGIVINGPERIODTYPECODE,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.EXCLUDEBASEDONTOTALGIVINGINPASTYEAR,
            COMMUNICATIONLETTERACTIVITYEXCLUSIONS.TOTALREVENUEAMOUNTINPASTYEAR,           
            cast((
              SELECT 
                newID() as ID, 
                [COMMUNICATIONTYPE], 
                [COMMUNICATIONTYPECODE]
              FROM dbo.[UFN_COMMUNICATIONLETTERACTIVITYEXCLUSION_GETCOMMUNICATIONTYPES](COMMUNICATIONLETTERACTIVITYEXCLUSIONS.ID)
              for xml raw('ITEM'),type,elements,root('COMMUNICATIONTYPES'),BINARY BASE64
            ) as nvarchar(max)) as COMMUNICATIONTYPESXML
          from dbo.COMMUNICATIONLETTER
          left outer join dbo.APPEALMAILINGSETUP
            on COMMUNICATIONLETTER.SEGMENTATIONID = APPEALMAILINGSETUP.ID
          left outer join dbo.COMMUNICATIONLETTERACTIVITYEXCLUSIONS
            on COMMUNICATIONLETTER.ID = COMMUNICATIONLETTERACTIVITYEXCLUSIONS.COMMUNICATIONLETTERID    
          where SEGMENTATIONID = @ID
          order by SEQUENCE
          for xml raw('ITEM'),type,elements,root('LETTERS'),BINARY BASE64
        )

        -- Create a copy of the hybrid appeal mailing...

        exec dbo.[USP_DATAFORMTEMPLATE_ADD_APPEALMAILINGSETUP_2]
          @ID = @NEWAPPEALMAILINGID,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID,
          @CHANGEAGENTID = @CHANGEAGENTID,
          @NAME = @NAME,
          @DESCRIPTION = @DESCRIPTION,
          @MAILDATE = @MAILDATE,
          @APPEALID = @APPEALID,
          @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID,
          @NAMEFORMATPARAMETERID = @NAMEFORMATPARAMETERID,
          @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE,
          @MAILEXPORTDEFINITIONID = @MAILEXPORTDEFINITIONID,
          @EMAILEXPORTDEFINITIONID = @EMAILEXPORTDEFINITIONID,
          @LETTERS = @LETTERS,
          @CREATEOUTPUTIDSET = @CREATEOUTPUTIDSET,
          @OUTPUTIDSETNAME = @OUTPUTIDSETNAME,
          @OVERWRITEOUTPUTIDSET = @OVERWRITEOUTPUTIDSET;
      end

    --Return the new appeal mailing ID...

    set @ID = @NEWAPPEALMAILINGID;
  end try

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

  return 0;