USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_MULTIPLE_3
The save procedure used by the edit dataform template "Marketing Effort Multiple 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 |
@TESTSEGMENTCODE | nvarchar(10) | IN | Test segment |
@TESTSEGMENTCODELOADED | bit | IN | Test segment code 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 |
@SAMPLESIZEEXCLUDEREMAINDER | bit | IN | Exclude remaining records from the marketing effort |
@SAMPLESIZELOADED | bit | IN | Sample size loaded |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_MULTIPLE_3
(
@ID nvarchar(max),
@CHANGEAGENTID uniqueidentifier = null,
@ASKLADDER xml,
@ASKLADDERLOADED bit,
@TESTSEGMENTCODE nvarchar(10),
@TESTSEGMENTCODELOADED bit,
@PACKAGEID uniqueidentifier,
@PACKAGECODE nvarchar(10),
@PACKAGELOADED bit,
@RESPONSERATE decimal(5,2),
@RESPONSERATELOADED bit,
@GIFTAMOUNT money,
@GIFTAMOUNTLOADED bit,
@SAMPLESIZE int,
@SAMPLESIZETYPECODE tinyint,
@SAMPLESIZEMETHODCODE tinyint,
@SAMPLESIZEEXCLUDEREMAINDER bit,
@SAMPLESIZELOADED bit
)
as
set nocount on;
declare @SEGMENTSTABLE table([ID] uniqueidentifier);
declare @START int;
declare @POS int;
declare @SEGMENTID uniqueidentifier;
declare @SEGMENTATIONID uniqueidentifier;
declare @PACKAGECHANNELCODE tinyint;
declare @OLDSEGMENTATIONPACKAGEID uniqueidentifier;
declare @OLDPACKAGEID uniqueidentifier;
declare @OLDPACKAGECHANNELCODE tinyint;
declare @OLDSAMPLESIZE int;
declare @OLDSAMPLESIZETYPECODE tinyint;
declare @OLDSAMPLESIZEMETHODCODE tinyint;
declare @OLDSAMPLESIZEEXCLUDEREMAINDER bit;
declare @CURRENTDATE datetime;
declare @USEADDRESSPROCESSING bit;
declare @ADDRESSPROCESSINGOPTIONID uniqueidentifier;
declare @SEQUENCE integer;
begin try
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @CURRENTDATE = GetDate();
/* Parse out the multiple segment IDs */
set @START = 0;
select @POS = charindex(',', @ID, @START)
while (@POS <> 0)
begin
insert into @SEGMENTSTABLE
select substring(@ID, @START, @POS - @START);
set @START = @POS + 1;
select @POS = charindex(',', @ID, @START);
end;
if len(@ID) > 0
insert into @SEGMENTSTABLE
select substring(@ID, @START, 37);
if @SAMPLESIZELOADED = 1 and @SAMPLESIZETYPECODE = 0 and @SAMPLESIZE = 100
set @SAMPLESIZEEXCLUDEREMAINDER = 1;
declare SEGMENTCURSOR cursor local fast_forward for
select [SEG].[ID], [MKTSEGMENTATIONSEGMENT].[SEQUENCE]
from @SEGMENTSTABLE as [SEG]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [SEG].[ID]
order by [MKTSEGMENTATIONSEGMENT].[SEQUENCE] desc;
open SEGMENTCURSOR;
fetch next from SEGMENTCURSOR into @SEGMENTID, @SEQUENCE;
while (@@FETCH_STATUS = 0)
begin
select
@SEGMENTATIONID = [MKTSEGMENTATION].[ID],
@PACKAGELOADED = (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 1 then 0 else @PACKAGELOADED end),
@SAMPLESIZELOADED = (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 1 then 0 else @SAMPLESIZELOADED end),
@USEADDRESSPROCESSING = [MKTSEGMENTATION].[USEADDRESSPROCESSING],
@ADDRESSPROCESSINGOPTIONID = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONID]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
/* Check if the mailing is currently being activated */
exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;
/* Grab the old packageID info before we save the segment */
if @PACKAGELOADED = 1
select
@OLDSEGMENTATIONPACKAGEID = (select [PAK].[ID] from dbo.[MKTSEGMENTATIONPACKAGE] as [PAK] where [PAK].[SEGMENTATIONID] = [SEG].[SEGMENTATIONID] and [PAK].[PACKAGEID] = [SEG].[PACKAGEID]),
@OLDPACKAGEID = [SEG].[PACKAGEID],
@OLDPACKAGECHANNELCODE = [MKTPACKAGE].[CHANNELCODE]
from dbo.[MKTSEGMENTATIONSEGMENT] as [SEG]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [SEG].[PACKAGEID]
where [SEG].[ID] = @SEGMENTID;
if @SAMPLESIZELOADED = 1
select
@OLDSAMPLESIZE = [SAMPLESIZE],
@OLDSAMPLESIZETYPECODE = [SAMPLESIZETYPECODE],
@OLDSAMPLESIZEMETHODCODE = [SAMPLESIZEMETHODCODE],
@OLDSAMPLESIZEEXCLUDEREMAINDER = [SAMPLESIZEEXCLUDEREMAINDER]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [ID] = @SEGMENTID;
/* Save the segment */
update dbo.[MKTSEGMENTATIONSEGMENT] set
[ASKLADDERID] = (case when @ASKLADDERLOADED = 1 then (select T.c.value('(ASKLADDERID)[1]','uniqueidentifier') AS 'ASKLADDERID' from @ASKLADDER.nodes('/ASKLADDER/ITEM') T(c)) else [ASKLADDERID] end),
[TESTSEGMENTCODE] = (case when @TESTSEGMENTCODELOADED = 1 then @TESTSEGMENTCODE else [TESTSEGMENTCODE] 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),
[SAMPLESIZEEXCLUDEREMAINDER] = (case when @SAMPLESIZELOADED = 1 then @SAMPLESIZEEXCLUDEREMAINDER else [SAMPLESIZEEXCLUDEREMAINDER] end),
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @SEGMENTID;
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;
select @PACKAGECHANNELCODE = [CHANNELCODE] from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID;
if @OLDPACKAGECHANNELCODE <> @PACKAGECHANNELCODE and @USEADDRESSPROCESSING = 1 and @ADDRESSPROCESSINGOPTIONID is not null
/* clear the cache for this segment and all segments after it,
since the package's channel can affect record counts when address processing is used */
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @SEGMENTID, 0, 1;
end
/* Update the package with the selected code */
declare @OLDCODE nvarchar(10);
select
@OLDCODE = coalesce([CODE], '')
from dbo.[MKTPACKAGE]
where [ID] = @PACKAGEID;
if @OLDCODE <> @PACKAGECODE
update dbo.[MKTPACKAGE] set
[CODE] = @PACKAGECODE,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @PACKAGEID;
end
if @SAMPLESIZELOADED = 1
begin
/* Clear the segment cache only if the sample size settings changed */
if @OLDSAMPLESIZEEXCLUDEREMAINDER <> @SAMPLESIZEEXCLUDEREMAINDER or (@SAMPLESIZEEXCLUDEREMAINDER = 0 and (@OLDSAMPLESIZE <> @SAMPLESIZE or @OLDSAMPLESIZETYPECODE <> @SAMPLESIZETYPECODE or @OLDSAMPLESIZEMETHODCODE <> @SAMPLESIZEMETHODCODE))
/* Clear the cache for this segment and all segments after it */
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @SEGMENTID, 0, 1;
end
fetch next from SEGMENTCURSOR into @SEGMENTID, @SEQUENCE;
end;
close SEGMENTCURSOR;
deallocate SEGMENTCURSOR;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;