USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTGROUP_CUMULATIVEGIVINGSUMMARY

The load procedure used by the view dataform template "Constituent Group Cumulative Giving Summary View Form"

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@GROUPINCLUDESMEMBERGIVING bit INOUT Group includes member giving
@ISHOUSEHOLD bit INOUT Is group household
@TOTALNUMBER int INOUT Total number
@TOTALAMOUNT money INOUT Total giving
@TOTALGROUPAMOUNT money INOUT Total giving by group
@TOTALGROUPMEMBERAMOUNT money INOUT Total giving by group members
@AVERAGEAMOUNT money INOUT Average amount
@MOSTFREQUENTAMOUNT money INOUT Most frequent amount
@TOTALPLEDGEBALANCE money INOUT Total pledge balance
@TOTALYEARS int INOUT Total years given
@CONSECUTIVEYEARS int INOUT Consecutive years
@GIVENSINCEFISCALYEAR datetime INOUT Given consecutively since
@LARGESTID uniqueidentifier INOUT ID
@LARGESTRECORDID uniqueidentifier INOUT Record ID
@LARGESTDATE datetime INOUT Date
@LARGESTTYPECODE tinyint INOUT Type code
@LARGESTTYPE nvarchar(22) INOUT Type
@LARGESTAMOUNT money INOUT Amount
@LARGESTPLEDGEBALANCE money INOUT Balance
@LARGESTSPLITS xml INOUT Splits
@LARGESTCONSTITUENTNAME nvarchar(300) INOUT Constituent
@FIRSTID uniqueidentifier INOUT ID
@FIRSTRECORDID uniqueidentifier INOUT Record ID
@FIRSTDATE datetime INOUT Date
@FIRSTTYPECODE tinyint INOUT Type code
@FIRSTTYPE nvarchar(22) INOUT Type
@FIRSTAMOUNT money INOUT Amount
@FIRSTPLEDGEBALANCE money INOUT Pledge balance
@FIRSTSPLITS xml INOUT Splits
@FIRSTCONSTITUENTNAME nvarchar(300) INOUT Constituent
@LATESTID uniqueidentifier INOUT ID
@LATESTRECORDID uniqueidentifier INOUT Record ID
@LATESTDATE datetime INOUT Date
@LATESTTYPECODE tinyint INOUT Type code
@LATESTTYPE nvarchar(22) INOUT Type
@LATESTAMOUNT money INOUT Amount
@LATESTPLEDGEBALANCE money INOUT Pledge balance
@LATESTSPLITS xml INOUT Splits
@LATESTCONSTITUENTNAME nvarchar(300) INOUT Constituent
@RECOGNITIONTOTALNUMBER int INOUT Total number
@RECOGNITIONTOTALAMOUNT money INOUT Total recognition
@RECOGNITIONTOTALGROUPAMOUNT money INOUT Total recognition for group
@RECOGNITIONTOTALGROUPMEMBERAMOUNT money INOUT Total recognition for group members
@RECOGNITIONAVERAGEAMOUNT money INOUT Average amount
@RECOGNITIONMOSTFREQUENTAMOUNT money INOUT Most frequent amount
@RECOGNITIONTOTALYEARS int INOUT Total years with recognition credit
@RECOGNITIONCONSECUTIVEYEARS int INOUT Consecutive years with recognition credit
@RECOGNITIONGIVENSINCEFISCALYEAR datetime INOUT Recognition given consecutively since
@RECOGNITIONLARGESTRECORDID uniqueidentifier INOUT Record ID
@RECOGNITIONLARGESTDATE datetime INOUT Date
@RECOGNITIONLARGESTTYPECODE tinyint INOUT Type code
@RECOGNITIONLARGESTTYPE nvarchar(22) INOUT Type
@RECOGNITIONLARGESTAMOUNT money INOUT Amount
@RECOGNITIONLARGESTCONSTITUENTNAME nvarchar(300) INOUT Constituent
@RECOGNITIONFIRSTRECORDID uniqueidentifier INOUT Record ID
@RECOGNITIONFIRSTDATE datetime INOUT Date
@RECOGNITIONFIRSTTYPECODE tinyint INOUT Type code
@RECOGNITIONFIRSTTYPE nvarchar(22) INOUT Type
@RECOGNITIONFIRSTAMOUNT money INOUT Amount
@RECOGNITIONFIRSTCONSTITUENTNAME nvarchar(300) INOUT Constituent
@RECOGNITIONLATESTRECORDID uniqueidentifier INOUT Record ID
@RECOGNITIONLATESTDATE datetime INOUT Date
@RECOGNITIONLATESTTYPECODE tinyint INOUT Type code
@RECOGNITIONLATESTTYPE nvarchar(22) INOUT Type
@RECOGNITIONLATESTAMOUNT money INOUT Amount
@RECOGNITIONLATESTCONSTITUENTNAME nvarchar(300) INOUT Constituent
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy


        CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTGROUP_CUMULATIVEGIVINGSUMMARY (
            @ID uniqueidentifier,
            @DATALOADED bit = 0 output,
            @GROUPINCLUDESMEMBERGIVING bit = null output,
            @ISHOUSEHOLD bit = null output,
            @TOTALNUMBER int = null output,
            @TOTALAMOUNT money = null output,
            @TOTALGROUPAMOUNT money = null output,
            @TOTALGROUPMEMBERAMOUNT money = null output,
            @AVERAGEAMOUNT money = null output,
            @MOSTFREQUENTAMOUNT money = null output,
            @TOTALPLEDGEBALANCE money = null output,
            @TOTALYEARS int = null output,
            @CONSECUTIVEYEARS int = null output,
            @GIVENSINCEFISCALYEAR datetime = null output,
            @LARGESTID uniqueidentifier = null output,
            @LARGESTRECORDID uniqueidentifier = null output,
            @LARGESTDATE datetime = null output,
            @LARGESTTYPECODE tinyint = null output,
            @LARGESTTYPE nvarchar(22) = null output,
            @LARGESTAMOUNT money = null output,
            @LARGESTPLEDGEBALANCE money = null output,
            @LARGESTSPLITS xml = null output,
            @LARGESTCONSTITUENTNAME nvarchar(300) = null output,
            @FIRSTID uniqueidentifier = null output,
            @FIRSTRECORDID uniqueidentifier = null output,
            @FIRSTDATE datetime = null output,
            @FIRSTTYPECODE tinyint = null output,
            @FIRSTTYPE nvarchar(22) = null output,
            @FIRSTAMOUNT money = null output,
            @FIRSTPLEDGEBALANCE money = null output,
            @FIRSTSPLITS xml = null output,
            @FIRSTCONSTITUENTNAME nvarchar(300) = null output,
            @LATESTID uniqueidentifier = null output,
            @LATESTRECORDID uniqueidentifier = null output,
            @LATESTDATE datetime = null output,
            @LATESTTYPECODE tinyint = null output,
            @LATESTTYPE nvarchar(22) = null output,
            @LATESTAMOUNT money = null output,
            @LATESTPLEDGEBALANCE money = null output,
            @LATESTSPLITS xml = null output,
            @LATESTCONSTITUENTNAME nvarchar(300) = null output,
            @RECOGNITIONTOTALNUMBER int = null output,
            @RECOGNITIONTOTALAMOUNT money = null output,
            @RECOGNITIONTOTALGROUPAMOUNT money = null output,
            @RECOGNITIONTOTALGROUPMEMBERAMOUNT money = null output,
            @RECOGNITIONAVERAGEAMOUNT money = null output,
            @RECOGNITIONMOSTFREQUENTAMOUNT money = null output,
            @RECOGNITIONTOTALYEARS int = null output,
            @RECOGNITIONCONSECUTIVEYEARS int = null output,
            @RECOGNITIONGIVENSINCEFISCALYEAR datetime = null output,
            @RECOGNITIONLARGESTRECORDID uniqueidentifier = null output,
            @RECOGNITIONLARGESTDATE datetime = null output,
            @RECOGNITIONLARGESTTYPECODE tinyint = null output,
            @RECOGNITIONLARGESTTYPE nvarchar(22) = null output,
            @RECOGNITIONLARGESTAMOUNT money = null output,
            @RECOGNITIONLARGESTCONSTITUENTNAME nvarchar(300) = null output,
            @RECOGNITIONFIRSTRECORDID uniqueidentifier = null output,
            @RECOGNITIONFIRSTDATE datetime = null output,
            @RECOGNITIONFIRSTTYPECODE tinyint = null output,
            @RECOGNITIONFIRSTTYPE nvarchar(22) = null output,
            @RECOGNITIONFIRSTAMOUNT money = null output,
            @RECOGNITIONFIRSTCONSTITUENTNAME nvarchar(300) = null output,
            @RECOGNITIONLATESTRECORDID uniqueidentifier = null output,
            @RECOGNITIONLATESTDATE datetime = null output,
            @RECOGNITIONLATESTTYPECODE tinyint = null output,
            @RECOGNITIONLATESTTYPE nvarchar(22) = null output,
            @RECOGNITIONLATESTAMOUNT money = null output,
            @RECOGNITIONLATESTCONSTITUENTNAME nvarchar(300) = null output,
            @CURRENTAPPUSERID uniqueidentifier
            ) as
                set nocount on;
                set @DATALOADED = 0;

                select
                    @DATALOADED = 1
                from
                    dbo.CONSTITUENT
                where
                    CONSTITUENT.ID = @ID;

                exec dbo.USP_GROUP_GIVINGSUMMARYGET
                    @ID,
                    @GROUPINCLUDESMEMBERGIVING = @GROUPINCLUDESMEMBERGIVING output,
                    @ISHOUSEHOLD = @ISHOUSEHOLD output,
                    @TOTALNUMBER = @TOTALNUMBER output,
                    @TOTALAMOUNT = @TOTALAMOUNT output,
                    @TOTALGROUPAMOUNT = @TOTALGROUPAMOUNT output,
                    @TOTALGROUPMEMBERAMOUNT = @TOTALGROUPMEMBERAMOUNT output,
                    @AVERAGEAMOUNT = @AVERAGEAMOUNT output,
                    @MOSTFREQUENTAMOUNT = @MOSTFREQUENTAMOUNT output,
                    @TOTALPLEDGEBALANCE = @TOTALPLEDGEBALANCE output,
                    @TOTALYEARS = @TOTALYEARS output,
                    @CONSECUTIVEYEARS = @CONSECUTIVEYEARS output,
                    @GIVENSINCEFISCALYEAR = @GIVENSINCEFISCALYEAR output,
                    @CURRENTAPPUSERID = @CURRENTAPPUSERID;

                --group member largest gift

                select top 1
                    @LARGESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=R.CONSTITUENTID),
                    @LARGESTID = R.ID,
                    @LARGESTRECORDID = R.ID,
                    @LARGESTDATE = R.DATE,
                    @LARGESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @LARGESTTYPE = R.TRANSACTIONTYPE,
                    @LARGESTAMOUNT = sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0)),
                    @LARGESTPLEDGEBALANCE = case R.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(R.ID) else null end,
                    --using this instead of TOXML function, because a different root element is needed

                    @LARGESTSPLITS = (select
                                        [AMOUNT],
                                        [ID],
                                        [PURPOSE]
                                    from
                                        dbo.[UFN_REVENUE_GETSPLITS_LIST](R.ID)
                                    order by
                                        ID
                                    for xml raw('ITEM'),type,elements,root('LARGESTSPLITS'),BINARY BASE64)
                from dbo.REVENUE R
                    inner join dbo.REVENUESPLIT RS on RS.REVENUEID = R.ID
                    inner join dbo.GROUPMEMBER GM on R.CONSTITUENTID = GM.MEMBERID
                    left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                    left join
                        (select
                            INSTALLMENTSPLIT.PLEDGEID, 
                            INSTALLMENTSPLIT.DESIGNATIONID, 
                            sum(IWO.AMOUNT) as AMOUNT
                        from dbo.INSTALLMENTSPLIT 
                        inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                        group by INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) IWO
                        on IWO.PLEDGEID = RS.REVENUEID and IWO.DESIGNATIONID = RS.DESIGNATIONID
                where @GROUPINCLUDESMEMBERGIVING = 1
                    and GM.GROUPID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= R.DATE))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= R.DATE)) 
                        or (GMDR.DATEFROM <= R.DATE and GMDR.DATETO >= R.DATE))
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                group by
                    R.ID, R.TRANSACTIONTYPE, R.TRANSACTIONTYPECODE, R.DATE, R.DATEADDED, R.CONSTITUENTID, IWO.AMOUNT
                order by
                    (sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0))) desc, R.DATE desc, R.DATEADDED desc;

                -- group largest gift

                select top 1
                    @LARGESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=R.CONSTITUENTID),
                    @LARGESTID = R.ID,
                    @LARGESTRECORDID = R.ID,
                    @LARGESTDATE = R.DATE,
                    @LARGESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @LARGESTTYPE = R.TRANSACTIONTYPE,
                    @LARGESTAMOUNT = sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0)),
                    @LARGESTPLEDGEBALANCE = case R.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(R.ID) else null end,
                    --using this instead of TOXML function, because a different root element is needed

                @LARGESTSPLITS = (select
                                        [AMOUNT],
                                        [ID],
                                        [PURPOSE]
                                    from
                                        dbo.[UFN_REVENUE_GETSPLITS_LIST](R.ID)
                                    order by
                                        ID
                                    for xml raw('ITEM'),type,elements,root('LARGESTSPLITS'),BINARY BASE64)
                from dbo.REVENUE R
                    inner join dbo.REVENUESPLIT RS on RS.REVENUEID = R.ID
                    left join
                        (select
                            INSTALLMENTSPLIT.PLEDGEID, 
                            INSTALLMENTSPLIT.DESIGNATIONID, 
                            sum(IWO.AMOUNT) as AMOUNT
                        from dbo.INSTALLMENTSPLIT 
                        inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                        group by INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) IWO
                        on IWO.PLEDGEID = RS.REVENUEID and IWO.DESIGNATIONID = RS.DESIGNATIONID
                where R.CONSTITUENTID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                group by
                    R.ID, R.TRANSACTIONTYPE, R.TRANSACTIONTYPECODE, R.DATE, R.DATEADDED, R.CONSTITUENTID, IWO.AMOUNT
                having (@LARGESTAMOUNT is null or (sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT, 0))) > @LARGESTAMOUNT)
                order by
                    (sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0))) desc, R.DATE desc, R.DATEADDED desc;

                -- first group member gift

                select top 1
                    @FIRSTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=R.CONSTITUENTID),
                    @FIRSTID = R.ID,
                    @FIRSTRECORDID = R.ID,
                    @FIRSTDATE = R.DATE,
                    @FIRSTTYPECODE = R.TRANSACTIONTYPECODE,
                    @FIRSTTYPE = R.TRANSACTIONTYPE,
                    @FIRSTAMOUNT = sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0)),
                    @FIRSTPLEDGEBALANCE = case R.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(R.ID) else null end,
                    --using this instead of TOXML function, because a different root element is needed

                    @FIRSTSPLITS = (select
                                        [AMOUNT],
                                        [ID],
                                        [PURPOSE]
                                    from
                                        dbo.[UFN_REVENUE_GETSPLITS_LIST](R.ID)
                                    order by
                                        ID
                                    for xml raw('ITEM'),type,elements,root('FIRSTSPLITS'),BINARY BASE64)
                from dbo.REVENUE R
                    inner join dbo.REVENUESPLIT RS on RS.REVENUEID = R.ID
                    inner join dbo.GROUPMEMBER GM on R.CONSTITUENTID = GM.MEMBERID
                    left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                    left join
                        (select
                            INSTALLMENTSPLIT.PLEDGEID, 
                            INSTALLMENTSPLIT.DESIGNATIONID, 
                            sum(IWO.AMOUNT) as AMOUNT
                        from dbo.INSTALLMENTSPLIT 
                        inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                        group by INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) IWO
                        on IWO.PLEDGEID = RS.REVENUEID and IWO.DESIGNATIONID = RS.DESIGNATIONID
                where @GROUPINCLUDESMEMBERGIVING = 1
                    and GM.GROUPID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= R.DATE))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= R.DATE)) 
                        or (GMDR.DATEFROM <= R.DATE and GMDR.DATETO >= R.DATE))
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                group by
                    R.ID, R.TRANSACTIONTYPE, R.TRANSACTIONTYPECODE, R.DATE, R.DATEADDED, R.CONSTITUENTID, IWO.AMOUNT
                order by
                    R.DATE asc, R.DATEADDED asc;

                -- first group gift

                select top 1
                    @FIRSTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=R.CONSTITUENTID),
                    @FIRSTID = R.ID,
                    @FIRSTRECORDID = R.ID,
                    @FIRSTDATE = R.DATE,
                    @FIRSTTYPECODE = R.TRANSACTIONTYPECODE,
                    @FIRSTTYPE = R.TRANSACTIONTYPE,
                    @FIRSTAMOUNT = sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0)),
                    @FIRSTPLEDGEBALANCE = case R.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(R.ID) else null end,
                    --using this instead of TOXML function, because a different root element is needed

                    @FIRSTSPLITS = (select
                                        [AMOUNT],
                                        [ID],
                                        [PURPOSE]
                                    from
                                        dbo.[UFN_REVENUE_GETSPLITS_LIST](R.ID)
                                    order by
                                        ID
                                    for xml raw('ITEM'),type,elements,root('FIRSTSPLITS'),BINARY BASE64)
                from dbo.REVENUE R
                    inner join dbo.REVENUESPLIT RS on RS.REVENUEID = R.ID
                    left join
                        (select
                            INSTALLMENTSPLIT.PLEDGEID, 
                            INSTALLMENTSPLIT.DESIGNATIONID, 
                            sum(IWO.AMOUNT) as AMOUNT
                        from dbo.INSTALLMENTSPLIT 
                        inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                        group by INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) IWO
                        on IWO.PLEDGEID = RS.REVENUEID and IWO.DESIGNATIONID = RS.DESIGNATIONID
                where R.CONSTITUENTID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and (@FIRSTDATE is null or R.DATE < @FIRSTDATE)
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                group by
                    R.ID, R.TRANSACTIONTYPE, R.TRANSACTIONTYPECODE, R.DATE, R.DATEADDED, R.CONSTITUENTID, IWO.AMOUNT
                order by
                    R.DATE asc, R.DATEADDED asc;

                -- group member latest gift

                select top 1
                    @LATESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=R.CONSTITUENTID),
                    @LATESTID = R.ID,
                    @LATESTRECORDID = R.ID,
                    @LATESTDATE = R.DATE,
                    @LATESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @LATESTTYPE = R.TRANSACTIONTYPE,
                    @LATESTAMOUNT = sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0)),
                    @LATESTPLEDGEBALANCE = case R.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(R.ID) else null end,
                    --using this instead of TOXML function, because a different root element is needed

                    @LATESTSPLITS = (select
                                        [AMOUNT],
                                        [ID],
                                        [PURPOSE]
                                    from
                                        dbo.[UFN_REVENUE_GETSPLITS_LIST](R.ID)
                                    order by
                                        ID
                                    for xml raw('ITEM'),type,elements,root('LATESTSPLITS'),BINARY BASE64)
                from dbo.REVENUE R
                    inner join dbo.REVENUESPLIT RS on RS.REVENUEID = R.ID
                    inner join dbo.GROUPMEMBER GM on R.CONSTITUENTID = GM.MEMBERID
                    left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                    left join
                        (select
                            INSTALLMENTSPLIT.PLEDGEID, 
                            INSTALLMENTSPLIT.DESIGNATIONID, 
                            sum(IWO.AMOUNT) as AMOUNT
                        from dbo.INSTALLMENTSPLIT 
                        inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                        group by INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) IWO
                        on IWO.PLEDGEID = RS.REVENUEID and IWO.DESIGNATIONID = RS.DESIGNATIONID
                where @GROUPINCLUDESMEMBERGIVING = 1
                    and GM.GROUPID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= R.DATE))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= R.DATE)) 
                        or (GMDR.DATEFROM <= R.DATE and GMDR.DATETO >= R.DATE))
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                group by
                    R.ID, R.TRANSACTIONTYPE, R.TRANSACTIONTYPECODE, R.DATE, R.DATEADDED, R.CONSTITUENTID, IWO.AMOUNT
                order by
                    R.DATE desc, R.DATEADDED desc;

                -- group latest gift

                select top 1
                    @LATESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=R.CONSTITUENTID),
                    @LATESTID = R.ID,
                    @LATESTRECORDID = R.ID,
                    @LATESTDATE = R.DATE,
                    @LATESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @LATESTTYPE = R.TRANSACTIONTYPE,
                    @LATESTAMOUNT = sum(RS.AMOUNT) - sum(coalesce(IWO.AMOUNT,0)),
                    @LATESTPLEDGEBALANCE = case R.TRANSACTIONTYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(R.ID) else null end,
                    --using this instead of TOXML function, because a different root element is needed

                    @LATESTSPLITS = (select
                                        [AMOUNT],
                                        [ID],
                                        [PURPOSE]
                                    from
                                        dbo.[UFN_REVENUE_GETSPLITS_LIST](R.ID)
                                    order by
                                        ID
                                    for xml raw('ITEM'),type,elements,root('LATESTSPLITS'),BINARY BASE64)
                from dbo.REVENUE R
                    inner join dbo.REVENUESPLIT RS on RS.REVENUEID = R.ID
                    left join
                        (select
                            INSTALLMENTSPLIT.PLEDGEID, 
                            INSTALLMENTSPLIT.DESIGNATIONID, 
                            sum(IWO.AMOUNT) as AMOUNT
                        from dbo.INSTALLMENTSPLIT 
                        inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                        group by INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) IWO
                        on IWO.PLEDGEID = RS.REVENUEID and IWO.DESIGNATIONID = RS.DESIGNATIONID
                where R.CONSTITUENTID = @ID
                    and (@LATESTDATE is null or R.DATE > @LATESTDATE)
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                group by
                    R.ID, R.TRANSACTIONTYPE, R.TRANSACTIONTYPECODE, R.DATE, R.DATEADDED, R.CONSTITUENTID, IWO.AMOUNT
                order by
                    R.DATE desc, R.DATEADDED desc;


                -- Handle recognitions

                exec dbo.USP_GROUP_RECOGNITIONSUMMARYGET
                    @ID,
                    @RECOGNITIONTOTALNUMBER = @RECOGNITIONTOTALNUMBER output,
                    @RECOGNITIONTOTALAMOUNT = @RECOGNITIONTOTALAMOUNT output,
                    @RECOGNITIONTOTALGROUPAMOUNT = @RECOGNITIONTOTALGROUPAMOUNT output,
                    @RECOGNITIONTOTALGROUPMEMBERAMOUNT = @RECOGNITIONTOTALGROUPMEMBERAMOUNT output,
                    @RECOGNITIONAVERAGEAMOUNT = @RECOGNITIONAVERAGEAMOUNT output,
                    @RECOGNITIONMOSTFREQUENTAMOUNT = @RECOGNITIONMOSTFREQUENTAMOUNT output,
                    @RECOGNITIONTOTALYEARS = @RECOGNITIONTOTALYEARS output,
                    @RECOGNITIONCONSECUTIVEYEARS = @RECOGNITIONCONSECUTIVEYEARS output,
                    @RECOGNITIONGIVENSINCEFISCALYEAR = @RECOGNITIONGIVENSINCEFISCALYEAR output,
                    @CURRENTAPPUSERID = @CURRENTAPPUSERID;

                --group member largest gift

                select top 1
                    @RECOGNITIONLARGESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=RR.CONSTITUENTID),
                    @RECOGNITIONLARGESTRECORDID = R.ID,
                    @RECOGNITIONLARGESTDATE = RR.EFFECTIVEDATE,
                    @RECOGNITIONLARGESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @RECOGNITIONLARGESTTYPE = R.TRANSACTIONTYPE,
                    @RECOGNITIONLARGESTAMOUNT = RR.AMOUNT
                from dbo.REVENUERECOGNITION RR
                    inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
                    inner join dbo.REVENUE R on RS.REVENUEID = R.ID
                    inner join dbo.GROUPMEMBER GM on RR.CONSTITUENTID = GM.MEMBERID
                    left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                where @GROUPINCLUDESMEMBERGIVING = 1
                    and GM.GROUPID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= RR.EFFECTIVEDATE))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= RR.EFFECTIVEDATE)) 
                        or (GMDR.DATEFROM <= RR.EFFECTIVEDATE and GMDR.DATETO >= RR.EFFECTIVEDATE))
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                order by
                    RR.AMOUNT desc, RR.EFFECTIVEDATE desc, RR.DATEADDED desc;

                -- group largest recognition

                select top 1
                    @RECOGNITIONLARGESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=RR.CONSTITUENTID),
                    @RECOGNITIONLARGESTRECORDID = R.ID,
                    @RECOGNITIONLARGESTDATE = RR.EFFECTIVEDATE,
                    @RECOGNITIONLARGESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @RECOGNITIONLARGESTTYPE = R.TRANSACTIONTYPE,
                    @RECOGNITIONLARGESTAMOUNT = RR.AMOUNT
                from dbo.REVENUERECOGNITION RR
                    inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
                    inner join dbo.REVENUE R on RS.REVENUEID = R.ID
                where RR.CONSTITUENTID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and (@RECOGNITIONLARGESTAMOUNT is null or RR.AMOUNT > @RECOGNITIONLARGESTAMOUNT)
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                order by
                    RR.AMOUNT desc, RR.EFFECTIVEDATE desc, RR.DATEADDED desc;

                -- first group member recognition

                select top 1
                    @RECOGNITIONFIRSTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=RR.CONSTITUENTID),
                    @RECOGNITIONFIRSTRECORDID = R.ID,
                    @RECOGNITIONFIRSTDATE = RR.EFFECTIVEDATE,
                    @RECOGNITIONFIRSTTYPECODE = R.TRANSACTIONTYPECODE,
                    @RECOGNITIONFIRSTTYPE = R.TRANSACTIONTYPE,
                    @RECOGNITIONFIRSTAMOUNT = RR.AMOUNT
                from dbo.REVENUERECOGNITION RR
                    inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
                    inner join dbo.REVENUE R on RS.REVENUEID = R.ID
                    inner join dbo.GROUPMEMBER GM on RR.CONSTITUENTID = GM.MEMBERID
                    left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                where @GROUPINCLUDESMEMBERGIVING = 1
                    and GM.GROUPID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= RR.EFFECTIVEDATE))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= RR.EFFECTIVEDATE)) 
                        or (GMDR.DATEFROM <= RR.EFFECTIVEDATE and GMDR.DATETO >= RR.EFFECTIVEDATE))
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                order by
                    RR.EFFECTIVEDATE asc, RR.DATEADDED asc;

                -- first group recognition

                select top 1
                    @RECOGNITIONFIRSTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=RR.CONSTITUENTID),
                    @RECOGNITIONFIRSTRECORDID = R.ID,
                    @RECOGNITIONFIRSTDATE = RR.EFFECTIVEDATE,
                    @RECOGNITIONFIRSTTYPECODE = R.TRANSACTIONTYPECODE,
                    @RECOGNITIONFIRSTTYPE = R.TRANSACTIONTYPE,
                    @RECOGNITIONFIRSTAMOUNT = RR.AMOUNT
                from dbo.REVENUERECOGNITION RR
                    inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
                    inner join dbo.REVENUE R on RS.REVENUEID = R.ID
                where RR.CONSTITUENTID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and (@RECOGNITIONFIRSTDATE is null or RR.EFFECTIVEDATE < @RECOGNITIONFIRSTDATE)
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                order by
                    RR.EFFECTIVEDATE asc, RR.DATEADDED asc;

                -- group member latest recognition

                select top 1
                    @RECOGNITIONLATESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=RR.CONSTITUENTID),
                    @RECOGNITIONLATESTRECORDID = R.ID,
                    @RECOGNITIONLATESTDATE = RR.EFFECTIVEDATE,
                    @RECOGNITIONLATESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @RECOGNITIONLATESTTYPE = R.TRANSACTIONTYPE,
                    @RECOGNITIONLATESTAMOUNT = RR.AMOUNT
                from dbo.REVENUERECOGNITION RR
                    inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
                    inner join dbo.REVENUE R on RS.REVENUEID = R.ID
                    inner join dbo.GROUPMEMBER GM on RR.CONSTITUENTID = GM.MEMBERID
                    left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                where @GROUPINCLUDESMEMBERGIVING = 1
                    and GM.GROUPID = @ID
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= RR.EFFECTIVEDATE))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= RR.EFFECTIVEDATE)) 
                        or (GMDR.DATEFROM <= RR.EFFECTIVEDATE and GMDR.DATETO >= RR.EFFECTIVEDATE))
                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                order by
                    RR.EFFECTIVEDATE desc, RR.DATEADDED desc;

                -- group latest recognition

                select top 1
                    @RECOGNITIONLATESTCONSTITUENTNAME = (select NAME from dbo.CONSTITUENT where ID=RR.CONSTITUENTID),
                    @RECOGNITIONLATESTRECORDID = R.ID,
                    @RECOGNITIONLATESTDATE = RR.EFFECTIVEDATE,
                    @RECOGNITIONLATESTTYPECODE = R.TRANSACTIONTYPECODE,
                    @RECOGNITIONLATESTTYPE = R.TRANSACTIONTYPE,
                    @RECOGNITIONLATESTAMOUNT = RR.AMOUNT
                from dbo.REVENUERECOGNITION RR
                    inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
                    inner join dbo.REVENUE R on RS.REVENUEID = R.ID
                where RR.CONSTITUENTID = @ID
                    and (@RECOGNITIONLATESTDATE is null or RR.EFFECTIVEDATE > @RECOGNITIONLATESTDATE)
                    and (R.TRANSACTIONTYPECODE = 1 or (R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0, 3))) --Pledge or Payment (Gift or Recurring gift payment)

                    and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1
                order by
                    RR.EFFECTIVEDATE desc, RR.DATEADDED desc;

                return 0;