USP_SMARTFIELD_LAST_RECURRINGGIFTINSTALLMENT

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTSELECTIONID uniqueidentifier IN
@DESIGNATIONS xml IN
@CAMPAIGNS xml IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@ASOF datetime IN
@SITES xml IN

Definition

Copy


            CREATE procedure dbo.USP_SMARTFIELD_LAST_RECURRINGGIFTINSTALLMENT
            (
                @CONSTITUENTSELECTIONID uniqueidentifier = null,
                @DESIGNATIONS xml = null,
                @CAMPAIGNS xml = null,
                @STARTDATE datetime = null,
                @ENDDATE datetime = null,
                @ASOF datetime,
                @SITES xml = null
            )
            as
                set nocount on;
                declare @DESIGNATIONSFILTER table(ID uniqueidentifier primary key);
                declare @CAMPAIGNSFILTER table(ID uniqueidentifier primary key);
                declare @SELECTIONFILTER table(ID uniqueidentifier primary key);
                declare @CONSTITUENTFILTER table(ID uniqueidentifier primary key);

                -- Build table of designations to filter on

                if @DESIGNATIONS is not null
                begin
                    insert into @DESIGNATIONSFILTER(ID) 
                        select distinct
                            T.c.value('(ID)[1]','uniqueidentifier')
                        from   
                            @DESIGNATIONS.nodes('/DESIGNATIONS/ITEM') T(c)
                end

                --Build table of campaigns to filter on        

                if @CAMPAIGNS is not null
                begin
                    insert into @CAMPAIGNSFILTER(ID)
                        select distinct
                            T.c.value('(ID)[1]','uniqueidentifier')
                        from 
                             @CAMPAIGNS.nodes('/CAMPAIGNS/ITEM') T(c)
                end


                declare @SITESFILTER table(ID uniqueidentifier primary key);
                insert into 
                    @SITESFILTER(ID) 
                select distinct
                    T.c.value('(SITEID)[1]','uniqueidentifier')
                FROM
                    @SITES.nodes('/SITES/ITEM') T(c)

                create table #CONSTITUENTSITEFILTER (ID uniqueidentifier primary key);
                insert into
                    #CONSTITUENTSITEFILTER(ID)
                select distinct
                    CONSTITUENTSITE.CONSTITUENTID
                from
                    CONSTITUENTSITE
                inner join
                    @SITESFILTER as SITES on SITES.ID = CONSTITUENTSITE.SITEID

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

                create table #TMP_REVENUESITEFILTER(ID uniqueidentifier);

                if @SITES is not null
                begin
                    insert into #TMP_REVENUESITEFILTER
                    select distinct
                        REVENUE.ID
                    from
                        REVENUE
                    cross apply 
                        dbo.UFN_SITEID_MAPFROM_REVENUEID(REVENUE.ID) as SITES
                    inner join
                        @SITESFILTER as SITESFILTER on SITESFILTER.ID = SITES.SITEID
                end

                --Build table of constituents

                if @CONSTITUENTSELECTIONID is not null
                begin
                    if @SITES is null
                    begin
                        insert into @SELECTIONFILTER(ID)
                        select 
                            ID
                        from
                            dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTSELECTIONID);
                    end
                    else
                    begin
                        insert into @SELECTIONFILTER(ID)
                        select 
                            CONSTITUENTSELECTION.ID
                        from
                            dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTSELECTIONID) as CONSTITUENTSELECTION
                        inner join
                            #CONSTITUENTSITEFILTER as CONSTITUENTSITEFILTER on CONSTITUENTSITEFILTER.ID = CONSTITUENTSELECTION.ID
                    end
                end
                else
                begin
                    if @SITES is null
                    begin
                    insert into @SELECTIONFILTER(ID)
                        select distinct    
                            ID 
                        from 
                            dbo.CONSTITUENT        
                    end
                    else
                    begin
                    insert into @SELECTIONFILTER(ID)
                        select distinct    
                            CONSTITUENT.ID
                        from 
                            dbo.CONSTITUENT
                        inner join    
                            #CONSTITUENTSITEFILTER as CONSTITUENTSITEFILTER on CONSTITUENTSITEFILTER.ID = CONSTITUENT.ID
                    end
                end

                --Filter constituent list based on ASOF date                        

                if @ASOF is not null 
                begin
                    insert into @CONSTITUENTFILTER(ID) 
                        select 
                            CONSTITUENTID 
                        from 
                            dbo.REVENUE 
                        inner join     @SELECTIONFILTER as SELECTIONFILTER on 
                            SELECTIONFILTER.ID = REVENUE.CONSTITUENTID 
                        where 
                            REVENUE.DATECHANGED > @ASOF
                    union 
                        select 
                            CONSTITUENTID 
                        from 
                            dbo.REVENUEAUDIT 
                        inner join @SELECTIONFILTER as SELECTIONFILTER on
                            SELECTIONFILTER.ID = REVENUEAUDIT.CONSTITUENTID
                         where 
                            REVENUEAUDIT.AUDITDATE > @ASOF
                    union 
                        select
                            CONSTITUENTID 
                        from 
                            dbo.REVENUE 
                        inner join @SELECTIONFILTER as SELECTIONFILTER on
                             SELECTIONFILTER.ID = REVENUE.CONSTITUENTID 
                        inner join dbo.REVENUESPLIT on 
                            REVENUE.ID = REVENUESPLIT.REVENUEID 
                        where 
                            REVENUESPLIT.DATECHANGED > @ASOF
                    union 
                        select
                            CONSTITUENT.ID 
                        from 
                            dbo.CONSTITUENT 
                        inner join @SELECTIONFILTER as SELECTIONFILTER on
                             SELECTIONFILTER.ID = CONSTITUENT.ID     
                        where 
                            CONSTITUENT.DATEADDED > @ASOF;
                end
                else
                begin
                    insert into @CONSTITUENTFILTER(ID) 
                        select
                             ID 
                        from 
                            @SELECTIONFILTER;
                end;

        drop table #CONSTITUENTSITEFILTER;

        if @SITES is null
        begin
            with REVENUE_CTE (ID, CONSTITUENTID, DATE) as
                  (select    RECURRINGGIFT.ID ,
                      CONSTITUENTFILTER.ID,
                      RECURRINGGIFTINSTALLMENT.DATE 
               from @CONSTITUENTFILTER as CONSTITUENTFILTER
               left join dbo.REVENUE as RECURRINGGIFT on RECURRINGGIFT.CONSTITUENTID = CONSTITUENTFILTER.ID
               left join dbo.RECURRINGGIFTINSTALLMENT on
                                                         RECURRINGGIFTINSTALLMENT.REVENUEID = RECURRINGGIFT.ID and
                                                                   RECURRINGGIFTINSTALLMENT.AMOUNT != dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE(RECURRINGGIFTINSTALLMENT.ID) and
                                                                   (@STARTDATE is null or RECURRINGGIFTINSTALLMENT.DATE >= @STARTDATE) and
                                                                   (@ENDDATE is null or RECURRINGGIFTINSTALLMENT.DATE <= @ENDDATE
               where 

                        RECURRINGGIFT.TRANSACTIONTYPECODE = 2 and
                        (@DESIGNATIONS is null or RECURRINGGIFT.ID in (select REVENUESPLIT.REVENUEID from dbo.REVENUESPLIT 
                                                                       inner join @DESIGNATIONSFILTER as DESIGNATIONSFILTER on DESIGNATIONSFILTER.ID = REVENUESPLIT.DESIGNATIONID)) and
                        (@CAMPAIGNS is null    or RECURRINGGIFT.ID in (select REVENUESPLIT.REVENUEID from dbo.REVENUESPLIT 
                                                                    inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLIT.ID = REVENUESPLITCAMPAIGN.REVENUESPLITID 
                                                                    inner join @CAMPAIGNSFILTER as CAMPAIGNSFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNSFILTER.ID))
              group by RECURRINGGIFT.ID,CONSTITUENTFILTER.ID,RECURRINGGIFTINSTALLMENT.DATE)


                    select 
                        CONSTITUENTFILTER.ID,
                        max(REVENUERECORDS.DATE)as LASTINSTALLMENTPAYMENT
                    from
                        @CONSTITUENTFILTER as CONSTITUENTFILTER 
              left join REVENUE_CTE as REVENUERECORDS on CONSTITUENTFILTER.ID = REVENUERECORDS.CONSTITUENTID
              group by CONSTITUENTFILTER.ID;
        end
        else
        begin
               with REVENUE_CTE (ID, CONSTITUENTID, DATE) as
                  (select    RECURRINGGIFT.ID ,
                      CONSTITUENTFILTER.ID,
                      RECURRINGGIFTINSTALLMENT.DATE 
               from @CONSTITUENTFILTER as CONSTITUENTFILTER
               left join dbo.REVENUE as RECURRINGGIFT on RECURRINGGIFT.CONSTITUENTID = CONSTITUENTFILTER.ID
               inner join #TMP_REVENUESITEFILTER as REVENUESITEFILTER on REVENUESITEFILTER.ID = RECURRINGGIFT.ID
               left join dbo.RECURRINGGIFTINSTALLMENT on
                                                         RECURRINGGIFTINSTALLMENT.REVENUEID = RECURRINGGIFT.ID and
                                                                   RECURRINGGIFTINSTALLMENT.AMOUNT != dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE(RECURRINGGIFTINSTALLMENT.ID) and
                                                                   (@STARTDATE is null or RECURRINGGIFTINSTALLMENT.DATE >= @STARTDATE) and
                                                                   (@ENDDATE is null or RECURRINGGIFTINSTALLMENT.DATE <= @ENDDATE
               where 

                        RECURRINGGIFT.TRANSACTIONTYPECODE = 2 and
                        (@DESIGNATIONS is null or RECURRINGGIFT.ID in (select REVENUESPLIT.REVENUEID from dbo.REVENUESPLIT 
                                                                       inner join @DESIGNATIONSFILTER as DESIGNATIONSFILTER on DESIGNATIONSFILTER.ID = REVENUESPLIT.DESIGNATIONID)) and
                        (@CAMPAIGNS is null    or RECURRINGGIFT.ID in (select REVENUESPLIT.REVENUEID from dbo.REVENUESPLIT 
                                                                    inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLIT.ID = REVENUESPLITCAMPAIGN.REVENUESPLITID 
                                                                    inner join @CAMPAIGNSFILTER as CAMPAIGNSFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNSFILTER.ID))
              group by RECURRINGGIFT.ID,CONSTITUENTFILTER.ID,RECURRINGGIFTINSTALLMENT.DATE)


                    select 
                        CONSTITUENTFILTER.ID,
                        max(REVENUERECORDS.DATE)as LASTINSTALLMENTPAYMENT
                    from
                        @CONSTITUENTFILTER as CONSTITUENTFILTER 
              left join REVENUE_CTE as REVENUERECORDS on CONSTITUENTFILTER.ID = REVENUERECORDS.CONSTITUENTID
              group by CONSTITUENTFILTER.ID;
        end