USP_DATAFORMTEMPLATE_EDIT_MKTCOMMUNICATIONEFFORT
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@EFFORTCOMMUNICATIONTEMPLATEID | uniqueidentifier | IN | |
@EFFORTNAME | nvarchar(100) | IN | |
@COMMUNICATIONNAMESCHEMEID | uniqueidentifier | IN | |
@EFFORTNAMESCHEMETEXT | xml | IN | |
@EFFORTDESCRIPTION | nvarchar(255) | IN | |
@APPEALINFORMATION | xml | IN | |
@EFFORTCHANNELCODE | tinyint | IN | |
@EFFORTSITEID | uniqueidentifier | IN | |
@EFFORTDUEDATE | datetime | IN | |
@EFFORTLAUNCHDATE | datetime | IN | |
@EFFORTALLOWRESERVINGFINDERNUMBERS | bit | IN | |
@EFFORTALLOWSPECIFYBUDGET | bit | IN | |
@EFFORTALLOWEXCLUDEPREVIOUSEFFORTS | bit | IN | |
@EFFORTBASECURRENCYID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MKTCOMMUNICATIONEFFORT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@EFFORTCOMMUNICATIONTEMPLATEID uniqueidentifier,
@EFFORTNAME nvarchar(100),
@COMMUNICATIONNAMESCHEMEID uniqueidentifier,
@EFFORTNAMESCHEMETEXT xml,
@EFFORTDESCRIPTION nvarchar(255),
@APPEALINFORMATION xml,
@EFFORTCHANNELCODE tinyint,
@EFFORTSITEID uniqueidentifier,
@EFFORTDUEDATE datetime,
@EFFORTLAUNCHDATE datetime,
@EFFORTALLOWRESERVINGFINDERNUMBERS bit,
@EFFORTALLOWSPECIFYBUDGET bit,
@EFFORTALLOWEXCLUDEPREVIOUSEFFORTS bit,
@EFFORTBASECURRENCYID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
declare @COUNTERVALUE nvarchar(10);
declare @ISBBEC bit;
declare @OLDEFFORTNAME nvarchar(100);
declare @TMPEFFORTNAME nvarchar(max) = '';
declare @CURRENTDATE datetime = getdate();
declare @ACTIVE bit = 0;
declare @OLDEFFORTALLOWSPECIFYBUDGET bit;
declare @OLDEFFORTALLOWRESERVINGFINDERNUMBERS bit;
declare @OLDEFFORTALLOWEXCLUDEPREVIOUSEFFORTS bit;
declare @MKTSEGMENTATIONFINDERNUMBERID uniqueidentifier;
declare @MKTSEGMENTATIONFILTERSEGMENTATIONID uniqueidentifier;
declare @COUNTER int = 0;
begin try
/* throw error if current added package channel conflicts with effort channel */
if @EFFORTCHANNELCODE <> 255 -- not multi-channel
begin
if exists(select *
from dbo.[MKTSEGMENTATIONSEGMENT]
left join [MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join [MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID] or [MKTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
where
[MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @ID
and [MKTPACKAGE].[CHANNELCODE] <> @EFFORTCHANNELCODE)
begin
raiserror('ERR_COMMUNICATIONEFFORT_CHANNELCODEMISMATCH', 13, 1);
end
end
select
@OLDEFFORTNAME = [MKTSEGMENTATION].[NAME],
@OLDEFFORTALLOWSPECIFYBUDGET = [MKTSEGMENTATION].[ALLOWSPECIFYBUDGET],
@OLDEFFORTALLOWRESERVINGFINDERNUMBERS = [MKTSEGMENTATION].[ALLOWRESERVINGFINDERNUMBERS],
@OLDEFFORTALLOWEXCLUDEPREVIOUSEFFORTS = [MKTSEGMENTATION].[ALLOWEXCLUDEPREVIOUSEFFORTS],
@ACTIVE = [MKTSEGMENTATION].[ACTIVE]
from dbo.[MKTSEGMENTATION]
where [MKTSEGMENTATION].[ID] = @ID;
select
@EFFORTDESCRIPTION = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[DESCRIPTIONLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[DESCRIPTION] else @EFFORTDESCRIPTION end),
@EFFORTCHANNELCODE = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[CHANNELCODELOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[CHANNELCODE] else @EFFORTCHANNELCODE end),
@EFFORTALLOWRESERVINGFINDERNUMBERS = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWRESERVINGFINDERNUMBERSLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWRESERVINGFINDERNUMBERS] else @EFFORTALLOWRESERVINGFINDERNUMBERS end),
@EFFORTALLOWSPECIFYBUDGET = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWSPECIFYBUDGETLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWSPECIFYBUDGET] else @EFFORTALLOWSPECIFYBUDGET end),
@EFFORTALLOWEXCLUDEPREVIOUSEFFORTS = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWEXCLUDEPREVIOUSEFFORTSLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWEXCLUDEPREVIOUSEFFORTS] else @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS end),
@APPEALINFORMATION = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[APPEALLOCKED] = 1 then (
select
[MKTAPPEALRECORDSOURCE].[ID] as [RECORDSOURCEID],
[QUERYVIEWCATALOG].[DISPLAYNAME] as [RECORDSOURCENAME],
[MKTAPPEALRECORDSOURCE].[SEARCHLISTCATALOGID] as [SEARCHLISTCATALOGID],
[MKTAPPEALRECORDSOURCE].[DESCRIPTIONFIELD] as [SEARCHLISTDESCRIPTIONFIELD],
[MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALSYSTEMID] as [APPEALSYSTEMID],
(case when @ISBBEC = 1 and [MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALSYSTEMID] <> '' and dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([MKTAPPEALRECORDSOURCE].[ID]) = 1 then
(select [APPEAL].[NAME] from dbo.[APPEAL] where [APPEAL].[ID] = cast([MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALSYSTEMID] as uniqueidentifier))
else
[MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALID]
end) as [APPEALID],
(case when @ISBBEC = 1 and [MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALSYSTEMID] <> '' and dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([MKTAPPEALRECORDSOURCE].[ID]) = 1 then
(select [APPEAL].[DESCRIPTION] from dbo.[APPEAL] where [APPEAL].[ID] = cast([MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALSYSTEMID] as uniqueidentifier))
else
[MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[APPEALDESCRIPTION]
end) as [APPEALDESCRIPTION]
from dbo.[MKTAPPEALRECORDSOURCE]
inner join [QUERYVIEWCATALOG] on [MKTAPPEALRECORDSOURCE].[ID] = [QUERYVIEWCATALOG].[ID]
left join [MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL] on [MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[RECORDSOURCEID] = [MKTAPPEALRECORDSOURCE].[ID]
and [MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL].[COMMUNICATIONTEMPLATEID] = @EFFORTCOMMUNICATIONTEMPLATEID
where (dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([QUERYVIEWCATALOG].[ID]) = 1)
for xml raw('ITEM'), type, elements, root('APPEALINFORMATION'), binary base64)
else @APPEALINFORMATION end)
from dbo.[MKTCOMMUNICATIONTEMPLATEDEFAULT]
where [MKTCOMMUNICATIONTEMPLATEDEFAULT].[COMMUNICATIONTEMPLATEID] = @EFFORTCOMMUNICATIONTEMPLATEID;
--get the name from the name pattern
if @COMMUNICATIONNAMESCHEMEID is not null
begin
--build the effort name to check if it is longer than 100
set @TMPEFFORTNAME = dbo.[UFN_MKTCOMMUNICATIONEFFORT_GETNAMEFROMNAMESCHEMETEXT](@EFFORTNAMESCHEMETEXT, NULL);
if len(@TMPEFFORTNAME) > 100
raiserror('ERR_COMMUNICATIONEFFORT_NAMESCHEMETEXTTOOLONG', 13, 1);
else
set @EFFORTNAME = @TMPEFFORTNAME;
--determine if we have a special counter at the end
if (len(@OLDEFFORTNAME) > len(@EFFORTNAME)) and (charindex(@EFFORTNAME + ' (', @OLDEFFORTNAME) = 1)
begin
declare @NAMESUFFIX nvarchar(100) = substring(@OLDEFFORTNAME, len(@EFFORTNAME) + 1, 100);
set @EFFORTNAME = @EFFORTNAME + @NAMESUFFIX;
end
end
if @EFFORTNAME <> @OLDEFFORTNAME
begin
--build the name based on name pattern or supplied text
exec dbo.[USP_MKTCOMMUNICATIONEFFORT_GETUNIQUENAME]
@COMMUNICATIONNAMESCHEMEID = @COMMUNICATIONNAMESCHEMEID,
@EFFORTNAMESCHEMETEXT = @EFFORTNAMESCHEMETEXT,
@EFFORTNAME = @EFFORTNAME output,
@COUNTERVALUE = @COUNTERVALUE output,
@COUNTER = @COUNTER output,
@SEGMENTATIONID = @ID;
if @COMMUNICATIONNAMESCHEMEID is not null
begin
--update part values
update dbo.[MKTCOMMUNICATIONNAMESCHEMEPART]
set
[MKTCOMMUNICATIONNAMESCHEMEPART].[COMMUNICATIONEFFORTVALUE] = case when [MKTCOMMUNICATIONNAMESCHEMEPART].[NAMEPARTTYPECODE] = 8 then @COUNTERVALUE
else [NAMEPARTS].[FREEFORMPART] end
from dbo.[MKTCOMMUNICATIONNAMESCHEMEPART]
inner join
(select
T.c.value('(@FREEFORMPART)[1]', 'nvarchar(100)') as [FREEFORMPART],
T.c.value('(@SEQUENCE)[1]', 'int') as [SEQUENCE],
@COMMUNICATIONNAMESCHEMEID [ID],
T.c.value('(@NAMEPARTTYPECODE)[1]', 'tinyint') as [NAMEPARTTYPECODE]
from @EFFORTNAMESCHEMETEXT.nodes('/EFFORTNAMESCHEMETEXT/ITEM') T(c)
) [NAMEPARTS] on [NAMEPARTS].[ID] = [MKTCOMMUNICATIONNAMESCHEMEPART].[MKTCOMMUNICATIONNAMESCHEMEID]
where
[MKTCOMMUNICATIONNAMESCHEMEPART].[SEQUENCE] = [NAMEPARTS].[SEQUENCE]
and [MKTCOMMUNICATIONNAMESCHEMEPART].[NAMEPARTTYPECODE] in (8, 10);
end
end
update
dbo.[MKTSEGMENTATION]
set
[MKTSEGMENTATION].[NAME] = @EFFORTNAME,
[MKTSEGMENTATION].[DESCRIPTION] = @EFFORTDESCRIPTION,
[MKTSEGMENTATION].[CHANNELCODE] = @EFFORTCHANNELCODE,
[MKTSEGMENTATION].[SITEID] = @EFFORTSITEID,
[MKTSEGMENTATION].[DUEDATE] = @EFFORTDUEDATE,
[MKTSEGMENTATION].[MAILDATE] = @EFFORTLAUNCHDATE,
[MKTSEGMENTATION].[ALLOWRESERVINGFINDERNUMBERS] = @EFFORTALLOWRESERVINGFINDERNUMBERS,
[MKTSEGMENTATION].[ALLOWSPECIFYBUDGET] = @EFFORTALLOWSPECIFYBUDGET,
[MKTSEGMENTATION].[ALLOWEXCLUDEPREVIOUSEFFORTS] = @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS,
[MKTSEGMENTATION].[CHANGEDBYID] = @CHANGEAGENTID,
[MKTSEGMENTATION].[DATECHANGED] = @CURRENTDATE
where
[MKTSEGMENTATION].[ID] = @ID;
if @EFFORTNAME <> @OLDEFFORTNAME
begin
--update the name on the plan item the mailings is from
update dbo.[MKTMARKETINGPLANITEM] set
[MKTMARKETINGPLANITEM].[NAME] = @EFFORTNAME,
[MKTMARKETINGPLANITEM].[CHANGEDBYID] = @CHANGEAGENTID,
[MKTMARKETINGPLANITEM].[DATECHANGED] = @CURRENTDATE
from [MKTSEGMENTATION]
where [MKTSEGMENTATION].[ID] = @ID
and [MKTMARKETINGPLANITEM].[ID] = [MKTSEGMENTATION].[MARKETINGPLANITEMID];
-- update the name of any gift ID set associated with this mailing to reflect its name
update dbo.[IDSETREGISTER] set
[IDSETREGISTER].[NAME] = @EFFORTNAME + substring([IDSETREGISTER].[NAME], len(@OLDEFFORTNAME) + 1, 300),
[IDSETREGISTER].[CHANGEDBYID] = @CHANGEAGENTID,
[IDSETREGISTER].[DATECHANGED] = @CURRENTDATE
where [IDSETREGISTER].[ID] in (
select [NORMALGIFTIDSETREGISTERID] from dbo.[MKTSEGMENTATIONACTIVATE] where [SEGMENTATIONID] = @ID and [NORMALGIFTIDSETREGISTERID] is not null
union all
select [UNRESOLVEDGIFTIDSETREGISTERID] from dbo.[MKTSEGMENTATIONACTIVATE] where [SEGMENTATIONID] = @ID and [UNRESOLVEDGIFTIDSETREGISTERID] is not null
)
and [IDSETREGISTER].[NAME] like (replace(replace(replace(@OLDEFFORTNAME, '\', '\\'), '_', '\_'), '%', '\%') + ' (%)') escape '\';
-- update the name of any KPIs associated with this marketing effort to reflect its name
update dbo.[KPIINSTANCE] set
[KPIINSTANCE].[NAME] = @EFFORTNAME + substring([KPIINSTANCE].[NAME], len(@OLDEFFORTNAME) + 1, 255),
[KPIINSTANCE].[CHANGEDBYID] = @CHANGEAGENTID,
[KPIINSTANCE].[DATECHANGED] = @CURRENTDATE
where [KPIINSTANCE].[ID] in (
select [KPIINSTANCE].[ID]
from dbo.[MKTSEGMENTATIONACTIVATEKPI]
inner join dbo.[KPIINSTANCE] on [KPIINSTANCE].[KPICATALOGID] = [MKTSEGMENTATIONACTIVATEKPI].[KPICATALOGID]
where [MKTSEGMENTATIONACTIVATEKPI].[SEGMENTATIONID] = @ID
and [KPIINSTANCE].[CONTEXTRECORDID] = cast([MKTSEGMENTATIONACTIVATEKPI].[SEGMENTATIONID] as nvarchar(36))
and [KPIINSTANCE].[NAME] like (replace(replace(replace(@OLDEFFORTNAME, '\', '\\'), '_', '\_'), '%', '\%') + ' - %') escape '\'
);
end
exec dbo.[USP_MKTSEGMENTATIONACTIVATE_SAVEFIELD_FROMXML]
@ID,
@APPEALINFORMATION,
@CHANGEAGENTID;
if @ACTIVE = 0
begin
--check if we need to clear out additional options
--user entered budget values
if @OLDEFFORTALLOWSPECIFYBUDGET = 1 and @EFFORTALLOWSPECIFYBUDGET = 0
begin
exec dbo.[USP_MKTSEGMENTATIONBUDGET_UPDATE] @ID, @CHANGEAGENTID, 0, 0;
end
--reserved finder numbers
if @OLDEFFORTALLOWRESERVINGFINDERNUMBERS = 1 and @EFFORTALLOWRESERVINGFINDERNUMBERS = 0
begin
declare DELETERESERVEDFINDERNUMBERCURSOR cursor local fast_forward for
select [MKTSEGMENTATIONFINDERNUMBER].[ID]
from dbo.[MKTSEGMENTATIONFINDERNUMBER]
where [MKTSEGMENTATIONFINDERNUMBER].[SEGMENTATIONID] = @ID;
open DELETERESERVEDFINDERNUMBERCURSOR;
fetch next from DELETERESERVEDFINDERNUMBERCURSOR into @MKTSEGMENTATIONFINDERNUMBERID;
while (@@FETCH_STATUS = 0)
begin
exec dbo.[USP_MKTSEGMENTATIONFINDERNUMBER_DELETE] @MKTSEGMENTATIONFINDERNUMBERID, @CHANGEAGENTID;
fetch next from DELETERESERVEDFINDERNUMBERCURSOR into @MKTSEGMENTATIONFINDERNUMBERID;
end
close DELETERESERVEDFINDERNUMBERCURSOR;
deallocate DELETERESERVEDFINDERNUMBERCURSOR;
end
--previous effort exclusions
if @OLDEFFORTALLOWEXCLUDEPREVIOUSEFFORTS = 1 and @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS = 0
begin
declare DELETEEFFORTEXCLUSIONSCURSOR cursor local fast_forward for
select [MKTSEGMENTATIONFILTERSEGMENTATION].[ID]
from dbo.[MKTSEGMENTATIONFILTERSEGMENTATION]
where [MKTSEGMENTATIONFILTERSEGMENTATION].[SEGMENTATIONID] = @ID;
open DELETEEFFORTEXCLUSIONSCURSOR;
fetch next from DELETEEFFORTEXCLUSIONSCURSOR into @MKTSEGMENTATIONFILTERSEGMENTATIONID;
while (@@FETCH_STATUS = 0)
begin
exec dbo.[USP_MKTSEGMENTATIONFILTERSEGMENTATION_DELETE] @MKTSEGMENTATIONFILTERSEGMENTATIONID, @CHANGEAGENTID;
fetch next from DELETEEFFORTEXCLUSIONSCURSOR into @MKTSEGMENTATIONFILTERSEGMENTATIONID;
end
close DELETEEFFORTEXCLUSIONSCURSOR;
deallocate DELETEEFFORTEXCLUSIONSCURSOR;
end
end
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;