USP_MKTSEGMENTATIONACTIVATE_UPDATEASKLADDERS

Updates all the ask ladder calculations in the non-activated marketing effort data table that may have changed since the last time segment record counts were run.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN

Definition

Copy


create procedure dbo.[USP_MKTSEGMENTATIONACTIVATE_UPDATEASKLADDERS]
(
  @SEGMENTATIONID uniqueidentifier
)
as
  set nocount on;

  declare @ACTIVE bit;
  declare @ENDEDONDATE datetime;
  declare @DATATABLE nvarchar(128);
  declare @SQL nvarchar(max);

  begin try
    select top 1
      @ACTIVE = [MKTSEGMENTATION].[ACTIVE],
      @ENDEDONDATE = [BUSINESSPROCESSSTATUS].[ENDEDON]
    from dbo.[MKTSEGMENTATION]
    left join dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS] on [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
    left join dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS] on [MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS].[PARAMETERSETID] = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[ID]
    left join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[ID] = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS].[ID]
    where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID
    and isnull([BUSINESSPROCESSSTATUS].[STATUSCODE], 0) = 0
    order by [BUSINESSPROCESSSTATUS].[ENDEDON] desc;

    if @ACTIVE = 0 and @ENDEDONDATE is not null
      begin
        --See if we need to update ask ladders by doing a basic compare of the date changed for:

        --  1) all the mailing's segments

        --  2) all the mailing's test segments

        --  3) all the mailing's ask ladder overrides

        --  4) all the mailing's ask ladder overrides selections

        --  5) all the base ask ladders used in the mailing

        --Any deletes of segments/tests or ask ladder overrides will cause the record count cache to 

        --automatically be invalidated, so we don't need to worry about that here.

        if @ENDEDONDATE < (select max([DATECHANGED]) from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID) or
           @ENDEDONDATE < (select max([MKTSEGMENTATIONTESTSEGMENT].[DATECHANGED]) from dbo.[MKTSEGMENTATIONTESTSEGMENT] inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID) or
           @ENDEDONDATE < (select max([DATECHANGED]) from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE] where [SEGMENTATIONID] = @SEGMENTATIONID) or
           @ENDEDONDATE < (select max([IDSETREGISTER].[DATECHANGED]) from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE] inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENTATIONASKLADDEROVERRIDE].[IDSETREGISTERID] where [MKTSEGMENTATIONASKLADDEROVERRIDE].[SEGMENTATIONID] = @SEGMENTATIONID) or
           @ENDEDONDATE < (select max([DATECHANGED]) from dbo.[MKTASKLADDER] where [ID] in (
                            select [ASKLADDERID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID and [ASKLADDERID] is not null
                            union
                            select [MKTSEGMENTATIONTESTSEGMENT].[ASKLADDERID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID and [MKTSEGMENTATIONTESTSEGMENT].[ASKLADDERID] is not null
                            union
                            select [ASKLADDERID] from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE] where [SEGMENTATIONID] = @SEGMENTATIONID and [ASKLADDERID] is not null
                          ))
          begin
            set @DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID);

            if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @DATATABLE)
              begin
                --Make sure the data table does not contain any previous ask ladder info...

                set @SQL = 'update dbo.[' + @DATATABLE + '] set' + char(13) +
                           '  [ASKLADDERID] = null,' + char(13) +
                           '  [ENTRYAMOUNT] = null' + char(13) +
                           'where [ASKLADDERID] is not null';
                exec (@SQL);

                --Check if the mailing is using ask ladders...

                if dbo.[UFN_MKTSEGMENTATION_INCLUDEASKLADDERS](@SEGMENTATIONID) = 1
                  begin
                    --Update the ask ladder info in the data table...

                    exec dbo.[USP_MKTSEGMENTATIONACTIVATE_SETASKLADDERINFO] @SEGMENTATIONID;
                  end
              end
          end
      end
  end try

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

  return 0;