USP_CORPORATESTRUCTURE_GETREVENUESUMMARY

Calculates the revenue summary for a corporate structure.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@SELECTEDCURRENCYID uniqueidentifier IN
@ORGANIZATIONCURRENCYID uniqueidentifier IN
@CURRENCYCODE tinyint IN
@CURRENCYORIGINCODE tinyint IN
@CURRENCYDECIMALDIGITS tinyint IN
@CURRENCYROUNDINGTYPECODE tinyint IN

Definition

Copy


            -- Expects that a temp table titled #TMP_CORPORATESTRUCTURE_REVENUESUMMARY exists

            -- and it has the fields:

            -- ID (used for input) - The ID of the corporation constituent record

            -- ISHISTORICAL (used for input) - Indicates if the corporate record is historical or not

            -- ENDDATE (used for input) - Used for historical records

            -- CORPORATIONGIVINGAMOUNT (used for output)

            -- CORPORATIONGIVINGCOUNT (used for output)

            -- EMPLOYEEGIVINGAMOUNT (used for output)

            -- EMPLOYEEGIVINGCOUNT (used for output)

            CREATE procedure dbo.USP_CORPORATESTRUCTURE_GETREVENUESUMMARY
            (
                @CURRENTAPPUSERID uniqueidentifier,
                @SECURITYFEATUREID uniqueidentifier,
                @SECURITYFEATURETYPE tinyint,
                @STARTDATE datetime,
                @ENDDATE datetime,
                @SELECTEDCURRENCYID uniqueidentifier,
                @ORGANIZATIONCURRENCYID uniqueidentifier,
                @CURRENCYCODE tinyint,
                @CURRENCYORIGINCODE tinyint,
                @CURRENCYDECIMALDIGITS tinyint,
                @CURRENCYROUNDINGTYPECODE tinyint
            )
            as
            begin
                set nocount on;

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

                if exists (select top 1 1 from dbo.SITE)
                    set @HASSITES = 1 

                --Sites temp table just used for non-admins, only create if needed

                if @ISADMIN = 0 and @HASSITES = 1
                begin
                    -- Set the corporation and employee giving for the corporations

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

                    create table #TMP_CORPORATESTRUCTURE_SITEONFEATURE
                    (
                        ID uniqueidentifier
                    )

                    insert into #TMP_CORPORATESTRUCTURE_SITEONFEATURE (ID)
                    select
                        distinct FEATURESITE.SITEID 
                    from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, @SECURITYFEATUREID, @SECURITYFEATURETYPE) FEATURESITE
                    inner join dbo.UFN_SITEID_MAPFROM_APPUSERID(@CURRENTAPPUSERID) USERMAP on isnull(FEATURESITE.SITEID, '00000000-0000-0000-0000-000000000000') = isnull(USERMAP.SITEID, '00000000-0000-0000-0000-000000000000')
                end

                -- Materialize the valid revenue for the corporations and their employees.

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

                create table #TMP_CORPORATESTRUCTURE_CORPORATIONREVENUE
                (
                    ID uniqueidentifier,
                    CONSTITUENTID uniqueidentifier,
                    TRANSACTIONTYPECODE tinyint,
                    AMOUNT money
                )

                if @ISADMIN = 0 and @HASSITES = 1
                begin
                    insert into #TMP_CORPORATESTRUCTURE_CORPORATIONREVENUE (ID, CONSTITUENTID, TRANSACTIONTYPECODE, AMOUNT)
                    select distinct
                        REVENUE.ID,
                        CORPORATESTRUCTURE.ID,
                        REVENUE.TYPECODE,
                        REVENUE.TRANSACTIONAMOUNT
                    from #TMP_CORPORATESTRUCTURE_REVENUESUMMARY CORPORATESTRUCTURE
                    inner join dbo.FINANCIALTRANSACTION REVENUE on CORPORATESTRUCTURE.ID = REVENUE.CONSTITUENTID
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.FINANCIALTRANSACTIONID = REVENUE.ID
                    inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
                    cross apply
                    (
                        select case CORPORATESTRUCTURE.ISHISTORICAL
                                when 0 then @ENDDATE
                                else
                                    case
                                        when CORPORATESTRUCTURE.ENDDATE is null then @ENDDATE
                                        when @ENDDATE is null then CORPORATESTRUCTURE.ENDDATE
                                        when CORPORATESTRUCTURE.ENDDATE <= @ENDDATE then CORPORATESTRUCTURE.ENDDATE
                                        else @ENDDATE
                                    end
                            end as ENDDATE
                    ) as CORPORATEENDDATE
                    where 
                        REVENUE.DELETEDON is null and
                        (@STARTDATE is null or REVENUE.DATE >= @STARTDATE) and            
                        (CORPORATESTRUCTURE.ENDDATE is null or cast(REVENUE.DATE as datetime) <= CORPORATESTRUCTURE.ENDDATE) and
                        REVENUE.TYPECODE in (0,1,3) --Payment, Pledge or MG claim

                        and exists(select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                   inner join #TMP_CORPORATESTRUCTURE_SITEONFEATURE SITEONFEATURE on isnull(REVSITES.SITEID, '00000000-0000-0000-0000-000000000000') = isnull(SITEONFEATURE.ID, '00000000-0000-0000-0000-000000000000'))
                end
                else
                begin
                    insert into #TMP_CORPORATESTRUCTURE_CORPORATIONREVENUE (ID, CONSTITUENTID, TRANSACTIONTYPECODE, AMOUNT)
                    select distinct
                        REVENUE.ID,
                        CORPORATESTRUCTURE.ID,
                        REVENUE.TYPECODE,
                        REVENUE.TRANSACTIONAMOUNT
                    from #TMP_CORPORATESTRUCTURE_REVENUESUMMARY CORPORATESTRUCTURE
                    inner join dbo.FINANCIALTRANSACTION REVENUE on CORPORATESTRUCTURE.ID = REVENUE.CONSTITUENTID
                    inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
                    cross apply
                    (
                        select case CORPORATESTRUCTURE.ISHISTORICAL
                                when 0 then @ENDDATE
                                else
                                    case
                                        when CORPORATESTRUCTURE.ENDDATE is null then @ENDDATE
                                        when @ENDDATE is null then CORPORATESTRUCTURE.ENDDATE
                                        when CORPORATESTRUCTURE.ENDDATE <= @ENDDATE then CORPORATESTRUCTURE.ENDDATE
                                        else @ENDDATE
                                    end
                            end as ENDDATE
                    ) as CORPORATEENDDATE
                    where 
                        REVENUE.DELETEDON is null and
                        (@STARTDATE is null or REVENUE.DATE >= @STARTDATE) and            
                        (CORPORATESTRUCTURE.ENDDATE is null or cast(REVENUE.DATE as datetime) <= CORPORATESTRUCTURE.ENDDATE) and
                        REVENUE.TYPECODE in (0,1,3) --Payment, Pledge or MG claim

                end

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

                create table #TMP_CORPORATESTRUCTURE_EMPLOYEEREVENUE
                (
                    ID uniqueidentifier,
                    EMPLOYERID uniqueidentifier,
                    TRANSACTIONTYPECODE tinyint,
                    AMOUNT money
                )

                if @ISADMIN = 0 and @HASSITES = 1
                begin
                    insert into #TMP_CORPORATESTRUCTURE_EMPLOYEEREVENUE (ID, EMPLOYERID, TRANSACTIONTYPECODE, AMOUNT)
                    select distinct
                        REVENUE.ID,
                        RELATIONSHIP.RECIPROCALCONSTITUENTID,
                        REVENUE.TYPECODE,
                        REVENUE.TRANSACTIONAMOUNT
                    from #TMP_CORPORATESTRUCTURE_REVENUESUMMARY CORPORATESTRUCTURE 
                    inner join dbo.RELATIONSHIP on RELATIONSHIP.RECIPROCALCONSTITUENTID = CORPORATESTRUCTURE.ID
                    inner join dbo.EMPLOYEECORPORATERELATIONSHIPTYPE on RELATIONSHIP.RELATIONSHIPTYPECODEID = EMPLOYEECORPORATERELATIONSHIPTYPE.RELATIONSHIPTYPECODEID
                    inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.FINANCIALTRANSACTIONID = REVENUE.ID
                    inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
                    cross apply
                    (
                        select case CORPORATESTRUCTURE.ISHISTORICAL
                                when 0 then @ENDDATE
                                else
                                    case
                                        when CORPORATESTRUCTURE.ENDDATE is null then @ENDDATE
                                        when @ENDDATE is null then CORPORATESTRUCTURE.ENDDATE
                                        when CORPORATESTRUCTURE.ENDDATE <= @ENDDATE then CORPORATESTRUCTURE.ENDDATE
                                        else @ENDDATE
                                    end
                            end as ENDDATE
                    ) as CORPORATEENDDATE
                    where
                        REVENUE.DELETEDON is null and
                        (@STARTDATE is null or cast(REVENUE.DATE as datetime) >= @STARTDATE) and
                        (CORPORATEENDDATE.ENDDATE is null or cast(REVENUE.DATE as datetime) <= CORPORATEENDDATE.ENDDATE) and
                        REVENUE.TYPECODE in (0,1,3) --Payment, Pledge or MG claim

                        and exists(select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
                                   inner join #TMP_CORPORATESTRUCTURE_SITEONFEATURE SITEONFEATURE on isnull(REVSITES.SITEID, '00000000-0000-0000-0000-000000000000') = isnull(SITEONFEATURE.ID, '00000000-0000-0000-0000-000000000000'))

                end
                else
                begin
                    insert into #TMP_CORPORATESTRUCTURE_EMPLOYEEREVENUE (ID, EMPLOYERID, TRANSACTIONTYPECODE, AMOUNT)
                    select distinct
                        REVENUE.ID,
                        RELATIONSHIP.RECIPROCALCONSTITUENTID,
                        REVENUE.TYPECODE,
                        REVENUE.TRANSACTIONAMOUNT
                    from #TMP_CORPORATESTRUCTURE_REVENUESUMMARY CORPORATESTRUCTURE 
                    inner join dbo.RELATIONSHIP on RELATIONSHIP.RECIPROCALCONSTITUENTID = CORPORATESTRUCTURE.ID
                    inner join dbo.EMPLOYEECORPORATERELATIONSHIPTYPE on RELATIONSHIP.RELATIONSHIPTYPECODEID = EMPLOYEECORPORATERELATIONSHIPTYPE.RELATIONSHIPTYPECODEID
                    inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
                    inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
                    cross apply
                    (
                        select case CORPORATESTRUCTURE.ISHISTORICAL
                                when 0 then @ENDDATE
                                else
                                    case
                                        when CORPORATESTRUCTURE.ENDDATE is null then @ENDDATE
                                        when @ENDDATE is null then CORPORATESTRUCTURE.ENDDATE
                                        when CORPORATESTRUCTURE.ENDDATE <= @ENDDATE then CORPORATESTRUCTURE.ENDDATE
                                        else @ENDDATE
                                    end
                            end as ENDDATE
                    ) as CORPORATEENDDATE
                    where
                        REVENUE.DELETEDON is null and
                        (@STARTDATE is null or cast(REVENUE.DATE as datetime) >= @STARTDATE) and
                        (CORPORATEENDDATE.ENDDATE is null or cast(REVENUE.DATE as datetime) <= CORPORATEENDDATE.ENDDATE) and
                        REVENUE.TYPECODE in (0,1,3) --Payment, Pledge or MG claim

                end

                if dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency') = 1
                    update #TMP_CORPORATESTRUCTURE_REVENUESUMMARY set
                        CORPORATIONGIVINGAMOUNT = coalesce(CORPORATIONGIVING.AMOUNT, 0),
                        CORPORATIONGIVINGCOUNT = coalesce(CORPORATIONGIVING.[COUNT], 0),
                        EMPLOYEEGIVINGAMOUNT = coalesce(EMPLOYEEGIVING.AMOUNT, 0),
                        EMPLOYEEGIVINGCOUNT = coalesce(EMPLOYEEGIVING.[COUNT], 0)
                    from #TMP_CORPORATESTRUCTURE_REVENUESUMMARY CORPORATESTRUCTURE
                    left join
                    (
                        select
                            CORPORATIONREVENUE.CONSTITUENTID,
                            coalesce(sum(REVENUESPLIT.AMOUNTINCURRENCY), 0) - coalesce(sum(INSTALLMENTWRITEOFF.AMOUNT), 0) as AMOUNT,
                            count(distinct CORPORATIONREVENUE.ID) as [COUNT]
                        from #TMP_CORPORATESTRUCTURE_CORPORATIONREVENUE CORPORATIONREVENUE
                        inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) REVENUESPLIT on CORPORATIONREVENUE.ID = REVENUESPLIT.REVENUEID
                        left join 
                        (            
                            select
                                INSTALLMENTSPLIT.PLEDGEID,
                                INSTALLMENTSPLIT.DESIGNATIONID,
                                sum(IWO.AMOUNTINCURRENCY) as AMOUNT
                            from dbo.INSTALLMENTSPLIT 
                            inner join dbo.UFN_INSTALLMENTSPLITWRITEOFF_GETAMOUNTSINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE, @CURRENCYORIGINCODE, @CURRENCYCODE) IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                            group by             
                                INSTALLMENTSPLIT.PLEDGEID, 
                                INSTALLMENTSPLIT.DESIGNATIONID            
                        ) INSTALLMENTWRITEOFF on INSTALLMENTWRITEOFF.PLEDGEID = REVENUESPLIT.REVENUEID and INSTALLMENTWRITEOFF.DESIGNATIONID = REVENUESPLIT.DESIGNATIONID       
                        where
                            CORPORATIONREVENUE.TRANSACTIONTYPECODE in (1,3) or --Pledge or MG claim

                            (            
                                --Payment

                                CORPORATIONREVENUE.TRANSACTIONTYPECODE = 0 and 
                                (            
                                    REVENUESPLIT.APPLICATIONCODE in (0,1,3,4,5,6,18,19) or 
                                    (
                                        -- unapplied MG claim payments            

                                        REVENUESPLIT.APPLICATIONCODE = 7 and 
                                        not exists 
                                        (
                                            select 1 
                                            from dbo.INSTALLMENTSPLITPAYMENT 
                                            where REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                                        )
                                    )
                                )            
                            )
                        group by 
                            CORPORATIONREVENUE.CONSTITUENTID
                    ) as CORPORATIONGIVING on CORPORATESTRUCTURE.ID = CORPORATIONGIVING.CONSTITUENTID 
                    left join
                    (
                        select 
                            EMPLOYEEREVENUE.EMPLOYERID,
                            sum(REVENUESPLIT.AMOUNTINCURRENCY) as AMOUNT,
                            count(distinct EMPLOYEEREVENUE.ID) as [COUNT]
                        from #TMP_CORPORATESTRUCTURE_EMPLOYEEREVENUE EMPLOYEEREVENUE
                        inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) REVENUESPLIT on EMPLOYEEREVENUE.ID = REVENUESPLIT.REVENUEID
                        where
                            EMPLOYEEREVENUE.TRANSACTIONTYPECODE in (1,3) or --Pledge or MG claim

                            (            
                                --Payment

                                EMPLOYEEREVENUE.TRANSACTIONTYPECODE = 0 and 
                                (            
                                    REVENUESPLIT.APPLICATIONCODE in (0,1,3,4,5,6,18,19) or 
                                    (
                                        -- unapplied MG claim payments            

                                        REVENUESPLIT.APPLICATIONCODE = 7 and 
                                        not exists 
                                        (
                                            select 1 
                                            from dbo.INSTALLMENTSPLITPAYMENT 
                                            where REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                                        )
                                    )
                                )            
                            )
                        group by 
                            EMPLOYEEREVENUE.EMPLOYERID
                    ) as EMPLOYEEGIVING on CORPORATESTRUCTURE.ID = EMPLOYEEGIVING.EMPLOYERID
                else
                    update #TMP_CORPORATESTRUCTURE_REVENUESUMMARY set
                        CORPORATIONGIVINGAMOUNT = coalesce(CORPORATIONGIVING.AMOUNT, 0),
                        CORPORATIONGIVINGCOUNT = coalesce(CORPORATIONGIVING.[COUNT], 0),
                        EMPLOYEEGIVINGAMOUNT = coalesce(EMPLOYEEGIVING.AMOUNT, 0),
                        EMPLOYEEGIVINGCOUNT = coalesce(EMPLOYEEGIVING.[COUNT], 0)
                    from #TMP_CORPORATESTRUCTURE_REVENUESUMMARY CORPORATESTRUCTURE
                    left join
                    (
                        select
                            CORPORATIONREVENUE.CONSTITUENTID,
                            coalesce(sum(REVENUESPLIT.AMOUNTINCURRENCY), 0) - coalesce(sum(INSTALLMENTWRITEOFF.AMOUNT), 0) as AMOUNT,
                            count(distinct CORPORATIONREVENUE.ID) as [COUNT]
                        from #TMP_CORPORATESTRUCTURE_CORPORATIONREVENUE CORPORATIONREVENUE
                        inner join
                        (
                            select LI.ID
                                ,LI.FINANCIALTRANSACTIONID [REVENUEID]
                                ,LI.TRANSACTIONAMOUNT [AMOUNTINCURRENCY]
                                ,RSE.APPLICATIONCODE
                                ,RSE.DESIGNATIONID
                            from dbo.FINANCIALTRANSACTIONLINEITEM LI
                            inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = LI.ID
                            where LI.DELETEDON is null
                        ) REVENUESPLIT on CORPORATIONREVENUE.ID = REVENUESPLIT.REVENUEID
                        left join 
                        (            
                            select
                                INSTALLMENTSPLIT.PLEDGEID,
                                INSTALLMENTSPLIT.DESIGNATIONID,
                                sum(IWO.TRANSACTIONAMOUNT) as AMOUNT
                            from dbo.INSTALLMENTSPLIT 
                            inner join dbo.INSTALLMENTSPLITWRITEOFF IWO on IWO.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                            group by             
                                INSTALLMENTSPLIT.PLEDGEID, 
                                INSTALLMENTSPLIT.DESIGNATIONID            
                        ) INSTALLMENTWRITEOFF on INSTALLMENTWRITEOFF.PLEDGEID = REVENUESPLIT.REVENUEID and INSTALLMENTWRITEOFF.DESIGNATIONID = REVENUESPLIT.DESIGNATIONID       
                        where
                            CORPORATIONREVENUE.TRANSACTIONTYPECODE in (1,3) or --Pledge or MG claim

                            (            
                                --Payment

                                CORPORATIONREVENUE.TRANSACTIONTYPECODE = 0 and 
                                (            
                                    REVENUESPLIT.APPLICATIONCODE in (0,1,3,4,5,6,18,19) or 
                                    (
                                        -- unapplied MG claim payments            

                                        REVENUESPLIT.APPLICATIONCODE = 7 and 
                                        not exists 
                                        (
                                            select 1 
                                            from dbo.INSTALLMENTSPLITPAYMENT 
                                            where REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                                        )
                                    )
                                )            
                            )
                        group by 
                            CORPORATIONREVENUE.CONSTITUENTID
                    ) as CORPORATIONGIVING on CORPORATESTRUCTURE.ID = CORPORATIONGIVING.CONSTITUENTID 
                    left join
                    (
                        select 
                            EMPLOYEEREVENUE.EMPLOYERID,
                            sum(REVENUESPLIT.AMOUNTINCURRENCY) as AMOUNT,
                            count(distinct EMPLOYEEREVENUE.ID) as [COUNT]
                        from #TMP_CORPORATESTRUCTURE_EMPLOYEEREVENUE EMPLOYEEREVENUE
                        inner join
                        (
                            select LI.ID
                                ,LI.FINANCIALTRANSACTIONID [REVENUEID]
                                ,LI.TRANSACTIONAMOUNT [AMOUNTINCURRENCY]
                                ,RSE.APPLICATIONCODE
                                ,RSE.DESIGNATIONID
                            from dbo.FINANCIALTRANSACTIONLINEITEM LI
                            inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = LI.ID
                            where LI.DELETEDON is null
                        ) REVENUESPLIT on EMPLOYEEREVENUE.ID = REVENUESPLIT.REVENUEID
                        where
                            EMPLOYEEREVENUE.TRANSACTIONTYPECODE in (1,3) or --Pledge or MG claim

                            (            
                                --Payment

                                EMPLOYEEREVENUE.TRANSACTIONTYPECODE = 0 and 
                                (            
                                    REVENUESPLIT.APPLICATIONCODE in (0,1,3,4,5,6,18,19) or 
                                    (
                                        -- unapplied MG claim payments            

                                        REVENUESPLIT.APPLICATIONCODE = 7 and 
                                        not exists 
                                        (
                                            select 1 
                                            from dbo.INSTALLMENTSPLITPAYMENT 
                                            where REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                                        )
                                    )
                                )            
                            )
                        group by 
                            EMPLOYEEREVENUE.EMPLOYERID
                    ) as EMPLOYEEGIVING on CORPORATESTRUCTURE.ID = EMPLOYEEGIVING.EMPLOYERID
            end