USP_DATALIST_MKTINDIRECTRESPONSES

Returns indirect gifts for a marketing effort.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@CURRENCYCODE tinyint IN Currency

Definition

Copy


CREATE procedure dbo.[USP_DATALIST_MKTINDIRECTRESPONSES]
(
  @SEGMENTATIONID uniqueidentifier,
  @CURRENCYCODE tinyint = 1
)
with execute as owner
as
  set nocount on;

  declare @BASECURRENCYID uniqueidentifier;
  declare @RECORDSOURCEID uniqueidentifier;
  declare @GIFTIDSETTABLE nvarchar(128);
  declare @REVENUESEGMENTTABLE nvarchar(128);
  declare @SQL nvarchar(max);

  declare @RECORDSOURCEVIEWNAME nvarchar(128);
  declare @RECORDSOURCEPRIMARYKEYFIELD nvarchar(255);
  declare @RECORDSOURCEFULLNAMEFIELD nvarchar(255);
  declare @RECORDSOURCEFIRSTNAMEFIELD nvarchar(255);
  declare @RECORDSOURCEMIDDLENAMEFIELD nvarchar(255);
  declare @RECORDSOURCELASTNAMEFIELD nvarchar(255);
  declare @RECORDSOURCEADDRESSLINE1FIELD nvarchar(255);
  declare @RECORDSOURCEADDRESSLINE2FIELD nvarchar(255);
  declare @RECORDSOURCEADDRESSLINE3FIELD nvarchar(255);
  declare @RECORDSOURCEADDRESSLINE4FIELD nvarchar(255);
  declare @RECORDSOURCEADDRESSLINE5FIELD nvarchar(255);
  declare @RECORDSOURCECITYFIELD nvarchar(255);
  declare @RECORDSOURCESTATEFIELD nvarchar(255);
  declare @RECORDSOURCEPOSTCODEFIELD nvarchar(255);
  declare @RECORDSOURCEPHONENUMBERFIELD nvarchar(255);
  declare @RECORDSOURCEEMAILADDRESSFIELD nvarchar(255);

  declare @RESULTTABLE table (
    [FULLNAME] nvarchar(255),
    [FIRSTNAME] nvarchar(100),
    [MIDDLENAME] nvarchar(100),
    [LASTNAME] nvarchar(100),
    [ADDRESSLINE1] nvarchar(255),
    [ADDRESSLINE2] nvarchar(255),
    [ADDRESSLINE3] nvarchar(255),
    [ADDRESSLINE4] nvarchar(255),
    [ADDRESSLINE5] nvarchar(255),
    [CITY] nvarchar(100),
    [STATE] nvarchar(100),
    [POSTCODE] nvarchar(30),
    [PHONENUMBER] nvarchar(50),
    [EMAILADDRESS] nvarchar(255),
    [GIFTDATE] datetime,
    [GIFTAMOUNT] money
  );


  begin try
    if @CURRENCYCODE = 1
      set @BASECURRENCYID = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
    else
      select
        @BASECURRENCYID = [MKTSEGMENTATION].[BASECURRENCYID]
      from dbo.[MKTSEGMENTATION]
      where [ID] = @SEGMENTATIONID;


    declare RECORDSOURCECURSOR cursor local fast_forward for
      select
        [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID],
        dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([MKTSEGMENTATIONACTIVATE].[NORMALGIFTIDSETREGISTERID]),
        dbo.[UFN_REVENUESEGMENT_MAKETABLENAME]([MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID])
      from dbo.[UFN_MKTSEGMENTATION_GETDISTINCTRECORDSOURCES](@SEGMENTATIONID) as [DRS]
      inner join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = [DRS].[QUERYVIEWCATALOGID] and [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = @SEGMENTATIONID

    open RECORDSOURCECURSOR;
    fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @GIFTIDSETTABLE, @REVENUESEGMENTTABLE;

    while (@@FETCH_STATUS = 0)
    begin
      -- get the record source field mappings...

      select
        @RECORDSOURCEVIEWNAME = [QUERYVIEWCATALOG].[OBJECTNAME],
        @RECORDSOURCEPRIMARYKEYFIELD = [QUERYVIEWCATALOG].[PRIMARYKEYFIELD],
        @RECORDSOURCEFULLNAMEFIELD = isnull([FULLNAMEFIELD], ''),
        @RECORDSOURCEFIRSTNAMEFIELD = isnull([FIRSTNAMEFIELD],''),
        @RECORDSOURCEMIDDLENAMEFIELD = isnull([MIDDLENAMEFIELD],''),
        @RECORDSOURCELASTNAMEFIELD = isnull([LASTNAMEFIELD],''),
        @RECORDSOURCEADDRESSLINE1FIELD = isnull([ADDRESSLINE1FIELD],''),
        @RECORDSOURCEADDRESSLINE2FIELD = isnull([ADDRESSLINE2FIELD],''),
        @RECORDSOURCEADDRESSLINE3FIELD = isnull([ADDRESSLINE3FIELD],''),
        @RECORDSOURCEADDRESSLINE4FIELD = isnull([ADDRESSLINE4FIELD],''),
        @RECORDSOURCEADDRESSLINE5FIELD = isnull([ADDRESSLINE5FIELD],''),
        @RECORDSOURCECITYFIELD = isnull([CITYFIELD],''),
        @RECORDSOURCESTATEFIELD = isnull([STATEFIELD],''),
        @RECORDSOURCEPOSTCODEFIELD = isnull([POSTCODEFIELD],''),
        @RECORDSOURCEPHONENUMBERFIELD = isnull([PHONENUMBERFIELD],''),
        @RECORDSOURCEEMAILADDRESSFIELD = isnull([EMAILADDRESSFIELD],'')
      from dbo.[MKTRECORDSOURCEFIELDMAPPINGS]
      inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTRECORDSOURCEFIELDMAPPINGS].[ID]
      where [MKTRECORDSOURCEFIELDMAPPINGS].[ID] = @RECORDSOURCEID;

      -- build the SQL to get all revenue in the normal gifts table that is not matched to a segment in the REVENUESEGMENT table...

      set @SQL = 'select' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEFULLNAMEFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEFULLNAMEFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEFIRSTNAMEFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEFIRSTNAMEFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEMIDDLENAMEFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEMIDDLENAMEFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCELASTNAMEFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCELASTNAMEFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEADDRESSLINE1FIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEADDRESSLINE1FIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEADDRESSLINE2FIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEADDRESSLINE2FIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEADDRESSLINE3FIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEADDRESSLINE3FIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEADDRESSLINE4FIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEADDRESSLINE4FIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEADDRESSLINE5FIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEADDRESSLINE5FIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCECITYFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCECITYFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCESTATEFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCESTATEFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEPOSTCODEFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEPOSTCODEFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEPHONENUMBERFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEPHONENUMBERFIELD + ']' end) + ',' + char(13) +
                 '  ' + (case when len(@RECORDSOURCEEMAILADDRESSFIELD) = 0 then '''''' else '[DONORS].[' + @RECORDSOURCEEMAILADDRESSFIELD + ']' end) + ',' + char(13) +
                 '  [GIFTIDSET].[DATE],' + char(13) +
                 '  [GIFTIDSET].[' + (case when @CURRENCYCODE = 1 then 'ORGANIZATIONAMOUNT' else 'AMOUNT' end) + '] as [AMOUNT]' + char(13) +
                 'from dbo.' + @GIFTIDSETTABLE + ' as [GIFTIDSET]' + char(13) +
                 'inner join dbo.[' + @RECORDSOURCEVIEWNAME + '] as [DONORS] on [DONORS].[' + @RECORDSOURCEPRIMARYKEYFIELD + '] = [GIFTIDSET].[DONORID]' + char(13) +
                 'where not exists(select * from dbo.[' + @REVENUESEGMENTTABLE + '] where [REVENUEID] = [GIFTIDSET].[ID] and [SEGMENTID] in (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID));';

      -- execute the SQL to get the counts/amounts for this record source

      insert into @RESULTTABLE
        exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID;

      fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @GIFTIDSETTABLE, @REVENUESEGMENTTABLE;
    end

    close RECORDSOURCECURSOR;
    deallocate RECORDSOURCECURSOR;


    -- return the values

    select 
      [FULLNAME],
      [FIRSTNAME],
      [MIDDLENAME],
      [LASTNAME],
      [ADDRESSLINE1],
      [ADDRESSLINE2],
      [ADDRESSLINE3],
      [ADDRESSLINE4],
      [ADDRESSLINE5],
      [CITY],
      [STATE],
      [POSTCODE],
      [PHONENUMBER],
      [EMAILADDRESS],
      [GIFTDATE],
      [GIFTAMOUNT],
      [CURRENCY].[ISO4217] as [CURRENCYISOCURRENCYCODE],
      [CURRENCY].[DECIMALDIGITS] as [CURRENCYDECIMALDIGITS],
      [CURRENCY].[CURRENCYSYMBOL],
      [CURRENCY].[SYMBOLDISPLAYSETTINGCODE] as [CURRENCYSYMBOLDISPLAYSETTINGCODE],
      [LASTNAME] as [LASTNAME_STRING],
      [GIFTDATE] as [GIFTDATE_DATE]
    from @RESULTTABLE as [RESULTTABLE]
    inner join dbo.[CURRENCY] on [CURRENCY].[ID] = @BASECURRENCYID
    order by [LASTNAME], [FULLNAME], [FIRSTNAME], [MIDDLENAME], [GIFTDATE];
  end try

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

  return 0;