USP_MKTSEGMENTATION_GETFIRSTRESPONSEDATE

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


create procedure dbo.[USP_MKTSEGMENTATION_GETFIRSTRESPONSEDATE]
(
  @SEGMENTATIONID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @FIRSTRESPONSEDATE date;
  declare @ACTIVE bit;
  declare @RECORDSOURCEGIFTIDSETID uniqueidentifier;
  declare @RECORDSOURCEFIRSTRESPONSEDATE date;
  declare @CURRENTDATE datetime;
  declare @SQL nvarchar(max);
  declare @PARAMDEF nvarchar(255);

  select
    @FIRSTRESPONSEDATE = [FIRSTRESPONSEDATE],
    @ACTIVE = [MKTSEGMENTATION].[ACTIVE]
  from dbo.[MKTSEGMENTATION]
  left join dbo.[MKTSEGMENTATIONACTIVE] on [MKTSEGMENTATIONACTIVE].[ID] = [MKTSEGMENTATION].[ID]
  where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;

  --Only calculate the first response date if it hasn't been calculated yet, and the mailing is actually active...

  if @FIRSTRESPONSEDATE is null and @ACTIVE = 1
    begin
      begin try
        if  @CHANGEAGENTID is null
          exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

        set @CURRENTDATE = getdate();
        set @PARAMDEF = '@RECORDSOURCEFIRSTRESPONSEDATE date output';

        --We know the mailing is active, so loop through all the distinct record sources...

        declare RECORDSOURCECURSOR cursor local fast_forward for
          select
            [NORMALGIFTIDSETREGISTERID]
          from dbo.[MKTSEGMENTATIONACTIVATE]
          where [SEGMENTATIONID] = @SEGMENTATIONID;

        open RECORDSOURCECURSOR;
        fetch next from RECORDSOURCECURSOR into @RECORDSOURCEGIFTIDSETID;

        while (@@fetch_status = 0)
        begin
            --Build the SQL statement for this record source

            set @SQL = 'select' + char(13) +
                        '  @RECORDSOURCEFIRSTRESPONSEDATE = min([GIFTIDSET].[DATE])' + char(13) +
                        'from dbo.' + dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@RECORDSOURCEGIFTIDSETID) + ' as [GIFTIDSET]';

            --Execute the SQL to get the first response date for this record source

            exec sp_executesql @SQL, @PARAMDEF, @RECORDSOURCEFIRSTRESPONSEDATE = @RECORDSOURCEFIRSTRESPONSEDATE output;

            --Keep the earliest date for all record sources

            set @FIRSTRESPONSEDATE = case when @FIRSTRESPONSEDATE is null then @RECORDSOURCEFIRSTRESPONSEDATE when @RECORDSOURCEFIRSTRESPONSEDATE < @FIRSTRESPONSEDATE then @RECORDSOURCEFIRSTRESPONSEDATE else @FIRSTRESPONSEDATE end;

            fetch next from RECORDSOURCECURSOR into @RECORDSOURCEGIFTIDSETID;
        end

        close RECORDSOURCECURSOR;
        deallocate RECORDSOURCECURSOR;

        --Update the field in the table  

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

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

  return 0;