USP_MKTACKNOWLEDGEMENTMAILINGPROCESSSEGMENTATION_SAVE

Saves information relating a marketing acknowledgement process to a marketing effort.

Parameters

Parameter Parameter Type Mode Description
@ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID uniqueidentifier IN
@SEGMENTATIONID uniqueidentifier IN
@ACKNOWLEDGEDATE datetime IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTACKNOWLEDGEMENTMAILINGPROCESSSEGMENTATION_SAVE]
(
  @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID uniqueidentifier,
  @SEGMENTATIONID uniqueidentifier,
  @ACKNOWLEDGEDATE datetime = null,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @CURRENTDATE datetime;
  declare @REVENUELETTERTABLENAME nvarchar(128);
  declare @REVENUERECEIPTTABLENAME nvarchar(128);
  declare @SQL nvarchar(max);

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

    set @CURRENTDATE = getdate();

    if exists(select 1 from dbo.[MKTACKNOWLEDGEMENTMAILINGPROCESSSEGMENTATION] where [ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID] = @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID)
      /* Update the existing row */
      update dbo.[MKTACKNOWLEDGEMENTMAILINGPROCESSSEGMENTATION] set
        [SEGMENTATIONID] = @SEGMENTATIONID,
        [ACKNOWLEDGEDATE] = @ACKNOWLEDGEDATE,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      where [ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID] = @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID;
    else
      /* Insert a new row */
      insert into dbo.[MKTACKNOWLEDGEMENTMAILINGPROCESSSEGMENTATION] (
        [ID],
        [ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID],
        [SEGMENTATIONID],
        [ACKNOWLEDGEDATE],
        [ADDEDBYID],
        [CHANGEDBYID],
        [DATEADDED],
        [DATECHANGED]
      ) values (
        newid(),
        @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID,
        @SEGMENTATIONID,
        @ACKNOWLEDGEDATE,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE
      );


    --Loop through every record source and update the MKTSEGMENTATIONID on the MKTREVENUELETTER and MKTREVENUERECEIPT tables...

    declare RECORDSOURCECURSOR cursor local fast_forward for
      select
        (case when dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([ID]) = 1 then 'REVENUELETTERMARKETING' else dbo.[UFN_MKTREVENUELETTER_MAKETABLENAME]([ID]) end),
        (case when dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([ID]) = 1 then 'REVENUERECEIPTMARKETING' else dbo.[UFN_MKTREVENUERECEIPT_MAKETABLENAME]([ID]) end)
      from dbo.[MKTGIFTRECORDSOURCE]
      where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([ID]) = 1;

    open RECORDSOURCECURSOR;
    fetch next from RECORDSOURCECURSOR into @REVENUELETTERTABLENAME, @REVENUERECEIPTTABLENAME;

    while (@@FETCH_STATUS = 0)
    begin
      --Update records in the REVENUELETTER table...

      set @SQL = 'update dbo.[' + @REVENUELETTERTABLENAME + '] set' + char(13) +
                 '  [MKTSEGMENTATIONID] = @SEGMENTATIONID,' + char(13) +
                 '  [CHANGEDBYID] = @CHANGEAGENTID,' + char(13) +
                 '  [DATECHANGED] = @CURRENTDATE' + char(13) +
                 'where [MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID] = @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID';
      exec sp_executesql @SQL, N'@ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID uniqueidentifier, @SEGMENTATIONID uniqueidentifier, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime', @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID = @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID, @SEGMENTATIONID = @SEGMENTATIONID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;

      --Update records in the REVENUERECEIPT table...

      set @SQL = 'update dbo.[' + @REVENUERECEIPTTABLENAME + '] set' + char(13) +
                 '  [MKTSEGMENTATIONID] = @SEGMENTATIONID,' + char(13) +
                 '  [CHANGEDBYID] = @CHANGEAGENTID,' + char(13) +
                 '  [DATECHANGED] = @CURRENTDATE' + char(13) +
                 'where [MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID] = @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID';
      exec sp_executesql @SQL, N'@ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID uniqueidentifier, @SEGMENTATIONID uniqueidentifier, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime', @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID = @ACKNOWLEDGEMENTMAILINGPROCESSSTATUSID, @SEGMENTATIONID = @SEGMENTATIONID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;

      fetch next from RECORDSOURCECURSOR into @REVENUELETTERTABLENAME, @REVENUERECEIPTTABLENAME;
    end

    close RECORDSOURCECURSOR;
    deallocate RECORDSOURCECURSOR;

    -- also cache segment record count

    -- this is the equivalent of the code in Marketing.Catalog.Segmentation.Segments.GetRecordCountForSegment


    declare @SEGMENTATIONSEGMENTID uniqueidentifier;
    declare @SEGMENTID uniqueidentifier;
    declare @PACKAGEID uniqueidentifier;
    declare @REVENUESEGMENTINFO table ([RECORDSOURCEID] uniqueidentifier, [REVENUELETTERTABLENAME] nvarchar(128), [SEGMENTID] uniqueidentifier, [SEGMENTATIONID] uniqueidentifier, [PACKAGEID] uniqueidentifier);
    declare @RECORDSOURCEID uniqueidentifier;
    declare @COUNT integer;

    declare SEGMENTATIONSEGMENTS cursor local fast_forward for
      select [ID], [SEGMENTID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID;

    open SEGMENTATIONSEGMENTS
    fetch next from SEGMENTATIONSEGMENTS into @SEGMENTATIONSEGMENTID, @SEGMENTID;

    while (@@FETCH_STATUS = 0)
      begin
        delete from @REVENUESEGMENTINFO;
        insert into @REVENUESEGMENTINFO exec dbo.[USP_MKTSEGMENTATIONSEGMENT_GETREVENUESEGMENTINFO] @SEGMENTATIONSEGMENTID;

        select top 1
          @RECORDSOURCEID = [RECORDSOURCEID],
          @REVENUELETTERTABLENAME = [REVENUELETTERTABLENAME]
        from @REVENUESEGMENTINFO;

        set @SQL = 
          'select @COUNT = count(1)' + char(13) +
          'from dbo.[' + @REVENUELETTERTABLENAME + '] as [RL]' + char(13);

        if dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1
          set @SQL = @SQL +
            'inner join dbo.[REVENUELETTERMARKETING] as [RLM] on [RLM].[ID] = [RL].[ID]' + char(13) +
            'where [RLM].[MKTSEGMENTATIONID] = @SEGMENTATIONID' + char(13) +
            'and [RLM].[MKTSEGMENTID] = @SEGMENTID' + char(13) +
            'and [RLM].[MKTPACKAGEID] = @PACKAGEID;'
        else
          set @SQL = @SQL +        
            'where [RL].[MKTSEGMENTATIONID] = @SEGMENTATIONID' + char(13) +
            'and [RL].[MKTSEGMENTID] = @SEGMENTID;'

        exec sp_executesql @SQL, N'@COUNT integer output, @SEGMENTATIONID uniqueidentifier, @SEGMENTID uniqueidentifier, @PACKAGEID uniqueidentifier', @COUNT = @COUNT output, @SEGMENTATIONID = @SEGMENTATIONID, @SEGMENTID = @SEGMENTID, @PACKAGEID = @PACKAGEID;

        exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CACHERECORDCOUNT] @SEGMENTATIONSEGMENTID, @COUNT;

        fetch next from SEGMENTATIONSEGMENTS into @SEGMENTATIONSEGMENTID, @SEGMENTID;
      end

    close SEGMENTATIONSEGMENTS;
    deallocate SEGMENTATIONSEGMENTS;
  end try

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

  return 0;