USP_MKTSEGMENTATIONSEGMENT_COPYSEGMENTSFROMEFFORT

Parameters

Parameter Parameter Type Mode Description
@TARGETSEGMENTATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@SOURCESEGMENTATIONID uniqueidentifier IN

Definition

Copy


create procedure dbo.[USP_MKTSEGMENTATIONSEGMENT_COPYSEGMENTSFROMEFFORT]
(
  @TARGETSEGMENTATIONID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier,
  @SOURCESEGMENTATIONID uniqueidentifier
)
as
begin

  set nocount on;

  if @CHANGEAGENTID is null
    exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

  /********************************/
  /* Copy the segments via cursor */
  /********************************/
  declare @SOURCESEGMENTID uniqueidentifier;
  declare @TARGETSEGMENTID uniqueidentifier;
  declare @TARGETTESTSEGMENTID uniqueidentifier;
  declare @SEGMENTID uniqueidentifier;
  declare @EXCLUDE bit;
  declare @SEGMENTTYPECODE tinyint;
  declare @OVERRIDEQUANTITIESANDORSEGMENTCOSTS bit;
  declare @OVERRIDELISTCOSTS bit;
  declare @BASERENTALCOST money;
  declare @BASERENTALCOSTBASISCODE tinyint;
  declare @RENTALQUANTITY integer
  declare @RENTALCOSTADJUSTMENT money;
  declare @RENTALCOSTADJUSTMENTBASISCODE tinyint;
  declare @BASEEXCHANGECOST money;
  declare @BASEEXCHANGECOSTBASISCODE tinyint;
  declare @EXCHANGEQUANTITY integer;
  declare @EXCHANGECOSTADJUSTMENT money;
  declare @EXCHANGECOSTADJUSTMENTBASISCODE tinyint;
  declare @PACKAGEID uniqueidentifier;
  declare @PACKAGECODE nvarchar(10);
  declare @PACKAGECODEVALUEID uniqueidentifier;
  declare @CHANNELSOURCECODE nvarchar(10);
  declare @CHANNELSOURCECODEVALUEID uniqueidentifier;
  declare @RESPONSERATE decimal(5, 2);
  declare @GIFTAMOUNT money;
  declare @SAMPLESIZE int;
  declare @SAMPLESIZETYPECODE tinyint;
  declare @SAMPLESIZEMETHODCODE tinyint;
  declare @SAMPLESIZEEXCLUDEREMAINDER bit;
  declare @ASKLADDERID uniqueidentifier;
  declare @USAGECODE tinyint;
  declare @SEQUENCE int;
  declare @TESTSEGMENTCODE nvarchar(10);
  declare @TESTSEGMENTCODEVALUEID uniqueidentifier;
  declare @OVERRIDEADDRESSPROCESSING bit;
  declare @SEGMENTUSEADDRESSPROCESSING bit;
  declare @SEGMENTADDRESSPROCESSINGOPTIONID uniqueidentifier;
  declare @SEGMENTNAMEFORMATPARAMETERID uniqueidentifier;
  declare @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint;
  declare @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime;
  declare @EXPOSURESTARTDATE datetime;
  declare @EXPOSUREENDDATE datetime;
  declare @PREFIXCODE tinyint;
  declare @SOURCETESTSEGMENTID uniqueidentifier;
  declare @FRACTION nvarchar(10);
  declare @ORGANIZATIONGIFTAMOUNT money;

  declare @MAILINGTYPECODE tinyint;
  declare @CODE nvarchar(10);
  declare @CODEVALUEID uniqueidentifier;
  declare @NAME nvarchar(100);
  declare @CURRENTDATE datetime = getdate();
  declare @BASECURRENCYID uniqueidentifier;
  declare @OVERRIDEBUSINESSUNITS bit;
  declare @DESCRIPTION nvarchar(255);
  declare @ORGANIZATIONBASERENTALCOST money;
  declare @ORGANIZATIONBASEEXCHANGECOST money;
  declare @ORGANIZATIONRENTALCOSTADJUSTMENT money;
  declare @ORGANIZATIONEXCHANGECOSTADJUSTMENT money;
  declare @ORGANIZATIONCURRENCYEXCHANGERATEID uniqueidentifier;

  --for the next two variables

  --1 means it has a template that has the option checked or the effort does not have a template so it allows it by default

  --0 means it has a template and is explicitly not allowed so we have to not copy over the information

  declare @TARGETALLOWEFFORTBUSINESSUNITSOVERRIDE bit = 1;
  declare @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE bit = 1;

  select
    @MAILINGTYPECODE = [MAILINGTYPECODE],
    @BASECURRENCYID = [BASECURRENCYID]
  from
    dbo.[MKTSEGMENTATION]
  where
    [ID] = @SOURCESEGMENTATIONID;

  select
    @ORGANIZATIONCURRENCYEXCHANGERATEID = [ORGANIZATIONCURRENCYEXCHANGERATEID]
  from
    dbo.[MKTSEGMENTATIONBUDGET]
  where
    [ID] = @TARGETSEGMENTATIONID;

  select
    @SEQUENCE = isnull(max([SEQUENCE]), 0)
  from
    dbo.[MKTSEGMENTATIONSEGMENT]
  where
    [SEGMENTATIONID] = @TARGETSEGMENTATIONID;

  --store the duplicate information so we can filter them out when copying

  declare @DUPLICATESEGMENTATIONSEGMENTID table ([ID] uniqueidentifier);

  with SOURCEEFFORTSEGMENTS_CTE as (
    select
      [MKTSEGMENTATIONSEGMENT].[ID] [SOURCESEGMENTATIONSEGMENTID],
      [MKTSEGMENTATIONSEGMENT].[SEGMENTID],
      [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
    from
      dbo.[MKTSEGMENTATIONSEGMENT]
    where
      [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SOURCESEGMENTATIONID
  )
  insert into @DUPLICATESEGMENTATIONSEGMENTID
    select
      [SOURCEEFFORTSEGMENTS_CTE].[SOURCESEGMENTATIONSEGMENTID]
    from
      dbo.[MKTSEGMENTATIONSEGMENT]
      inner join [SOURCEEFFORTSEGMENTS_CTE] on [SOURCEEFFORTSEGMENTS_CTE].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID] and [SOURCEEFFORTSEGMENTS_CTE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
    where
      [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @TARGETSEGMENTATIONID;

  --get the business unit and address processing segment level override information for the target

  select
    @TARGETALLOWEFFORTBUSINESSUNITSOVERRIDE = [ALLOWEFFORTBUSINESSUNITSOVERRIDE],
    @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = [ALLOWEFFORTADDRESSPROCESSINGOVERRIDE]
  from
    dbo.[MKTCOMMUNICATIONTEMPLATE]
  where
    [MKTSEGMENTATIONID] = @TARGETSEGMENTATIONID;

  declare SEGMENTCURSOR cursor local fast_forward for
    select
      [MKTSEGMENTATIONSEGMENT].[ID],
      [MKTSEGMENTATIONSEGMENT].[SEGMENTID],
      [MKTSEGMENTATIONSEGMENT].[EXCLUDE],
      [MKTSEGMENT].[SEGMENTTYPECODE],
      isnull((case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then [MKTSEGMENTATIONSEGMENT].[CODE] else [MKTSEGMENT].[CODE] end), ''),
      (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then [MKTSEGMENTATIONSEGMENT].[PARTDEFINITIONVALUESID] else [MKTSEGMENT].[PARTDEFINITIONVALUESID] end),
      [MKTSEGMENTATIONSEGMENT].[PACKAGEID],
      isnull((case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then [MKTSEGMENTATIONPACKAGE].[CODE] else [MKTPACKAGE].[CODE] end), ''),
      (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then [MKTSEGMENTATIONPACKAGE].[PARTDEFINITIONVALUESID] else [MKTPACKAGE].[PARTDEFINITIONVALUESID] end),
      isnull((case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then [MKTSEGMENTATIONPACKAGE].[CHANNELSOURCECODE] else [MKTPACKAGE].[CHANNELSOURCECODE] end), ''),
      (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then [MKTSEGMENTATIONPACKAGE].[CHANNELPARTDEFINITIONVALUESID] else [MKTPACKAGE].[CHANNELPARTDEFINITIONVALUESID] end),
      [MKTSEGMENTATIONSEGMENT].[RESPONSERATE],
      [MKTSEGMENTATIONSEGMENT].[GIFTAMOUNT],
      [MKTSEGMENTATIONSEGMENT].[SAMPLESIZE],
      [MKTSEGMENTATIONSEGMENT].[SAMPLESIZETYPECODE],
      [MKTSEGMENTATIONSEGMENT].[SAMPLESIZEMETHODCODE],
      [MKTSEGMENTATIONSEGMENT].[SAMPLESIZEEXCLUDEREMAINDER],
      [MKTSEGMENTATIONSEGMENT].[ASKLADDERID],
      [MKTSEGMENTATIONSEGMENT].[USAGECODE],
      [MKTSEGMENTATIONSEGMENT].[TESTSEGMENTCODE],
      [MKTSEGMENTATIONSEGMENT].[TESTPARTDEFINITIONVALUESID],
      (case when @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = 0 then 0 else [MKTSEGMENTATIONSEGMENT].[OVERRIDEADDRESSPROCESSING] end),
      (case when @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = 0 then 0 else [MKTSEGMENTATIONSEGMENT].[USEADDRESSPROCESSING] end),
      (case when @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = 0 then null else [MKTSEGMENTATIONSEGMENT].[ADDRESSPROCESSINGOPTIONID] end),
      (case when @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = 0 then null else [MKTSEGMENTATIONSEGMENT].[NAMEFORMATPARAMETERID] end),
      (case when @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = 0 then null else [MKTSEGMENTATIONSEGMENT].[ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE] end),
      (case when @TARGETALLOWEFFORTADDRESSPROCESSINGOVERRIDE = 0 then null else [MKTSEGMENTATIONSEGMENT].[ADDRESSPROCESSINGOPTIONSEASONALASOFDATE] end),
      [MKTSEGMENTATIONSEGMENT].[EXPOSURESTARTDATE],
      [MKTSEGMENTATIONSEGMENT].[EXPOSUREENDDATE],
      (case when @TARGETALLOWEFFORTBUSINESSUNITSOVERRIDE = 0 then 0 else [MKTSEGMENTATIONSEGMENT].[OVERRIDEBUSINESSUNITS] end)
    from
      dbo.[MKTSEGMENTATION]
      inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
      inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
      left outer join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
      left outer join dbo.[MKTSEGMENTATIONPACKAGE] on [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTPACKAGE].[ID]
    where
      [MKTSEGMENTATION].[ID] = @SOURCESEGMENTATIONID
      and [MKTSEGMENTATIONSEGMENT].[ID] not in (select [ID] from @DUPLICATESEGMENTATIONSEGMENTID)
    order by
      [MKTSEGMENTATIONSEGMENT].[SEQUENCE] asc;

  open SEGMENTCURSOR;
  fetch next from SEGMENTCURSOR into @SOURCESEGMENTID, @SEGMENTID, @EXCLUDE, @SEGMENTTYPECODE, @CODE, @CODEVALUEID, @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @RESPONSERATE, @GIFTAMOUNT, @SAMPLESIZE, @SAMPLESIZETYPECODE, @SAMPLESIZEMETHODCODE, @SAMPLESIZEEXCLUDEREMAINDER, @ASKLADDERID, @USAGECODE, @TESTSEGMENTCODE, @TESTSEGMENTCODEVALUEID, @OVERRIDEADDRESSPROCESSING, @SEGMENTUSEADDRESSPROCESSING, @SEGMENTADDRESSPROCESSINGOPTIONID, @SEGMENTNAMEFORMATPARAMETERID, @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE, @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATE, @EXPOSURESTARTDATE, @EXPOSUREENDDATE, @OVERRIDEBUSINESSUNITS;

  while (@@FETCH_STATUS = 0)
    begin
      set @TARGETSEGMENTID = null;
      set @SEQUENCE = @SEQUENCE + 1;

      if @MAILINGTYPECODE <> 4
        exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENT] 
          @ID = @TARGETSEGMENTID output
          @CHANGEAGENTID = @CHANGEAGENTID
          @SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE = @TARGETSEGMENTATIONID
          @MARKETINGPLANBRIEFID = null
          @SEGMENTID = @SEGMENTID,
          @CODE = @CODE,
          @TESTSEGMENTCODE = @TESTSEGMENTCODE,
          @PACKAGEID = @PACKAGEID,
          @PACKAGECODE = @PACKAGECODE
          @RESPONSERATE = @RESPONSERATE,
          @GIFTAMOUNT = @GIFTAMOUNT,
          @SAMPLESIZE = @SAMPLESIZE,
          @SAMPLESIZETYPECODE = @SAMPLESIZETYPECODE,
          @SAMPLESIZEMETHODCODE = @SAMPLESIZEMETHODCODE
          @SEQUENCE = @SEQUENCE,
          @ASKLADDERID = @ASKLADDERID,
          @SAMPLESIZEEXCLUDEREMAINDER = @SAMPLESIZEEXCLUDEREMAINDER,
          @OVERRIDEADDRESSPROCESSING = @OVERRIDEADDRESSPROCESSING,
          @USEADDRESSPROCESSING = @SEGMENTUSEADDRESSPROCESSING,
          @ADDRESSPROCESSINGOPTIONID = @SEGMENTADDRESSPROCESSINGOPTIONID,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATE,
          @NAMEFORMATPARAMETERID = @SEGMENTNAMEFORMATPARAMETERID,
          @CODEVALUEID = @CODEVALUEID,
          @TESTSEGMENTCODEVALUEID = @TESTSEGMENTCODEVALUEID,
          @PACKAGECODEVALUEID = @PACKAGECODEVALUEID,
          @ITEMLIST = null,
          @CHANNELSOURCECODE = @CHANNELSOURCECODE,
          @CHANNELSOURCECODEVALUEID = @CHANNELSOURCECODEVALUEID,
          @OVERRIDEBUSINESSUNITS = @OVERRIDEBUSINESSUNITS,
          @BUSINESSUNITS = null,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID,
          @EXCLUDE = @EXCLUDE
      else
        begin
          exec dbo.[USP_MKTSEGMENTATIONPASSIVESEGMENT_ADD]
            @ID = @TARGETSEGMENTID output,
            @CHANGEAGENTID = @CHANGEAGENTID,
            @SEGMENTATIONID = @TARGETSEGMENTATIONID,
            @SEGMENTID = @SEGMENTID,
            @CODEVALUEID = @CODEVALUEID,
            @CODE = @CODE,
            @PACKAGEID = @PACKAGEID,
            @PACKAGECODEVALUEID = @PACKAGECODEVALUEID,
            @PACKAGECODE = @PACKAGECODE,
            @CHANNELCODEVALUEID = @CHANNELSOURCECODEVALUEID,
            @CHANNELCODE = @CHANNELSOURCECODE,
            @EXPOSURESTARTDATE = @EXPOSURESTARTDATE,
            @EXPOSUREENDDATE = @EXPOSUREENDDATE,
            @RESPONSERATE = @RESPONSERATE,
            @GIFTAMOUNT = @GIFTAMOUNT,
            @ITEMLIST = null,
            @CURRENTAPPUSERID = @CURRENTAPPUSERID;
        end

      -- BTR CR288047-111407 11/14/2007

      -- altered this logic to work correctly for activated mailings with list segments

      -- can't use USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENTLIST


      if @SEGMENTTYPECODE = 2 -- list segment

        begin
          -- save the usage code

          update dbo.[MKTSEGMENTATIONSEGMENT] set
            [USAGECODE] = @USAGECODE,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
          where [ID] = @TARGETSEGMENTID;

          -- copy any deliberately overridden costs

          if exists(select top 1 1 from dbo.[MKTSEGMENTATIONSEGMENTLIST] where [ID] = @SOURCESEGMENTID and ([OVERRIDEQUANTITIESANDORSEGMENTCOSTS] = 1 or [OVERRIDELISTCOSTS] = 1))
            begin
              select
                @OVERRIDEQUANTITIESANDORSEGMENTCOSTS = [OVERRIDEQUANTITIESANDORSEGMENTCOSTS],
                @OVERRIDELISTCOSTS = [OVERRIDELISTCOSTS],
                @BASERENTALCOST = [BASERENTALCOST],
                @BASERENTALCOSTBASISCODE = [BASERENTALCOSTBASISCODE],
                @RENTALQUANTITY = [RENTALQUANTITY], 
                @RENTALCOSTADJUSTMENT = [RENTALCOSTADJUSTMENT],
                @RENTALCOSTADJUSTMENTBASISCODE = [RENTALCOSTADJUSTMENTBASISCODE],
                @BASEEXCHANGECOST = [BASEEXCHANGECOST],
                @BASEEXCHANGECOSTBASISCODE = [BASEEXCHANGECOSTBASISCODE],
                @EXCHANGEQUANTITY = [EXCHANGEQUANTITY],
                @EXCHANGECOSTADJUSTMENT = [EXCHANGECOSTADJUSTMENT],
                @EXCHANGECOSTADJUSTMENTBASISCODE = [EXCHANGECOSTADJUSTMENTBASISCODE],
                @BASECURRENCYID = [BASECURRENCYID],
                @ORGANIZATIONBASERENTALCOST = [ORGANIZATIONBASERENTALCOST],
                @ORGANIZATIONBASEEXCHANGECOST = [ORGANIZATIONBASEEXCHANGECOST],
                @ORGANIZATIONRENTALCOSTADJUSTMENT = [ORGANIZATIONRENTALCOSTADJUSTMENT],
                @ORGANIZATIONEXCHANGECOSTADJUSTMENT = [ORGANIZATIONEXCHANGECOSTADJUSTMENT],
                @ORGANIZATIONCURRENCYEXCHANGERATEID = [ORGANIZATIONCURRENCYEXCHANGERATEID]
              from dbo.[MKTSEGMENTATIONSEGMENTLIST]
              where [ID] = @SOURCESEGMENTID;

              insert into dbo.[MKTSEGMENTATIONSEGMENTLIST] (
                [ID],
                [OVERRIDEQUANTITIESANDORSEGMENTCOSTS],
                [OVERRIDELISTCOSTS],
                [BASERENTALCOST],
                [BASERENTALCOSTBASISCODE],
                [BASEEXCHANGECOST],
                [BASEEXCHANGECOSTBASISCODE],
                [RENTALQUANTITY],
                [RENTALCOSTADJUSTMENT],
                [RENTALCOSTADJUSTMENTBASISCODE],
                [EXCHANGEQUANTITY],
                [EXCHANGECOSTADJUSTMENT],
                [EXCHANGECOSTADJUSTMENTBASISCODE],
                [ADDEDBYID],
                [CHANGEDBYID],
                [DATEADDED],
                [DATECHANGED],
                [BASECURRENCYID],
                [ORGANIZATIONBASERENTALCOST],
                [ORGANIZATIONBASEEXCHANGECOST],
                [ORGANIZATIONRENTALCOSTADJUSTMENT],
                [ORGANIZATIONEXCHANGECOSTADJUSTMENT],
                [ORGANIZATIONCURRENCYEXCHANGERATEID]
              )
              values
              (
                @TARGETSEGMENTID,
                @OVERRIDEQUANTITIESANDORSEGMENTCOSTS,
                @OVERRIDELISTCOSTS,
                @BASERENTALCOST,
                @BASERENTALCOSTBASISCODE,
                @BASEEXCHANGECOST,
                @BASEEXCHANGECOSTBASISCODE,
                @RENTALQUANTITY,
                @RENTALCOSTADJUSTMENT,
                @RENTALCOSTADJUSTMENTBASISCODE,
                @EXCHANGEQUANTITY,
                @EXCHANGECOSTADJUSTMENT,
                @EXCHANGECOSTADJUSTMENTBASISCODE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE,
                @BASECURRENCYID,
                @ORGANIZATIONBASERENTALCOST,
                @ORGANIZATIONBASEEXCHANGECOST,
                @ORGANIZATIONRENTALCOSTADJUSTMENT,
                @ORGANIZATIONEXCHANGECOSTADJUSTMENT,
                @ORGANIZATIONCURRENCYEXCHANGERATEID
              );
            end;
        end;

      if @EXCLUDE = 0
        begin
          /* Copy the segmentation segment user defined source codes in the source code part table */
          insert into dbo.[MKTSOURCECODEPART] (
            [SEGMENTATIONID],
            [SEGMENTATIONSEGMENTID],
            [MARKETINGPLANITEMID],
            [SOURCECODEITEMID],
            [LISTID],
            [CHANNELCODE],
            [CODE],
            [PARTDEFINITIONVALUESID],
            [ADDEDBYID],
            [CHANGEDBYID],
            [DATEADDED],
            [DATECHANGED]
          )
          select
            @TARGETSEGMENTATIONID,
            @TARGETSEGMENTID,
            [MARKETINGPLANITEMID],
            [SOURCECODEITEMID],
            [LISTID],
            [CHANNELCODE],
            [CODE],
            [PARTDEFINITIONVALUESID],
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
          from dbo.[MKTSOURCECODEPART]
          where [SEGMENTATIONSEGMENTID] = @SOURCESEGMENTID;

          if @TARGETALLOWEFFORTBUSINESSUNITSOVERRIDE = 1
            /* Copy the business units from the segment */
            insert into dbo.[MKTSEGMENTATIONSEGMENTBUSINESSUNIT] (
              [ID],
              [MKTSEGMENTATIONSEGMENTID],
              [BUSINESSUNITCODEID],
              [PERCENTVALUE],
              [ADDEDBYID],
              [CHANGEDBYID],
              [DATEADDED],
              [DATECHANGED]
            )
            select
              newid(),
              @TARGETSEGMENTID,
              [BUSINESSUNITCODEID],
              [PERCENTVALUE],
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE,
              @CURRENTDATE
            from dbo.[MKTSEGMENTATIONSEGMENTBUSINESSUNIT]
            where [MKTSEGMENTATIONSEGMENTID] = @SOURCESEGMENTID;

          --Copy the test segments via cursor...

          if @MAILINGTYPECODE <> 4
            begin
              declare TESTSEGMENTCURSOR cursor local fast_forward for
                select
                  [MKTSEGMENTATIONTESTSEGMENT].[ID],
                  [MKTSEGMENTATIONTESTSEGMENT].[NAME],
                  [MKTSEGMENTATIONTESTSEGMENT].[DESCRIPTION],
                  isnull([MKTSEGMENTATIONTESTSEGMENT].[CODE], ''),
                  [MKTSEGMENTATIONTESTSEGMENT].[PARTDEFINITIONVALUESID],
                  [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID],
                  isnull([MKTPACKAGE].[CODE], ''),
                  [MKTPACKAGE].[PARTDEFINITIONVALUESID],
                  isnull([MKTPACKAGE].[CHANNELSOURCECODE], ''),
                  [MKTPACKAGE].[CHANNELPARTDEFINITIONVALUESID],
                  [MKTSEGMENTATIONTESTSEGMENT].[RESPONSERATE],
                  [MKTSEGMENTATIONTESTSEGMENT].[GIFTAMOUNT],
                  [MKTSEGMENTATIONTESTSEGMENT].[SAMPLESIZE],
                  [MKTSEGMENTATIONTESTSEGMENT].[SAMPLESIZETYPECODE],
                  [MKTSEGMENTATIONTESTSEGMENT].[SAMPLESIZEMETHODCODE],
                  [MKTSEGMENTATIONTESTSEGMENT].[ASKLADDERID],
                  [MKTSEGMENTATIONTESTSEGMENT].[TESTSEGMENTCODE],
                  [MKTSEGMENTATIONTESTSEGMENT].[TESTPARTDEFINITIONVALUESID],
                  [MKTSEGMENTATIONTESTSEGMENT].[PREFIXCODE],
                  [MKTSEGMENTATIONTESTSEGMENT].[FRACTION],
                  (case when @TARGETALLOWEFFORTBUSINESSUNITSOVERRIDE = 0 then 0 else [MKTSEGMENTATIONTESTSEGMENT].[OVERRIDEBUSINESSUNITS] end)
                from
                  dbo.[MKTSEGMENTATIONTESTSEGMENT]
                  inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
                where
                  [SEGMENTID] = @SOURCESEGMENTID
                  and [SEGMENTID] not in (select [ID] from @DUPLICATESEGMENTATIONSEGMENTID)
                order by
                  [MKTSEGMENTATIONTESTSEGMENT].[SEQUENCE] asc;

              open TESTSEGMENTCURSOR;
              fetch next from TESTSEGMENTCURSOR into @SOURCETESTSEGMENTID, @NAME, @DESCRIPTION, @CODE, @CODEVALUEID, @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @RESPONSERATE, @GIFTAMOUNT, @SAMPLESIZE, @SAMPLESIZETYPECODE, @SAMPLESIZEMETHODCODE, @ASKLADDERID, @TESTSEGMENTCODE, @TESTSEGMENTCODEVALUEID, @PREFIXCODE, @FRACTION, @OVERRIDEBUSINESSUNITS;

              while (@@FETCH_STATUS = 0)
                begin
                  set @TARGETTESTSEGMENTID = null;

                  --Create the test segment...

                  exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONTESTSEGMENT]
                    @TARGETTESTSEGMENTID output
                    @TARGETSEGMENTID
                    @CHANGEAGENTID
                    @NAME
                    @DESCRIPTION
                    @CODE
                    @TESTSEGMENTCODE
                    @PACKAGEID
                    @PACKAGECODE
                    @RESPONSERATE
                    @GIFTAMOUNT
                    @SAMPLESIZE
                    @SAMPLESIZETYPECODE
                    @SAMPLESIZEMETHODCODE
                    @ASKLADDERID
                    @PREFIXCODE
                    null
                    null
                    0,
                    @CODEVALUEID,
                    @TESTSEGMENTCODEVALUEID,
                    @PACKAGECODEVALUEID,
                    null,
                    @CHANNELSOURCECODE,
                    @CHANNELSOURCECODEVALUEID,
                    @FRACTION,
                    null,
                    @OVERRIDEBUSINESSUNITS,
                    @CURRENTAPPUSERID;

                  /* Get the test segment ID because the output parameter from the test segment add function does not return a value */
                  select
                    @TARGETTESTSEGMENTID = [ID]
                  from dbo.[MKTSEGMENTATIONTESTSEGMENT]
                  where 
                    [SEGMENTID] = @TARGETSEGMENTID and
                    [NAME] = @NAME and
                    [PREFIXCODE] = @PREFIXCODE;

                  /* Copy the segmentation test segment user defined source codes in the source code part table */
                  insert into dbo.[MKTSOURCECODEPART] (
                    [SEGMENTATIONID],
                    [SEGMENTATIONTESTSEGMENTID],
                    [MARKETINGPLANITEMID],
                    [SOURCECODEITEMID],
                    [LISTID],
                    [CHANNELCODE],
                    [CODE],
                    [PARTDEFINITIONVALUESID],
                    [ADDEDBYID],
                    [CHANGEDBYID],
                    [DATEADDED],
                    [DATECHANGED]
                  )
                  select
                    @TARGETSEGMENTATIONID,
                    @TARGETTESTSEGMENTID,
                    [MARKETINGPLANITEMID],
                    [SOURCECODEITEMID],
                    [LISTID],
                    [CHANNELCODE],
                    [CODE],
                    [PARTDEFINITIONVALUESID],
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
          @CURRENTDATE
                  from dbo.[MKTSOURCECODEPART]
                  where [SEGMENTATIONTESTSEGMENTID] = @SOURCETESTSEGMENTID;

                  if @TARGETALLOWEFFORTBUSINESSUNITSOVERRIDE = 1
                    /* Copy the business units for the segmentation test segment */
                    insert into dbo.[MKTSEGMENTATIONTESTSEGMENTBUSINESSUNIT] (
                      [ID],
                      [MKTSEGMENTATIONTESTSEGMENTID],
                      [BUSINESSUNITCODEID],
                      [PERCENTVALUE],
                      [ADDEDBYID],
                      [CHANGEDBYID],
                      [DATEADDED],
                      [DATECHANGED]
                    )
                    select
                      newid(),
                      @TARGETTESTSEGMENTID,
                      [BUSINESSUNITCODEID],
                      [PERCENTVALUE],
                      @CHANGEAGENTID,
                      @CHANGEAGENTID,
                      @CURRENTDATE,
                      @CURRENTDATE
                    from dbo.[MKTSEGMENTATIONTESTSEGMENTBUSINESSUNIT]
                    where [MKTSEGMENTATIONTESTSEGMENTID] = @SOURCETESTSEGMENTID;

                  fetch next from TESTSEGMENTCURSOR into @SOURCETESTSEGMENTID, @NAME, @DESCRIPTION, @CODE, @CODEVALUEID, @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @RESPONSERATE, @GIFTAMOUNT, @SAMPLESIZE, @SAMPLESIZETYPECODE, @SAMPLESIZEMETHODCODE, @ASKLADDERID, @TESTSEGMENTCODE, @TESTSEGMENTCODEVALUEID, @PREFIXCODE, @FRACTION, @OVERRIDEBUSINESSUNITS;
                end

              close TESTSEGMENTCURSOR;
              deallocate TESTSEGMENTCURSOR;
            end
        end -- if @EXCLUDE = 0


      fetch next from SEGMENTCURSOR into @SOURCESEGMENTID, @SEGMENTID, @EXCLUDE, @SEGMENTTYPECODE, @CODE, @CODEVALUEID, @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @RESPONSERATE, @GIFTAMOUNT, @SAMPLESIZE, @SAMPLESIZETYPECODE, @SAMPLESIZEMETHODCODE, @SAMPLESIZEEXCLUDEREMAINDER, @ASKLADDERID, @USAGECODE, @TESTSEGMENTCODE, @TESTSEGMENTCODEVALUEID, @OVERRIDEADDRESSPROCESSING, @SEGMENTUSEADDRESSPROCESSING, @SEGMENTADDRESSPROCESSINGOPTIONID, @SEGMENTNAMEFORMATPARAMETERID, @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE, @SEGMENTADDRESSPROCESSINGOPTIONSEASONALASOFDATE, @EXPOSURESTARTDATE, @EXPOSUREENDDATE, @OVERRIDEBUSINESSUNITS;
    end;

  close SEGMENTCURSOR;
  deallocate SEGMENTCURSOR;
end