USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTGROUP_REVENUEHISTORY

The load procedure used by the view dataform template "Constituent Group Revenue History View"

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.
@GROUPINCLUDESMEMBERREVENUE bit INOUT Group includes member revenue
@TOTALNUMBERFROMGROUP int INOUT Total number of transactions from group
@TOTALNUMBERFROMGROUPMEMBERS int INOUT Total number of transactions from members
@TOTALGROUPAMOUNT money INOUT Total revenue from group
@TOTALGROUPMEMBERAMOUNT money INOUT Total revenue from members
@ISHOUSEHOLD bit INOUT Is household
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@TOTALGROUPMEMBERAMOUNTGIFTAID money INOUT Total revenue from members with Gift Aid

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTGROUP_REVENUEHISTORY
(
    @ID uniqueidentifier,
    @DATALOADED bit = 0 output,
    @GROUPINCLUDESMEMBERREVENUE bit = null output,
    @TOTALNUMBERFROMGROUP int = null output,
    @TOTALNUMBERFROMGROUPMEMBERS int = null output,
    @TOTALGROUPAMOUNT money = null output,
    @TOTALGROUPMEMBERAMOUNT money = null output,
    @ISHOUSEHOLD bit = null output,
    @CURRENTAPPUSERID uniqueidentifier = null,
  @TOTALGROUPMEMBERAMOUNTGIFTAID money = null output

as
    set nocount on;

    set @DATALOADED = 0;

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

    declare @SECURITYFEATUREID uniqueidentifier;
    declare @SECURITYFEATURETYPE tinyint;
    set @SECURITYFEATUREID = '85de7bec-b9d3-44c9-9f2b-df0ae31ad853';
    set @SECURITYFEATURETYPE = 1;

    -- 'Revenue' includes

    --        Gifts, Pledges, Recurring gift payments, Event registration fees, Matching gift payments, 

    --        Other revenue, Membership fees (2.0?)


    -- households always include member giving, other types get looked up

    select 
    @GROUPINCLUDESMEMBERREVENUE = 
      case
        when GD.GROUPTYPECODE = 0 then 1
        when GD.GROUPTYPECODE = 1 then GT.INCLUDEMEMBERGIVING
      end,
    @ISHOUSEHOLD = 
      case
        when GD.GROUPTYPECODE = 0 then 1
        when GD.GROUPTYPECODE = 1 then 0
      end,
    @DATALOADED = 1
    from dbo.GROUPDATA GD
    left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
    where GD.ID=@ID;

    -- calculate the member giving

    if @GROUPINCLUDESMEMBERREVENUE = 1
    begin
        select
            @DATALOADED = 1,
            @TOTALGROUPMEMBERAMOUNT = cast(sum(cast(RS.AMOUNT as decimal(20,5)) - cast(coalesce(WO.AMOUNT, 0) as decimal(20,5))) as money),
      @TOTALGROUPMEMBERAMOUNTGIFTAID = coalesce(cast(sum(cast(case R.TRANSACTIONTYPECODE when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT(RS.ID, 1)
                                                                              when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGESPLITGROSSAMOUNT(RS.ID)
                                                                              else RS.AMOUNT end as decimal(20,5)) - cast(coalesce(WO.AMOUNT, 0) as decimal(20,5))) as money), 0)
        from dbo.REVENUE R
        inner join dbo.REVENUESPLIT RS
            on RS.REVENUEID = R.ID
        left join
            (select
                INSTALLMENTSPLIT.PLEDGEID,
                INSTALLMENTSPLIT.DESIGNATIONID,
                sum(coalesce(INSTALLMENTSPLITWRITEOFF.AMOUNT,0)) AMOUNT
            from
                dbo.INSTALLMENTSPLITWRITEOFF
            inner join
                dbo.INSTALLMENTSPLIT
            on
                INSTALLMENTSPLIT.ID = INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID
            group by
                INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) WO
        on
            WO.PLEDGEID = R.ID and WO.DESIGNATIONID = RS.DESIGNATIONID
        inner join dbo.GROUPMEMBER GM 
            on R.CONSTITUENTID = GM.MEMBERID
        left join dbo.GROUPMEMBERDATERANGE GMDR 
            on GMDR.GROUPMEMBERID = GM.ID
        where 
            GM.GROUPID = @ID and 
            ((R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0,1,3,5,7)) or
            R.TRANSACTIONTYPECODE = 1) 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 (
                (R.TRANSACTIONTYPECODE = 0 
                    and RS.APPLICATIONCODE=1 
                    and RS.TYPECODE=1 
                    and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(RS.ID,@CURRENTAPPUSERID) = 1
                )
                or(
                    not(R.TRANSACTIONTYPECODE = 0 
                        and RS.APPLICATIONCODE=1 
                        and RS.TYPECODE=1
                    )
                    and exists
                    (
                        select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RS.ID) REVSITES
                        where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                            or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                    )
                )
            );


        -- Total Transaction count includes all revenue types

        --    Gifts, Pledges, Pledge Payments, Recurring Gifts, Recurring Gift Payments, 

        --    Matching Gift Claims, Matching Gift Payments

        --    Event Registration Fees, Membership Fees (2.0?)


        select
            @TOTALNUMBERFROMGROUPMEMBERS = Count(distinct R.ID)                  
        from dbo.REVENUE R
        inner join dbo.REVENUESPLIT RS
            on R.ID = RS.REVENUEID
        inner join dbo.GROUPMEMBER GM 
            on R.CONSTITUENTID = GM.MEMBERID
        left join dbo.GROUPMEMBERDATERANGE GMDR 
            on GMDR.GROUPMEMBERID = GM.ID
        where 
            GM.GROUPID = @ID and
            RS.APPLICATIONCODE <> 2 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 exists(
                select ID
                from dbo.REVENUESPLIT
                where REVENUEID=R.ID
                    and (
                        (R.TRANSACTIONTYPECODE = 0 
                            and APPLICATIONCODE=1 
                            and TYPECODE=1 
                            and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(ID,@CURRENTAPPUSERID) = 1
                        )
                        or(
                            not(R.TRANSACTIONTYPECODE = 0 
                                and APPLICATIONCODE=1 
                                and TYPECODE=1
                            )
                            and exists
                            (
                                select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RS.ID) REVSITES
                                where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                                    or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                            )
                        )
                    )
            );                          

        -- Pledge payments

        select 
            @TOTALNUMBERFROMGROUPMEMBERS = @TOTALNUMBERFROMGROUPMEMBERS + count(RS.ID)
        from dbo.REVENUESPLIT RS
        inner join dbo.REVENUE R
            on R.ID = RS.ID
        inner join dbo.GROUPMEMBER GM 
            on R.CONSTITUENTID = GM.MEMBERID
        left join dbo.GROUPMEMBERDATERANGE GMDR 
            on GMDR.GROUPMEMBERID = GM.ID
        inner join dbo.INSTALLMENTSPLITPAYMENT ISP
                on ISP.PAYMENTID = RS.ID
        where 
            R.TRANSACTIONTYPECODE = 0 and
            RS.APPLICATIONCODE = 2 and
            GM.GROUPID = @ID 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;

        -- Write-offs

        select
            @TOTALNUMBERFROMGROUPMEMBERS = @TOTALNUMBERFROMGROUPMEMBERS + count(R.ID)
        from dbo.Revenue R          
        inner join dbo.GROUPMEMBER GM 
            on R.CONSTITUENTID = GM.MEMBERID
        left join dbo.GROUPMEMBERDATERANGE GMDR 
            on GMDR.GROUPMEMBERID = GM.ID
        inner join dbo.WRITEOFF WO    
            on R.ID = WO.REVENUEID        
        where GM.GROUPID = @ID 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 exists(
                select ID
                from dbo.REVENUESPLIT
                where REVENUEID=R.ID
                    and (
                        (R.TRANSACTIONTYPECODE = 0 
                            and APPLICATIONCODE=1 
                            and TYPECODE=1 
                            and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(ID,@CURRENTAPPUSERID) = 1
                        )
                        or(
                            not(R.TRANSACTIONTYPECODE = 0 
                                and APPLICATIONCODE=1 
                                and TYPECODE=1
                            )
                            and exists
                            (
                                select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                                    or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                            )
                        )
                    )
            );

        -- Matching gift claims

        select
            @TOTALNUMBERFROMGROUPMEMBERS = @TOTALNUMBERFROMGROUPMEMBERS + count(R.ID)
        from dbo.REVENUE R        
        inner join dbo.REVENUEMATCHINGGIFT RMG
            on RMG.ID = R.ID
        inner join dbo.REVENUE R2
            on R2.ID = RMG.MGSOURCEREVENUEID
        inner join dbo.GROUPMEMBER GM 
            on R2.CONSTITUENTID = GM.MEMBERID
        left join dbo.GROUPMEMBERDATERANGE GMDR 
            on GMDR.GROUPMEMBERID = GM.ID
        where R.TRANSACTIONTYPECODE = 3 and    
                GM.GROUPID = @ID 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 exists(
                    select ID
                    from dbo.REVENUESPLIT
                    where REVENUEID=R.ID
                        and (
                            (R.TRANSACTIONTYPECODE = 0 
                                and APPLICATIONCODE=1 
                                and TYPECODE=1 
                                and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(ID,@CURRENTAPPUSERID) = 1
                            )
                            or(
                                not(R.TRANSACTIONTYPECODE = 0 
                                    and APPLICATIONCODE=1 
                                    and TYPECODE=1
                                )
                                and exists
                                (
                                    select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                    where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                                        or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                                )
                            )
                        )
                );

    end

    -- calculate the revenue from the group itself

    select
        @DATALOADED = 1,        
        @TOTALGROUPAMOUNT = cast(sum(cast(RS.AMOUNT as decimal(20,5)) - cast(coalesce(WO.AMOUNT, 0) as decimal(20,5))) as money)
    from
        dbo.REVENUE R
    inner join dbo.REVENUESPLIT RS
        on RS.REVENUEID = R.ID
    left join
        (select
            INSTALLMENTSPLIT.PLEDGEID,
            INSTALLMENTSPLIT.DESIGNATIONID,
            sum(coalesce(INSTALLMENTSPLITWRITEOFF.AMOUNT,0)) AMOUNT
        from
            dbo.INSTALLMENTSPLITWRITEOFF
        inner join
            dbo.INSTALLMENTSPLIT
        on
            INSTALLMENTSPLIT.ID = INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID
        group by
            INSTALLMENTSPLIT.PLEDGEID, INSTALLMENTSPLIT.DESIGNATIONID) WO
    on
        WO.PLEDGEID = R.ID and WO.DESIGNATIONID = RS.DESIGNATIONID
    where
        ((R.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0,1,3,5,7)) or
        R.TRANSACTIONTYPECODE = 1) and
        R.CONSTITUENTID = @ID
        and (
            (R.TRANSACTIONTYPECODE = 0 
                and RS.APPLICATIONCODE=1 
                and RS.TYPECODE=1 
                and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(RS.ID,@CURRENTAPPUSERID) = 1
            )
            or(
                not(R.TRANSACTIONTYPECODE = 0 
                    and RS.APPLICATIONCODE=1 
                    and RS.TYPECODE=1
                )
                and exists
                (
                    select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RS.ID) REVSITES
                    where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                        or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                )
            )
        );

    -- Total Transaction count includes all revenue types

    --    Gifts, Pledges, Pledge Payments, Recurring Gifts, Recurring Gift Payments, 

    --    Matching Gift Claims, Matching Gift Payments

    --    Event Registration Fees, Membership Fees (2.0?)


    select
        @TOTALNUMBERFROMGROUP = Count(distinct R.ID)              
    from dbo.REVENUE R
    inner join dbo.REVENUESPLIT RS
        on R.ID = RS.REVENUEID
    where
        RS.APPLICATIONCODE <> 2 and
        R.CONSTITUENTID = @ID
            and exists(
                select ID
                from dbo.REVENUESPLIT
                where REVENUEID=R.ID
                    and (
                        (R.TRANSACTIONTYPECODE = 0 
                            and APPLICATIONCODE=1 
                            and TYPECODE=1 
                            and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(ID,@CURRENTAPPUSERID) = 1
                        )
                        or(
                            not(R.TRANSACTIONTYPECODE = 0 
                                and APPLICATIONCODE=1 
                                and TYPECODE=1
                            )
                            and exists
                            (
                                select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                                    or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                            )
                        )
                    )
            );              

    -- Pledge payments

    select 
        @TOTALNUMBERFROMGROUP = @TOTALNUMBERFROMGROUP + count(RS.ID)    
    from dbo.REVENUESPLIT RS
    inner join dbo.INSTALLMENTSPLITPAYMENT ISP
        on ISP.PAYMENTID = RS.ID
    inner join dbo.REVENUE R
        on R.ID = RS.REVENUEID
    where 
        R.TRANSACTIONTYPECODE = 0 and
        RS.APPLICATIONCODE = 2 and
        R.CONSTITUENTID = @ID
            and dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS(R.ID,@CURRENTAPPUSERID) = 1;

    -- Write-offs

    select
        @TOTALNUMBERFROMGROUP = @TOTALNUMBERFROMGROUP + count(R.ID)
    from dbo.Revenue R          
    inner join dbo.WRITEOFF WO    
        on R.ID = WO.REVENUEID
    where R.CONSTITUENTID = @ID
        and exists(
            select ID
            from dbo.REVENUESPLIT
            where REVENUEID=R.ID
                and (
                    (R.TRANSACTIONTYPECODE = 0 
                        and APPLICATIONCODE=1 
                        and TYPECODE=1 
                        and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(ID,@CURRENTAPPUSERID) = 1
                    )
                    or(
                        not(R.TRANSACTIONTYPECODE = 0 
                            and APPLICATIONCODE=1 
                            and TYPECODE=1
                        )
                        and exists
                        (
                            select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                            where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                                or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                        )
                    )
                )
        );;

    -- Matching gift claims

    select
        @TOTALNUMBERFROMGROUP = @TOTALNUMBERFROMGROUP + count(R.ID)
    from dbo.REVENUE R
    inner join dbo.REVENUEMATCHINGGIFT RMG
        on RMG.ID = R.ID
    inner join dbo.REVENUE R2
        on R2.ID = RMG.MGSOURCEREVENUEID
    where R.TRANSACTIONTYPECODE = 3 and    
            R2.CONSTITUENTID = @ID
            and exists(
                select ID
                from dbo.REVENUESPLIT
                where REVENUEID=R.ID
                    and (
                        (R.TRANSACTIONTYPECODE = 0 
                            and APPLICATIONCODE=1 
                            and TYPECODE=1 
                            and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(ID,@CURRENTAPPUSERID) = 1
                        )
                        or(
                            not(R.TRANSACTIONTYPECODE = 0 
                                and APPLICATIONCODE=1 
                                and TYPECODE=1
                            )
                            and exists
                            (
                                select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 
                                    or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                            )
                        )
                    )
            );

    select @TOTALGROUPMEMBERAMOUNT = coalesce(@TOTALGROUPMEMBERAMOUNT, 0);
    select @TOTALGROUPAMOUNT = coalesce(@TOTALGROUPAMOUNT, 0);

    return 0;