USP_REPORT_CAMPAIGNPRIORITYPROGRESSBYQUARTERINCURRENCY

USP_REPORT_CAMPAIGNPRIORITYPROGRESSBYQUARTER.xml, modified to be multicurrency-aware.

Parameters

Parameter Parameter Type Mode Description
@CAMPAIGNID uniqueidentifier IN
@CAMPAIGNPRIORITYTYPECODEID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@CURRENCYCODE tinyint IN
@CURRENCYID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_REPORT_CAMPAIGNPRIORITYPROGRESSBYQUARTERINCURRENCY
            (
                @CAMPAIGNID uniqueidentifier,
                @CAMPAIGNPRIORITYTYPECODEID uniqueidentifier = null,
                @STARTDATE datetime,
                @ENDDATE datetime,
                @CURRENCYCODE tinyint,
                @CURRENCYID uniqueidentifier
            )
            as
                set nocount on;

        declare @SELECTEDCURRENCYID uniqueidentifier;
        declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
        declare @DECIMALDIGITS tinyint;
        declare @ROUNDINGTYPECODE tinyint;

        set @SELECTEDCURRENCYID = @CURRENCYID;

        select
              @DECIMALDIGITS=CURRENCY.DECIMALDIGITS,
              @ROUNDINGTYPECODE=CURRENCY.ROUNDINGTYPECODE  
            from dbo.CURRENCY
            where ID= @SELECTEDCURRENCYID;

            WITH CAMPAIGNPRIORITY_CTE as (
            select
              CAMPAIGNPRIORITY.ID as CAMPAIGNPRIORITYID,
              CAMPAIGNSUBPRIORITY.ID as CAMPAIGNSUBPRIORITYID,
              CAMPAIGNPRIORITY.CAMPAIGNPRIORITYTYPECODEID as CAMPAIGNPRIORITYTYPECODEID,
              PRIORITYPROGRESS.YEARNAME as CAMPAIGNPRIORITYYEAR,
              PRIORITYPROGRESS.QUARTER as CAMPAIGNPRIORITYQUARTER,
              SUBPRIORITYPROGRESS.YEARNAME as CAMPAIGNSUBPRIORITYYEAR,
              SUBPRIORITYPROGRESS.QUARTER as CAMPAIGNSUBPRIORITYQUARTER,
              CAMPAIGNPRIORITY.GOAL as CAMPAIGNPRIORITYGOAL,
              CAMPAIGNSUBPRIORITY.GOAL as CAMPAIGNSUBPRIORITYGOAL,
              CAMPAIGNSUBPRIORITYNAMECODE.DESCRIPTION as DESCRIPTION,
              CAMPAIGNPRIORITY.ORGANIZATIONAMOUNT as CAMPAIGNPRIORITYORGANIZATIONAMOUNT,
              CAMPAIGNSUBPRIORITY.ORGANIZATIONAMOUNT as CAMPAIGNSUBPRIORITYORGANIZATIONAMOUNT,
              CAMPAIGN.BASECURRENCYID as BASECURRENCYID,
              CURRENCYPROPERTIES.ISO4217 as ISOCURRENCYCODE,
              CURRENCYPROPERTIES.CURRENCYSYMBOL,
              CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE
            from
            dbo.CAMPAIGNPRIORITY
            inner join dbo.CAMPAIGN on CAMPAIGNPRIORITY.CAMPAIGNID = CAMPAIGN.ID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNPRIORITY.ID
            left join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID = CAMPAIGNPRIORITY.ID
            left join dbo.UFN_CAMPAIGNSUBPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as SUBPRIORITYPROGRESS on SUBPRIORITYPROGRESS.CAMAPIGNSUBPRIORITYID = CAMPAIGNSUBPRIORITY.ID and (PRIORITYPROGRESS.YEARNAME = SUBPRIORITYPROGRESS.YEARNAME and PRIORITYPROGRESS.QUARTER = SUBPRIORITYPROGRESS.QUARTER)
            left join dbo.CAMPAIGNSUBPRIORITYNAMECODE on CAMPAIGNSUBPRIORITY.CAMPAIGNSUBPRIORITYNAMECODEID = CAMPAIGNSUBPRIORITYNAMECODE.ID
            outer apply
                dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID) as CURRENCYPROPERTIES  
            where
                CAMPAIGNPRIORITY.CAMPAIGNID = @CAMPAIGNID
                 and ( (CAMPAIGNPRIORITY.CAMPAIGNPRIORITYTYPECODEID = @CAMPAIGNPRIORITYTYPECODEID) or (@CAMPAIGNPRIORITYTYPECODEID is null) )
            ),CP_TOTALRECEIVED as (
            select 
                CAMPAIGNPRIORITY.ID as CAMPAIGNPRIORITYID,
                PRIORITYPROGRESS.YEARNAME,
                PRIORITYPROGRESS.QUARTER,
                coalesce(sum(RS.AMOUNTINCURRENCY),0) as AMOUNTINCURRENCY
            from
                dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.FINANCIALTRANSACTION with (nolock) on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID 
            inner join dbo.CAMPAIGNPRIORITY on CAMPAIGNPRIORITY.ID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNPRIORITY.ID
            left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where
                FINANCIALTRANSACTION.TYPECODE = 0
          and FINANCIALTRANSACTION.DELETEDON is null
          and REVENUESPLIT_EXT.APPLICATIONCODE in (0, 1, 5, 6, 7, 3, 10)
                and (REVENUESPLIT_EXT.APPLICATIONCODE <> 10 or REVENUESPLIT_EXT.TYPECODE = 0)
                and (
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS=1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS<>1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE = PRIORITYPROGRESS.TOTALQUARTERS)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE <> PRIORITYPROGRESS.TOTALQUARTERS)
                )        
            group by CAMPAIGNPRIORITY.ID,PRIORITYPROGRESS.YEARNAME,PRIORITYPROGRESS.QUARTER
            ), CPS_TOTALRECEIVED as (
            select
            REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID as CAMPAIGNSUBPRIORITYID,
            SUBPRIORITYPROGRESS.YEARNAME,
            SUBPRIORITYPROGRESS.QUARTER,
            coalesce(sum(RS.AMOUNTINCURRENCY), 0) as AMOUNTINCURRENCY
            from
            dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.FINANCIALTRANSACTION with (nolock) on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            left join dbo.UFN_CAMPAIGNSUBPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as SUBPRIORITYPROGRESS on SUBPRIORITYPROGRESS.CAMAPIGNSUBPRIORITYID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID and (PRIORITYPROGRESS.YEARNAME = SUBPRIORITYPROGRESS.YEARNAME and PRIORITYPROGRESS.QUARTER = SUBPRIORITYPROGRESS.QUARTER)
            left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where
            FINANCIALTRANSACTION.TYPECODE = 0
        and FINANCIALTRANSACTION.DELETEDON is null
            and REVENUESPLIT_EXT.APPLICATIONCODE in (0, 6, 7, 3)
            and (
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS=1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS<>1)
                    or
                  ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE = SUBPRIORITYPROGRESS.TOTALQUARTERS)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE <> SUBPRIORITYPROGRESS.TOTALQUARTERS)
                )        
            group by REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID,SUBPRIORITYPROGRESS.YEARNAME,SUBPRIORITYPROGRESS.QUARTER
            ), CP_PAYMENTS as (
            select
                CAMPAIGNPRIORITY.ID as CAMPAIGNPRIORITYID,
                PRIORITYPROGRESS.YEARNAME,
                PRIORITYPROGRESS.QUARTER,
                coalesce(sum(RS.AMOUNTINCURRENCY),0) as AMOUNTINCURRENCY
            from
                dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID
            inner join dbo.CAMPAIGNPRIORITY on CAMPAIGNPRIORITY.ID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNPRIORITY.ID
            left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where
            FINANCIALTRANSACTION.TYPECODE in (1, 6)
        and FINANCIALTRANSACTION.DELETEDON is null
            and (
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS=1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS<>1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE = PRIORITYPROGRESS.TOTALQUARTERS)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE <> PRIORITYPROGRESS.TOTALQUARTERS)
            )        
            group by CAMPAIGNPRIORITY.ID,PRIORITYPROGRESS.YEARNAME,PRIORITYPROGRESS.QUARTER
            ), CP_WRITEOFFS as (
            select
                CAMPAIGNPRIORITY.ID as CAMPAIGNPRIORITYID,
                PRIORITYPROGRESS.YEARNAME,
                PRIORITYPROGRESS.QUARTER,
                coalesce(sum(WO.AMOUNTINCURRENCY),0) as AMOUNTINCURRENCY
            from
                dbo.FINANCIALTRANSACTIONLINEITEM as WRITEOFFSPLIT
            inner join dbo.FINANCIALTRANSACTION as WRITEOFF on WRITEOFF.ID = WRITEOFFSPLIT.FINANCIALTRANSACTIONID
            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = WRITEOFF.PARENTID 
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID
            inner join dbo.CAMPAIGNPRIORITY on CAMPAIGNPRIORITY.ID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNPRIORITY.ID
            left join dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as WO on WO.ID = WRITEOFFSPLIT.ID
            where
            FINANCIALTRANSACTION.TYPECODE in (1, 6)
        and FINANCIALTRANSACTION.DELETEDON is null
            and (
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS=1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS<>1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE = PRIORITYPROGRESS.TOTALQUARTERS)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE <> PRIORITYPROGRESS.TOTALQUARTERS)
                )        
            group by CAMPAIGNPRIORITY.ID,PRIORITYPROGRESS.YEARNAME,PRIORITYPROGRESS.QUARTER
            ),CP_TOTALBALANCE as (
                select 
                CP_PAYMENTS.CAMPAIGNPRIORITYID as CAMPAIGNPRIORITYID,
                CP_PAYMENTS.YEARNAME,
                CP_PAYMENTS.QUARTER,
                (coalesce(CP_PAYMENTS.AMOUNTINCURRENCY, 0) - coalesce(CP_WRITEOFFS.AMOUNTINCURRENCY, 0)) as TOTALBALANCE
                from 
                CP_PAYMENTS
                left join CP_WRITEOFFS on CP_PAYMENTS.CAMPAIGNPRIORITYID= CP_WRITEOFFS.CAMPAIGNPRIORITYID
            ), CPS_PAYMENTS as (
            select
                CAMPAIGNSUBPRIORITY.ID as CAMPAIGNSUBPRIORITYID,
                SUBPRIORITYPROGRESS.YEARNAME,
                SUBPRIORITYPROGRESS.QUARTER,
                coalesce(SUM(RS.AMOUNTINCURRENCY),0) as AMOUNTINCURRENCY
            from
                dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.FINANCIALTRANSACTION with (nolock) on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID= FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            left join dbo.UFN_CAMPAIGNSUBPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as SUBPRIORITYPROGRESS on SUBPRIORITYPROGRESS.CAMAPIGNSUBPRIORITYID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID and (PRIORITYPROGRESS.YEARNAME = SUBPRIORITYPROGRESS.YEARNAME and PRIORITYPROGRESS.QUARTER = SUBPRIORITYPROGRESS.QUARTER)
            left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where 
                FINANCIALTRANSACTION.TYPECODE in (1, 6)
          and FINANCIALTRANSACTION.DELETEDON is null
            and (
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS=1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS<>1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE = SUBPRIORITYPROGRESS.TOTALQUARTERS)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE <> SUBPRIORITYPROGRESS.TOTALQUARTERS)        
                )        
            group by CAMPAIGNSUBPRIORITY.ID,SUBPRIORITYPROGRESS.YEARNAME,SUBPRIORITYPROGRESS.QUARTER
            ), CPS_WRITEOFFS as (
            select
                CAMPAIGNSUBPRIORITY.ID as CAMPAIGNSUBPRIORITYID,
                SUBPRIORITYPROGRESS.YEARNAME,
                SUBPRIORITYPROGRESS.QUARTER,
                coalesce(SUM(WO.AMOUNTINCURRENCY),0) as AMOUNTINCURRENCY
            from
                dbo.FINANCIALTRANSACTIONLINEITEM as WRITEOFFSPLIT
            inner join dbo.FINANCIALTRANSACTION as WRITEOFF on WRITEOFF.ID = WRITEOFFSPLIT.FINANCIALTRANSACTIONID
            inner join dbo.FINANCIALTRANSACTION with (nolock) on FINANCIALTRANSACTION.ID = WRITEOFF.PARENTID 
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID= FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            left join dbo.UFN_CAMPAIGNSUBPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as SUBPRIORITYPROGRESS on SUBPRIORITYPROGRESS.CAMAPIGNSUBPRIORITYID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID and (PRIORITYPROGRESS.YEARNAME = SUBPRIORITYPROGRESS.YEARNAME and PRIORITYPROGRESS.QUARTER = SUBPRIORITYPROGRESS.QUARTER)
            left join dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as WO on WO.ID = WRITEOFFSPLIT.ID
            where 
                FINANCIALTRANSACTION.TYPECODE in (1, 6)
          and FINANCIALTRANSACTION.DELETEDON is null
            and (
                ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS=1)
                or
                ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS<>1)
                or
                ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE = SUBPRIORITYPROGRESS.TOTALQUARTERS)
                or
                ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE <> SUBPRIORITYPROGRESS.TOTALQUARTERS)        
            )        
            group by CAMPAIGNSUBPRIORITY.ID,SUBPRIORITYPROGRESS.YEARNAME,SUBPRIORITYPROGRESS.QUARTER
            ), CPS_TOTALBALANCE as (
            select 
                CPS_PAYMENTS.CAMPAIGNSUBPRIORITYID as CAMPAIGNSUBPRIORITYID,
                CPS_PAYMENTS.YEARNAME,
                CPS_PAYMENTS.QUARTER,
                (coalesce(CPS_PAYMENTS.AMOUNTINCURRENCY, 0) - coalesce(CPS_WRITEOFFS.AMOUNTINCURRENCY, 0)) as TOTALBALANCE
                from 
                CPS_PAYMENTS
                left join CPS_WRITEOFFS on CPS_PAYMENTS.CAMPAIGNSUBPRIORITYID= CPS_WRITEOFFS.CAMPAIGNSUBPRIORITYID
            ),CP_TOTALPLANNEDGIFTS as (
            select
                CAMPAIGNPRIORITY.ID as CAMPAIGNPRIORITYID,
                PRIORITYPROGRESS.YEARNAME,
                PRIORITYPROGRESS.QUARTER,
                coalesce(sum(RS.AMOUNTINCURRENCY),0) as AMOUNTINCURRENCY
            from
                dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.FINANCIALTRANSACTION with (nolock) on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID 
            inner join dbo.CAMPAIGNPRIORITY on CAMPAIGNPRIORITY.ID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNPRIORITY.ID
            left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where
             FINANCIALTRANSACTION.TYPECODE = 4
         and FINANCIALTRANSACTION.DELETEDON is null
                and (
                ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS=1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE =1 and PRIORITYPROGRESS.TOTALQUARTERS<>1)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE = PRIORITYPROGRESS.TOTALQUARTERS)
                    or
                    ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,PRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,PRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and PRIORITYPROGRESS.SEQUENCE <> PRIORITYPROGRESS.TOTALQUARTERS)
                )        
            group by CAMPAIGNPRIORITY.ID,PRIORITYPROGRESS.YEARNAME,PRIORITYPROGRESS.QUARTER
            ), CPS_TOTALPLANNEDGIFTS as (
            select
                REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID as CAMPAIGNSUBPRIORITYID,
                SUBPRIORITYPROGRESS.YEARNAME,
                SUBPRIORITYPROGRESS.QUARTER,
                coalesce(sum(RS.AMOUNTINCURRENCY), 0) as AMOUNTINCURRENCY
            from
            dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.FINANCIALTRANSACTION with (nolock) on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
            inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
            inner join dbo.CAMPAIGNSUBPRIORITY on CAMPAIGNSUBPRIORITY.ID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID
            inner join dbo.UFN_CAMPAIGNPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as PRIORITYPROGRESS on PRIORITYPROGRESS.CAMAPIGNPRIORITYID = CAMPAIGNSUBPRIORITY.CAMPAIGNPRIORITYID
            left join dbo.UFN_CAMPAIGNSUBPRIORITY_GETQUARTERLYPROGRESS(@CAMPAIGNID,@STARTDATE,@ENDDATE) as SUBPRIORITYPROGRESS on SUBPRIORITYPROGRESS.CAMAPIGNSUBPRIORITYID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID and (PRIORITYPROGRESS.YEARNAME = SUBPRIORITYPROGRESS.YEARNAME and PRIORITYPROGRESS.QUARTER = SUBPRIORITYPROGRESS.QUARTER)
            left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where
             FINANCIALTRANSACTION.TYPECODE = 4
         and FINANCIALTRANSACTION.DELETEDON is null
            and (
                ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS=1)
                or
                ((FINANCIALTRANSACTION.DATE >= @STARTDATE or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE =1 and SUBPRIORITYPROGRESS.TOTALQUARTERS<>1)
                or
                ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= @ENDDATE or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE = SUBPRIORITYPROGRESS.TOTALQUARTERS)
                or
                ((FINANCIALTRANSACTION.DATE >= (DATEADD(qq, DATEDIFF(qq,0,SUBPRIORITYPROGRESS.STARTDATE), 0)) or @STARTDATE is null) and (FINANCIALTRANSACTION.DATE <= (DATEADD(ms, -3, DATEADD(qq,DATEDIFF(qq, 0,SUBPRIORITYPROGRESS.STARTDATE)+ 1, 0))) or @ENDDATE is null) and SUBPRIORITYPROGRESS.SEQUENCE <> SUBPRIORITYPROGRESS.TOTALQUARTERS)            
            )        
            group by REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID,SUBPRIORITYPROGRESS.YEARNAME,SUBPRIORITYPROGRESS.QUARTER
            )

            select    
                Q.CAMPAIGNPRIORITYID as CAMPAIGNPRIORITY_ID,
                dbo.UFN_CAMPAIGNPRIORITYTYPECODE_GETDESCRIPTION(Q.CAMPAIGNPRIORITYTYPECODEID) as CAMPAIGNPRIORITY_TYPE,

                coalesce(CP_TOTALRECEIVED.AMOUNTINCURRENCY,0) as CAMPAIGNPRIORITY_TOTALRECEIVED,
                coalesce(CP_TOTALBALANCE.TOTALBALANCE,0) as CAMPAIGNPRIORITY_TOTALBALANCE,
                case @CURRENCYCODE
                    when 0 then Q.CAMPAIGNPRIORITYGOAL
                    else Q.CAMPAIGNPRIORITYORGANIZATIONAMOUNT
                end as CAMPAIGNPRIORITY_GOAL,
                Q.CAMPAIGNPRIORITYYEAR as CAMPAIGNPRIORITY_DATEYEAR,
                Q.CAMPAIGNPRIORITYQUARTER as CAMPAIGNPRIORITY_DATEQUARTER,

                Q.CAMPAIGNSUBPRIORITYID as CAMPAIGNSUBPRIORITY_ID,
                Q.DESCRIPTION as CAMPAIGNSUBPRIORITY_NAME,
                coalesce(CPS_TOTALRECEIVED.AMOUNTINCURRENCY,0) as CAMPAIGNSUBPRIORITY_TOTALRECEIVED,
                coalesce(CPS_TOTALBALANCE.TOTALBALANCE,0) as CAMPAIGNSUBPRIORITY_TOTALBALANCE,
                case @CURRENCYCODE
                    when 0 then Q.CAMPAIGNSUBPRIORITYGOAL
                    else Q.CAMPAIGNSUBPRIORITYORGANIZATIONAMOUNT
                end as CAMPAIGNSUBPRIORITY_GOAL,
                Q.CAMPAIGNPRIORITYYEAR as CAMPAIGNSUBPRIORITY_DATEYEAR,
                Q.CAMPAIGNSUBPRIORITYQUARTER as CAMPAIGNSUBPRIORITY_DATEQUARTER,

                coalesce(CP_TOTALPLANNEDGIFTS.AMOUNTINCURRENCY,0) as CAMPAIGNPRIORITY_TOTALPLANNEDGIFTS,
                coalesce(CPS_TOTALPLANNEDGIFTS.AMOUNTINCURRENCY,0) as CAMPAIGNSUBPRIORITY_TOTALPLANNEDGIFTS,

                Q.ISOCURRENCYCODE as ISOCURRENCYCODE,
                Q.CURRENCYSYMBOL,
                Q.CURRENCYSYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE
            from CAMPAIGNPRIORITY_CTE Q 
            left join CP_TOTALRECEIVED on CP_TOTALRECEIVED.CAMPAIGNPRIORITYID = Q.CAMPAIGNPRIORITYID and CP_TOTALRECEIVED.YEARNAME = Q.CAMPAIGNPRIORITYYEAR and CP_TOTALRECEIVED.QUARTER=Q.CAMPAIGNPRIORITYQUARTER
            left join CPS_TOTALRECEIVED on CPS_TOTALRECEIVED.CAMPAIGNSUBPRIORITYID = Q.CAMPAIGNSUBPRIORITYID and CPS_TOTALRECEIVED.YEARNAME =Q.CAMPAIGNSUBPRIORITYYEAR and CPS_TOTALRECEIVED.QUARTER =Q.CAMPAIGNSUBPRIORITYQUARTER
            left join CP_TOTALBALANCE on CP_TOTALBALANCE.CAMPAIGNPRIORITYID= Q.CAMPAIGNPRIORITYID and CP_TOTALBALANCE.YEARNAME=Q.CAMPAIGNPRIORITYYEAR and CP_TOTALBALANCE.QUARTER=Q.CAMPAIGNPRIORITYQUARTER
            left join CPS_TOTALBALANCE on CPS_TOTALBALANCE.CAMPAIGNSUBPRIORITYID= Q.CAMPAIGNSUBPRIORITYID and CPS_TOTALBALANCE.YEARNAME = Q.CAMPAIGNSUBPRIORITYYEAR and CPS_TOTALBALANCE.QUARTER = Q.CAMPAIGNSUBPRIORITYQUARTER
            left join CP_TOTALPLANNEDGIFTS on CP_TOTALPLANNEDGIFTS.CAMPAIGNPRIORITYID= Q.CAMPAIGNPRIORITYID and CP_TOTALPLANNEDGIFTS.YEARNAME = Q.CAMPAIGNPRIORITYYEAR and CP_TOTALPLANNEDGIFTS.QUARTER = Q.CAMPAIGNPRIORITYQUARTER
            left join CPS_TOTALPLANNEDGIFTS on CPS_TOTALPLANNEDGIFTS.CAMPAIGNSUBPRIORITYID= Q.CAMPAIGNSUBPRIORITYID and CPS_TOTALPLANNEDGIFTS.YEARNAME = Q.CAMPAIGNSUBPRIORITYYEAR and CPS_TOTALPLANNEDGIFTS.QUARTER=Q.CAMPAIGNSUBPRIORITYQUARTER
            order by CAMPAIGNPRIORITY_DATEYEAR, CAMPAIGNPRIORITY_DATEQUARTER;