USP_REPORT_REVENUEDETAILGROUPTOTALS

Returns the total gift and balance values for the revenue detail group/household report.

Parameters

Parameter Parameter Type Mode Description
@STARTDATE datetime IN
@ENDDATE datetime IN
@REVENUETRANSACTIONQUERY uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@APPEALID uniqueidentifier IN
@DESIGNATIONID uniqueidentifier IN
@INCLUDEGROUPS bit IN
@CURRENTAPPUSERID uniqueidentifier IN
@REPORTUSERID nvarchar(128) IN
@CURRENCYCODE tinyint IN
@ALTREPORTUSERID nvarchar(128) IN

Definition

Copy


            CREATE procedure dbo.USP_REPORT_REVENUEDETAILGROUPTOTALS
            (
                @STARTDATE datetime = null
                @ENDDATE datetime = null,
                @REVENUETRANSACTIONQUERY uniqueidentifier = null,
                @CONSTITUENTID uniqueidentifier = null,
                @APPEALID uniqueidentifier = null,
                @DESIGNATIONID uniqueidentifier = null,
                @INCLUDEGROUPS bit = 0,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @REPORTUSERID nvarchar(128) = null,
                @CURRENCYCODE tinyint = null,
                @ALTREPORTUSERID nvarchar(128) = null
            )
            with execute as owner
            as
            set nocount on;

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

            declare @NOW datetime = getdate();

            declare @STARTDATEEARLIEST datetime = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
            declare @ENDDATELATEST datetime = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);

            declare @ISADMIN bit = 0
            if dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
                set @ISADMIN = 1;

            declare @HASSITES bit = 0;
            if exists(select 1 from dbo.SITE)
                set @HASSITES = 1;


            declare @SQLTOEXEC nvarchar(max);

            declare @DBOBJECTNAME nvarchar(128);
            declare @DBOBJECTTYPE smallint;

            if @REVENUETRANSACTIONQUERY is not null begin
                if not exists(select ID from dbo.IDSETREGISTER where ID = @REVENUETRANSACTIONQUERY) raiserror('ID set does not exist in the database.', 15, 1);
                select @DBOBJECTNAME = DBOBJECTNAME, @DBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @REVENUETRANSACTIONQUERY;
                if @DBOBJECTTYPE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '()';
                else if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @REVENUETRANSACTIONQUERY) + ''')';
            end

            declare @ORIGINCODE tinyint;
            select @ORIGINCODE = coalesce(ORGANIZATIONAMOUNTORIGINCODE, 0) from dbo.MULTICURRENCYCONFIGURATION;

            declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
            declare @DECIMALDIGITS tinyint;
            declare @ROUNDINGTYPECODE tinyint;
            select
                @DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
                @ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
            from dbo.CURRENCY where CURRENCY.ID = @ORGANIZATIONCURRENCYID;

            set @SQLTOEXEC = 
                '
                with DONATIONREFUNDED_CTE as (
                   select ORDERSPLIT.ID as REVENUESPLITID, CREDITLINEITEM.BASEAMOUNT as DONATIONREFUNDED
                    from dbo.FINANCIALTRANSACTIONLINEITEM CREDITLINEITEM
                        inner join dbo.CREDITITEM_EXT on CREDITLINEITEM.ID = CREDITITEM_EXT.ID
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM ORDERLINEITEM on ORDERLINEITEM.ID = CREDITLINEITEM.SOURCELINEITEMID
                        inner join dbo.REVENUESPLIT_EXT ORDERSPLIT on ORDERLINEITEM.ID = ORDERSPLIT.ID
                    where CREDITITEM_EXT.TYPECODE = 2 and ORDERSPLIT.TYPECODE = 0 AND ORDERSPLIT.APPLICATIONCODE = 0
                ),
                ORDERPAYMENT_CTE as (
                    select ORDERPAYMENTLINEITEM.SOURCELINEITEMID as ID, coalesce(sum(ORDERPAYMENTLINEITEM.BASEAMOUNT), 0) as BASEAMOUNT, coalesce(sum(ORDERPAYMENTLINEITEM.TRANSACTIONAMOUNT), 0) as TRANSACTIONAMOUNT
                        from dbo.FINANCIALTRANSACTIONLINEITEM ORDERPAYMENTLINEITEM
                        inner join dbo.SALESORDERPAYMENT on SALESORDERPAYMENT.PAYMENTID = ORDERPAYMENTLINEITEM.FINANCIALTRANSACTIONID 
                    where ORDERPAYMENTLINEITEM.SOURCELINEITEMID is not null
                    group by ORDERPAYMENTLINEITEM.SOURCELINEITEMID
                ),
                ORDERITEMPAYMENT_CTE as (
                    select CONTRIBUTEDMEMBERSHIPLINEITEM.ID, isnull(ORDERPAYMENT_CTE.BASEAMOUNT, 0) as BASEAMOUNT, isnull(ORDERPAYMENT_CTE.TRANSACTIONAMOUNT, 0) as TRANSACTIONAMOUNT
                        from dbo.FINANCIALTRANSACTIONLINEITEM CONTRIBUTEDMEMBERSHIPLINEITEM
                        inner join dbo.REVENUESPLIT_EXT CONTRIBUTEDMEMBERSHIPSPLIT on CONTRIBUTEDMEMBERSHIPSPLIT.ID = CONTRIBUTEDMEMBERSHIPLINEITEM.ID
                      inner join dbo.SALESORDER on CONTRIBUTEDMEMBERSHIPLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
                        left join ORDERPAYMENT_CTE on CONTRIBUTEDMEMBERSHIPLINEITEM.ID = ORDERPAYMENT_CTE.ID
                    where 
                        ((CONTRIBUTEDMEMBERSHIPSPLIT.TYPECODE = 0 
                            and CONTRIBUTEDMEMBERSHIPSPLIT.APPLICATIONCODE = 0 
                            and CONTRIBUTEDMEMBERSHIPLINEITEM.SOURCELINEITEMID is not null) 
                        or 
                        (CONTRIBUTEDMEMBERSHIPSPLIT.TYPECODE = 2 
                            and CONTRIBUTEDMEMBERSHIPSPLIT.APPLICATIONCODE = 5 
                            and exists (select * from dbo.FINANCIALTRANSACTIONLINEITEM DONATIONLINEITEM
                                            inner join dbo.REVENUESPLIT_EXT DONATIONSPLIT on DONATIONLINEITEM.ID = DONATIONSPLIT.ID
                                            where DONATIONSPLIT.TYPECODE = 0 and DONATIONSPLIT.APPLICATIONCODE = 0 and DONATIONLINEITEM.SOURCELINEITEMID = CONTRIBUTEDMEMBERSHIPSPLIT.ID
                            )))
                )' + nchar(13)

            set @SQLTOEXEC = @SQLTOEXEC + 
                '
                select sum(case when REVENUE.TYPECODE = 5 and ORDERPAYMENTFORMEMBERSHIP.ID is not null  then ORDERPAYMENTFORMEMBERSHIP.BASEAMOUNT - coalesce(DONATIONREFUNDED_CTE.DONATIONREFUNDED, 0)
                                when REVENUE.TYPECODE in (0,5,7) and ORDERPAYMENTFORMEMBERSHIP.ID is null then case @CURRENCYCODE when 0 then LI.BASEAMOUNT when 2 then LI.TRANSACTIONAMOUNT else LI.ORGAMOUNT end - coalesce(DONATIONREFUNDED_CTE.DONATIONREFUNDED, 0) 
                                else 0.00 end) as GIFTTOTAL,
                        sum(case when REVENUE.TYPECODE in (1,3,4,6,8)
                            then 
                             PLEDGESPLIT.AMOUNT
                            else 0.00 end) as PLEDGEBALANCETOTAL

                from dbo.FINANCIALTRANSACTION REVENUE ' + nchar(13)
                if @APPEALID is not null
                  set @SQLTOEXEC = @SQLTOEXEC + ' inner join dbo.REVENUE_EXT REX on REX.ID = REVENUE.ID ' + nchar(13)
                set @SQLTOEXEC = @SQLTOEXEC 
                + 'inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = REVENUE.ID
                inner join dbo.REVENUESPLIT_EXT REVENUESPLIT on REVENUESPLIT.ID = LI.ID
                inner join dbo.DESIGNATION on DESIGNATION.ID = REVENUESPLIT.DESIGNATIONID
                left outer join DONATIONREFUNDED_CTE on DONATIONREFUNDED_CTE.REVENUESPLITID = REVENUESPLIT.ID
                 left outer join ORDERITEMPAYMENT_CTE as ORDERPAYMENTFORMEMBERSHIP on ORDERPAYMENTFORMEMBERSHIP.ID = REVENUESPLIT.ID

                 left outer join 
                (select P.ID,P.AMOUNT from dbo.FINANCIALTRANSACTION F 
                  inner join dbo.FINANCIALTRANSACTIONLINEITEM L on F.ID = L.FINANCIALTRANSACTIONID
                  inner join dbo.REVENUESPLIT_EXT R on R.ID = L.ID
                  inner join dbo.UFN_PLEDGE_CONVERTSPLITBALANCESBYPROPORTION_SPLIT
                  (
                      @ENDDATE,
                      0,
                      0,
                      @DECIMALDIGITS,
                      @STARTDATE,
                      @ENDDATE          
                  ) as  P on P.ID = L.ID 
                where L.TYPECODE = 0 and L.DELETEDON is null and F.TYPECODE in (1,3,4,6,8)
                  and F.CALCULATEDDATE between @STARTDATEEARLIEST and  @ENDDATELATEST
                  and (@DESIGNATIONID is null or R.DESIGNATIONID = @DESIGNATIONID)
                  and (@CONSTITUENTID is null or F.CONSTITUENTID = @CONSTITUENTID)
                  and exists (
                  select
                      MEMBERID 
                  from dbo.GROUPMEMBER GM
                  inner join dbo.GROUPDATA GD on GM.GROUPID = GD.ID
                  left join dbo.GROUPMEMBERDATERANGE GMDR on GM.ID = GMDR.GROUPMEMBERID
                  left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
                  where GM.MEMBERID = F.CONSTITUENTID ' + nchar(13)

             if @INCLUDEGROUPS = 1
                set @SQLTOEXEC = @SQLTOEXEC + ' and (GD.GROUPTYPECODE = 0 or GT.INCLUDEMEMBERGIVING = 1)))as PLEDGESPLIT on     PLEDGESPLIT.ID = LI.ID ' + nchar(13)
            else
                set @SQLTOEXEC = @SQLTOEXEC + ' and GD.GROUPTYPECODE = 0 )) as PLEDGESPLIT on     PLEDGESPLIT.ID = LI.ID  ' + nchar(13)

             if @REVENUETRANSACTIONQUERY is not null
                set @SQLTOEXEC = @SQLTOEXEC + 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on REVENUE.[ID] = SELECTION.[ID]' + nchar(13);

            set @SQLTOEXEC = @SQLTOEXEC + 
                'where LI.TYPECODE != 1 and LI.DELETEDON is null and REVENUE.CALCULATEDDATE between @STARTDATEEARLIEST and  @ENDDATELATEST and
                    (REVENUE.TYPECODE in (1,3,4,6,7,8) or
                    (REVENUE.TYPECODE = 5 and REVENUESPLIT.APPLICATIONCODE = 0) or
                    (REVENUE.TYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0,2,3,4,6,7,8,12,13)) or
                    (REVENUE.TYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0))  ' + nchar(13)

             if @APPEALID is not null 
            set @SQLTOEXEC = @SQLTOEXEC + 'and (@APPEALID is null or REX.APPEALID = @APPEALID) ' + nchar(13)

             set @SQLTOEXEC = @SQLTOEXEC + ' and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
                    and (@CONSTITUENTID is null or REVENUE.CONSTITUENTID = @CONSTITUENTID)
                    -- Make sure the constituent is a member of a group

                    and exists (
                        select
                            MEMBERID 
                        from dbo.GROUPMEMBER GM
                        inner join dbo.GROUPDATA GD on GM.GROUPID = GD.ID
                        left join dbo.GROUPMEMBERDATERANGE GMDR on GM.ID = GMDR.GROUPMEMBERID
                        left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
                        where 
                            GM.MEMBERID = REVENUE.CONSTITUENTID' + nchar(13)

            if @INCLUDEGROUPS = 1
                set @SQLTOEXEC = @SQLTOEXEC + ' and (GD.GROUPTYPECODE = 0 or GT.INCLUDEMEMBERGIVING = 1) -- Is either a household or a custom group with include group member giving turned on ' + nchar(13)

            else
                set @SQLTOEXEC = @SQLTOEXEC + ' and GD.GROUPTYPECODE = 0 -- Is a household ' + nchar(13)


            set @SQLTOEXEC = @SQLTOEXEC + 
                'and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= @CURRENTDATEEARLIESTTIME))
                or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @CURRENTDATEEARLIESTTIME))
                or (GMDR.DATEFROM <= @CURRENTDATEEARLIESTTIME and GMDR.DATETO >= @CURRENTDATEEARLIESTTIME))
                )' + nchar(13)

            if @ISADMIN != 1 and @HASSITES = 1
                set @SQLTOEXEC = @SQLTOEXEC +
                    'and exists (select 1 from dbo.REVENUESPLIT where REVENUEID = REVENUE.ID 
                                and exists
                                (
                                    select HASPERMISSION
                                    from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                    cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, ''8F250015-83FB-44d5-A467-E0A760256768'', REVSITES.SITEID)
                                ))
            ' + nchar(13)

            declare @CURRENTDATEEARLIESTTIME datetime;
            set @CURRENTDATEEARLIESTTIME = dbo.UFN_DATE_GETEARLIESTTIME(@NOW);

            exec sp_executesql @SQLTOEXEC
                    N'@STARTDATE datetime, @ENDDATE datetime, @APPEALID uniqueidentifier, @DESIGNATIONID uniqueidentifier, @CONSTITUENTID uniqueidentifier, @CURRENTDATEEARLIESTTIME datetime, @CURRENTAPPUSERID uniqueidentifier, @CURRENCYCODE tinyint, @CURRENCYID uniqueidentifier, @ORGANIZATIONCURRENCYID uniqueidentifier, @DECIMALDIGITS tinyint, @ROUNDINGTYPECODE tinyint, @ORIGINCODE tinyint, @NOW datetime, @STARTDATEEARLIEST datetime, @ENDDATELATEST datetime',
                    @STARTDATE=@STARTDATE, @ENDDATE=@ENDDATE, @APPEALID=@APPEALID, @DESIGNATIONID=@DESIGNATIONID, @CONSTITUENTID=@CONSTITUENTID, @CURRENTDATEEARLIESTTIME=@CURRENTDATEEARLIESTTIME, @CURRENTAPPUSERID=@CURRENTAPPUSERID, @CURRENCYCODE=@CURRENCYCODE,
                    @CURRENCYID=@ORGANIZATIONCURRENCYID, @ORGANIZATIONCURRENCYID=@ORGANIZATIONCURRENCYID, @DECIMALDIGITS=@DECIMALDIGITS, @ROUNDINGTYPECODE=@ROUNDINGTYPECODE, @ORIGINCODE = @ORIGINCODE, @NOW=@NOW, @STARTDATEEARLIEST=@STARTDATEEARLIEST, @ENDDATELATEST=@ENDDATELATEST;