USP_RECORDOPERATION_MKTACKNOWLEDGEMENTMAILINGMARKLETTERSSENT

Executes the "Marketing Acknowledgement: Mark Letters Sent" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN 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.

Definition

Copy


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

  declare @CURRENTDATE datetime;
  declare @RECORDSOURCEID uniqueidentifier;
  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();


    --Loop through every record source and update the acknowledged/receipted date in the MKTREVENUELETTER and MKTREVENUERECEIPT tables...

    declare RECORDSOURCECURSOR cursor local fast_forward for
      select
        [ID],
        dbo.[UFN_MKTREVENUELETTER_MAKETABLENAME]([ID]),
        dbo.[UFN_MKTREVENUERECEIPT_MAKETABLENAME]([ID])
      from dbo.[MKTGIFTRECORDSOURCE]
      where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([ID]) = 1;

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

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

      set @SQL = 'update dbo.[' + @REVENUELETTERTABLENAME + '] set' + char(13) +
                 '  [ACKNOWLEDGEDATE] = @CURRENTDATE,' + char(13) +
                 '  [CHANGEDBYID] = @CHANGEAGENTID,' + char(13) +
                 '  [DATECHANGED] = @CURRENTDATE' + char(13);
      if dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1
        set @SQL = @SQL + 'from dbo.[' + @REVENUELETTERTABLENAME + '] as [RL]' + char(13) +
                          'inner join dbo.[REVENUELETTERMARKETING] as [RLM] on [RLM].[ID] = [RL].[ID]' + char(13) +
                          'where [RLM].[MKTSEGMENTATIONID] = @SEGMENTATIONID';
      else
        set @SQL = @SQL + 'where [MKTSEGMENTATIONID] = @SEGMENTATIONID';

      exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime', @SEGMENTATIONID = @ID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;

      --Update records in the REVENUERECEIPT table...

      set @SQL = 'update dbo.[' + @REVENUERECEIPTTABLENAME + '] set' + char(13) +
                 '  [RECEIPTDATE] = @CURRENTDATE,' + char(13) +
                 '  [CHANGEDBYID] = @CHANGEAGENTID,' + char(13) +
                 '  [DATECHANGED] = @CURRENTDATE' + char(13);
      if dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1
        set @SQL = @SQL + 'from dbo.[' + @REVENUERECEIPTTABLENAME + '] as [RR]' + char(13) +
                          'inner join dbo.[REVENUERECEIPTMARKETING] as [RRM] on [RRM].[ID] = [RR].[ID]' + char(13) +
                          'where [RRM].[MKTSEGMENTATIONID] = @SEGMENTATIONID';
      else
        set @SQL = @SQL + 'where [MKTSEGMENTATIONID] = @SEGMENTATIONID';

      exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime', @SEGMENTATIONID = @ID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;

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

    close RECORDSOURCECURSOR;
    deallocate RECORDSOURCECURSOR;


    --Update the acknowledged/receipted date for the status row...

    update dbo.[MKTACKNOWLEDGEMENTMAILINGPROCESSSEGMENTATION] set
      [ACKNOWLEDGEDATE] = @CURRENTDATE,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [SEGMENTATIONID] = @ID;
  end try

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

  return 0;