USP_DATALIST_MKTPLANNEROUTLOOK
Returns a list of plans in the planner which have income for a given year, plus the income for each month.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@YEAR | int | IN | Year |
@MONTH1RETURN | nvarchar(6) | IN | Month 1 Return Rate |
@MONTH2RETURN | nvarchar(6) | IN | Month 2 Return Rate |
@MONTH3RETURN | nvarchar(6) | IN | Month 3 Return Rate |
@MONTH4RETURN | nvarchar(6) | IN | Month 4 Return Rate |
@SITEID | uniqueidentifier | IN | Site |
@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_MKTPLANNEROUTLOOK]
(
@YEAR int = null,
@MONTH1RETURN nvarchar(6) = null,
@MONTH2RETURN nvarchar(6) = null,
@MONTH3RETURN nvarchar(6) = null,
@MONTH4RETURN nvarchar(6) = null,
@SITEID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@CURRENCYCODE tinyint = 1
)
as
set nocount on;
declare @RETURNTABLE table(
[PLANID] uniqueidentifier,
[PLANNAME] nvarchar(100),
[MAILINGID] uniqueidentifier,
[MAILINGNAME] nvarchar(100),
[STARTDATE] datetime,
[JAN] float,
[FEB] float,
[MAR] float,
[APR] float,
[MAY] float,
[JUN] float,
[JUL] float,
[AUG] float,
[SEP] float,
[OCT] float,
[NOV] float,
[DEC] float,
[YEAR] int,
[MAILDATE] datetime,
[CURRENCYISOCURRENCYCODE] nvarchar(6),
[CURRENCYDECIMALDIGITS] tinyint,
[CURRENCYSYMBOL] nvarchar(10),
[CURRENCYSYMBOLDISPLAYSETTINGCODE] tinyint);
if @YEAR is null
set @YEAR = datepart(yyyy, getdate());
if @MONTH1RETURN is null
set @MONTH1RETURN = '50.0';
if @MONTH2RETURN is null
set @MONTH2RETURN = '35.0';
if @MONTH3RETURN is null
set @MONTH3RETURN = '10.0';
if @MONTH4RETURN is null
set @MONTH4RETURN = '5.0';
declare @DAYSPERPERIOD int;
set @DAYSPERPERIOD = 30;
-- create base table of 10 numbers
declare @BASE table([NUM] int);
insert into @BASE
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 union all
select 9 union all
select 10;
-- use base table to make table of numbers 1-120
declare @NUMS table([NUM] int);
insert into @NUMS
select [NUM] from @BASE union all
select ([NUM] + 10) from @BASE union all
select ([NUM] + 20) from @BASE union all
select ([NUM] + 30) from @BASE union all
select ([NUM] + 40) from @BASE union all
select ([NUM] + 50) from @BASE union all
select ([NUM] + 60) from @BASE union all
select ([NUM] + 70) from @BASE union all
select ([NUM] + 80) from @BASE union all
select ([NUM] + 90) from @BASE union all
select ([NUM] + 100) from @BASE union all
select ([NUM] + 110) from @BASE;
declare REVENUECURSOR cursor local fast_forward for
select
[MPI2].[ID] as [MAILINGID],
sum(case
when [N].[NUM] <= 30 then [MPI2].[TOTALREVENUEGOAL] * cast(@MONTH1RETURN as float) / 100 / @DAYSPERPERIOD
when [N].[NUM] > 30 and [N].[NUM] <= 60 then [MPI2].[TOTALREVENUEGOAL] * cast(@MONTH2RETURN as float) / 100 / @DAYSPERPERIOD
when [N].[NUM] > 60 and [N].[NUM] <= 90 then [MPI2].[TOTALREVENUEGOAL] * cast(@MONTH3RETURN as float) / 100 / @DAYSPERPERIOD
when [N].[NUM] > 90 and [N].[NUM] <= 120 then [MPI2].[TOTALREVENUEGOAL] * cast(@MONTH4RETURN as float) / 100 / @DAYSPERPERIOD
else 0
end) as [REVENUE],
datepart(mm, dateadd(d, [N].[NUM] - 1, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE])))) as [MONTH]
from dbo.[MKTMARKETINGPLANITEM] as [MPI]
inner join @NUMS as [N] on 1 = 1
inner join dbo.[MKTMARKETINGPLAN] on [MKTMARKETINGPLAN].[ID] = [MPI].[MARKETINGPLANID]
inner join dbo.[MKTMARKETINGPLANITEM] as [MPI2] on [MPI2].[MARKETINGPLANID] = [MPI].[MARKETINGPLANID] and [MPI2].[LEVEL] = (select max([LEVEL]) from dbo.[MKTMARKETINGPLANITEMTEMPLATEITEM] as [MPITI] where [MPI2].[MARKETINGPLANID] = [MPITI].[MARKETINGPLANID])
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[MKTMARKETINGPLAN].[SITEID] or (SITEID is null and [MKTMARKETINGPLAN].[SITEID] is null)))
and [MPI].[LEVEL] = 0
and (@SITEID is null or [MKTMARKETINGPLAN].[SITEID] = @SITEID)
and datepart(yyyy, dateadd(d, [N].[NUM] - 1, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE])))) = @YEAR
and [MPI2].[TOTALREVENUEGOAL] > 0
and exists (
select
top 1 1
from dbo.[MKTMARKETINGPLANITEM] as [MPI3]
where [MPI3].[LEVEL] = (select max([LEVEL]) from dbo.[MKTMARKETINGPLANITEMTEMPLATEITEM] as [MPITI] where [MPI3].[MARKETINGPLANID] = [MPITI].[MARKETINGPLANID])
and [MPI3].[MARKETINGPLANID] = [MPI].[MARKETINGPLANID]
and (datepart(yyyy, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE]))) = @YEAR or datepart(yyyy, dateadd(d, 119, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE])))) = @YEAR))
group by [MPI].[ID], [MPI].[NAME], [MPI2].[ID], [MPI2].[NAME], (datepart(mm, dateadd(d, [N].[NUM] - 1, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE])))))
order by [MPI].[NAME], [MPI2].[NAME];
insert into @RETURNTABLE (
[PLANID],
[YEAR]
) values (
'00000000-0000-0000-0000-000000000000',
@YEAR
);
insert into @RETURNTABLE (
[PLANID],
[PLANNAME],
[MAILINGID],
[MAILINGNAME],
[STARTDATE],
[JAN], [FEB], [MAR], [APR], [MAY], [JUN], [JUL], [AUG], [SEP], [OCT], [NOV], [DEC],
[YEAR],
[MAILDATE]
)
select
[MPI].[ID] as [PLANID],
[MPI].[NAME] as [PLANNAME],
[MPI2].[ID] as [MAILINGID],
[MPI2].[NAME] as [MAILINGNAME],
dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE]) as [STARTDATE],
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@YEAR as [YEAR],
[MPI2].[MAILDATE]
from dbo.[MKTMARKETINGPLANITEM] as [MPI]
inner join dbo.[MKTMARKETINGPLAN] on [MKTMARKETINGPLAN].[ID] = [MPI].[MARKETINGPLANID]
inner join dbo.[MKTMARKETINGPLANITEM] as [MPI2] on [MPI2].[MARKETINGPLANID] = [MPI].[MARKETINGPLANID] and [MPI2].[LEVEL] = (select max([LEVEL]) from dbo.[MKTMARKETINGPLANITEMTEMPLATEITEM] as [MPITI] where [MPI2].[MARKETINGPLANID] = [MPITI].[MARKETINGPLANID])
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[MKTMARKETINGPLAN].[SITEID] or (SITEID is null and [MKTMARKETINGPLAN].[SITEID] is null)))
and [MPI].[LEVEL] = 0
and [MPI2].[TOTALREVENUEGOAL] > 0
and exists (
select
[MPI3].[ID]
from dbo.[MKTMARKETINGPLANITEM] as [MPI3]
where [MPI3].[LEVEL] = (select max([LEVEL]) from dbo.[MKTMARKETINGPLANITEMTEMPLATEITEM] as [MPITI] where [MPI3].[MARKETINGPLANID] = [MPITI].[MARKETINGPLANID])
and [MPI3].[MARKETINGPLANID] = [MPI].[MARKETINGPLANID]
and (datepart(yyyy, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE]))) = @YEAR or datepart(yyyy, dateadd(d, 119, isnull([MPI2].[MAILDATE], dbo.[UFN_DATE_EARLIESTFROMFUZZYDATE]([MPI2].[STARTDATE])))) = @YEAR))
order by [MPI].[NAME], [MPI2].[NAME];
declare @MAILINGID uniqueidentifier;
declare @REVENUE float;
declare @MONTH int;
open REVENUECURSOR;
fetch next from REVENUECURSOR into @MAILINGID, @REVENUE, @MONTH;
while (@@FETCH_STATUS = 0)
begin
if @MONTH = 1 update @RETURNTABLE set [JAN] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 2 update @RETURNTABLE set [FEB] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 3 update @RETURNTABLE set [MAR] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 4 update @RETURNTABLE set [APR] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 5 update @RETURNTABLE set [MAY] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 6 update @RETURNTABLE set [JUN] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 7 update @RETURNTABLE set [JUL] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 8 update @RETURNTABLE set [AUG] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 9 update @RETURNTABLE set [SEP] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 10 update @RETURNTABLE set [OCT] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 11 update @RETURNTABLE set [NOV] = @REVENUE where [MAILINGID] = @MAILINGID;
if @MONTH = 12 update @RETURNTABLE set [DEC] = @REVENUE where [MAILINGID] = @MAILINGID;
fetch next from REVENUECURSOR into @MAILINGID, @REVENUE, @MONTH;
end
close REVENUECURSOR;
deallocate REVENUECURSOR;
update @RETURNTABLE set
[CURRENCYISOCURRENCYCODE] = [CURRENCY].[ISO4217],
[CURRENCYDECIMALDIGITS] = [CURRENCY].[DECIMALDIGITS],
[CURRENCYSYMBOL] = [CURRENCY].[CURRENCYSYMBOL],
[CURRENCYSYMBOLDISPLAYSETTINGCODE] = [CURRENCY].[SYMBOLDISPLAYSETTINGCODE]
from @RETURNTABLE as [RETURN]
inner join dbo.[MKTMARKETINGPLANITEM] as [MPI] on [MPI].[ID] = [RETURN].[PLANID]
inner join dbo.[MKTMARKETINGPLAN] on [MKTMARKETINGPLAN].[ID] = [MPI].[MARKETINGPLANID]
inner join dbo.[CURRENCY] on [CURRENCY].[ID] = case @CURRENCYCODE when 1 then dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]() else [MKTMARKETINGPLAN].[BASECURRENCYID] end;
select * from @RETURNTABLE;
return 0;