USP_DATALIST_REVENUESPLIT_MATCHINGGIFTPAYMENTAVAILABLECLAIMS

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@MAXROWS int IN
@CURRENTAPPUSERID uniqueidentifier IN
@KEYNAME nvarchar(150) IN
@FIRSTNAME nvarchar(150) IN
@FULLNAME nvarchar(150) IN
@DATEFILTER tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@CLAIMSCODE tinyint IN
@NEWLYUNPAIDCLAIMS xml IN
@NEWLYPAIDCLAIMS xml IN

Definition

Copy


            CREATE procedure dbo.USP_DATALIST_REVENUESPLIT_MATCHINGGIFTPAYMENTAVAILABLECLAIMS
            (    
                @REVENUEID uniqueidentifier = null,
                @MAXROWS int = null,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @KEYNAME nvarchar(150) = null,
                @FIRSTNAME nvarchar(150) = null,
                @FULLNAME nvarchar(150) = null,
                @DATEFILTER tinyint = 29, --Last 6 months

                @STARTDATE datetime = null,
                @ENDDATE datetime = null,
                @CLAIMSCODE tinyint = 0,
                @NEWLYUNPAIDCLAIMS xml = null,
                @NEWLYPAIDCLAIMS xml = null
            )
            with execute as owner
            as
                set nocount on;

                /**
                 * Initialize simple filters.
                 */
                declare @INCLUDEPAIDCLAIMS bit;
                declare @INCLUDEUNPAIDCLAIMS bit;

                set @INCLUDEPAIDCLAIMS = case when @CLAIMSCODE = 0 or @CLAIMSCODE = 1 then 1 else 0 end;
                set @INCLUDEUNPAIDCLAIMS = case when @CLAIMSCODE = 0 or @CLAIMSCODE = 2 then 1 else 0 end;

                declare @TOPMAXROWSCLAUSE nvarchar(max) = N'';
                if @MAXROWS is not null and @MAXROWS > 0 
                    set @TOPMAXROWSCLAUSE = N' top (@MAXROWS)';
                else
                    set @MAXROWS = null;


                if @DATEFILTER is null
                    set @DATEFILTER = 29; --Last 6 months


                if @DATEFILTER = 0
                begin
                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(coalesce(@STARTDATE, getdate()));
                    set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(coalesce(@ENDDATE, getdate()));
                end
                else
                    exec dbo.USP_RESOLVEDATEFILTER
                        @DATEFILTER,
                        @STARTDATE output,
                        @ENDDATE output;

                if @KEYNAME is null
                    set @KEYNAME = N'';

                if @FIRSTNAME is null
                    set @FIRSTNAME = N'';

                if @FULLNAME is null
                    set @FULLNAME = N'';

                declare @ISSYSADMIN bit;
                set @ISSYSADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);


                /**
                 * Build a common name where clause that can be used in multiple statements below.
                 */
                declare @NAMECLAUSE as nvarchar(max) = N'';

                if len(@KEYNAME) > 0
                begin
                    set @KEYNAME = dbo.UFN_SEARCHCRITERIA_GETLIKEPARAMETERVALUE(@KEYNAME, default, default);
                    set @NAMECLAUSE = @NAMECLAUSE + N'CONSTITUENT.KEYNAME like @KEYNAME escape N''\''';
                end

                if len(@FIRSTNAME) > 0
                begin
                    set @FIRSTNAME = dbo.UFN_SEARCHCRITERIA_GETLIKEPARAMETERVALUE(@FIRSTNAME, default, default);

                    if len(@NAMECLAUSE) > 0
                        set @NAMECLAUSE = @NAMECLAUSE + N' and ';

                    set @NAMECLAUSE = @NAMECLAUSE + N'(CONSTITUENT.FIRSTNAME like @FIRSTNAME escape N''\'' or CONSTITUENT.NICKNAME like @FIRSTNAME escape N''\'')';
                end

                if len(@FULLNAME) > 0
                begin
                    set @FULLNAME = dbo.UFN_SEARCHCRITERIA_GETLIKEPARAMETERVALUE(@FULLNAME, default, default);

                    declare @FULLNAMECLAUSE nvarchar(max);
                    set @FULLNAMECLAUSE = N'CONSTITUENT.KEYNAME like @FULLNAME escape N''\''';

                    --Use full name to search for first name as well as key name when just one name is specified.

                    -- This is different than constituent search, but we're doing it this way since there is no

                    -- more detailed search form displayed to allow users to see that their single-word input was

                    -- only applied to the last name field.

                    if len(@FIRSTNAME) = 0
                        set @FULLNAMECLAUSE = @FULLNAMECLAUSE + N' or (CONSTITUENT.FIRSTNAME like @FULLNAME escape N''\'' or CONSTITUENT.NICKNAME like @FULLNAME escape N''\'')';

                    --Only include the name clause if it would not be identical to the first part of

                    -- the full name clause.

                    if len(@FIRSTNAME) > 0 or @KEYNAME <> @FULLNAME
                        set @NAMECLAUSE = N'( ' + @FULLNAMECLAUSE + N' or ( ' + @NAMECLAUSE + N' ) )';
                    else
                        set @NAMECLAUSE = @FULLNAMECLAUSE;
                end


                /**
                 * Build a common update statement can be be used to build the sort constituent name
                 * after multiple other insert statements below. This technique is based on what is
                 * done in constituent search so the sort name only has to be built for the records we
                 * are showing after other filtering is already done.
                 */

                declare @UPDATESORTCONSTITUENTNAMESQL nvarchar(max);
                set @UPDATESORTCONSTITUENTNAMESQL = N'
    update @RETVAL set
        SORTCONSTITUENTNAME =
            (
                case
                    when CONSTITUENT.ISORGANIZATION = 1 then case CONSTITUENT.KEYNAMEPREFIX when '''' then CONSTITUENT.KEYNAME else CONSTITUENT.KEYNAME + '', '' + CONSTITUENT.KEYNAMEPREFIX end
                    else dbo.UFN_NAMEFORMAT_08(CONSTITUENT.ID, CONSTITUENT.KEYNAME, CONSTITUENT.FIRSTNAME, CONSTITUENT.MIDDLENAME, null, null, null, null, null, null, null)
                end
            )
    from
        @RETVAL as RETVAL
    inner join dbo.CONSTITUENT on RETVAL.CONSTITUENTID = CONSTITUENT.ID 
    where
        RETVAL.SORTCONSTITUENTNAME is null;
';

                /**
                 * Build temp tables to hold IDs of records that have client-side edits
                 */
                declare @HASNEWLYUNPAIDCLAIMS bit = 0;
                if @NEWLYUNPAIDCLAIMS.exist('/NEWLYUNPAIDCLAIMS/ITEM') = 1
                begin
                    set @HASNEWLYUNPAIDCLAIMS = 1;

                    create table #NEWLYUNPAIDCLAIMTABLE
                    (
                        REVENUESPLITID uniqueidentifier not null,
                        primary key (REVENUESPLITID),
                        unique (REVENUESPLITID)
                    );

                    insert into #NEWLYUNPAIDCLAIMTABLE (REVENUESPLITID)
                    select
                        NEWLYUNPAIDCLAIMS.ITEM.value('REVENUESPLITID[1]', 'uniqueidentifier')
                    from
                        @NEWLYUNPAIDCLAIMS.nodes('/NEWLYUNPAIDCLAIMS/ITEM') as NEWLYUNPAIDCLAIMS(ITEM);
                end

                declare @HASNEWLYPAIDCLAIMS bit = 0;
                if @NEWLYPAIDCLAIMS.exist('/NEWLYPAIDCLAIMS/ITEM') = 1
                begin
                    set @HASNEWLYPAIDCLAIMS = 1;

                    create table #NEWLYPAIDCLAIMTABLE
                    (
                        APPLICATIONREVENUESPLITID uniqueidentifier not null,
                        primary key (APPLICATIONREVENUESPLITID),
                        unique (APPLICATIONREVENUESPLITID)
                    );

                    insert into #NEWLYPAIDCLAIMTABLE (APPLICATIONREVENUESPLITID)
                    select
                        NEWLYPAIDCLAIMS.ITEM.value('APPLICATIONREVENUESPLITID[1]', 'uniqueidentifier')
                    from
                        @NEWLYPAIDCLAIMS.nodes('/NEWLYPAIDCLAIMS/ITEM') as NEWLYPAIDCLAIMS(ITEM);
                end

                /**
                 * Build the main dynamic SQL statement.
                 */
                declare @SQL nvarchar(max) = N'    --Generated by dbo.USP_DATALIST_REVENUESPLIT_MATCHINGGIFTPAYMENTAVAILABLECLAIMS';


                set @SQL = @SQL + N'
    declare @FOUND int = 0;
    declare @RETVAL table
    (
        REVENUESPLITID uniqueidentifier,
        APPLICATIONID uniqueidentifier,
        APPLICATIONREVENUESPLITID uniqueidentifier,
        CONSTITUENTID uniqueidentifier,
        SORTCONSTITUENTNAME nvarchar(700),
        CONSTITUENTLOOKUPID nvarchar(100),
        APPLIED money,
        CLAIMAMOUNT money,
        DESIGNATIONID uniqueidentifier,
        DESIGNATIONNAME nvarchar(512),
        DESIGNATIONUSERID nvarchar(512),
        CLAIMLOOKUPID nvarchar(100),
        CLAIMDATE datetimeoffset,
        ORIGINALREVENUELOOKUPID nvarchar(100),
        ORIGINALREVENUEDATE datetimeoffset,
        TRANSACTIONCURRENCYID uniqueidentifier,
        CLAIMTRANSACTIONCURRENCYID uniqueidentifier
    );
';

                if @INCLUDEPAIDCLAIMS = 1 or (@INCLUDEUNPAIDCLAIMS = 1 and @HASNEWLYUNPAIDCLAIMS = 1)
                begin
                    set @SQL = @SQL + N'
    insert into @RETVAL
    select' + @TOPMAXROWSCLAUSE + N'
        FINANCIALTRANSACTIONLINEITEM.ID as REVENUESPLITID,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTION.ID as APPLICATIONID,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTIONLINEITEM.ID as APPLICATIONREVENUESPLITID,
        CONSTITUENT.ID as CONSTITUENTID,
        null as SORTCONSTITUENTNAME,
        CONSTITUENT.LOOKUPID as CONSTITUENTLOOKUPID,
        FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT as APPLIED,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT as CLAIMAMOUNT,
        MATCHINGGIFTCLAIMREVENUESPLIT_EXT.DESIGNATIONID,
        DESIGNATION.NAME as DESIGNATIONNAME,
        DESIGNATION.USERID as DESIGNATIONUSERID,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTION.CALCULATEDUSERDEFINEDID as CLAIMLOOKUPID,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTION.DATE as CLAIMDATE,
        ORIGINALREVENUEFINANCIALTRANSACTION.CALCULATEDUSERDEFINEDID as ORIGINALREVENUELOOKUPID,
        ORIGINALREVENUEFINANCIALTRANSACTION.DATE as ORIGINALREVENUEDATE,
        FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTION.TRANSACTIONCURRENCYID as CLAIMTRANSACTIONCURRENCYID
    from
        dbo.FINANCIALTRANSACTION
        inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
        --Get only applications paying a matching gift claim by inner joining to dbo.INSTALLMENTSPLITPAYMENT.

        -- Unapplied matching gift payments would not have an installment split payment row because there is

        -- no commitment being paid.

        inner join dbo.INSTALLMENTSPLITPAYMENT on REVENUESPLIT_EXT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
        inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM as MATCHINGGIFTCLAIMFINANCIALTRANSACTIONLINEITEM on INSTALLMENTSPLIT.REVENUESPLITID = MATCHINGGIFTCLAIMFINANCIALTRANSACTIONLINEITEM.ID
        inner join dbo.REVENUESPLIT_EXT as MATCHINGGIFTCLAIMREVENUESPLIT_EXT on MATCHINGGIFTCLAIMFINANCIALTRANSACTIONLINEITEM.ID = MATCHINGGIFTCLAIMREVENUESPLIT_EXT.ID
        inner join dbo.DESIGNATION on MATCHINGGIFTCLAIMREVENUESPLIT_EXT.DESIGNATIONID = DESIGNATION.ID
        inner join dbo.FINANCIALTRANSACTION as MATCHINGGIFTCLAIMFINANCIALTRANSACTION on MATCHINGGIFTCLAIMFINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = MATCHINGGIFTCLAIMFINANCIALTRANSACTION.ID
        inner join dbo.REVENUEMATCHINGGIFT on INSTALLMENTSPLITPAYMENT.PLEDGEID = REVENUEMATCHINGGIFT.ID
        inner join dbo.FINANCIALTRANSACTION as ORIGINALREVENUEFINANCIALTRANSACTION on REVENUEMATCHINGGIFT.MGSOURCEREVENUEID = ORIGINALREVENUEFINANCIALTRANSACTION.ID
        inner join dbo.CONSTITUENT on ORIGINALREVENUEFINANCIALTRANSACTION.CONSTITUENTID = CONSTITUENT.ID
    where
        FINANCIALTRANSACTION.ID = @REVENUEID
        and FINANCIALTRANSACTION.TYPECODE = 0 --Payment

        and REVENUESPLIT_EXT.TYPECODE = 0 --Gift

        and REVENUESPLIT_EXT.APPLICATIONCODE = 7 --Matching gift

';

                if @INCLUDEPAIDCLAIMS = 0 and @INCLUDEUNPAIDCLAIMS = 1 and @HASNEWLYUNPAIDCLAIMS = 1
                    set @SQL = @SQL + N'
        --Include claim payment splits that are paid in the database but that are unpaid in the UI.

        and FINANCIALTRANSACTIONLINEITEM.ID in
            (
                select
                    NEWLYUNPAIDCLAIMTABLE.REVENUESPLITID
                from
                    #NEWLYUNPAIDCLAIMTABLE as NEWLYUNPAIDCLAIMTABLE
            )
';
                else if @INCLUDEPAIDCLAIMS = 1 and @INCLUDEUNPAIDCLAIMS = 0 and @HASNEWLYUNPAIDCLAIMS = 1
                    set @SQL = @SQL + N'
        --Include claim payment splits that are paid in the database but that are unpaid in the UI.

        and FINANCIALTRANSACTIONLINEITEM.ID not in
            (
                select
                    NEWLYUNPAIDCLAIMTABLE.REVENUESPLITID
                from
                    #NEWLYUNPAIDCLAIMTABLE as NEWLYUNPAIDCLAIMTABLE
            )
';

                set @SQL = @SQL + N'
        and
            (
                (MATCHINGGIFTCLAIMFINANCIALTRANSACTION.DATE between @STARTDATE and @ENDDATE)
                or (ORIGINALREVENUEFINANCIALTRANSACTION.DATE between @STARTDATE and @ENDDATE)
            )';

                    if len(@NAMECLAUSE) > 0
                    begin
                        set @SQL = @SQL + N'
        and ( ' + @NAMECLAUSE + N' )';
                    end

                    set @SQL = @SQL + N'
    order by
        CONSTITUENT.KEYNAME,
        CONSTITUENT.FIRSTNAME,
        CONSTITUENT.MIDDLENAME,
        CONSTITUENT.LOOKUPID,
        ORIGINALREVENUEFINANCIALTRANSACTION.DATE,
        ORIGINALREVENUEFINANCIALTRANSACTION.CALCULATEDUSERDEFINEDID,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTION.DATE,
        MATCHINGGIFTCLAIMFINANCIALTRANSACTION.CALCULATEDUSERDEFINEDID;

    set @FOUND = @@ROWCOUNT;
';

                    set @SQL = @SQL + @UPDATESORTCONSTITUENTNAMESQL;

                end


                if @INCLUDEUNPAIDCLAIMS = 1 or (@INCLUDEPAIDCLAIMS = 1 and @HASNEWLYPAIDCLAIMS = 1)
                begin
                    set @SQL = @SQL + N'
    if @MAXROWS is null or @FOUND < @MAXROWS
    begin
        declare @CONSTITUENTID uniqueidentifier;
        declare @TRANSACTIONCURRENCYID uniqueidentifier;
        select
            @CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID,
            @TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
        from
            dbo.FINANCIALTRANSACTION
        where
            FINANCIALTRANSACTION.ID = @REVENUEID;

        declare @FILTERED_REVENUESPLIT table
        (
            REVENUEID uniqueidentifier,
            REVENUESPLITID uniqueidentifier,
            APPLICATIONID uniqueidentifier,
            APPLICATIONREVENUESPLITID uniqueidentifier,
            CONSTITUENTID uniqueidentifier,
            CONSTITUENTLOOKUPID nvarchar(100),
            CLAIMAMOUNT money,
            DESIGNATIONID uniqueidentifier,
            DESIGNATIONNAME nvarchar(512),
            DESIGNATIONUSERID nvarchar(512),
            CLAIMLOOKUPID nvarchar(100),
            CLAIMDATE datetimeoffset,
            ORIGINALREVENUELOOKUPID nvarchar(100),
            ORIGINALREVENUEDATE datetimeoffset,
            TRANSACTIONCURRENCYID uniqueidentifier,
            CLAIMTRANSACTIONCURRENCYID uniqueidentifier
        );

        insert into @FILTERED_REVENUESPLIT
        select
            FT.ID,
            null as REVENUESPLITID,
            FTLI.FINANCIALTRANSACTIONID as APPLICATIONID,
            FTLI.ID as APPLICATIONREVENUESPLITID,
            CONSTITUENT.ID as CONSTITUENTID,
            CONSTITUENT.LOOKUPID as CONSTITUENTLOOKUPID,
            FTLI.TRANSACTIONAMOUNT as CLAIMAMOUNT,
            RSE.DESIGNATIONID,
            D.NAME as DESIGNATIONNAME,
            D.USERID as DESIGNATIONUSERID,
            FT.CALCULATEDUSERDEFINEDID as CLAIMLOOKUPID,
            CAST(FT.DATE AS datetime) as CLAIMDATE,
            FT1.CALCULATEDUSERDEFINEDID as ORIGINALREVENUELOOKUPID,
            CAST(FT1.DATE AS datetime) as ORIGINALREVENUEDATE,
            null as TRANSACTIONCURRENCYID,
            FT.TRANSACTIONCURRENCYID as CLAIMTRANSACTIONCURRENCYID
        from 
            dbo.FINANCIALTRANSACTION FT
        inner join
            dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FT.ID = FTLI.FINANCIALTRANSACTIONID
        inner join
            dbo.REVENUESPLIT_EXT RSE on FTLI.ID = RSE.ID
        inner join
            dbo.CONSTITUENT C on FT.CONSTITUENTID = C.ID
        inner join
            dbo.DESIGNATION D on RSE.DESIGNATIONID = D.ID
        left join
            dbo.REVENUEMATCHINGGIFT MG1 on MG1.ID = FT.ID
        left join
            dbo.FINANCIALTRANSACTION FT1 on FT1.ID = MG1.MGSOURCEREVENUEID
        left join
            dbo.CONSTITUENT on CONSTITUENT.ID = FT1.CONSTITUENTID
        where
            FT.TYPECODE = 3 --Matching gift claim

            and ((FTLI.DELETEDON is null) and (FTLI.TYPECODE <> 1))
            and ((FT1.TYPECODE IN (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) and (FT1.DELETEDON is null))
';

                if @INCLUDEPAIDCLAIMS = 0 and @HASNEWLYPAIDCLAIMS = 1
                    set @SQL = @SQL + N'
            --Do not include claim splits that are unpaid in the database but that are paid in the UI.

            and
            FTLI.ID not in
                (
                    select
                        NEWLYPAIDCLAIMTABLE.APPLICATIONREVENUESPLITID
                    from
                        #NEWLYPAIDCLAIMTABLE as NEWLYPAIDCLAIMTABLE
                )

';

                set @SQL = @SQL + N'
            and
            (
';

                if @INCLUDEPAIDCLAIMS = 1 and @HASNEWLYPAIDCLAIMS = 1
                    set @SQL = @SQL + N'
                --Include claim splits that are unpaid in the database but that are paid in the UI.

                FTLI.ID in
                    (
                        select
                            NEWLYPAIDCLAIMTABLE.APPLICATIONREVENUESPLITID
                        from
                            #NEWLYPAIDCLAIMTABLE as NEWLYPAIDCLAIMTABLE
                    )

';

                if (@INCLUDEPAIDCLAIMS = 1 and @HASNEWLYPAIDCLAIMS = 1) and @INCLUDEUNPAIDCLAIMS = 1
                    set @SQL = @SQL + N'
                or
';

                if @INCLUDEUNPAIDCLAIMS = 1
                    set @SQL = @SQL + N'
                    --Exclude matching gift claims paid by this payment, if they are

                    -- filtered in, they would come from the paid claims select statement

                    not exists
                    (
                        select
                            1
                        from
                            dbo.INSTALLMENTSPLIT
                            inner join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLIT.ID = INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM as MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT on INSTALLMENTSPLITPAYMENT.PAYMENTID = MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.ID
                            inner join dbo.FINANCIALTRANSACTION as FT_MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT on MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.FINANCIALTRANSACTIONID = FT_MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.ID
                        where
                            INSTALLMENTSPLIT.REVENUESPLITID = FTLI.ID
                            and MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID
                            and (FT_MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.TYPECODE in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9))
                            and (MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.DELETEDON is null)
                            and (MATCHINGGIFTCLAIMPAYMENTREVENUESPLIT.TYPECODE <> 1)
                    )
';

                set @SQL = @SQL + N'
            )

            and
            (
                (CAST(FT.DATE AS datetime) between @STARTDATE and @ENDDATE)
                or (CAST(FT1.DATE AS datetime) between @STARTDATE and @ENDDATE)
            )
            and
            (c.ID = @CONSTITUENTID 
                -- AdamBu - Bug 16530 - Include matching gift claims from orgs to which the given constituent is a parent corp.

                or c.ID in(
                    select ID
                    from ORGANIZATIONDATA
                    where PARENTCORPID = @CONSTITUENTID
                )
            )
            and
            (not exists (select RETVAL.REVENUESPLITID from @RETVAL as RETVAL where RETVAL.REVENUESPLITID = FTLI.ID))';

                    if len(@NAMECLAUSE) > 0
                    begin
                        set @SQL = @SQL + N'
            and ( ' + @NAMECLAUSE + N' )';
                    end

                    set @SQL = @SQL + N'
        order by
            CONSTITUENT.KEYNAME,
            CONSTITUENT.FIRSTNAME,
            CONSTITUENT.MIDDLENAME,
            CONSTITUENT.LOOKUPID,
            FT1.DATE,
            FT1.CALCULATEDUSERDEFINEDID,
            FT.DATE,
            FT.CALCULATEDUSERDEFINEDID;

        insert into @RETVAL
        select' + @TOPMAXROWSCLAUSE + N'
            RS.REVENUESPLITID,
            RS.APPLICATIONID,
            RS.APPLICATIONREVENUESPLITID,
            RS.CONSTITUENTID,
            null as SORTCONSTITUENTNAME,
            RS.CONSTITUENTLOOKUPID,
            0 as APPLIED,
            RS.CLAIMAMOUNT,
            RS.DESIGNATIONID,
            RS.DESIGNATIONNAME,
            RS.DESIGNATIONUSERID,
            RS.CLAIMLOOKUPID,
            RS.CLAIMDATE,
            RS.ORIGINALREVENUELOOKUPID,
            RS.ORIGINALREVENUEDATE,
            @TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID,
            RS.CLAIMTRANSACTIONCURRENCYID
        from
            @FILTERED_REVENUESPLIT RS
';

                    --JamesWill WI180281 2012-01-03 Only return records to which the user has site access

                    if @ISSYSADMIN = 0
                        set @SQL = @SQL + N'
        inner join
            dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS_BULK(@CURRENTAPPUSERID) ALLOWED on ALLOWED.ID = RS.REVENUEID
';

                    set @SQL = @SQL + N'
        inner join
            dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE_BULK() as INSTALLMENTSPLIT
                on INSTALLMENTSPLIT.PLEDGEID = RS.REVENUEID and INSTALLMENTSPLIT.DESIGNATIONID = RS.DESIGNATIONID
        where
';

                    if @ISSYSADMIN = 0
                        set @SQL = @SQL + N'
            ALLOWED.ACCESSGRANTED = 1 and
';

                    set @SQL = @SQL + N'
            INSTALLMENTSPLIT.BALANCE > 0;

        set @FOUND = @FOUND + @@ROWCOUNT;
    end
';

                    set @SQL = @SQL + @UPDATESORTCONSTITUENTNAMESQL;

                end

                set @SQL = @SQL + N'
    select
        REVENUESPLITID,
        APPLICATIONID,
        APPLICATIONREVENUESPLITID,
        SORTCONSTITUENTNAME,
        CONSTITUENTLOOKUPID,
        APPLIED,
        CLAIMAMOUNT,
        DESIGNATIONID,
        DESIGNATIONNAME,
        DESIGNATIONUSERID,
        CLAIMLOOKUPID,
        CLAIMDATE,
        ORIGINALREVENUEDATE,
        TRANSACTIONCURRENCYID,
        CLAIMTRANSACTIONCURRENCYID
    from
        @RETVAL
    order by
        SORTCONSTITUENTNAME,
        CONSTITUENTLOOKUPID,
        ORIGINALREVENUEDATE,
        ORIGINALREVENUELOOKUPID,
        CLAIMDATE,
        CLAIMLOOKUPID;
';

                exec sp_executesql
                    @SQL,

                    --Parameter definition

                    N'@MAXROWS int,
                    @CURRENTAPPUSERID uniqueidentifier,
                    @REVENUEID uniqueidentifier,
                    @KEYNAME nvarchar(150),
                    @FIRSTNAME nvarchar(150),
                    @FULLNAME nvarchar(150),
                    @STARTDATE datetime,
                    @ENDDATE datetime',

                    --Parameters

                    @MAXROWS,
                    @CURRENTAPPUSERID,
                    @REVENUEID,
                    @KEYNAME,
                    @FIRSTNAME,
                    @FULLNAME,
                    @STARTDATE,
                    @ENDDATE;

                /**
                 * Cleanup temp tables created for records that have client-side edits
                 */
                if @HASNEWLYUNPAIDCLAIMS = 1
                    drop table #NEWLYUNPAIDCLAIMTABLE;

                if @HASNEWLYPAIDCLAIMS = 1
                    drop table #NEWLYPAIDCLAIMTABLE;