USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONTESTSEGMENT_MULTIPLE_6
The save procedure used by the edit dataform template "Marketing Effort Multiple Test Segment Edit Form 3".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(max) | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@ASKLADDER | xml | IN | Ask ladder |
@ASKLADDERLOADED | bit | IN | Ask ladder loaded |
@PACKAGEID | uniqueidentifier | IN | Package |
@PACKAGECODE | nvarchar(10) | IN | Package code |
@PACKAGELOADED | bit | IN | Package loaded |
@RESPONSERATE | decimal(5, 2) | IN | Response rate |
@RESPONSERATELOADED | bit | IN | Response rate loaded |
@GIFTAMOUNT | money | IN | Gift amount |
@GIFTAMOUNTLOADED | bit | IN | Gift amount loaded |
@SAMPLESIZE | int | IN | Sample size |
@SAMPLESIZETYPECODE | tinyint | IN | Sample size type |
@SAMPLESIZEMETHODCODE | tinyint | IN | Sample size method |
@SAMPLESIZELOADED | bit | IN | Sample size loaded |
@TESTSEGMENTCODE | nvarchar(10) | IN | Test segment |
@TESTSEGMENTCODELOADED | bit | IN | Test segment code loaded |
@PREFIXCODE | tinyint | IN | Prepend list |
@PREFIXCODELOADED | bit | IN | |
@TESTSEGMENTCODEVALUEID | uniqueidentifier | IN | Test segment code value ID |
@PACKAGECODEVALUEID | uniqueidentifier | IN | Package code value ID |
@ITEMLIST | xml | IN | Items |
@CHANNELSOURCECODE | nvarchar(10) | IN | Channel source code |
@CHANNELSOURCECODEVALUEID | uniqueidentifier | IN | Channel code value ID |
@FRACTION | nvarchar(10) | IN | Fraction |
@OVERRIDEBUSINESSUNITSLOADED | bit | IN | Override business units loaded |
@OVERRIDEBUSINESSUNITS | bit | IN | Override business units |
@BUSINESSUNITS | xml | IN | Business units |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
Definition
Copy
CREATE procedure dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONTESTSEGMENT_MULTIPLE_6]
(
@ID nvarchar(max),
@CHANGEAGENTID uniqueidentifier = null,
@ASKLADDER xml,
@ASKLADDERLOADED bit,
@PACKAGEID uniqueidentifier,
@PACKAGECODE nvarchar(10),
@PACKAGELOADED bit,
@RESPONSERATE decimal(5,2),
@RESPONSERATELOADED bit,
@GIFTAMOUNT money,
@GIFTAMOUNTLOADED bit,
@SAMPLESIZE int,
@SAMPLESIZETYPECODE tinyint,
@SAMPLESIZEMETHODCODE tinyint,
@SAMPLESIZELOADED bit,
@TESTSEGMENTCODE nvarchar(10),
@TESTSEGMENTCODELOADED bit,
@PREFIXCODE tinyint,
@PREFIXCODELOADED bit,
@TESTSEGMENTCODEVALUEID uniqueidentifier,
@PACKAGECODEVALUEID uniqueidentifier,
@ITEMLIST xml,
@CHANNELSOURCECODE nvarchar(10),
@CHANNELSOURCECODEVALUEID uniqueidentifier,
@FRACTION nvarchar(10),
@OVERRIDEBUSINESSUNITSLOADED bit,
@OVERRIDEBUSINESSUNITS bit,
@BUSINESSUNITS xml,
@CURRENTAPPUSERID uniqueidentifier
)
as
set nocount on;
declare @SEGMENTATIONTESTSEGMENTS table([ID] uniqueidentifier);
declare @START int;
declare @POS int;
declare @TESTSEGMENTID uniqueidentifier;
declare @SEGMENTATIONID uniqueidentifier;
declare @PARENTSEGMENTID uniqueidentifier;
declare @OLDSEGMENTATIONPACKAGEID uniqueidentifier;
declare @OLDPACKAGEID uniqueidentifier;
declare @OLDSAMPLESIZE int;
declare @OLDSAMPLESIZETYPECODE tinyint;
declare @OLDSAMPLESIZEMETHODCODE tinyint;
declare @OLDFRACTION nvarchar(10);
declare @OLDASKLADDERID uniqueidentifier;
declare @CURRENTDATE datetime;
declare @SEGMENTTYPECODE tinyint;
declare @ASKLADDERID uniqueidentifier;
declare @SEGMENTEDHOUSEFILEEXISTS bit;
begin try
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @CURRENTDATE = GetDate();
/* Parse out the multiple test segment IDs */
set @START = 0;
select @POS = charindex(',', @ID, @START)
while (@POS <> 0)
begin
insert into @SEGMENTATIONTESTSEGMENTS
select substring(@ID, @START, @POS - @START);
set @START = @POS + 1;
select @POS = charindex(',', @ID, @START);
end;
if len(@ID) > 0
insert into @SEGMENTATIONTESTSEGMENTS
select substring(@ID, @START, 37);
declare TESTSEGMENTCURSOR cursor local fast_forward for
select [ID] from @SEGMENTATIONTESTSEGMENTS;
open TESTSEGMENTCURSOR;
fetch next from TESTSEGMENTCURSOR into @TESTSEGMENTID;
while (@@FETCH_STATUS = 0)
begin
select
@SEGMENTATIONID = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
@PACKAGELOADED = (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 1 then 0 else @PACKAGELOADED end),
@SEGMENTTYPECODE = [MKTSEGMENT].[SEGMENTTYPECODE],
@SEGMENTEDHOUSEFILEEXISTS = dbo.[UFN_MKTCONSTITUENTFILEIMPORT_IMPORTTABLEEXISTS]([MKTSEGMENTATION].[ID])
from dbo.[MKTSEGMENTATIONTESTSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @TESTSEGMENTID;
/* Check if the mailing is currently being activated */
exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;
--If the mailing is using a segmented house file, then do not allow the user to change the sample size...
if @SEGMENTEDHOUSEFILEEXISTS = 1
set @SAMPLESIZELOADED = 0;
/* Grab the old packageID info before we save the test segment */
if @PACKAGELOADED = 1 or @SAMPLESIZELOADED = 1 or @ASKLADDERLOADED = 1
select
@PARENTSEGMENTID = [TESTSEG].[SEGMENTID],
@OLDSEGMENTATIONPACKAGEID = (select [PAK].[ID] from dbo.[MKTSEGMENTATIONPACKAGE] as [PAK] where [PAK].[SEGMENTATIONID] = [SEG].[SEGMENTATIONID] and [PAK].[PACKAGEID] = [TESTSEG].[PACKAGEID]),
@OLDPACKAGEID = [TESTSEG].[PACKAGEID],
@OLDSAMPLESIZE = [TESTSEG].[SAMPLESIZE],
@OLDSAMPLESIZETYPECODE = [TESTSEG].[SAMPLESIZETYPECODE],
@OLDSAMPLESIZEMETHODCODE = [TESTSEG].[SAMPLESIZEMETHODCODE],
@OLDFRACTION = [TESTSEG].[FRACTION],
@OLDASKLADDERID = [TESTSEG].[ASKLADDERID]
from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [TESTSEG]
inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SEG] on [SEG].[ID] = [TESTSEG].[SEGMENTID]
where [TESTSEG].[ID] = @TESTSEGMENTID;
if @ASKLADDERLOADED = 1
select
@ASKLADDERID = T.c.value('(ASKLADDERID)[1]','uniqueidentifier')
from @ASKLADDER.nodes('/ASKLADDER/ITEM') T(c);
/* Save the test segment */
update dbo.[MKTSEGMENTATIONTESTSEGMENT] set
[ASKLADDERID] = (case when @ASKLADDERLOADED = 1 then @ASKLADDERID else [ASKLADDERID] end),
[TESTSEGMENTCODE] = (case when @TESTSEGMENTCODELOADED = 1 then @TESTSEGMENTCODE else [TESTSEGMENTCODE] end),
[TESTPARTDEFINITIONVALUESID] = (case when @TESTSEGMENTCODELOADED = 1 then @TESTSEGMENTCODEVALUEID else [TESTPARTDEFINITIONVALUESID] end),
[PACKAGEID] = (case when @PACKAGELOADED = 1 then @PACKAGEID else [PACKAGEID] end),
[RESPONSERATE] = (case when @RESPONSERATELOADED = 1 then @RESPONSERATE else [RESPONSERATE] end),
[GIFTAMOUNT] = (case when @GIFTAMOUNTLOADED = 1 then @GIFTAMOUNT else [GIFTAMOUNT] end),
[SAMPLESIZE] = (case when @SAMPLESIZELOADED = 1 then @SAMPLESIZE else [SAMPLESIZE] end),
[SAMPLESIZETYPECODE] = (case when @SAMPLESIZELOADED = 1 then @SAMPLESIZETYPECODE else [SAMPLESIZETYPECODE] end),
[SAMPLESIZEMETHODCODE] = (case when @SAMPLESIZELOADED = 1 then @SAMPLESIZEMETHODCODE else [SAMPLESIZEMETHODCODE] end),
[PREFIXCODE] = (case when @PREFIXCODELOADED = 1 then @PREFIXCODE else [PREFIXCODE] end),
[FRACTION] = (case when @SAMPLESIZELOADED = 1 then case when @SAMPLESIZETYPECODE = 2 then @FRACTION else '' end else [FRACTION] end),
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @TESTSEGMENTID;
if @PACKAGELOADED = 1
begin
/* Save and update the package for the segment */
if @OLDPACKAGEID <> @PACKAGEID
begin
/* Remove the old package, only if is not being used by any other segments and test segments */
if not exists(select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @OLDPACKAGEID) and
not exists(select [MKTSEGMENTATIONTESTSEGMENT].[ID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID and [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = @OLDPACKAGEID)
exec dbo.[USP_MKTSEGMENTATIONPACKAGE_DELETE] @OLDSEGMENTATIONPACKAGEID, @CHANGEAGENTID;
/* Add the new package, only if it doesn't exist already */
if not exists(select [ID] from dbo.[MKTSEGMENTATIONPACKAGE] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @PACKAGEID)
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONPACKAGE] null, @CHANGEAGENTID, @SEGMENTATIONID, @PACKAGEID;
end
/* Update the package with the selected code */
exec dbo.[USP_MKTPACKAGE_UPDATECODE] @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @CHANGEAGENTID, @CURRENTAPPUSERID;
end
if (@SAMPLESIZELOADED = 1 and (@OLDSAMPLESIZE <> @SAMPLESIZE or @OLDSAMPLESIZETYPECODE <> @SAMPLESIZETYPECODE or @OLDSAMPLESIZEMETHODCODE <> @SAMPLESIZEMETHODCODE or @OLDFRACTION <> @FRACTION)) or
(@ASKLADDERLOADED = 1 and ((@OLDASKLADDERID is null and @ASKLADDERID is not null) or (@OLDASKLADDERID is not null and @ASKLADDERID is null) or (@OLDASKLADDERID <> @ASKLADDERID)))
-- clear the cached information for the parent segment to force mailing data recalculation
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @PARENTSEGMENTID, 0, 1;
/* insert new ids into item list for each test segment */
if @ITEMLIST is not null
begin
declare @ITEMLISTTABLE table
(
[CODE] nvarchar(50),
[ID] uniqueidentifier,
[PARTDEFINITIONVALUESID] uniqueidentifier,
[SEGMENTATIONID] uniqueidentifier,
[SOURCECODEITEMID] uniqueidentifier
);
/* insert unique MKTSOURCECODEPART ID for each value in the itemlist */
insert into @ITEMLISTTABLE
select
[CODE],
newid(),
[PARTDEFINITIONVALUESID],
[SEGMENTATIONID],
[SOURCECODEITEMID]
from dbo.[UFN_MKTSOURCECODEPART_SEGMENTATIONSEGMENT_GETITEMLIST_FROMITEMLISTXML](@ITEMLIST);
set @ITEMLIST = (select
[ID],
[SOURCECODEITEMID],
[PARTDEFINITIONVALUESID],
[CODE],
[SEGMENTATIONID]
from @ITEMLISTTABLE
for xml raw('ITEM'), type, elements, root('ITEMLIST'), binary base64);
delete from @ITEMLISTTABLE;
end
/* Save the source code information */
exec dbo.[USP_MKTSOURCECODEPART_SEGMENTATIONTESTSEGMENT_GETITEMLIST_UPDATEFROMXML] @TESTSEGMENTID, @ITEMLIST, @CHANGEAGENTID, @CURRENTDATE;
/* Save the business units information */
if @SEGMENTTYPECODE in (1, 2) and @OVERRIDEBUSINESSUNITSLOADED = 1
begin
update dbo.[MKTSEGMENTATIONTESTSEGMENT] set
[OVERRIDEBUSINESSUNITS] = @OVERRIDEBUSINESSUNITS,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @TESTSEGMENTID
exec dbo.[USP_MKTSEGMENTATIONTESTSEGMENTBUSINESSUNIT_GETBUSINESSUNITS_UPDATEFROMXML] @TESTSEGMENTID, @BUSINESSUNITS, @CHANGEAGENTID;
end
fetch next from TESTSEGMENTCURSOR into @TESTSEGMENTID;
end;
close TESTSEGMENTCURSOR;
deallocate TESTSEGMENTCURSOR;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;