UFN_SMARTQUERY_CONSTITUENTBYLASTREVENUE

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTSELECTIONID uniqueidentifier IN
@REVENUESELECTIONID uniqueidentifier IN
@CLAUSE int IN
@INTERVAL int IN
@TIMEPERIOD int IN
@CURRENTAPPUSERID uniqueidentifier IN
@MAXROWS int IN

Definition

Copy


                create function dbo.UFN_SMARTQUERY_CONSTITUENTBYLASTREVENUE
                (
                    @CONSTITUENTSELECTIONID uniqueidentifier,
                    @REVENUESELECTIONID uniqueidentifier,
                    @CLAUSE integer,
                    @INTERVAL integer,
                    @TIMEPERIOD integer,
                    @CURRENTAPPUSERID uniqueidentifier = null,
                    @MAXROWS int
                )
                returns @T table 
                (
                    ID uniqueidentifier not null
                    KEYNAME nvarchar(154),
                    FIRSTNAME nvarchar(154),
                    NAME nvarchar(154),
                    ADDRESSBLOCK nvarchar(150),
                    CITY nvarchar(50),
                    STATE nvarchar(50),
                    POSTCODE nvarchar(12),
                    LOOKUPID nvarchar(36),
                    REVENUEID uniqueidentifier not null,
                    REVENUEAMOUNT money,
                    TRANSACTIONREVENUEAMOUNT money,
                    ORGANIZATIONREVENUEAMOUNT money,
                    REVENUEDATE datetime,
                    REVENUEDAYS integer,
                    REVENUEWEEKS integer,
                    REVENUEMONTHS integer,
                    REVENUEYEARS integer,
                    BASECURRENCYID uniqueidentifier,
                    TRANSACTIONCURRENCYID uniqueidentifier,
                    ORGANIZATIONCURRENCYID uniqueidentifier
                )                
                as
                begin

                    declare @DT datetime
                    set @DT = dbo.UFN_DATE_GETEARLIESTTIME(getdate());

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

                    declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                    set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                    declare @constituentids table (ID uniqueidentifier); 

                    declare @revenueids table (ID uniqueidentifier); 

                    if @ISADMIN = 1
                    begin
                        insert into @constituentids 
                            select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTSELECTIONID); 

                        insert into @revenueids 
                            select REVENUE.ID 
                            from dbo.REVENUE with (NOLOCK)
                            inner join @constituentids constits
                                on REVENUE.CONSTITUENTID = constits.ID
                            inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@REVENUESELECTIONID) rev
                                on REVENUE.ID = rev.ID
                    end
                    else
                    begin
                        insert into @constituentids 
                            select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTSELECTIONID) CONSTITUENT 
                            where
                                (dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, '98bcba0e-b450-4fbf-963b-0f512f047c7d', CONSTITUENT.ID) = 1
                                and 
                                (dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, '98bcba0e-b450-4fbf-963b-0f512f047c7d', CONSTITUENT.ID) = 1


                        insert into @revenueids 
                            select REVENUE.ID 
                            from dbo.REVENUE with (NOLOCK)
                            inner join @constituentids constits
                                on REVENUE.CONSTITUENTID = constits.ID
                            inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@REVENUESELECTIONID) rev
                                on REVENUE.ID = rev.ID
                            where dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE(@CURRENTAPPUSERID, '98bcba0e-b450-4fbf-963b-0f512f047c7d', REVENUE.ID) = 1 
                    end

                    ;with LASTREVENUEDATE_CTE as
                    (
                        select REVENUE.CONSTITUENTID, MAX(REVENUE.DATE) MAXDATE
                        from dbo.REVENUE
                        inner join @revenueids REVS on REVENUE.ID = REVS.ID
                        group by REVENUE.CONSTITUENTID
                    ),
                    REVENUE_CTE as 
                    ( 
                        select 
                            REVENUE.ID, 
                            REVENUE.CONSTITUENTID, 
                            REVENUE.DATE
                            REVENUE.AMOUNT,
                            TRANSACTIONAMOUNT,
                            ORGANIZATIONAMOUNT,
                            BASECURRENCYID,
                            TRANSACTIONCURRENCYID,
                            datediff(YY, REVENUE.DATE, @DT) YEARDIFF, 
                            datediff(M, REVENUE.DATE, @DT) MONTHDIFF, 
                            datediff(WW, REVENUE.DATE, @DT) WEEKDIFF, 
                            datediff(D, REVENUE.DATE, @DT) DAYDIFF, 
                            case  
                                when (datepart(DY, @DT) - datepart(DY, REVENUE.DATE)) < 0 
                                    then 1 
                                else 0 
                            end OFFSET

                        from 
                            dbo.REVENUE with (NOLOCK)
                        inner join LASTREVENUEDATE_CTE
                            on REVENUE.CONSTITUENTID = LASTREVENUEDATE_CTE.CONSTITUENTID and REVENUE.DATE = LASTREVENUEDATE_CTE.MAXDATE
                        inner join @revenueids REVS on REVENUE.ID = REVS.ID
                    ) 
                    insert into @T  
                        select top (@MAXROWS)  
                            CONSTITUENT.ID,  
                            CONSTITUENT.KEYNAME, 
                            CONSTITUENT.FIRSTNAME, 
                            CONSTITUENT.NAME, 
                            ADDRESS.ADDRESSBLOCK, 
                            ADDRESS.CITY, 
                            STATE.DESCRIPTION, 
                            ADDRESS.POSTCODE, 
                            CONSTITUENT.LOOKUPID, 
                            REVCTE.ID as REVENUEID, 
                            REVCTE.AMOUNT, 
                            REVCTE.TRANSACTIONAMOUNT,
                            REVCTE.ORGANIZATIONAMOUNT,
                            REVCTE.DATE
                            REVCTE.daydiff as REVENUEDAYS, 
                            REVCTE.weekdiff as REVENUEWEEKS, 
                            REVCTE.monthdiff as REVENUEMONTHS, 
                            (REVCTE.yeardiff - REVCTE.offset) as REVENUEYEARS, 
                            REVCTE.BASECURRENCYID,
                            REVCTE.TRANSACTIONCURRENCYID,
                            @ORGANIZATIONCURRENCYID
                        from  
                            REVENUE_CTE REVCTE
                        inner join dbo.CONSTITUENT WITH (NOLOCK) on REVCTE.CONSTITUENTID = CONSTITUENT.ID                    
                        left outer join dbo.ADDRESS WITH (NOLOCK) on ADDRESS.CONSTITUENTID = CONSTITUENT.ID and ADDRESS.ISPRIMARY = 1 
                        left outer join dbo.STATE on STATE.ID = ADDRESS.STATEID                             
                        where 
                            ((@CLAUSE = 0 and @TIMEPERIOD = 0 and REVCTE.daydiff = @INTERVAL
                            or (@CLAUSE = 0 and @TIMEPERIOD = 1 and REVCTE.weekdiff = @INTERVAL
                            or (@CLAUSE = 0 and @TIMEPERIOD = 2 and REVCTE.monthdiff = @INTERVAL
                            or (@CLAUSE = 0 and @TIMEPERIOD = 3 and REVCTE.yeardiff = @INTERVAL
                            or (@CLAUSE = 1 and @TIMEPERIOD = 0 and REVCTE.daydiff > @INTERVAL
                            or (@CLAUSE = 1 and @TIMEPERIOD = 1 and REVCTE.weekdiff > @INTERVAL
                            or (@CLAUSE = 1 and @TIMEPERIOD = 2 and REVCTE.monthdiff > @INTERVAL
                            or (@CLAUSE = 1 and @TIMEPERIOD = 3 and REVCTE.yeardiff > @INTERVAL
                            or (@CLAUSE = -1 and @TIMEPERIOD = 0 and REVCTE.daydiff < @INTERVAL
                            or (@CLAUSE = -1 and @TIMEPERIOD = 1 and REVCTE.weekdiff < @INTERVAL
                            or (@CLAUSE = -1 and @TIMEPERIOD = 2 and REVCTE.monthdiff < @INTERVAL
                            or (@CLAUSE = -1 and @TIMEPERIOD = 3 and REVCTE.yeardiff < @INTERVAL)) 
                        ORDER BY 
                            CONSTITUENT.KEYNAME, 
                            CONSTITUENT.FIRSTNAME, 
                            CONSTITUENT.LOOKUPID;                             
                    return;
                end;