USP_REPORT_CHILDINVENTORY

Returns data for the sponsorship child inventory report.

Parameters

Parameter Parameter Type Mode Description
@DIMENSION1 nvarchar(100) IN
@DIMENSION1VALUE nvarchar(255) IN
@DIMENSION1VALUE3 nvarchar(255) IN
@DIMENSION2 nvarchar(100) IN
@DIMENSION2VALUE nvarchar(255) IN
@DIMENSION2VALUE3 nvarchar(255) IN
@DIMENSION3 nvarchar(100) IN
@DIMENSION3VALUE nvarchar(255) IN
@DIMENSION3VALUE3 nvarchar(255) IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@DATETYPE nvarchar(15) IN
@DATERANGEDISPLAY nvarchar(100) IN
@SPONSORSHIPOPPORTUNITYTYPECODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_REPORT_CHILDINVENTORY (
                @DIMENSION1 as nvarchar(100) = null,
                @DIMENSION1VALUE as nvarchar(255) = null,
                @DIMENSION1VALUE3 as nvarchar(255) = null,
                @DIMENSION2 as nvarchar(100) = null,
                @DIMENSION2VALUE as nvarchar(255) = null,
                @DIMENSION2VALUE3 as nvarchar(255) = null,
                @DIMENSION3 as nvarchar(100) = null,
                @DIMENSION3VALUE as nvarchar(255) = null,
                @DIMENSION3VALUE3 as nvarchar(255) = null,
                @STARTDATE datetime = null
                @ENDDATE datetime = null,
                @DATETYPE nvarchar(15) = null,
                @DATERANGEDISPLAY nvarchar(100) = null,
                @SPONSORSHIPOPPORTUNITYTYPECODE tinyint = 1
                )
            with execute as owner
            as
            set nocount on;

            declare @SQLTOEXEC nvarchar(max);
            declare @OSQLTOEXEC nvarchar(max);
            declare @OLDSQLTOEXEC nvarchar(max);
            declare @FROMCLAUSE nvarchar(max);
            declare @COLUMNSELECT nvarchar(max);
            declare @OLDCOLUMNSELECT nvarchar(max);
            declare @WHERECLAUSE nvarchar(max);
            declare @OLDWHERECLAUSE nvarchar(max);
            declare @REVENUEJOIN nvarchar(max);
            declare @GROUPBYCLAUSE nvarchar(max);
            declare @SELECT nvarchar(max);
            declare @FROM nvarchar(max);
            declare @COLUMN nvarchar(max);
            declare @WHERE nvarchar(max);
            declare @HAVING nvarchar(max) = '';
            declare @HAVINGCLAUSE nvarchar(max) = '';
            declare @LOCATIONCOUNT tinyint = 0;
            declare @LOCATIONTYPEENUM tinyint = 2;
            declare @DATECOLTEMP nvarchar(800);
            declare @DIMENSIONCOLUMNS nvarchar(100) = 'DIMENSION1';
            declare @RESULTSELECTION nvarchar(max);

      -- reset dates

            set @ENDDATE = getdate()
            set @STARTDATE = DATEADD(month,1,@STARTDATE)

            set @FROMCLAUSE = ' from dbo.SPONSORSHIPOPPORTUNITY OPP ';
            set @FROMCLAUSE = @FROMCLAUSE + 'inner join dbo.SPONSORSHIPOPPORTUNITYGROUP SOG on SOG.ID = OPP.SPONSORSHIPOPPORTUNITYGROUPID '
            set @FROMCLAUSE = @FROMCLAUSE + 'left join dbo.SPONSORSHIPOPPORTUNITYCHILD SOC on SOC.ID = OPP.ID '
            set @FROMCLAUSE = @FROMCLAUSE + 'left join dbo.SPONSORSHIPOPPORTUNITYPROJECT SOP on SOP.ID = OPP.ID '
      set @FROMCLAUSE = @FROMCLAUSE + 'left join dbo.CONSTITUENT CON on CON.ID = SOC.CONSTITUENTID '

            if @DATETYPE not in ('0', '1')
            begin
                    set @WHERECLAUSE = ' where     (@STARTDATE is null or OPP.LASTDOCUMENTATIONDATE >= dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)) ' +
                               ' and (@ENDDATE is null or OPP.LASTDOCUMENTATIONDATE <= dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)) and ';
                    set @OLDWHERECLAUSE = ' where (OPP.LASTDOCUMENTATIONDATE < @STARTDATE or OPP.LASTDOCUMENTATIONDATE is null) and '                         
            end
            else 
            begin
                set @WHERECLAUSE = ' where  '
                    set @OLDWHERECLAUSE = 'where  '
            end
            set @WHERECLAUSE = @WHERECLAUSE + 'SOG.SPONSORSHIPOPPORTUNITYTYPECODE = @SPONSORSHIPOPPORTUNITYTYPECODE '
      set @OLDWHERECLAUSE = @OLDWHERECLAUSE + 'SOG.SPONSORSHIPOPPORTUNITYTYPECODE = @SPONSORSHIPOPPORTUNITYTYPECODE '
            set @COLUMNSELECT = 'select dbo.UFN_REPORT_PROCESSDATE_PARAM('+ @DATETYPE + ',OPP.LASTDOCUMENTATIONDATE) DATECOL, datename(year, OPP.LASTDOCUMENTATIONDATE) YEARCOL';
      set @OLDCOLUMNSELECT = 'select ''Older'' DATECOL, ''Older'' YEARCOL';
            -- count how many dimension parameters have location type specified

            if @DIMENSION1 = @LOCATIONTYPEENUM
            begin
                set @LOCATIONCOUNT = @LOCATIONCOUNT + 1;
            end
            if @DIMENSION2 is not null and @DIMENSION2 = @LOCATIONTYPEENUM
            begin
                set @LOCATIONCOUNT = @LOCATIONCOUNT + 1;
            end

            if @DIMENSION3 is not null and @DIMENSION3 = @LOCATIONTYPEENUM
            begin
                set @LOCATIONCOUNT = @LOCATIONCOUNT + 1;
            end


            -- only process dimension if it is not null and is not Location Type 

            if @DIMENSION1 is not null
            begin
                if @DIMENSION1 <> @LOCATIONTYPEENUM
                begin

                    exec dbo.USP_REPORT_CHILDINVENTORY_PROCESSDIMENSION 
                        @DIMENSION1
                        '@DIMENSION1VALUE'
                        @FROM output
                        @COLUMN output
                        @WHERE output
                        'DIMENSION1',
                        @HAVING output

                    set @FROMCLAUSE = @FROMCLAUSE + @FROM;

                    set @COLUMNSELECT =  @COLUMNSELECT + ',' + @COLUMN ;
                    set @OLDCOLUMNSELECT =  @OLDCOLUMNSELECT + ',' + @COLUMN ;

                    set @WHERECLAUSE += @WHERE + ' and @DIMENSION1VALUE3 is null'
                    set @OLDWHERECLAUSE += @WHERE + ' and @DIMENSION1VALUE3 is null'
                    set @GROUPBYCLAUSE = 'DIMENSION1' ;

                    if @DIMENSION1VALUE is not null
                        set @HAVINGCLAUSE = @HAVINGCLAUSE + @HAVING;

                --

                    -- set these to null for the next row

                    --

                    set @FROM = '';
                    set @COLUMN = '';
                    set @WHERE = '';
                    set @HAVING = '';
                end
            end
            -- only process dimension if it's not null and is not Location Type

            if @DIMENSION2 is not null 
            begin
                set @DIMENSIONCOLUMNS = @DIMENSIONCOLUMNS + ', DIMENSION2';            
                if @DIMENSION2 <> @LOCATIONTYPEENUM
                begin
                    exec dbo.USP_REPORT_CHILDINVENTORY_PROCESSDIMENSION
                    @DIMENSION2
                    '@DIMENSION2VALUE'
                    @FROM output
                    @COLUMN output
                    @WHERE output
                    'DIMENSION2',
                    @HAVING output

                    if @FROM is not null
                    begin
                        set @FROMCLAUSE = @FROMCLAUSE + @FROM;
                    end

                    set @COLUMNSELECT =  @COLUMNSELECT + ',' + @COLUMN ;
                    set @OLDCOLUMNSELECT =  @OLDCOLUMNSELECT + ',' + @COLUMN ;

                    set @WHERECLAUSE =  @WHERECLAUSE + @WHERE;
                    set @OLDWHERECLAUSE = @OLDWHERECLAUSE + @WHERE;
                    if @GROUPBYCLAUSE is not null
                      set @GROUPBYCLAUSE = @GROUPBYCLAUSE + ', DIMENSION2';
                     else
                      set @GROUPBYCLAUSE = 'DIMENSION2';

                if @HAVINGCLAUSE is not null and @DIMENSION2VALUE is not null
                        set @HAVINGCLAUSE = @HAVINGCLAUSE + @HAVING;
                --

                -- set these to null for the next row

                --

                set @FROM = '';
                set @COLUMN = '';
                set @WHERE = '';
                set @HAVING = '';
                end
            end
            else
            begin
                    set @WHERECLAUSE =  @WHERECLAUSE + ' and @DIMENSION2VALUE is null';
                    set @OLDWHERECLAUSE = @OLDWHERECLAUSE + ' and @DIMENSION2VALUE is null';
            end
            --

            if @DIMENSION3 is not null 
            begin
                set @DIMENSIONCOLUMNS = @DIMENSIONCOLUMNS + ', DIMENSION3';                
                if @DIMENSION3 <> @LOCATIONTYPEENUM
                begin
                        exec dbo.USP_REPORT_CHILDINVENTORY_PROCESSDIMENSION
                        @DIMENSION3,
                        '@DIMENSION3VALUE'
                        @FROM output
                        @COLUMN output
                        @WHERE output
                        'DIMENSION3',
                        @HAVING output

                        if @FROM is not null
                        begin
                            set @FROMCLAUSE = @FROMCLAUSE + @FROM;
                        end

                        set @COLUMNSELECT =  @COLUMNSELECT + ',' + @COLUMN ;
                        set @OLDCOLUMNSELECT =  @OLDCOLUMNSELECT + ',' + @COLUMN ;

                        set @WHERECLAUSE =  @WHERECLAUSE + @WHERE;
                        set @OLDWHERECLAUSE = @OLDWHERECLAUSE + @WHERE;
                        if @GROUPBYCLAUSE is not null
                            set @GROUPBYCLAUSE = @GROUPBYCLAUSE + ', DIMENSION3' ;
                        else
                            set @GROUPBYCLAUSE = 'DIMENSION3';

                        if @HAVINGCLAUSE is not null and @DIMENSION3VALUE is not null
                                set @HAVINGCLAUSE = @HAVINGCLAUSE + @HAVING;
                        --

                        -- set these to null for the next row

                        --

                        set @FROM = '';
                        set @COLUMN = '';
                        set @WHERE = '';
                        set @HAVING = '';

                end
            end
            else
            begin
                    set @WHERECLAUSE =  @WHERECLAUSE + ' and @DIMENSION3VALUE is null';
                    set @OLDWHERECLAUSE = @OLDWHERECLAUSE + ' and @DIMENSION3VALUE is null';
      end

            --After we know how many location types have been set, max of 3 dimensions, we can now

            -- construct the sql to handle the location types.


            -- construct the sql query

            -- handle processing of location types

            If @LOCATIONCOUNT > 0
            begin
                exec dbo.USP_REPORT_CHILDINVENTORY_PROCESSLOCATIONTYPE_DIMENSION
                @LOCATIONCOUNT
                @DIMENSION1
                @DIMENSION2,
                @DIMENSION3,
                @COLUMNSELECT,
                @OLDCOLUMNSELECT,
                @FROMCLAUSE,
                @WHERECLAUSE,
                @OLDWHERECLAUSE,
                @GROUPBYCLAUSE,
                @SQLTOEXEC output,
                @OSQLTOEXEC output,
                'count(*) CNT'

                set @SQLTOEXEC = @SQLTOEXEC + @HAVINGCLAUSE
                set @OSQLTOEXEC = @OSQLTOEXEC + @HAVINGCLAUSE
                set @OLDSQLTOEXEC = 'insert #RESULT select * from (' + @OSQLTOEXEC + ') as QRYOLD';
             end
            else
      begin

                set @SELECT = 'select count(*) CNT, DATECOL, YEARCOL, '+ @GROUPBYCLAUSE;
                set @SQLTOEXEC = @SELECT + ' from (' + @COLUMNSELECT + ' ' + @FROMCLAUSE + ' ' + @WHERECLAUSE + ') as QRY group by DATECOL, YEARCOL, '  + @GROUPBYCLAUSE + @HAVINGCLAUSE;
                set @OLDSQLTOEXEC = 'insert #RESULT select * from (' + replace(@SELECT,'DATECOL, YEARCOL',' ''Older'' as DATECOL1, ''Older'' as YEARCOL1') + 
                                                        ' from (' + @COLUMNSELECT + @FROMCLAUSE + @OLDWHERECLAUSE + ') as RESOLD '  +
                                                        ' group by ' + @GROUPBYCLAUSE + @HAVINGCLAUSE + ') as QRYOLD';        
            end

            if @DATETYPE not in ('0', '1')
            begin
                set @DATECOLTEMP = dbo.UFN_REPORT_BUILD_DATECOL_TABLE_STRING(@DATETYPE)
                -- append to the query the code that handles  blanc column value

                set @RESULTSELECTION = ' delete from #DATECOL where DATECOL+YEARCOL in (select DATECOL+YEARCOL from #RESULT) ' +
                             ' insert into #RESULT (DATECOL, YEARCOL, CNT, ' + @DIMENSIONCOLUMNS + ') ' +
                             ' select distinct DATEC , YEARC , 0, ' + @DIMENSIONCOLUMNS +
                             ' from (select #DATECOL.DATECOL as DATEC, #DATECOL.YEARCOL as YEARC, #RESULT.* from #DATECOL cross join #RESULT) as CROSSJOIN ' +
                              @OLDSQLTOEXEC +
                                                         ' select CNT, DATECOL, YEARCOL, ' + @DIMENSIONCOLUMNS + ' from #RESULT '  

            end
            else
            begin
              set @DATECOLTEMP = ''
                set @RESULTSELECTION = ' select CNT, DATECOL, YEARCOL, ' + @DIMENSIONCOLUMNS + ' from #RESULT '  
            end

            set @SQLTOEXEC = @DATECOLTEMP + ' select * into #RESULT from (' +@SQLTOEXEC + ') as RES ' + @RESULTSELECTION + ' drop table #RESULT'
            -- execute the query

            exec sp_executesql @SQLTOEXEC,
                               N'@DIMENSION1VALUE nvarchar(255), @DIMENSION2VALUE nvarchar(255), @DIMENSION3VALUE nvarchar(255), @STARTDATE datetime, @ENDDATE datetime, @DIMENSION1VALUE3 nvarchar(255), @DIMENSION2VALUE3 nvarchar(255), @DIMENSION3VALUE3 nvarchar(255), @SPONSORSHIPOPPORTUNITYTYPECODE tinyint',
                               @DIMENSION1VALUE=@DIMENSION1VALUE, @DIMENSION2VALUE=@DIMENSION2VALUE, @DIMENSION3VALUE=@DIMENSION3VALUE, @STARTDATE = @STARTDATE,@ENDDATE = @ENDDATE,@DIMENSION1VALUE3=@DIMENSION1VALUE3, @DIMENSION2VALUE3=@DIMENSION2VALUE3, @DIMENSION3VALUE3=@DIMENSION3VALUE3,@SPONSORSHIPOPPORTUNITYTYPECODE =  @SPONSORSHIPOPPORTUNITYTYPECODE;