USP_APPEALMAILING_ADD

Adds an appeal mailing.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@APPEALID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@NAME nvarchar(100) IN
@DESCRIPTION nvarchar(255) IN
@MAILDATE datetime IN
@FIXEDCOST money IN
@MKTPACKAGEID uniqueidentifier IN
@IDSETREGISTERID uniqueidentifier IN
@HOUSEHOLDINGTYPECODE tinyint IN
@EXCLUSIONDATETYPECODE tinyint IN
@EXCLUSIONASOFDATE datetime IN
@EXCLUDEDECEASED bit IN
@EXCLUDEINACTIVE bit IN
@EXCLUSIONS xml IN
@LABELFILENAME nvarchar(255) IN
@LABELFILE varbinary IN
@CREATEOUTPUTIDSET bit IN
@OUTPUTIDSETNAME nvarchar(100) IN
@OVERWRITEOUTPUTIDSET bit IN
@USEADDRESSPROCESSING bit IN
@ADDRESSPROCESSINGOPTIONID uniqueidentifier IN
@NAMEFORMATPARAMETERID uniqueidentifier IN
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint IN
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime IN
@SEGMENTATIONGENERATORID uniqueidentifier IN
@UNIVERSEIDSETREGISTERID uniqueidentifier IN
@SEGMENTATIONGENERATORPACKAGEID uniqueidentifier IN
@USEKPISASDEFAULT bit IN
@ACTIVATIONKPIS xml IN
@MAILINGBUDGET money IN
@RECENCYEXCLUSIONSMARTFIELDID uniqueidentifier IN
@RECENCYEXCLUSIONSELECTIONID uniqueidentifier IN
@RECENCYEXCLUSIONINUSE bit IN
@HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD bit IN
@HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS bit IN
@HOUSEHOLDINGONERECORDPERHOUSEHOLD bit IN

Definition

Copy


