UFN_DESIGNATION_GETTOTALDONORS

Returns the total number of donors for a given designation.

Return

Return Type
int

Parameters

Parameter Parameter Type Mode Description
@DESIGNATIONID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@ROLLUPTOTAL bit IN

Definition

Copy


            CREATE function dbo.UFN_DESIGNATION_GETTOTALDONORS
            (
                @DESIGNATIONID uniqueidentifier,
                @STARTDATE datetime = null,
                @ENDDATE datetime = null,
                @ROLLUPTOTAL bit = 0
            ) 
            returns int
            with execute as caller
            as begin
                declare @RESULT int;

                select @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE),
                        @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);

                if @ROLLUPTOTAL = 0
                    select @RESULT = count(distinct R.CONSTITUENTID)
                    from dbo.REVENUE R                     
                    inner join dbo.REVENUESPLIT RDS on R.ID = RDS.REVENUEID
                    where
                        (R.DATE >= @STARTDATE or @STARTDATE is null) and
                        (R.DATE <= @ENDDATE or @ENDDATE is null) and
                        RDS.DESIGNATIONID = @DESIGNATIONID and
                        (R.TRANSACTIONTYPECODE in (1,2,3,7) or
                         (R.TRANSACTIONTYPECODE = 0 and (RDS.APPLICATIONCODE = 0 or (RDS.APPLICATIONCODE = 1 and RDS.TYPECODE = 0))))
                else
                    begin
                    declare @DL1ID uniqueidentifier;
                    declare @DL2ID uniqueidentifier;
                    declare @DL3ID uniqueidentifier;
                    declare @DL4ID uniqueidentifier;
                    declare @DL5ID uniqueidentifier;

                    select @DL1ID = DESIGNATIONLEVEL1ID,
                            @DL2ID = DESIGNATIONLEVEL2ID,
                            @DL3ID = DESIGNATIONLEVEL3ID,
                            @DL4ID = DESIGNATIONLEVEL4ID,
                            @DL5ID = DESIGNATIONLEVEL5ID
                    from dbo.DESIGNATION
                    where ID = @DESIGNATIONID;

                    with DESIGNATIONS_CTE as (
                        select ID 
                        from dbo.DESIGNATION D
                        where D.DESIGNATIONLEVEL1ID = @DL1ID and
                              (D.DESIGNATIONLEVEL2ID = @DL2ID or @DL2ID is null) and 
                              (D.DESIGNATIONLEVEL3ID = @DL3ID or @DL3ID is null) and 
                              (D.DESIGNATIONLEVEL4ID = @DL4ID or @DL4ID is null) and 
                              (D.DESIGNATIONLEVEL5ID = @DL5ID or @DL5ID is null)
                        )

                    select @RESULT = 
                        coalesce((select count(distinct R.CONSTITUENTID)
                        from dbo.REVENUESPLIT RDS
                        inner join DESIGNATIONS_CTE D on RDS.DESIGNATIONID = D.ID
                        inner join dbo.REVENUE R on R.ID = RDS.REVENUEID
                        where
                            (R.DATE >= @STARTDATE or @STARTDATE is null) and
                            (R.DATE <= @ENDDATE or @ENDDATE is null) and
                            (R.TRANSACTIONTYPECODE in (1,3,7) or
                             (R.TRANSACTIONTYPECODE = 0 and (RDS.APPLICATIONCODE in (0, 3) or (RDS.APPLICATIONCODE = 1 and RDS.TYPECODE = 0))))
                            ), 0)
                        +
                            --payments of pledges not included in date range                        

                        coalesce((select count(distinct R.CONSTITUENTID)
                        from dbo.REVENUESPLIT RDS
                        inner join DESIGNATIONS_CTE D on RDS.DESIGNATIONID = D.ID
                        inner join dbo.REVENUE R on R.ID = RDS.REVENUEID
                        where
                            R.ID NOT IN
                                (SELECT IP.PAYMENTID
                                    FROM DBO.INSTALLMENTPAYMENT IP
                                    inner join dbo.REVENUE PLEDGE on IP.PLEDGEID = PLEDGE.ID
                                    inner join dbo.REVENUESPLIT PLEDGESPLIT on PLEDGE.ID = PLEDGESPLIT.REVENUEID
                                    inner join DESIGNATIONS_CTE PD on PLEDGESPLIT.DESIGNATIONID = PD.ID
                                    WHERE (PLEDGE.DATE >= @STARTDATE or @STARTDATE is null) and
                                        (PLEDGE.DATE <= @ENDDATE or @ENDDATE is null))
                             and
                            (R.DATE >= @STARTDATE or @STARTDATE is null) and
                            (R.DATE <= @ENDDATE or @ENDDATE is null) and
                            R.TRANSACTIONTYPECODE = 0 and RDS.APPLICATIONCODE in (2, 7)
                        ), 0);                

                    end
                return @RESULT;
            end