USP_CONSTITUENT_GETGIVINGHISTORY

Returns the data for the Constituent Giving History List.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@INCLUDESOFTCREDIT bit IN
@NUMBERTOSHOWCODE smallint IN
@CURRENTAPPUSERID uniqueidentifier IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_CONSTITUENT_GETGIVINGHISTORY
            (
                @CONSTITUENTID uniqueidentifier,
                @INCLUDESOFTCREDIT bit,
                @NUMBERTOSHOWCODE smallint,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @SITEFILTERMODE tinyint = 0,
                @SITESSELECTED xml = null,
                @SECURITYFEATUREID uniqueidentifier = null,
                @SECURITYFEATURETYPE tinyint = null
            ) as
                set nocount on;

                declare @CURRENTDATE datetime;
                set @CURRENTDATE = getdate();

                if @NUMBERTOSHOWCODE in (0,3,4,5) begin
                    declare @STARTDATE datetime;
                    if @NUMBERTOSHOWCODE = 3 --Last 30 Days

                        set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-29,@CURRENTDATE));
                    else if @NUMBERTOSHOWCODE = 4 --Last 90 Days

                        set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-89,@CURRENTDATE));
                    else if @NUMBERTOSHOWCODE = 5 --Last Year

                        set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-1,@CURRENTDATE)))
                    else
                        set @STARTDATE = @CURRENTDATE;

                    declare @ENDDATE datetime;
                    set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE);

                    with MYSITESREV_CTE as 
                    (
                        select
                            ID,
                            CONSTITUENTID,
                            AMOUNT,
                            TRANSACTIONTYPE,
                            TRANSACTIONTYPECODE,
                            DATE,
                            DATEADDED
                        from
                            dbo.REVENUE

                        where 
                            REVENUE.CONSTITUENTID = @CONSTITUENTID
                        and    exists 
                            (
                                select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
                                cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
                                where
                                    RSSUB.REVENUEID = REVENUE.ID
                                    -- Using a case statement since the standard site extension filters

                                    -- resulted in a poor plan

                                    and case 
                                            when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
                                            when exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)) then 1
                                            else 0 
                                        end = 1
                                    and 
                                    (
                                        @SITEFILTERMODE = 0
                                        or 
                                        exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
                                    )
                            )
                    )

                    select
                        MYSITESREV_CTE.ID,
                        MYSITESREV_CTE.ID as RECORDID,
                        MYSITESREV_CTE.DATE,
                        MYSITESREV_CTE.DATEADDED,
                        MYSITESREV_CTE.AMOUNT,
                        case MYSITESREV_CTE.TRANSACTIONTYPECODE 
                            when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT(MYSITESREV_CTE.ID)
                            else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(MYSITESREV_CTE.ID, 1, 0)  -- Calculate using base currency for now

                        end as GROSSAMOUNT,
                        case MYSITESREV_CTE.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(MYSITESREV_CTE.ID) else null end as BALANCE,
                        MYSITESREV_CTE.TRANSACTIONTYPECODE,
                        MYSITESREV_CTE.TRANSACTIONTYPE,
                        dbo.UFN_REVENUE_DESIGNATIONLIST(MYSITESREV_CTE.ID) as DESIGNATION,
                        (
                            select 
                                dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME) 
                            from 
                                dbo.CAMPAIGN 
                            inner join 
                                dbo.REVENUESPLITCAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
                            inner join
                                dbo.REVENUESPLIT on REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUESPLIT.ID
                            where
                                REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID
                        ) as CAMPAIGNS,
                        dbo.UFN_REVENUE_BUILDSITELIST(MYSITESREV_CTE.ID) SITES
                    from MYSITESREV_CTE
                        left join
                            dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = MYSITESREV_CTE.ID
                        left join
                            dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
                    where
                        (MYSITESREV_CTE.TRANSACTIONTYPECODE = 1  --Pledge

                            or (MYSITESREV_CTE.TRANSACTIONTYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9,10,11,12,13))  --Planned gift

                            or (MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 
                                and exists (
                                        select 1 
                                        from dbo.REVENUESPLIT RS 
                                        where RS.REVENUEID = MYSITESREV_CTE.ID 
                                            and RS.APPLICATIONCODE in (0, 3
                                ) -- Payment

                            )
                        ) 
                        and (not @NUMBERTOSHOWCODE in (3,4,5
                            or (MYSITESREV_CTE.DATE >= @STARTDATE and MYSITESREV_CTE.DATE <= @ENDDATE)) 
                        and    MYSITESREV_CTE.CONSTITUENTID = @CONSTITUENTID
                        and exists(
                                select REVENUESPLIT.ID
                                from dbo.REVENUESPLIT
                                inner join dbo.DESIGNATION on REVENUESPLIT.DESIGNATIONID = DESIGNATION.ID
                                where REVENUEID=MYSITESREV_CTE.ID
                        )
                    order by
                        DATE desc, DATEADDED desc, AMOUNT desc;                        
                end
                else begin
                    declare @NUMBERTOSHOW int;
                    if @NUMBERTOSHOWCODE = 1
                        set @NUMBERTOSHOW = 5;
                    else if @NUMBERTOSHOWCODE = 2
                        set @NUMBERTOSHOW = 10;
                    else
                        set @NUMBERTOSHOW = 0;

                    with MYSITESREV_CTE as 
                    (
                        select
                            ID,
                            CONSTITUENTID,
                            AMOUNT,
                            TRANSACTIONTYPE,
                            TRANSACTIONTYPECODE,
                            DATE,
                            DATEADDED
                        from
                            dbo.REVENUE

                        where 
                            REVENUE.CONSTITUENTID = @CONSTITUENTID
                        and    exists 
                            (
                                select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
                                cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
                                where 
                                    RSSUB.REVENUEID = REVENUE.ID
                                    -- Using a case statement since the standard site extension filters

                                    -- resulted in a poor plan

                                    and case 
                                            when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
                                            when exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)) then 1
                                            else 0 
                                        end = 1
                                    and 
                                    (
                                        @SITEFILTERMODE = 0
                                        or 
                                        exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
                                    )
                            )
                    )

                    select top(@NUMBERTOSHOW)
                        MYSITESREV_CTE.ID,
                        MYSITESREV_CTE.ID as RECORDID,
                        MYSITESREV_CTE.DATE,
                        MYSITESREV_CTE.DATEADDED,
                        MYSITESREV_CTE.AMOUNT,
                        case MYSITESREV_CTE.TRANSACTIONTYPECODE
                            when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT(MYSITESREV_CTE.ID)
                            else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(MYSITESREV_CTE.ID, 1, 0) -- Calculate using base currency for now 

                        end as GROSSAMOUNT,
                        case MYSITESREV_CTE.TRANSACTIONTYPECODE 
                            when 1 then dbo.UFN_PLEDGE_GETBALANCE(MYSITESREV_CTE.ID) 
                            else null 
                        end as BALANCE,
                        MYSITESREV_CTE.TRANSACTIONTYPECODE,
                        MYSITESREV_CTE.TRANSACTIONTYPE,
                        dbo.UFN_REVENUE_DESIGNATIONLIST(MYSITESREV_CTE.ID) as DESIGNATION,
                        (
                            select 
                                dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME) 
                            from 
                                dbo.CAMPAIGN 
                            inner join 
                                dbo.REVENUESPLITCAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
                            inner join
                                dbo.REVENUESPLIT on REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUESPLIT.ID
                            where
                                REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID
                        ) as CAMPAIGNS,
                        dbo.UFN_REVENUE_BUILDSITELIST(MYSITESREV_CTE.ID) SITES
                    from
                        MYSITESREV_CTE
                    left join
                        dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = MYSITESREV_CTE.ID
                    left join
                        dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
                    where
                        (MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 or --Pledge

                        (MYSITESREV_CTE.TRANSACTIONTYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9,10,11,12,13)) or  --Planned gift

                        (MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and exists (
                        select 1 from dbo.REVENUESPLIT RS where RS.REVENUEID = MYSITESREV_CTE.ID and RS.APPLICATIONCODE in (0, 3)))) and -- Payment

                        MYSITESREV_CTE.CONSTITUENTID = @CONSTITUENTID
                        and exists(
                                select ID
                                from dbo.REVENUESPLIT
                                where REVENUEID=MYSITESREV_CTE.ID
                        )
                    order by
                        DATE desc, DATEADDED desc, AMOUNT desc;
                end