CREATE procedure dbo.[USP_APPEALMAILING_ADD]
(
  @ID uniqueidentifier = null output,
  @APPEALID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @NAME nvarchar(100),
  @DESCRIPTION nvarchar(255) = '',
  @MAILDATE datetime = null,
  @FIXEDCOST money = 0,
  @MKTPACKAGEID uniqueidentifier = null,
  @IDSETREGISTERID uniqueidentifier = null,
  @HOUSEHOLDINGTYPECODE tinyint = 0,
  @EXCLUSIONDATETYPECODE tinyint = 0,
  @EXCLUSIONASOFDATE datetime = null,
  @EXCLUDEDECEASED bit = 1,
  @EXCLUDEINACTIVE bit = 1,
  @EXCLUSIONS xml = null,
  @LABELFILENAME nvarchar(255) = '',
  @LABELFILE varbinary(max) = null,
  @CREATEOUTPUTIDSET bit = 0,
  @OUTPUTIDSETNAME nvarchar(100) = '',
  @OVERWRITEOUTPUTIDSET bit = 0,
  @USEADDRESSPROCESSING bit = 0,
  @ADDRESSPROCESSINGOPTIONID uniqueidentifier = null,
  @NAMEFORMATPARAMETERID uniqueidentifier = null,
  @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint = 0,
  @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime = null,
  @SEGMENTATIONGENERATORID uniqueidentifier = null,
  @UNIVERSEIDSETREGISTERID uniqueidentifier = null,
  @SEGMENTATIONGENERATORPACKAGEID uniqueidentifier = null,
  @USEKPISASDEFAULT bit = null,
  @ACTIVATIONKPIS xml = null,
  @MAILINGBUDGET money = 0,
  @RECENCYEXCLUSIONSMARTFIELDID uniqueidentifier = null,
  @RECENCYEXCLUSIONSELECTIONID uniqueidentifier = null,
  @RECENCYEXCLUSIONINUSE bit = 0,
  @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD bit = 0,
  @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS bit = 0,
  @HOUSEHOLDINGONERECORDPERHOUSEHOLD bit = 0  
)
as
  set nocount on;

  declare @APPEALNAME nvarchar(100);
  declare @APPEALDESCRIPTION nvarchar(255);
  declare @SITEID uniqueidentifier;
  --declare @MKTSEGMENTATIONSEGMENTID uniqueidentifier; --TommyVe 6/2/2009 @MKTSEGMENTATIONSEGMENTID appears to not be used, it is only selected

  declare @MKTEXPORTDEFINITIONID uniqueidentifier;
  declare @CURRENTDATE datetime;

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

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

    set @CURRENTDATE = getdate();

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

    select
      @MKTEXPORTDEFINITIONID = [LETTERCODE].[MKTEXPORTDEFINITIONID]
    from dbo.[MKTPACKAGE]
    inner join dbo.[LETTERCODE] on [LETTERCODE].[ID] = [MKTPACKAGE].[LETTERCODEID]
    where [MKTPACKAGE].[ID] = @MKTPACKAGEID;

    --Insert the base mailing...

    insert into dbo.[MKTSEGMENTATION] (
      [ID],
      [NAME],
      [DESCRIPTION],
      [MAILDATE],
      [SITEID],
      [HOUSEHOLDINGTYPECODE],
      [HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD],
      [HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS],
      [HOUSEHOLDINGONERECORDPERHOUSEHOLD],      
      [USEADDRESSPROCESSING],
      [ADDRESSPROCESSINGOPTIONID],
      [NAMEFORMATPARAMETERID],
      [ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE],
      [ADDRESSPROCESSINGOPTIONSEASONALASOFDATE],
      [MANUALCALCULATIONMODE],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED]
    ) values (
      @ID,
      @NAME,
      @DESCRIPTION,
      @MAILDATE,
      @SITEID,
      @HOUSEHOLDINGTYPECODE,
      @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD,
      @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS,
      @HOUSEHOLDINGONERECORDPERHOUSEHOLD,      
      @USEADDRESSPROCESSING,
      @ADDRESSPROCESSINGOPTIONID,
      @NAMEFORMATPARAMETERID,
      @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
      @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE,
      (case when @SEGMENTATIONGENERATORID is null then 0 else 1 end),
      @CHANGEAGENTID,
      @CHANGEAGENTID,
      @CURRENTDATE,
      @CURRENTDATE
    );

    --Insert the budget information...

    insert into dbo.[MKTSEGMENTATIONBUDGET] (
      [ID],
    [BUDGETAMOUNT],
      [FIXEDCOST],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED]
    ) values (
      @ID,
    @MAILINGBUDGET,
      @FIXEDCOST,
      @CHANGEAGENTID,
      @CHANGEAGENTID,
      @CURRENTDATE,
      @CURRENTDATE
    );

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

    exec dbo.[USP_MKTSEGMENTATIONACTIVATEPROCESS_SAVE] @ID, @CHANGEAGENTID;

    --Add the mailing activation criteria...

    declare @BBECRECORDSOURCEID uniqueidentifier;
    set @BBECRECORDSOURCEID = dbo.[UFN_MKTRECORDSOURCE_GETFIRSTBBECRECORDSOURCEID]();
    exec dbo.[USP_MKTSEGMENTATIONACTIVATE_SAVEFIELD] @ID, @CHANGEAGENTID, @BBECRECORDSOURCEID, null, null, @APPEALID, @APPEALNAME, @APPEALDESCRIPTION;

    if @USEADDRESSPROCESSING = 1 and @ADDRESSPROCESSINGOPTIONID is not null
      exec dbo.[USP_MKTSEGMENTATIONSEGMENTCACHEADDRESSES_CREATETABLE] @ID;

    if @SEGMENTATIONGENERATORID is not null
      begin
        --TODO: TommyVe 6/9/2009 Make sure we're using all of the right objects when doing a mailing with segments

        --Segmentation.Add.xml uses these but we do not

        -- USP_MKTSEGMENTATIONFILTERSELECTION_GETEXCLUDESELECTIONS_ADDFROMXML, USP_MKTSEGMENTATIONFILTERSEGMENTATION_GETEXCLUDESEGMENTATIONS_ADDFROMXML

        -- USP_BUSINESSPROCESSCOMMPREF_ADD

        --Both Segmentation.Add.xml and this procedure use

        -- MKTSEGMENTATIONBUDGET

        -- USP_MKTSEGMENTATIONSEGMENTCACHEADDRESSES_CREATETABLE

        -- USP_MKTSEGMENTATIONFILTERSELECTION_GETINCLUDESELECTIONS_ADDFROMXML (we insert directly into MKTSEGMENTATIONFILTERSELECTION)

        --We use these but Segmentation.Add.xml does not

        -- USP_MKTSEGMENTATIONACTIVATE_SAVEFIELD

        -- MKTSEGMENTATIONEXPORTPROCESS (moved below)


        if @UNIVERSEIDSETREGISTERID is not null
          insert into dbo.MKTSEGMENTATIONFILTERSELECTION
          (SEGMENTATIONID, FILTERTYPECODE, SELECTIONID, [ADDEDBYID], [CHANGEDBYID], [DATEADDED], [DATECHANGED])
          values
          (@ID, 1, @UNIVERSEIDSETREGISTERID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

        insert into dbo.[MKTMAILINGPREACTIVATIONPROCESS] (
          [ID],
          [SEGMENTATIONID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        ) values (
          newid(),
          @ID,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        );
        exec dbo.USP_MKTSEGMENTATIONSEGMENTCALCULATEPROCESS_SAVE @ID, @CHANGEAGENTID;
          exec dbo.USP_MKTSEGMENTATIONACTIVATEPROCESS_SAVE @ID, @CHANGEAGENTID;

          declare @MKTSEGMENTATIONACTIVATEPROCESSID uniqueidentifier;
          select @MKTSEGMENTATIONACTIVATEPROCESSID = [ID]
          from dbo.MKTSEGMENTATIONACTIVATEPROCESS
          where MKTSEGMENTATIONACTIVATEPROCESS.[SEGMENTATIONID] = @ID;


        exec dbo.[USP_BUSINESSPROCESSCOMMPREF_ADD]
          @CHANGEAGENTID = @CHANGEAGENTID,
          @BUSINESSPROCESSCATALOGID = '22C3D75C-A956-4BFC-A5FD-4B866BAEF509',
          @BUSINESSPROCESSPARAMETERSETID = @MKTSEGMENTATIONACTIVATEPROCESSID,
          @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE,
          @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE,
          @EXCLUDEDECEASED = @EXCLUDEDECEASED,
          @EXCLUDEINACTIVE = @EXCLUDEINACTIVE,
          @EXCLUSIONS = @EXCLUSIONS,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID;


        declare @MKTSEGMENTID uniqueidentifier;
        declare @SEQUENCE int;
        declare SEGMENT_CURSOR cursor local fast_forward
        for
        select
          [MKTSEGMENTID],
          row_number() over (order by [SEGMENTATIONGENERATORSEGMENT].[SEQUENCE]) --SEQUENCE (use row_number to force unique sequence)

        from
          dbo.[SEGMENTATIONGENERATORSEGMENT]
        where
          [SEGMENTATIONGENERATORSEGMENT].[SEGMENTATIONGENERATORID] = @SEGMENTATIONGENERATORID;

        open SEGMENT_CURSOR;
        fetch next from SEGMENT_CURSOR into
          @MKTSEGMENTID, @SEQUENCE;

        while @@fetch_status = 0
        begin
          exec dbo.USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENT
            default,
            @CHANGEAGENTID,
            @ID,
            default,
            @MKTSEGMENTID, -- get from cursor

            default,
            default,
            @SEGMENTATIONGENERATORPACKAGEID,
            default,
            default,
            0,
            100,
            0,
            2,
            @SEQUENCE, -- get from cursor

            default,
            default;
          fetch next from SEGMENT_CURSOR into @MKTSEGMENTID, @SEQUENCE;
        end
        close SEGMENT_CURSOR;
        deallocate SEGMENT_CURSOR;

        -- No longer needed since we have a first class business process now (handled down below).

        --declare @QUEUEPROCESSID uniqueidentifier = newid();

        --exec dbo.USP_SEGMENTEDAPPEALMAILINGQUEUE_CREATEORUPDATE @ID, @SEGMENTATIONGENERATORID, @QUEUEPROCESSID output, @CHANGEAGENTID;


        insert into dbo.MKTSEGMENTATIONSEGMENTSPLIT
        (
          [SEGMENTATIONID],
          [SEGMENTID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          MKTSEGMENTATIONSEGMENT.[SEGMENTATIONID],
          MKTSEGMENTATIONSEGMENT.[SEGMENTID],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from
          dbo.MKTSEGMENTATIONSEGMENT
        where
          MKTSEGMENTATIONSEGMENT.[SEGMENTATIONID] = @ID;

        insert into dbo.[SEGMENTEDAPPEALMAILING]
        (
          [ID],
          [SEGMENTATIONGENERATORID],
          [APPEALID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED],
          [RECENCYEXCLUSIONSMARTFIELDID],
          [RECENCYEXCLUSIONSELECTIONID],
          [RECENCYEXCLUSIONINUSE]
        )
        values
        (
          @ID,
          @SEGMENTATIONGENERATORID,
          @APPEALID,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE,
          @RECENCYEXCLUSIONSMARTFIELDID,
          @RECENCYEXCLUSIONSELECTIONID,
          @RECENCYEXCLUSIONINUSE
        );

        declare @REFRESHID uniqueidentifier = newid();
        insert into dbo.SEGMENTEDAPPEALMAILINGREFRESHPROCESS (
          ID,
          SEGMENTEDAPPEALMAILINGID,
          NAME,
          ADDEDBYID,
          CHANGEDBYID,
          DATEADDED,
          DATECHANGED
        ) values (
          @REFRESHID,
          @ID,
          'Refresh Process for ''' + @NAME + '''',
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        )

        update dbo.[SEGMENTEDAPPEALMAILING] set
          SEGMENTEDAPPEALMAILINGREFRESHPROCESSID = @REFRESHID
        where
          ID = @ID;
          /* Save the export information */
        exec dbo.[USP_MKTSEGMENTATIONPREACTIVATIONEXPORT_SAVEFIELD]
          @ID,
          '',   -- @EXPORTDESCRIPTION,

          null, -- @MAILEXPORTDEFINITIONID,

          null, -- @EMAILEXPORTDEFINITIONID

          null; -- @PHONEEXPORTDEFINITIONID


        /* Save information about the exclusion: */
        if @RECENCYEXCLUSIONSMARTFIELDID is not null and @RECENCYEXCLUSIONSELECTIONID is not null
        begin
          insert into dbo.[MKTSEGMENTATIONFILTERSELECTION]
          (
            [SEGMENTATIONID],
            [FILTERTYPECODE],
            [SELECTIONID],
            [ADDEDBYID],
            [CHANGEDBYID],
            [DATEADDED],
            [DATECHANGED]
          )
          values
          (
            @ID,
            2, -- Exclusion

            @RECENCYEXCLUSIONSELECTIONID,
      @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
          );
          /* Clear the exclusion cache info table first so the cache will get rebuilt the next time they want record counts */
          exec dbo.[USP_MKTSEGMENTATION_CLEARCACHE] @ID;

          /* Update all segment views */
          exec dbo.[USP_MKTSEGMENTATION_UPDATESEGMENTVIEWS] @ID, default, default;
        end
      end
    else
      begin
          --Add the mailing export process...

        insert into dbo.[MKTSEGMENTATIONEXPORTPROCESS] (
          [ID],
          [SEGMENTATIONID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        ) values (
          newid(),
          @ID,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        );

      if @USEADDRESSPROCESSING = 1 and @ADDRESSPROCESSINGOPTIONID is not null
        exec dbo.[USP_MKTSEGMENTATIONSEGMENTCACHEADDRESSES_CREATETABLE] @ID;

      --Create the underlying segment information and grab the new mailing segment ID...

      exec dbo.[USP_APPEALMAILING_CREATEORUPDATESEGMENT]
        @APPEALMAILINGID = @ID,
        @CURRENTAPPUSERID = @CURRENTAPPUSERID,
        @NAME = @NAME,
        @IDSETREGISTERID = @IDSETREGISTERID,
        @MKTPACKAGEID = @MKTPACKAGEID,
        @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE,
        @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD,
        @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS,
        @HOUSEHOLDINGONERECORDPERHOUSEHOLD = @HOUSEHOLDINGONERECORDPERHOUSEHOLD,      
        @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE,
        @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE,
        @EXCLUDEDECEASED = @EXCLUDEDECEASED,
        @EXCLUDEINACTIVE = @EXCLUDEINACTIVE,
        @EXCLUSIONS = @EXCLUSIONS,
        @USEADDRESSPROCESSING = @USEADDRESSPROCESSING,
        @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID,
        @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
        @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE,
        @CHANGEAGENTID = @CHANGEAGENTID,
        @APPEALID = @APPEALID;

        --TommyVe 6/2/2009 @MKTSEGMENTATIONSEGMENTID appears to not be used, it is only selected

        --select

        --  @MKTSEGMENTATIONSEGMENTID = [ID]

        --from dbo.[MKTSEGMENTATIONSEGMENT]

        --where [SEGMENTATIONID] = @ID

        --and [SEQUENCE] = 1;


        --The mailing was created in the SP above, because of ordering issues, so update the rest of the fields here...

        update dbo.[APPEALMAILING] set
          [LABELFILENAME] = @LABELFILENAME,
          [LABELFILE] = @LABELFILE,
          [CREATEOUTPUTIDSET] = @CREATEOUTPUTIDSET,
          [OUTPUTIDSETNAME] = @OUTPUTIDSETNAME,
          [OVERWRITEOUTPUTIDSET] = @OVERWRITEOUTPUTIDSET,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [ID] = @ID;
      end;

    /* Clear KPI fields */
    exec dbo.[USP_MKTSEGMENTATIONACTIVATEKPI_CLEARFIELDS]
     @ID,
     @USEKPISASDEFAULT,
     @CHANGEAGENTID;

    /* Save KPIs */
    exec dbo.[USP_MKTSEGMENTATIONACTIVATEKPI_SAVEFIELD_FROMXML] 
      @ID
      @ACTIVATIONKPIS
      @USEKPISASDEFAULT
      @CHANGEAGENTID;
  end try

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

  return 0;