USP_DATALIST_MAILINGSSUMMARY
Returns summary information for activated marketing efforts.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ACTIVATEFROMDATE | UDT_FUZZYDATE | IN | Activate from date |
@ACTIVATETODATE | UDT_FUZZYDATE | IN | Activate to date |
@SOURCECODEID | uniqueidentifier | IN | Source code |
@SITEID | uniqueidentifier | IN | Site |
@MAILINGTYPECODE | tinyint | IN | Marketing effort type |
@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_MAILINGSSUMMARY]
(
@ACTIVATEFROMDATE dbo.[UDT_FUZZYDATE] = null, --Mailed date from (if date is not set on a mailing, it uses the activate date)
@ACTIVATETODATE dbo.[UDT_FUZZYDATE] = null, --Mailed date to (if date is not set on a mailing, it uses the activate date)
@SOURCECODEID uniqueidentifier = null,
@SITEID uniqueidentifier = null,
@MAILINGTYPECODE tinyint = 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 @SEGMENTATIONID uniqueidentifier;
declare @CODE nvarchar(10);
declare @NAME nvarchar(100);
declare @SITE nvarchar(1024);
declare @ACTIVATEDATE datetime;
declare @MAILDATE datetime;
declare @DAYSOUT int;
declare @QUANTITYMAILED int;
declare @TOTALGIFTAMOUNT money;
declare @TOTALCOST money;
declare @RESPONSES int;
declare @AVERAGEGIFTAMOUNT money;
declare @TOTALCOSTTABLE table([TOTALCOST] money, [TOTALORGANIZATIONCOST] money);
declare @ISPUBLICMEDIA bit;
declare @RESPONSECOUNTS table(
[OFFERS] int,
[RESPONDERS] int,
[RESPONSES] int,
[TOTALGIFTAMOUNT] money,
[RESPONSERATE] decimal,
[TOTALORGANIZATIONGIFTAMOUNT] money,
[FIRSTRESPONSEDATE] datetime
);
declare @RESULTS table(
[MAILINGID] uniqueidentifier primary key,
[CODE] nvarchar(10),
[NAME] nvarchar(100),
[SITE] nvarchar(1024),
[ACTIVATEDATE] datetime,
[DAYSOUT] int,
[QUANTITYMAILED] int,
[TOTALCOST] money,
[RESPONSES] int,
[TOTALGIFTAMOUNT] money,
[AVERAGEGIFTAMOUNT] money,
[MAILDATE] datetime);
declare MAILINGCURSOR cursor local fast_forward for
select
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATION].[CODE],
[MKTSEGMENTATION].[NAME],
dbo.[UFN_TRANSLATIONFUNCTION_SITE_GETNAME]([SITEID]) as [SITE],
[ACTIVATEDATE],
[MAILDATE],
datediff(day, isnull([MAILDATE], [ACTIVATEDATE]), getdate())
from dbo.[MKTSEGMENTATION]
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[MKTSEGMENTATION].[SITEID] or (SITEID is null and [MKTSEGMENTATION].[SITEID] is null)))
and [ACTIVE] = 1
and [MKTSEGMENTATION].[COMMUNICATIONTYPECODE] = 0
and (@ACTIVATEFROMDATE is null or isnull([MAILDATE], [ACTIVATEDATE]) >= @ACTIVATEFROMDATE)
and (@ACTIVATETODATE is null or isnull([MAILDATE], [ACTIVATEDATE]) < dateadd(day, 1, @ACTIVATETODATE))
and (@SOURCECODEID is null or [SOURCECODEID] = @SOURCECODEID)
and (@SITEID is null or [SITEID] = @SITEID)
and (@MAILINGTYPECODE is null or [MAILINGTYPECODE] = @MAILINGTYPECODE)
and (@SOURCECODEID is null or [MKTSEGMENTATION].[SOURCECODEID] = @SOURCECODEID);
open MAILINGCURSOR;
fetch next from MAILINGCURSOR into @SEGMENTATIONID, @CODE, @NAME, @SITE, @ACTIVATEDATE, @MAILDATE, @DAYSOUT;
while (@@FETCH_STATUS = 0)
begin
/**************************************/
/* Get the total cost for the mailing */
delete @TOTALCOSTTABLE;
insert into @TOTALCOSTTABLE
(
[TOTALCOST],
[TOTALORGANIZATIONCOST]
)
select
isnull([TOTALCOST],0),
isnull([ORGANIZATIONTOTALCOST],0)
from dbo.[MKTSEGMENTATIONACTIVE]
where [ID] = @SEGMENTATIONID;
select
@TOTALCOST = case when @CURRENCYCODE = 1 then [TOTALORGANIZATIONCOST] else [TOTALCOST] end
from @TOTALCOSTTABLE;
/**************************************/
/**************************************/
/* Get the number of donors and average gift amount */
delete @RESPONSECOUNTS;
insert into @RESPONSECOUNTS
exec dbo.[USP_MKTSEGMENTATION_GETRESPONSECOUNTS] @SEGMENTATIONID;
select
@QUANTITYMAILED = [OFFERS],
@RESPONSES = [RESPONSES],
@TOTALGIFTAMOUNT = case when @CURRENCYCODE = 1 then [TOTALORGANIZATIONGIFTAMOUNT] else [TOTALGIFTAMOUNT] end
from @RESPONSECOUNTS;
if @RESPONSES > 0
set @AVERAGEGIFTAMOUNT = @TOTALGIFTAMOUNT / @RESPONSES;
else
set @AVERAGEGIFTAMOUNT = 0;
/**************************************/
insert into @RESULTS
select @SEGMENTATIONID, @CODE, @NAME, @SITE, @ACTIVATEDATE, @DAYSOUT, @QUANTITYMAILED, @TOTALCOST, @RESPONSES, @TOTALGIFTAMOUNT, @AVERAGEGIFTAMOUNT, @MAILDATE;
fetch next from MAILINGCURSOR into @SEGMENTATIONID, @CODE, @NAME, @SITE, @ACTIVATEDATE, @MAILDATE, @DAYSOUT;
end;
close MAILINGCURSOR;
deallocate MAILINGCURSOR;
select
[RESULTS].[MAILINGID],
[RESULTS].[CODE],
[RESULTS].[NAME],
[RESULTS].[SITE],
[RESULTS].[ACTIVATEDATE],
[RESULTS].[DAYSOUT],
[RESULTS].[QUANTITYMAILED],
[RESULTS].[TOTALCOST],
[RESULTS].[RESPONSES],
[RESULTS].[TOTALGIFTAMOUNT],
[RESULTS].[AVERAGEGIFTAMOUNT],
isnull([RESULTS].[MAILDATE], [RESULTS].[ACTIVATEDATE]) as [MAILDATE],
case when [RESULTS].[MAILDATE] is null then 'true' else 'false' end as [MAILDATENOTSET],
[CURRENCY].[ISO4217] as [CURRENCYISOCURRENCYCODE],
[CURRENCY].[DECIMALDIGITS] as [CURRENCYDECIMALDIGITS],
[CURRENCY].[CURRENCYSYMBOL] as [CURRENCYSYMBOL],
[CURRENCY].[SYMBOLDISPLAYSETTINGCODE] as [CURRENCYSYMBOLDISPLAYSETTINGCODE],
case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then 1 else 0 end as [ISPUBLICMEDIA]
from @RESULTS as [RESULTS]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [RESULTS].[MAILINGID]
inner join dbo.[CURRENCY] on [CURRENCY].[ID] = case when @CURRENCYCODE = 1 then dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]() else [MKTSEGMENTATION].[BASECURRENCYID] end
order by [NAME] desc;
return 0;