USP_REPORT_APPEALPERFORMANCE

Data retrieval for Appeal Performance report.

Parameters

Parameter Parameter Type Mode Description
@STARTDATE datetime IN
@ENDDATE datetime IN
@CATEGORYID uniqueidentifier IN
@BUSINESSUNITID uniqueidentifier IN
@REPORTCODEID uniqueidentifier IN
@SITEID uniqueidentifier IN
@BYBREAKDOWN bit IN
@REPORTUSERID nvarchar(128) IN
@APPEALID uniqueidentifier IN
@CURRENCYCODE tinyint IN
@ALTREPORTUSERID nvarchar(128) IN
@IDSETID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_REPORT_APPEALPERFORMANCE]
(
  @STARTDATE datetime = null,
  @ENDDATE datetime = null,
  @CATEGORYID uniqueidentifier = null,
  @BUSINESSUNITID uniqueidentifier = null,
  @REPORTCODEID uniqueidentifier = null,
  @SITEID uniqueidentifier = null,
  @BYBREAKDOWN bit = null,
  @REPORTUSERID nvarchar(128) = null,
  @APPEALID uniqueidentifier = null,
  @CURRENCYCODE tinyint = null,
  @ALTREPORTUSERID nvarchar(128) = null,
  @IDSETID uniqueidentifier = null
)
as
  begin
    set nocount on;
    set transaction isolation level read uncommitted;

    declare @CURRENTAPPUSERID uniqueidentifier;
    declare @CURRENCYID uniqueidentifier;
    declare @ORGANIZATIONCURRENCYID uniqueidentifier;
    declare @CURRENCYDECIMALDIGITS tinyint;
    declare @CURRENCYROUNDINGTYPECODE tinyint;

    declare @SQL nvarchar(max);
    declare @PARAMETERS nvarchar(max);
    declare @COMMONFILTERS nvarchar(max) = '';
    declare @IDSETDBOBJECTNAME nvarchar(128);
    declare @DBOBJECTTYPE tinyint;

    declare @TOTALDONORCOUNT integer;
    declare @TOTALGOAL money;
    declare @TOTALSOLICITEDCOUNT integer;
    declare @TOTALGIFTCOUNT integer;
    declare @TOTALCASHGIFTCOUNT integer;
    declare @TOTALREGULARGIFTCOUNT integer;

    set @STARTDATE = dbo.[UFN_DATE_GETEARLIESTTIME](@STARTDATE);
    set @ENDDATE = dbo.[UFN_DATE_GETLATESTTIME](@ENDDATE);

    set @CURRENTAPPUSERID = dbo.UFN_APPUSER_GETREPORTAPPUSERID(@REPORTUSERID, @ALTREPORTUSERID);

    set @CURRENCYCODE = isnull(@CURRENCYCODE, 1);
    set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

    if @CURRENCYCODE = 1
      select
        @CURRENCYID = [CURRENCY].[ID],
        @CURRENCYDECIMALDIGITS = [CURRENCY].[DECIMALDIGITS],
        @CURRENCYROUNDINGTYPECODE = [CURRENCY].[ROUNDINGTYPECODE]
      from dbo.[CURRENCY]
      where [CURRENCY].[ID] = @ORGANIZATIONCURRENCYID;
    else if @CURRENCYCODE = 2
      select
        @CURRENCYID = [CURRENCY].[ID],
        @CURRENCYDECIMALDIGITS = [CURRENCY].[DECIMALDIGITS],
        @CURRENCYROUNDINGTYPECODE = [CURRENCY].[ROUNDINGTYPECODE]
      from dbo.[CURRENCY]
      where [CURRENCY].[ID] = dbo.[UFN_APPUSER_GETBASECURRENCY](@CURRENTAPPUSERID);
    else 
      begin
        set @CURRENCYCODE = 0;

        select
          @CURRENCYID = [CURRENCY].[ID],
          @CURRENCYDECIMALDIGITS = [CURRENCY].[DECIMALDIGITS],
          @CURRENCYROUNDINGTYPECODE = [CURRENCY].[ROUNDINGTYPECODE]
        from dbo.[APPEAL]
        inner join dbo.[CURRENCY] on [APPEAL].[BASECURRENCYID] = [CURRENCY].[ID]
        where [APPEAL].[ID] = @APPEALID;
      end

    if @CATEGORYID is not null set @COMMONFILTERS = 
      '[A].[APPEALCATEGORYCODEID] = @CATEGORYID' + char(13); 

    if @BUSINESSUNITID is not null set @COMMONFILTERS = @COMMONFILTERS + case when len(@COMMONFILTERS) > 0 then ' and ' else '' end  +
      'exists (select top 1 1 from dbo.[APPEALBUSINESSUNIT] where [APPEALBUSINESSUNIT].[BUSINESSUNITCODEID] = @BUSINESSUNITID and [APPEALBUSINESSUNIT].[APPEALID] = [A].[ID])' + char(13);

    if @REPORTCODEID is not null set @COMMONFILTERS = @COMMONFILTERS + case when len(@COMMONFILTERS) > 0 then ' and ' else '' end  +
      '[A].[APPEALREPORT1CODEID] = @REPORTCODEID' + char(13);

    if @SITEID is not null set @COMMONFILTERS = @COMMONFILTERS + case when len(@COMMONFILTERS) > 0 then ' and ' else '' end  +
      '[A].[SITEID] = @SITEID' + char(13);

    if @APPEALID is not null set @COMMONFILTERS = @COMMONFILTERS + case when len(@COMMONFILTERS) > 0 then ' and ' else '' end  +
      '[A].[ID] = @APPEALID' + char(13);

    if @IDSETID is not null
      begin
        select
          @IDSETDBOBJECTNAME = [DBOBJECTNAME],  
          @DBOBJECTTYPE = [OBJECTTYPE]  
        from dbo.[IDSETREGISTER]  
        where [ID] = @IDSETID;

        if left(@IDSETDBOBJECTNAME, 1) <> '[' set @IDSETDBOBJECTNAME = '[' + @IDSETDBOBJECTNAME + ']';  

        if @DBOBJECTTYPE = 1  
          set @IDSETDBOBJECTNAME = @IDSETDBOBJECTNAME + '()';  
        else if @DBOBJECTTYPE = 2  
          set @IDSETDBOBJECTNAME = @IDSETDBOBJECTNAME + '(''' + convert(nvarchar(36), @IDSETID) + ''')';

        set @COMMONFILTERS = @COMMONFILTERS + case when len(@COMMONFILTERS) > 0 then ' and ' else '' end  +
          '[A].[ID] in (select [ID] from dbo.' + @IDSETDBOBJECTNAME + ') ' + char(13);
      end

    if object_id('tempdb..#USP_REPORT_APPEALPERFORMANCE') is not null
      drop table #USP_REPORT_APPEALPERFORMANCE;

    create table #USP_REPORT_APPEALPERFORMANCE (
      [APPEALID] nvarchar(100) collate database_default,
      [NAME] nvarchar(100) collate database_default,
      [GOAL] money,
      [TOTALGOAL] money,
      [SOLICITEDCOUNT] integer,
      [DONORCOUNT] integer,
      [GIFTCOUNT] integer,
      [TOTALGIFTCOUNT] integer,
      [TOTALDONORS] integer,
      [DESIGNATIONID] nvarchar(100) collate database_default,
      [DESNAME] nvarchar(512) collate database_default,
      [DESTOTALRAISED] money,
      [DESTOTALRECEIVED] money,
      [DESTOTALRECEIVED_REGULAR] money,
      [GIFTCOUNT_REGULAR] integer,
      [TOTALGIFTCOUNT_REGULAR] integer,
      [DESTOTALRECEIVED_CASH] money,
      [GIFTCOUNT_CASH] integer,
      [TOTALGIFTCOUNT_CASH] money,
      [DESGROSSAMOUNT] money,
      [CURRENCYID] uniqueidentifier,
      [CURRENCYISO] nvarchar(3) collate database_default,
      [CURRENCYDECIMALDIGITS] tinyint,
      [CURRENCYSYMBOL] nvarchar(5) collate database_default,
      [CURRENCYSYMBOLDISPLAYSETTINGCODE] tinyint,
      [TOTALSOLICITEDCOUNT] integer,
      [APPEALID_GUID] uniqueidentifier,
      [DESNAMEFORORDER] nvarchar(512) collate database_default);

    create index IX_USP_REPORT_APPEALPERFORMANCE_TOTALS
      on #USP_REPORT_APPEALPERFORMANCE ([APPEALID_GUID])
      include (
        [DONORCOUNT],
        [GOAL],
        [SOLICITEDCOUNT],
        [GIFTCOUNT],
        [GIFTCOUNT_CASH],
        [GIFTCOUNT_REGULAR]
      );

    set @SQL =
      'insert into #USP_REPORT_APPEALPERFORMANCE (' + char(13) +
      '  [APPEALID],' + char(13) +
      '  [NAME],' + char(13) +
      '  [GOAL],' + char(13) +
      '  [SOLICITEDCOUNT],' + char(13) +
      '  [DONORCOUNT],' + char(13) +
      '  [GIFTCOUNT],' + char(13) +
      '  [DESIGNATIONID],' + char(13) +
      '  [DESNAME],' + char(13) +
      '  [DESTOTALRAISED],' + char(13) +
      '  [DESTOTALRECEIVED],' + char(13) +
      '  [DESTOTALRECEIVED_REGULAR],' + char(13) +
      '  [GIFTCOUNT_REGULAR],' + char(13) +
      '  [DESTOTALRECEIVED_CASH],' + char(13) +
      '  [GIFTCOUNT_CASH],' + char(13) +
      '  [DESGROSSAMOUNT],' + char(13) +
      '  [CURRENCYID],' + char(13) +
      '  [CURRENCYISO],' + char(13) +
      '  [CURRENCYDECIMALDIGITS],' + char(13) +
      '  [CURRENCYSYMBOL],' + char(13) +
      '  [CURRENCYSYMBOLDISPLAYSETTINGCODE],' + char(13) +
      '  [APPEALID_GUID],' + char(13) +
      '  [DESNAMEFORORDER]' + char(13) +
      ')' + char(13) +
      'select' + char(13) +
      '  ''http://www.blackbaud.com/APPEALID?APPEALID='' + convert(nvarchar(36), [A].[ID]),' + char(13) +
      '  [A].[NAME],' + char(13) +
      '  [A].[GOALINCURRENCY],' + char(13) +
      '  isnull([SOLICITEDCOUNTS].[SOLICITEDCOUNT], 0),' + char(13) +
      '  isnull([REVENUECOUNTS].[DONORCOUNT], 0),' + char(13) +
      '  isnull([REVENUECOUNTS].[GIFTCOUNT], 0),' + char(13) +
      '  ''http://www.blackbaud.com/DESIGNATIONID?DESIGNATIONID='' + convert(nvarchar(36), isnull([DRI].[DESID], [DPE].[DESID])),' + char(13) +
      '  isnull([DRI].[DESNAME], [DPE].[DESNAME]),' + char(13) +
      '  isnull([DRI].[DESTOTALRECEIVED], 0) + isnull([DPE].[DESTOTALPLEDGED], 0) - isnull([DPE].[DESPLEDGESWRITTENOFF], 0),' + char(13) +
      '  isnull([DRI].[DESTOTALRECEIVED], 0) + isnull([DPE].[DESPLEDGESPAID], 0),' + char(13) +
      '  isnull([DRI].[DESTOTALRECEIVED_REGULAR], 0),' + char(13) +
      '  isnull([REVENUECOUNTS].[REGULARGIFTCOUNT], 0),' + char(13) +
      '  isnull([DRI].[DESTOTALRECEIVED], 0) + (isnull([DPE].[DESTOTALPLEDGED], 0) - (isnull([DPE].[DESPLEDGESPAID], 0) + isnull([DPE].[DESPLEDGESWRITTENOFF], 0))) - isnull([DRI].[DESTOTALRECEIVED_REGULAR], 0),' + char(13) +
      '  isnull([REVENUECOUNTS].[CASHGIFTCOUNT], 0) as [GIFTCOUNT_CASH],' + char(13) +
      '  isnull([DRI].[DESGROSSAMOUNT], 0),' + char(13) +
      '  [CURRENCYPROPERTIES].[ID],' + char(13) +
      '  [CURRENCYPROPERTIES].[ISO4217],' + char(13) +
      '  [CURRENCYPROPERTIES].[DECIMALDIGITS],' + char(13) +
      '  [CURRENCYPROPERTIES].[CURRENCYSYMBOL],' + char(13) +
      '  [CURRENCYPROPERTIES].[SYMBOLDISPLAYSETTINGCODE],' + char(13) +
      '  [A].[ID],' + char(13) +
      '  [DRI].[DESNAME]' + char(13) +
      'from' + char(13) +
      '(' + char(13) +
      '  select' + char(13) +
      '    [PAYMENTSTODESIGNATION].[DESID],' + char(13) +
      '    [PAYMENTSTODESIGNATION].[DESNAME],' + char(13) +
      '    [PAYMENTSTODESIGNATION].[DESTOTALRECEIVED],' + char(13) +
      '    [PAYMENTSTODESIGNATION].[DESTOTALRECEIVED_REGULAR],' + char(13) +
      '    [PAYMENTSTODESIGNATION].[DESGROSSAMOUNT],' + char(13) +
      '    [PAYMENTSTODESIGNATION].[APPEALID]' + char(13) +
      '  from dbo.[UFN_DESIGNATION_RAISEDBYAPPEAL_INCURRENCY_INLINE](@STARTDATE, @ENDDATE, @CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYCODE,' + char(13) +
      '                                                              @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) as [PAYMENTSTODESIGNATION]' + char(13);

    if len(@COMMONFILTERS) > 0 set @SQL = @SQL +
      '  inner join dbo.[APPEAL] as [A] on [A].[ID] = [PAYMENTSTODESIGNATION].[APPEALID]' + char(13) +
      '  where ' + @COMMONFILTERS;

    set @SQL = @SQL + 
      ') as [DRI]' + char(13) + 
      'full join' + char(13) + 
      '(' + char(13) +
      '  select' + char(13) +
      '    [PLEDGESTODESIGNATION].[DESID],' + char(13) +
      '    [PLEDGESTODESIGNATION].[DESNAME],' + char(13) +
      '    [PLEDGESTODESIGNATION].[DESTOTALPLEDGED],' + char(13) +
      '    [PLEDGESTODESIGNATION].[DESPLEDGESPAID],' + char(13) +
      '    [PLEDGESTODESIGNATION].[DESPLEDGESWRITTENOFF],' + char(13) +
      '    [PLEDGESTODESIGNATION].[APPEALID]' + char(13) +
      '  from dbo.[UFN_DESIGNATION_PLEDGEDBYAPPEAL_INCURRENCY_INLINE](@STARTDATE, @ENDDATE, @CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYCODE,' + char(13) +
      '                                                               @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) as [PLEDGESTODESIGNATION]' + char(13);

    if len(@COMMONFILTERS) > 0 set @SQL = @SQL +
      '  inner join dbo.[APPEAL] as [A] on [A].[ID] = [PLEDGESTODESIGNATION].[APPEALID]' + char(13) +
      '  where ' + @COMMONFILTERS;

    set @SQL = @SQL +
      ') as [DPE] on ([DPE].[APPEALID] = [DRI].[APPEALID] and ([DPE].[DESID] = [DRI].[DESID] or ([DPE].[DESID] is null and [DRI].[DESID] is null)))' + char(13) +
      'right outer join dbo.[UFN_APPEAL_GETGOALINCURRENCY_BULK2](@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE, 1) as [A] ' +
                  'on [A].[ID] =[DRI].[APPEALID] or [A].[ID] = [DPE].[APPEALID]' + char(13) +
      'left outer join dbo.[UFN_APPEAL_REVENUECOUNTS_2](@STARTDATE, @ENDDATE) as [REVENUECOUNTS] on [REVENUECOUNTS].[APPEALID] = [A].[ID]' + char(13) +
      'left outer join dbo.[UFN_APPEAL_SOLICITEDCOUNTS](@STARTDATE, @ENDDATE) as [SOLICITEDCOUNTS] on [SOLICITEDCOUNTS].[APPEALID] = [A].[ID]' + char(13) +
      'outer apply dbo.[UFN_CURRENCY_GETPROPERTIES](isnull(@CURRENCYID, [A].[BASECURRENCYID])) as [CURRENCYPROPERTIES]' + char(13) +
      'where dbo.[UFN_SITEALLOWEDFORUSER](@CURRENTAPPUSERID, [A].[SITEID]) = 1' + char(13);

      if len(@COMMONFILTERS) > 0 set @SQL = @SQL + 
      'and ' + @COMMONFILTERS;

    set @SQL = @SQL + 
      'order by [A].[NAME], [DRI].[DESNAME];';

    set @PARAMETERS = '@STARTDATE datetime, @ENDDATE datetime, @CATEGORYID uniqueidentifier, @BUSINESSUNITID uniqueidentifier, @REPORTCODEID uniqueidentifier, ' +
                      '@SITEID uniqueidentifier, @CURRENCYID uniqueidentifier, @ORGANIZATIONCURRENCYID uniqueidentifier, @CURRENCYCODE tinyint, ' +
                      '@CURRENCYDECIMALDIGITS tinyint, @CURRENCYROUNDINGTYPECODE tinyint, @CURRENTAPPUSERID uniqueidentifier, @APPEALID uniqueidentifier';


    exec sp_executesql @SQL,
                       @PARAMETERS,
                       @STARTDATE = @STARTDATE,
                       @ENDDATE = @ENDDATE,
                       @CATEGORYID = @CATEGORYID,
                       @BUSINESSUNITID = @BUSINESSUNITID,
                       @REPORTCODEID = @REPORTCODEID,
                       @SITEID = @SITEID,
                       @CURRENCYID = @CURRENCYID,
                       @ORGANIZATIONCURRENCYID = @ORGANIZATIONCURRENCYID,
                       @CURRENCYCODE = @CURRENCYCODE,
                       @CURRENCYDECIMALDIGITS = @CURRENCYDECIMALDIGITS,
                       @CURRENCYROUNDINGTYPECODE = @CURRENCYROUNDINGTYPECODE,
                       @CURRENTAPPUSERID = @CURRENTAPPUSERID,
                       @APPEALID = @APPEALID;

    select 
      @TOTALDONORCOUNT = sum([DONORCOUNT]),
      @TOTALGOAL = sum([GOAL]),
      @TOTALSOLICITEDCOUNT = sum([SOLICITEDCOUNT]),
      @TOTALGIFTCOUNT = sum([GIFTCOUNT]),
      @TOTALCASHGIFTCOUNT = sum([GIFTCOUNT_CASH]),
      @TOTALREGULARGIFTCOUNT = sum([GIFTCOUNT_REGULAR])
    from (
      select distinct
        [APPEALID_GUID],
        [DONORCOUNT],
        [GOAL],
        [SOLICITEDCOUNT],
        [GIFTCOUNT],
        [GIFTCOUNT_CASH],
        [GIFTCOUNT_REGULAR]
      from #USP_REPORT_APPEALPERFORMANCE
    ) as [TEMP];

    update #USP_REPORT_APPEALPERFORMANCE set
      [TOTALGOAL] = @TOTALGOAL,
      [TOTALGIFTCOUNT] = @TOTALGIFTCOUNT,
      [TOTALDONORS] = @TOTALDONORCOUNT,
      [TOTALGIFTCOUNT_REGULAR] = @TOTALREGULARGIFTCOUNT,
      [TOTALGIFTCOUNT_CASH] = @TOTALCASHGIFTCOUNT,
      [TOTALSOLICITEDCOUNT] = @TOTALSOLICITEDCOUNT;

    select
      [APPEALID],
      [NAME],
      [GOAL],
      [TOTALGOAL],
      [SOLICITEDCOUNT],
      [DONORCOUNT],
      [GIFTCOUNT],
      [TOTALGIFTCOUNT],
      [TOTALDONORS],
      [DESIGNATIONID],
      [DESNAME],
      [DESTOTALRAISED],
      [DESTOTALRECEIVED],
      [DESTOTALRECEIVED_REGULAR],
      [GIFTCOUNT_REGULAR],
      [TOTALGIFTCOUNT_REGULAR],
      [DESTOTALRECEIVED_CASH],
      [GIFTCOUNT_CASH],
      [TOTALGIFTCOUNT_CASH],
      [DESGROSSAMOUNT],
      [CURRENCYID],
      [CURRENCYISO],
      [CURRENCYDECIMALDIGITS],
      [CURRENCYSYMBOL],
      [CURRENCYSYMBOLDISPLAYSETTINGCODE],
      [TOTALSOLICITEDCOUNT]
    from #USP_REPORT_APPEALPERFORMANCE
    order by [NAME], [DESNAMEFORORDER];

    drop table #USP_REPORT_APPEALPERFORMANCE;
  end