USP_KPI_OPPORTUNITYAMOUNTBYSELECTION

Parameters

Parameter Parameter Type Mode Description
@VALUE money INOUT
@ASOFDATE datetime IN
@FUNDRAISERID uniqueidentifier IN
@SELECTIONID uniqueidentifier IN
@ORGPOSITIONSSELECTIONID uniqueidentifier IN
@USEREVENUECOMMITTEDAMOUNT bit IN
@CURRENCYID uniqueidentifier IN

Definition

Copy


          CREATE procedure dbo.USP_KPI_OPPORTUNITYAMOUNTBYSELECTION
            @VALUE money output,
            @ASOFDATE datetime
            @FUNDRAISERID uniqueidentifier = null,
            @SELECTIONID uniqueidentifier,
            @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
            @USEREVENUECOMMITTEDAMOUNT bit = 0,
            @CURRENCYID uniqueidentifier = null
          with execute as owner
          as
            set nocount on;

            declare @SQLTOEXEC nvarchar(max);

            declare @SELECTIONDBOBJECTNAME nvarchar(128);
            declare @SELECTIONDBOBJECTTYPE smallint;

            declare @POSITIONDBOBJECTNAME nvarchar(128);
            declare @POSITIONDBOBJECTTYPE smallint;

            if @SELECTIONID is not null begin
              if not exists(select ID from dbo.IDSETREGISTER where ID = @SELECTIONID) raiserror('ID set does not exist in the database.', 15, 1);
              select @SELECTIONDBOBJECTNAME = DBOBJECTNAME, @SELECTIONDBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @SELECTIONID;
              if @SELECTIONDBOBJECTTYPE = 1 set @SELECTIONDBOBJECTNAME = @SELECTIONDBOBJECTNAME + '()';
              else if @SELECTIONDBOBJECTTYPE = 2 set @SELECTIONDBOBJECTNAME = @SELECTIONDBOBJECTNAME + '(''' + convert(nvarchar(36), @SELECTIONID) + ''')';
            end

            if @ORGPOSITIONSSELECTIONID is not null begin
              if not exists(select ID from dbo.IDSETREGISTER where ID = @ORGPOSITIONSSELECTIONID) raiserror('ID set does not exist in the database.', 15, 1);
              select @POSITIONDBOBJECTNAME = DBOBJECTNAME, @POSITIONDBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @ORGPOSITIONSSELECTIONID;
              if @POSITIONDBOBJECTTYPE = 1 set @POSITIONDBOBJECTNAME = @POSITIONDBOBJECTNAME + '()';
              else if @POSITIONDBOBJECTTYPE = 2 set @POSITIONDBOBJECTNAME = @POSITIONDBOBJECTNAME + '(''' + convert(nvarchar(36), @ORGPOSITIONSSELECTIONID) + ''')';
            end

            set @SQLTOEXEC = 
              'select 
                @VALUE =
                  coalesce(sum(AMOUNT),0) 
                   from 
                   (                  
                    select distinct O.ID, 
                      case when O.STATUSCODE = 3 then
                        case when @USEREVENUECOMMITTEDAMOUNT = 1 then
                          dbo.UFN_OPPORTUNITY_REVENUECOMMITTEDINCURRENCY(O.ID, @CURRENCYID)
                        else
                          dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID, @CURRENCYID)
                        end
                      else
                        dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID, @CURRENCYID)
                      end
                      as AMOUNT
              from
                dbo.OPPORTUNITY O
                inner join dbo.PROSPECTPLAN PP on PP.ID = O.PROSPECTPLANID' + nchar(13);

            if @SELECTIONID is not null
              set @SQLTOEXEC = @SQLTOEXEC + 'inner join dbo.' + @SELECTIONDBOBJECTNAME + ' as SELECTION on O.[ID] = SELECTION.[ID]' + nchar(13);

            if @ORGPOSITIONSSELECTIONID is not null
              set @SQLTOEXEC = @SQLTOEXEC + 
                'inner join dbo.V_OPPORTUNITYSOLICITOR OS on OS.OPPORTUNITYID = O.ID
                 inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OPH.CONSTITUENTID = OS.FUNDRAISERID
                  and O.ASKDATE between OPH.DATEFROM and coalesce(OPH.DATETO, O.ASKDATE)
                inner join ' + @POSITIONDBOBJECTNAME + ' as POSITIONS on OPH.[ID] = POSITIONS.[ID]' + nchar(13);


            set @SQLTOEXEC = @SQLTOEXEC + 'where (@FUNDRAISERID is null or exists (select 1 from dbo.V_OPPORTUNITYSOLICITOR OS where OS.FUNDRAISERID = @FUNDRAISERID AND OS.OPPORTUNITYID = O.ID))';

            set @SQLTOEXEC = @SQLTOEXEC + ' ) as RESULT '

            exec sp_executesql @SQLTOEXEC
                N'@VALUE money output, @FUNDRAISERID uniqueidentifier, @USEREVENUECOMMITTEDAMOUNT tinyint, @CURRENCYID uniqueidentifier',
                @VALUE=@VALUE output, @FUNDRAISERID=@FUNDRAISERID, @USEREVENUECOMMITTEDAMOUNT=@USEREVENUECOMMITTEDAMOUNT, @CURRENCYID=@CURRENCYID;