USP_DATALIST_ACQUISITIONLISTLOOKUP

Provides look-up information for a finder number from an acquisition list.

Parameters

Parameter Parameter Type Mode Description
@FINDERNUMBER bigint IN

Definition

Copy


CREATE procedure dbo.[USP_DATALIST_ACQUISITIONLISTLOOKUP]
(
  @FINDERNUMBER bigint = null
)
as
  set nocount on;

  declare @MAILINGID uniqueidentifier = dbo.[UFN_MKTSEGMENTATIONFINDERNUMBER_GETSEGMENTATION](@FINDERNUMBER);
  declare @APPEALSYSTEMID nvarchar(36);
  declare @APPEALID uniqueidentifier;
  declare @APPEALNAME nvarchar(100);

  declare @FINDERFILETABLE nvarchar(128);
  declare @ACTIVATIONTABLENAME nvarchar(128);
  declare @SQL nvarchar(max);
  declare @PARAMDEF nvarchar(max);

  declare @SEGMENTID uniqueidentifier;
  declare @TESTSEGMENTID uniqueidentifier;
  declare @PACKAGEID uniqueidentifier;
  declare @SEGMENTNAME nvarchar(203);
  declare @PACKAGENAME nvarchar(100);
  declare @SOURCECODE nvarchar(50);

  --Looking up the source code, segment, and package information...

  if @MAILINGID is not null
    begin
      --Check the finder file table first (if it exists) to see if we have a match...

      set @FINDERFILETABLE = dbo.[UFN_MKTFINDERFILE_BUILDTABLENAME](@MAILINGID);
      if exists(select * from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @FINDERFILETABLE)
        begin
          --If they import multiple finder files and import the same FINDERNUMBER multiple times with different names, segments, or sourcecodes,

          --then we need to make sure we only grab info for the findernumber from the latest import file.

          set @SQL = 'with [RANKEDIMPORT] ([ID], [RANK]) as' + char(13) +
                     '(' + char(13) +
                     '  select' + char(13) +
                     '    [FT].[ID],' + char(13) +
                     '    row_number() over (partition by [FT].[FINDERNUMBER] order by [MKTFINDERFILEIMPORTPROCESS].[DATEADDED] desc) as [RANK]' + char(13) +
                     '  from dbo.[' + @FINDERFILETABLE + '] as [FT] with (index([IX_' + @FINDERFILETABLE + '_FINDERNUMBER]))' + char(13) +
                     '  inner join dbo.[MKTFINDERFILEIMPORTPROCESS] on [MKTFINDERFILEIMPORTPROCESS].[ID] = [FT].[FINDERFILEID]' + char(13) +
                     '  where [FT].[FINDERNUMBER] = @FINDERNUMBER' + char(13) +
                     ')' + char(13) +
                     'select' + char(13) +
                     '  @SEGMENTID = [SC].[SEGMENTATIONSEGMENTID],' + char(13) +
                     '  @TESTSEGMENTID = [SC].[SEGMENTATIONTESTSEGMENTID],' + char(13) +
                     '  @SOURCECODE = [FT].[SOURCECODE]' + char(13) +
                     'from [RANKEDIMPORT]' + char(13) +
                     'inner join dbo.[' + @FINDERFILETABLE + '] as [FT] on [FT].[ID] = [RANKEDIMPORT].[ID]' + char(13) +
                     'inner join dbo.[MKTSOURCECODEMAP] as [SC] on [FT].[SOURCECODE] = [SC].[SOURCECODE] and [SC].[SEGMENTATIONID] = @MAILINGID' + char(13) +
                     'where [RANKEDIMPORT].[RANK] = 1';

          set @PARAMDEF = N'@MAILINGID uniqueidentifier, @FINDERNUMBER bigint, @SEGMENTID uniqueidentifier output, @TESTSEGMENTID uniqueidentifier output, @SOURCECODE nvarchar(50) output';

          exec sp_executesql @SQL, @PARAMDEF,
            @MAILINGID = @MAILINGID,
            @FINDERNUMBER = @FINDERNUMBER,
            @SEGMENTID = @SEGMENTID output,
            @TESTSEGMENTID = @TESTSEGMENTID output,
            @SOURCECODE = @SOURCECODE output;
        end


      --If no match was found, then check the mailing data table...

      if @SEGMENTID is null
        begin
          set @ACTIVATIONTABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@MAILINGID);

          set @SQL = 'select' + char(13) +
                     '  @SEGMENTID = [SEGMENTID],' + char(13) +
                     '  @TESTSEGMENTID = [TESTSEGMENTID],' + char(13) +
                     '  @SOURCECODE = [SOURCECODE]' + char(13) +
                     'from dbo.[' + @ACTIVATIONTABLENAME + ']' + char(13) +
                     'where [FINDERNUMBER] = @FINDERNUMBER';

          set @PARAMDEF = N'@FINDERNUMBER bigint, @SEGMENTID uniqueidentifier output, @TESTSEGMENTID uniqueidentifier output, @SOURCECODE nvarchar(50) output';

          exec sp_executesql @SQL, @PARAMDEF,
            @FINDERNUMBER = @FINDERNUMBER,
            @SEGMENTID = @SEGMENTID output,
            @TESTSEGMENTID = @TESTSEGMENTID output,
            @SOURCECODE = @SOURCECODE output;
        end


      --Lookup segment and package info...

      if @SEGMENTID is not null
        begin
          if @TESTSEGMENTID is not null
            select
              @SEGMENTNAME = dbo.[UFN_MKTSEGMENTATIONTESTSEGMENT_GETNAME]([MKTSEGMENTATIONTESTSEGMENT].[ID]),
              @PACKAGENAME = [MKTPACKAGE].[NAME],
              @PACKAGEID = [MKTPACKAGE].[ID]
            from dbo.[MKTSEGMENTATIONTESTSEGMENT]
            inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
            where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @TESTSEGMENTID;
          else
            select
              @SEGMENTNAME = [MKTSEGMENT].[NAME],
              @PACKAGENAME = [MKTPACKAGE].[NAME],
              @PACKAGEID = [MKTPACKAGE].[ID]
            from dbo.[MKTSEGMENTATIONSEGMENT]
            inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
            inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
            where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
        end


      --Lookup the appeal information from the mailing...

      select top 1
        @APPEALSYSTEMID = [APPEALSYSTEMID]
      from dbo.[MKTSEGMENTATIONACTIVATE]
      where [SEGMENTATIONID] = @MAILINGID
      and dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([RECORDSOURCEID]) = 1;

      if len(@APPEALSYSTEMID) > 0
        begin
          --The marketing tables stores the appeal as an nvarchar(36). This is for RE7 compatibility.

          --Historically in early versions the appeal did not always exist, so this try/catch protects from this.

          begin try
            select
              @APPEALID = [ID],
              @APPEALNAME = [NAME]
            from dbo.[APPEAL]
            where [ID] = convert(uniqueidentifier, @APPEALSYSTEMID);
          end try
          begin catch
            set @APPEALID = null;
            set @APPEALNAME = N'';
          end catch
        end
    end


  --Return the results...

  select
    @MAILINGID as [MAILINGID],
    isnull((select [NAME] from dbo.[MKTSEGMENTATION] where [ID] = @MAILINGID), '') as [MAILINGNAME],
    @APPEALID as [APPEALID],
    isnull(@APPEALNAME, '') as [APPEALNAME],
    isnull(@SOURCECODE, '') as [SOURCECODE],
    isnull(@SEGMENTNAME, '') as [SEGMENTNAME],
    isnull(@PACKAGENAME, '') as [PACKAGENAME]
  where @MAILINGID is not null;

  return 0;