USP_DATALIST_MKTSOURCECODEPERFORMANCE
Retrieves detail information for the source code performance report.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SELECTIONID | uniqueidentifier | IN | Marketing effort selection |
@STARTDATE | datetime | IN | Mailed from date |
@ENDDATE | datetime | IN | Mailed to date |
@SOURCECODEITEM | nvarchar(50) | IN | Source code part |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@CURRENCYCODE | tinyint | IN | Currency |
Definition
Copy
CREATE procedure dbo.[USP_DATALIST_MKTSOURCECODEPERFORMANCE]
(
@SELECTIONID uniqueidentifier,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@SOURCECODEITEM nvarchar(50) = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@CURRENCYCODE tinyint = 1 /* 0 = base, 1 = organization */
)
with execute as owner
as
set nocount on;
declare @SQL nvarchar(max);
declare @SEGMENTCURSOR cursor;
declare @SEGMENTATIONSEGMENTID uniqueidentifier;
declare @SEGMENTATIONID uniqueidentifier;
declare @TYPECODE tinyint;
declare @SOURCECODE nvarchar(50);
declare @SOURCECODEITEMID uniqueidentifier;
/* Set currency symbols using the organization currency */
/* Note, for now this report will only display in the organization currency. Since this report
sums efforts that could have different base currencies, it was decided the amount of processing it would take to
convert different base currencies on the fly is too much and a different approach would be needed. */
declare @CURRENCYISOCURRENCYCODE nvarchar(6);
declare @CURRENCYDECIMALDIGITS tinyint;
declare @CURRENCYSYMBOL nvarchar(10);
declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;
select
@CURRENCYISOCURRENCYCODE = [ISO4217],
@CURRENCYDECIMALDIGITS = [DECIMALDIGITS],
@CURRENCYSYMBOL = [CURRENCYSYMBOL],
@CURRENCYSYMBOLDISPLAYSETTINGCODE = [SYMBOLDISPLAYSETTINGCODE]
from dbo.[CURRENCY]
where [ID] = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
declare @ALL table (
[SOURCECODE] nvarchar(10),
[SEGMENTID] uniqueidentifier,
[SEGMENTNAME] nvarchar(100),
[PACKAGEID] uniqueidentifier,
[PACKAGENAME] nvarchar(100),
[QUANTITY] int,
[TOTALCOST] money,
[RESPONSES] int,
[TOTALREVENUE] money,
[ISTESTSEGMENT] bit
);
if @ENDDATE is null
set @ENDDATE = getdate();
if @STARTDATE is null
set @STARTDATE = dateadd(yy, -1, @ENDDATE);
if @SELECTIONID is null
begin
set @SQL = 'set @SEGMENTCURSOR = cursor local fast_forward for' + char(13) +
'select distinct' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[ID],' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],' + char(13) +
' [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE],' + char(13) +
' [MKTSOURCECODEITEM].[ID]' + char(13) +
'from' + char(13) +
' dbo.[MKTSOURCECODEITEM]' + char(13) +
' inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]' + char(13) +
' inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[SOURCECODEID] = [MKTSOURCECODEITEM].[SOURCECODEID]' + char(13) +
' inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]' + char(13) +
'where' + char(13) +
' dbo.[UFN_SITEALLOWEDFORUSER](''' + convert(nvarchar(36), @CURRENTAPPUSERID) + ''', [MKTSEGMENTATION].[SITEID]) = 1 and' + char(13) +
' [MKTSOURCECODEPARTDEFINITION].[NAME] = @SOURCECODEITEM;'
set @SQL = @SQL + char(13) + 'open @SEGMENTCURSOR;';
end
else
begin
set @SQL = 'set @SEGMENTCURSOR = cursor local fast_forward for' + char(13) +
'select distinct' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[ID],' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],' + char(13) +
' [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE],' + char(13) +
' [MKTSOURCECODEITEM].[ID]' + char(13) +
'from' + char(13) +
' dbo.[MKTSOURCECODEITEM]' + char(13) +
' inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]' + char(13) +
' inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[SOURCECODEID] = [MKTSOURCECODEITEM].[SOURCECODEID]' + char(13) +
' inner join ' + dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@SELECTIONID) + ' as [IDSET] on [MKTSEGMENTATION].[ID] = [IDSET].[ID]' + char(13) +
' inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]' + char(13) +
'where' + char(13) +
' dbo.[UFN_SITEALLOWEDFORUSER](''' + convert(nvarchar(36), @CURRENTAPPUSERID) + ''', [MKTSEGMENTATION].[SITEID]) = 1 and' + char(13) +
' [MKTSOURCECODEPARTDEFINITION].[NAME] = @SOURCECODEITEM;'
set @SQL = @SQL + char(13) + 'open @SEGMENTCURSOR;';
end;
-- might as well leave UFN_SITEALLOWEDFORUSER up there, to cut down on the number of rows the real site security has to check
-- they still need to be checked, though, because of the link between site security and the role in which access to a datalist is granted
exec sp_executesql @SQL, N'@SEGMENTCURSOR cursor output, @SOURCECODEITEM nvarchar(50)', @SEGMENTCURSOR = @SEGMENTCURSOR output, @SOURCECODEITEM = @SOURCECODEITEM;
fetch next from @SEGMENTCURSOR into @SEGMENTATIONSEGMENTID, @SEGMENTATIONID, @TYPECODE, @SOURCECODEITEMID;
while (@@FETCH_STATUS = 0)
begin
if ( -- check site security
select count(*)
from (select [SITEID]
from dbo.[MKTSEGMENTATION]
where [ID] = @SEGMENTATIONID)
as [SEGMENTATIONSITE]
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[SEGMENTATIONSITE].[SITEID] or (SITEID is null and [SEGMENTATIONSITE].[SITEID] is null)))
) > 0
begin
-- get the source code for the part for this segment
-- BTR CR292456-013008 1/30/2008
-- replaced code copied from UFN_MKTSOURCECODE_BUILDCODE with new call to UFN_MKTSOURCECODE_BUILDCODE
set @SOURCECODE = dbo.[UFN_MKTSOURCECODE_BUILDCODE](@SEGMENTATIONSEGMENTID, default, @SOURCECODEITEMID);
-- rollup totals by sourcecode, segmentationsegment, and package
-- list rollup from the list cache table
if @TYPECODE = 6
begin
insert into @ALL
select
[MKTSOURCECODEPART].[CODE] as [SOURCECODE],
[MKTSEGMENT].[ID] as [SEGMENTID],
[MKTSEGMENT].[NAME] as [SEGMENTNAME],
[MKTPACKAGE].[ID] as [PACKAGEID],
[MKTPACKAGE].[NAME] as [PACKAGENAME],
sum([MKTSEGMENTATIONLISTACTIVE].[QUANTITY]) as [QUANTITY],
sum([MKTSEGMENTATIONLISTACTIVE].[ORGANIZATIONTOTALCOST]) as [TOTALCOST],
sum([MKTSEGMENTATIONLISTACTIVE].[RESPONSES]) as [RESPONSES],
sum([MKTSEGMENTATIONLISTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT]) as [TOTALGIFTAMOUNT],
0 as [ISTESTSEGMENT]
from
dbo.[MKTSEGMENTATIONLISTACTIVE]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONLISTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTID] = [MKTSEGMENT].[ID]
inner join dbo.[MKTPACKAGE] on [MKTSEGMENTATIONLISTACTIVE].[PACKAGEID] = [MKTPACKAGE].[ID]
inner join dbo.[MKTLIST] on [MKTSEGMENTATIONLISTACTIVE].[LISTID] = [MKTLIST].[ID]
inner join dbo.[MKTSOURCECODEPART] on [MKTLIST].[ID] = [MKTSOURCECODEPART].[LISTID]
and [MKTSEGMENTATION].[ID] = [MKTSOURCECODEPART].[SEGMENTATIONID]
where
[MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTATIONSEGMENTID
and [MKTSOURCECODEPART].[SOURCECODEITEMID] = @SOURCECODEITEMID
and isnull([MKTSEGMENTATION].[MAILDATE], cast([MKTSEGMENTATION].[ACTIVATEDATE] as date)) between @STARTDATE and @ENDDATE
group by
[MKTSOURCECODEPART].[CODE],
[MKTLIST].[ID],
[MKTSEGMENT].[ID],
[MKTSEGMENT].[NAME],
[MKTPACKAGE].[ID],
[MKTPACKAGE].[NAME];
--insert values for house lists
insert into @ALL
select
[MKTSOURCECODEPART].[CODE] as [SOURCECODE],
isnull([MKTSEGMENTATIONTESTSEGMENT].[ID],[MKTSEGMENT].[ID]) as [SEGMENTID],
isnull([MKTSEGMENTATIONTESTSEGMENT].[NAME],[MKTSEGMENT].[NAME]) as [SEGMENTNAME],
isnull([MKTTESTPACKAGE].[ID],[MKTPACKAGE].[ID]) as [PACKAGEID],
isnull([MKTTESTPACKAGE].[NAME],[MKTPACKAGE].[NAME]) as [PACKAGENAME],
[MKTSEGMENTATIONSEGMENTACTIVE].[QUANTITY] - [LIST].[QUANTITY] as [QUANTITY],
[MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST] - [LIST].[ORGANIZATIONTOTALCOST] as [TOTALCOST],
[MKTSEGMENTATIONSEGMENTACTIVE].[RESPONSES] - [LIST].[RESPONSES] as [RESPONSES],
[MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT] - [LIST].[ORGANIZATIONTOTALGIFTAMOUNT] as [TOTALGIFTAMOUNT],
case when [MKTSEGMENTATIONTESTSEGMENT].[ID] is null then 0 else 1 end as [ISTESTSEGMENT]
from
dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTID] = [MKTSEGMENT].[ID]
inner join dbo.[MKTRECORDSOURCE] on [MKTSEGMENT].[QUERYVIEWCATALOGID] = [MKTRECORDSOURCE].[ID]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID]
inner join dbo.[MKTSOURCECODEPART] on [MKTRECORDSOURCE].[ID] = [MKTSOURCECODEPART].[LISTID]
and [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSOURCECODEPART].[SEGMENTATIONID]
inner join (
select
[MKTSEGMENTATIONSEGMENT].[ID] as [ID],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[QUANTITY]),0) as [QUANTITY],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[TOTALCOST]),0) as [TOTALCOST],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[RESPONSES]),0) as [RESPONSES],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[TOTALGIFTAMOUNT]),0) as [TOTALGIFTAMOUNT],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[ORGANIZATIONTOTALCOST]),0) as [ORGANIZATIONTOTALCOST],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT]),0) as [ORGANIZATIONTOTALGIFTAMOUNT]
from
dbo.[MKTSEGMENTATIONSEGMENT]
left join dbo.[MKTSEGMENTATIONLISTACTIVE] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONLISTACTIVE].[SEGMENTID]
where
[MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTATIONSEGMENTID
group by
[MKTSEGMENTATIONSEGMENT].[ID]
) as [LIST] on [MKTSEGMENTATIONSEGMENT].[ID] = [LIST].[ID]
left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID]
left join dbo.[MKTPACKAGE] as [MKTTESTPACKAGE] on [MKTTESTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
where
[MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTATIONSEGMENTID
and [MKTSEGMENTATIONSEGMENTACTIVE].[QUANTITY] - [LIST].[QUANTITY] > 0
and [MKTSOURCECODEPART].[SOURCECODEITEMID] = @SOURCECODEITEMID
and dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([MKTRECORDSOURCE].[ID]) = 1;
end
else
begin
insert into @ALL
select
case when [MKTSEGMENTATIONTESTSEGMENT].[ID] is null
then dbo.[UFN_MKTSOURCECODE_BUILDCODE]([MKTSEGMENTATIONSEGMENT].[ID], default, @SOURCECODEITEMID)
else dbo.[UFN_MKTSOURCECODE_BUILDCODE]([MKTSEGMENTATIONTESTSEGMENT].[ID], default, @SOURCECODEITEMID) end,
isnull([MKTSEGMENTATIONTESTSEGMENT].[ID],[MKTSEGMENT].[ID]) as [SEGMENTID],
isnull([MKTSEGMENTATIONTESTSEGMENT].[NAME],[MKTSEGMENT].[NAME]) as [SEGMENTNAME],
isnull([MKTTESTPACKAGE].[ID],[MKTPACKAGE].[ID]) as [PACKAGID],
isnull([MKTTESTPACKAGE].[NAME],[MKTPACKAGE].[NAME]) as [PACKAGENAME],
sum([MKTSEGMENTATIONSEGMENTACTIVE].[QUANTITY]) as [QUANTITY],
sum([MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST]) as [TOTALCOST],
sum([MKTSEGMENTATIONSEGMENTACTIVE].[RESPONSES]) as [RESPONSES],
sum([MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT]) as [TOTALGIFTAMOUNT],
case when [MKTSEGMENTATIONTESTSEGMENT].[ID] is null then 0 else 1 end as [ISTESTSEGMENT]
from
dbo.[MKTSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID]
left join dbo.[MKTPACKAGE] as [MKTTESTPACKAGE] on [MKTTESTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
where
[MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTATIONSEGMENTID
and isnull([MKTSEGMENTATION].[MAILDATE], cast([MKTSEGMENTATION].[ACTIVATEDATE] as date)) between @STARTDATE and @ENDDATE
group by
[MKTSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[ID],
[MKTSEGMENT].[NAME],
[MKTSEGMENTATIONTESTSEGMENT].[NAME],
[MKTTESTPACKAGE].[ID],
[MKTTESTPACKAGE].[NAME],
[MKTPACKAGE].[ID],
[MKTPACKAGE].[NAME],
[MKTSEGMENTATIONSEGMENT].[ID]
end;
end;
fetch next from @SEGMENTCURSOR into @SEGMENTATIONSEGMENTID, @SEGMENTATIONID, @TYPECODE, @SOURCECODEITEMID;
end;
close @SEGMENTCURSOR;
deallocate @SEGMENTCURSOR;
--Display
if (select count(*) from @ALL) = 0
begin
select
cast(null as nvarchar(10)) as [SOURCECODE],
cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier) as [SEGMENTID],
cast(null as nvarchar(100)) as [SEGMENTNAME],
cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier) as [PACKAGEID],
cast(null as nvarchar(100)) as [PACKAGENAME],
cast(0 as int) as [QUANTITY],
cast(0 as money) as [TOTALCOST],
cast(0 as int) as [RESPONSES],
cast(0 as money) as [TOTALREVENUE],
(select [NAME] from dbo.[IDSETREGISTER] where [ID] = @SELECTIONID) as [SELECTIONNAME],
cast(0 as bit) as [ISTESTSEGMENT],
@CURRENCYISOCURRENCYCODE as [CURRENCYISOCURRENCYCODE],
@CURRENCYDECIMALDIGITS as [CURRENCYDECIMALDIGITS],
@CURRENCYSYMBOL as [CURRENCYSYMBOL],
@CURRENCYSYMBOLDISPLAYSETTINGCODE as [CURRENCYSYMBOLDISPLAYSETTINGCODE];
end
else
begin
select
[SOURCECODE],
[SEGMENTID],
[SEGMENTNAME],
[PACKAGEID],
[PACKAGENAME],
sum(isnull([QUANTITY],0)) as [QUANTITY],
sum(isnull([TOTALCOST],0)) as [TOTALCOST],
sum(isnull([RESPONSES],0)) as [RESPONSES],
sum(isnull([TOTALREVENUE],0)) as [TOTALREVENUE],
(select [NAME] from dbo.[IDSETREGISTER] where [ID] = @SELECTIONID) as [SELECTIONNAME],
[ISTESTSEGMENT],
@CURRENCYISOCURRENCYCODE as [CURRENCYISOCURRENCYCODE],
@CURRENCYDECIMALDIGITS as [CURRENCYDECIMALDIGITS],
@CURRENCYSYMBOL as [CURRENCYSYMBOL],
@CURRENCYSYMBOLDISPLAYSETTINGCODE as [CURRENCYSYMBOLDISPLAYSETTINGCODE]
from @ALL
group by
[SOURCECODE],
[SEGMENTID],
[SEGMENTNAME],
[PACKAGEID],
[PACKAGENAME],
[ISTESTSEGMENT]
order by
[SOURCECODE],
[SEGMENTNAME],
[PACKAGENAME];
end
return 0;