USP_MKTSEGMENTATION_COPY_HELPER

Copies a marketing effort.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@COPYTESTMAILINGS bit IN
@TARGETSEGMENTATIONID uniqueidentifier IN
@COPYFORMAT nvarchar(100) IN
@EFFORTNAMESCHEMETEXT xml IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATION_COPY_HELPER]
(
  @ID uniqueidentifier output,
  @CURRENTAPPUSERID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @COPYTESTMAILINGS bit = 1,
  @TARGETSEGMENTATIONID uniqueidentifier = null,    /* For public media efforts only */
  @COPYFORMAT nvarchar(100) = null,
  @EFFORTNAMESCHEMETEXT xml = null                  /* For efforts with name patterns */
)
as
  set nocount on;

  declare @SOURCESEGMENTATIONID uniqueidentifier;
  declare @CURRENTDATE datetime;
  declare @EFFORTCOMMUNICATIONTEMPLATEID uniqueidentifier;
  declare @TEMPLATENAME nvarchar(100);
  declare @COMMUNICATIONNAMESCHEMEID uniqueidentifier;
  declare @COMMUNICATIONNAMESCHEMENAME nvarchar(100);
  declare @COUNTERVALUE nvarchar(10);
  declare @COUNTER int;

  begin try
    set @SOURCESEGMENTATIONID = @ID;

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

    set @CURRENTDATE = getdate();

    /**************************/
    /* Create the new mailing */
    /**************************/
    declare @RC int;
    declare @MARKETINGPLANITEMID uniqueidentifier;
    declare @DATALOADED bit;
    declare @ISHISTORICAL bit = 0;
    declare @ACTIVE bit;
    declare @CODE nvarchar(10);
    declare @CODEVALUEID uniqueidentifier;
    declare @NAME nvarchar(100);
    declare @DESCRIPTION nvarchar(255);
    declare @SITEID uniqueidentifier;
    declare @SOURCECODEID uniqueidentifier;
    declare @ISTESTMAILING tinyint;
    declare @MAILDATE datetime;
    declare @PLANPATH nvarchar(max);
    declare @HOUSEHOLDINGTYPECODE tinyint;
    declare @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD bit;
    declare @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS bit;
    declare @HOUSEHOLDINGONERECORDPERHOUSEHOLD bit;
    declare @ENABLEHOUSEHOLDING bit;
    declare @SITEREQUIRED bit;
    declare @SITECANBECHANGED bit;
    declare @MAILINGTYPECODE tinyint;
    declare @EXCLUSIONDATETYPECODE tinyint;
    declare @EXCLUSIONASOFDATE datetime;
    declare @EXCLUDEDECEASED bit;
    declare @EXCLUDEINACTIVE bit;
    declare @EXCLUSIONS xml;
    declare @USEADDRESSPROCESSING bit;
    declare @ADDRESSPROCESSINGOPTIONID uniqueidentifier;
    declare @NAMEFORMATPARAMETERID uniqueidentifier;
    declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint;
    declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime;
    declare @APPEALINFORMATION xml;
    declare @RUNACTIVATEANDEXPORT bit;
    declare @EXPORTDESCRIPTION nvarchar(255);
    declare @MAILEXPORTDEFINITIONID uniqueidentifier;
    declare @EMAILEXPORTDEFINITIONID uniqueidentifier;
    declare @PHONEEXPORTDEFINITIONID uniqueidentifier;
    declare @SEGMENTATIONACTIVATEPROCESSID uniqueidentifier;
    declare @OVERRIDEBUSINESSUNITS bit;
    declare @BUSINESSUNITS xml;
    declare @SOURCECODEITEMID uniqueidentifier;
    declare @LISTID uniqueidentifier;
    declare @CHANNELCODE tinyint;
    declare @PARTDEFINITIONVALUESID uniqueidentifier;
    declare @BASECURRENCYID uniqueidentifier;
    declare @ORGANIZATIONCURRENCYEXCHANGERATEID uniqueidentifier;
    declare @ORGANIZATIONBASERENTALCOST money;
    declare @ORGANIZATIONBASEEXCHANGECOST money;
    declare @ORGANIZATIONRENTALCOSTADJUSTMENT money;
    declare @ORGANIZATIONEXCHANGECOSTADJUSTMENT money;
    declare @RUNSEGMENTATIONSEGMENTREFRESHPROCESS bit;
    declare @CACHESOURCEANALYSISRULEDATA bit;
    declare @RUNMARKETINGEXCLUSIONSREPORT bit;
    declare @EFFORTCHANNELCODE tinyint;
    declare @ALLOWRESERVINGFINDERNUMBERS bit;
    declare @ALLOWSPECIFYBUDGET bit;
    declare @ALLOWEXCLUDEPREVIOUSEFFORTS bit;
    declare @DUEDATE datetime;

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

    if @MAILINGTYPECODE = 4  --Public media effort

      begin
        if @TARGETSEGMENTATIONID is null
 raiserror('Public media efforts cannot be copied directly using this stored procedure.  Please use the "Marketing Effort: Copy" record operation to copy a public media effort.', 13, 1);
        else
          begin
            --Make sure the target ID already exists...

            if not exists(select * from dbo.[MKTSEGMENTATION] where [ID] = @TARGETSEGMENTATIONID)
              raiserror('The target public media effort ID does not exist in the database.  Please use the "Marketing Effort: Copy" record operation to copy a public media effort.', 13, 1);
          end
      end
    else
      set @TARGETSEGMENTATIONID = newid();

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

    if @MAILINGTYPECODE <> 4 
      exec @RC = dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTSEGMENTATION_4]
        @ID = @SOURCESEGMENTATIONID,
        @CURRENTAPPUSERID = @CURRENTAPPUSERID,
        @DATALOADED = @DATALOADED output,
        @ACTIVE = @ACTIVE output,
        @CODE = @CODE output,
        @NAME = @NAME output,
        @DESCRIPTION = @DESCRIPTION output,
        @SITEID = @SITEID output,
        @SOURCECODEID = @SOURCECODEID output,
        @ITEMLIST = null,
        @ISTESTMAILING = @ISTESTMAILING output,
        @MAILDATE = @MAILDATE output,
        @PLANPATH = @PLANPATH output,
        @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE output,
        @ENABLEHOUSEHOLDING = @ENABLEHOUSEHOLDING output,
        @SITEREQUIRED = @SITEREQUIRED output,
        @SITECANBECHANGED = @SITECANBECHANGED output,
        @MAILINGTYPECODE = @MAILINGTYPECODE output,
        @ISBBEC = null,
        @OWNERID = null,
        @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE output,
        @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE output,
        @EXCLUDEDECEASED = @EXCLUDEDECEASED output,
        @EXCLUDEINACTIVE = @EXCLUDEINACTIVE output,
        @EXCLUSIONS = @EXCLUSIONS output,
        @USEADDRESSPROCESSING = @USEADDRESSPROCESSING output,
        @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID output,
        @NAMEFORMATPARAMETERID = @NAMEFORMATPARAMETERID output,
        @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE output,
        @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE output,
        @TSLONG = null,
        @ACTIVATIONKPIS = null,
        @USEKPISASDEFAULT = null,
        @APPEALINFORMATION = @APPEALINFORMATION output,
        @RUNACTIVATEANDEXPORT = @RUNACTIVATEANDEXPORT output,
        @EXPORTDESCRIPTION = @EXPORTDESCRIPTION output,
        @MAILEXPORTDEFINITIONID = @MAILEXPORTDEFINITIONID output,
        @EMAILEXPORTDEFINITIONID = @EMAILEXPORTDEFINITIONID output,
        @PHONEEXPORTDEFINITIONID = @PHONEEXPORTDEFINITIONID output,
        @CODEVALUEID = @CODEVALUEID output,
        @RUNSEGMENTATIONSEGMENTREFRESHPROCESS = @RUNSEGMENTATIONSEGMENTREFRESHPROCESS output,
        @CACHESOURCEANALYSISRULEDATA = @CACHESOURCEANALYSISRULEDATA output,
        @BUSINESSUNITS = null,
        @OVERRIDEBUSINESSUNITS = @OVERRIDEBUSINESSUNITS output,
        @BASECURRENCYID = @BASECURRENCYID output,
        @ISHISTORICAL = @ISHISTORICAL output,
        @RUNMARKETINGEXCLUSIONSREPORT = @RUNMARKETINGEXCLUSIONSREPORT output,
        @CHANNELCODE = @EFFORTCHANNELCODE output,
        @ALLOWRESERVINGFINDERNUMBERS = @ALLOWRESERVINGFINDERNUMBERS output,
        @ALLOWSPECIFYBUDGET = @ALLOWSPECIFYBUDGET output,
        @ALLOWEXCLUDEPREVIOUSEFFORTS = @ALLOWEXCLUDEPREVIOUSEFFORTS output,
        @DUEDATE = @DUEDATE output;
    else
      exec dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTSEGMENTATIONPASSIVE]
        @ID = @SOURCESEGMENTATIONID,
        @CURRENTAPPUSERID = @CURRENTAPPUSERID,
        @DATALOADED = @DATALOADED output,
        @MAILINGTYPECODE = @MAILINGTYPECODE output,
        @ACTIVE = @ACTIVE output,
        @NAME = @NAME output,
        @DESCRIPTION = @DESCRIPTION output,
        @SITEID = @SITEID output,
        @SITEREQUIRED = @SITEREQUIRED output,
        @SITECANBECHANGED = @SITECANBECHANGED output,
        @MAILDATE = @MAILDATE output,
        @SOURCECODEID = @SOURCECODEID output,
        @CODEVALUEID = @CODEVALUEID output,
        @CODE = @CODE output,
        @ITEMLIST = null,
        @ISTESTMAILING = @ISTESTMAILING output,
        @ACTIVATIONKPIS = null,
        @USEKPISASDEFAULT = null,
        @TSLONG = null,
        @BASECURRENCYID = @BASECURRENCYID output;

    if @ISHISTORICAL = 1
      begin
        raiserror('BBERR_MKTSEGMENTATION_ISHISTORICAL', 13, 1);
        return 1;
      end


    --Skip all this for public media efforts because the effort will already be created by the CLR code before this...

    if @MAILINGTYPECODE <> 4
      begin
        /******************************************/
        /* BEGIN: Non-Public media effort section */
        /******************************************/

        declare @SOURCENAME nvarchar(100);
        select
          @SOURCENAME = [MKTSEGMENTATION].[NAME],
          @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = [MKTSEGMENTATION].[HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD],
          @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = [MKTSEGMENTATION].[HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS],
          @HOUSEHOLDINGONERECORDPERHOUSEHOLD = [MKTSEGMENTATION].[HOUSEHOLDINGONERECORDPERHOUSEHOLD],
          @EFFORTCOMMUNICATIONTEMPLATEID = [MKTCOMMUNICATIONTEMPLATE].[ID],
          @TEMPLATENAME =[MKTCOMMUNICATIONTEMPLATE].[NAME]
        from dbo.[MKTSEGMENTATION]
        left join dbo.[MKTCOMMUNICATIONTEMPLATE] on [MKTSEGMENTATION].[ID] = [MKTCOMMUNICATIONTEMPLATE].[MKTSEGMENTATIONID]
        where [MKTSEGMENTATION].[ID] = @SOURCESEGMENTATIONID;

        declare @UNIQUENAME nvarchar(100);

        if @EFFORTCOMMUNICATIONTEMPLATEID is not null
        begin
          --get the name pattern Id if the template has one

          select
            @COMMUNICATIONNAMESCHEMEID = [MKTCOMMUNICATIONTEMPLATEDEFAULT].[COMMUNICATIONNAMESCHEMEID],
            @COMMUNICATIONNAMESCHEMENAME = [MKTCOMMUNICATIONNAMESCHEME].[NAME]
          from 
            dbo.[MKTCOMMUNICATIONTEMPLATEDEFAULT]
            inner join dbo.[MKTCOMMUNICATIONNAMESCHEME] on [MKTCOMMUNICATIONNAMESCHEME].[ID] = [MKTCOMMUNICATIONTEMPLATEDEFAULT].[COMMUNICATIONNAMESCHEMEID]
          where 
            [MKTCOMMUNICATIONTEMPLATEDEFAULT].[COMMUNICATIONTEMPLATEID] = @EFFORTCOMMUNICATIONTEMPLATEID;

          --set the current name from the name pattern text

          if @COMMUNICATIONNAMESCHEMEID is not null and @EFFORTNAMESCHEMETEXT is not null
            set @SOURCENAME = dbo.[UFN_MKTCOMMUNICATIONEFFORT_GETNAMEFROMNAMESCHEMETEXT](@EFFORTNAMESCHEMETEXT, NULL);

          --build a unique name

          exec dbo.[USP_MKTCOMMUNICATIONEFFORT_GETUNIQUENAME] 
            @COMMUNICATIONNAMESCHEMEID = @COMMUNICATIONNAMESCHEMEID,
            @EFFORTNAMESCHEMETEXT = @EFFORTNAMESCHEMETEXT,
            @EFFORTNAME = @SOURCENAME output,
            @COUNTERVALUE = @COUNTERVALUE output,
            @COUNTER = @COUNTER output,
            @ISCOPY = 1,
            @NAMEFORMAT = @COPYFORMAT;

         set @UNIQUENAME = @SOURCENAME;
        end
      else
        begin 
          if @COPYFORMAT is null
            set @UNIQUENAME = dbo.[UFN_MKTSEGMENTATION_GETUNIQUENAME](@TARGETSEGMENTATIONID, @NAME, null);                        
          else
            begin
              -- This stored procedure will set the unique name

              set @UNIQUENAME = @SOURCENAME;
              exec dbo.[USP_MKTCOMMON_GETUNIQUENAME] @UNIQUENAME output, @COPYFORMAT, 'MKTSEGMENTATION', 'NAME', 0;            
            end
        end

        -- return only the selected solicit code exclusions 

        -- (required are always used by default and thus aren't even saved to the database)

        select @SEGMENTATIONACTIVATEPROCESSID = [ID] from dbo.[MKTSEGMENTATIONACTIVATEPROCESS] where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;
        set @EXCLUSIONS = dbo.[UFN_MKTSEGMENTATION_GETSELECTEDSOLICITCODEEXCLUSIONS_TOITEMLISTXML](@SEGMENTATIONACTIVATEPROCESSID);
        -- null out existing IDs from solicit code exclusions

        if @EXCLUSIONS is not null 
          set @EXCLUSIONS.modify('delete /EXCLUSIONS/ITEM/ID');

        /*Auto-Increment effort source code if auto-increment is enabled */
        if dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUE_GETAUTOINCREMENTSETTING](@CODEVALUEID) = 1
          set @CODE = dbo.[UFN_MKTSOURCECODE_AUTOINCREMENTCODE](@CODEVALUEID, @MAILINGTYPECODE);

        /*Create the copy of the mailing*/
        exec @RC = dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATION]
          @ID = @TARGETSEGMENTATIONID output,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID,
          @CHANGEAGENTID = @CHANGEAGENTID,
          @CODE = @CODE,
          @NAME = @UNIQUENAME,
          @DESCRIPTION = @DESCRIPTION,
          @INCLUDESELECTIONS = null,
          @EXCLUDESELECTIONS = null,
          @EXCLUDESEGMENTATIONS = null,
          @MARKETINGPLANITEMID = @MARKETINGPLANITEMID,
          @SOURCECODEID = @SOURCECODEID,
          @ITEMLIST = null,
          @MAILDATE = @MAILDATE,
          @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE,
          @SITEID = @SITEID,
          @MAILINGTYPECODE = @MAILINGTYPECODE,
          @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE,
          @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE,
          @EXCLUDEDECEASED = @EXCLUDEDECEASED,
          @EXCLUDEINACTIVE = @EXCLUDEINACTIVE,
          @EXCLUSIONS = @EXCLUSIONS,
          @USEADDRESSPROCESSING = @USEADDRESSPROCESSING,
          @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID,
          @NAMEFORMATPARAMETERID = @NAMEFORMATPARAMETERID,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE,
          @ACTIVATIONKPIS = null,
          @USEKPISASDEFAULT = 0,
          @APPEALINFORMATION = null,
          @RUNACTIVATEANDEXPORT = @RUNACTIVATEANDEXPORT,
          @EXPORTDESCRIPTION = @EXPORTDESCRIPTION,
          @MAILEXPORTDEFINITIONID = @MAILEXPORTDEFINITIONID,
          @EMAILEXPORTDEFINITIONID = @EMAILEXPORTDEFINITIONID,
          @PHONEEXPORTDEFINITIONID = @PHONEEXPORTDEFINITIONID,
          @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD,
          @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS,
          @HOUSEHOLDINGONERECORDPERHOUSEHOLD = @HOUSEHOLDINGONERECORDPERHOUSEHOLD,
          @CODEVALUEID = @CODEVALUEID,
          @RUNSEGMENTATIONSEGMENTREFRESHPROCESS = @RUNSEGMENTATIONSEGMENTREFRESHPROCESS,
          @CACHESOURCEANALYSISRULEDATA = @CACHESOURCEANALYSISRULEDATA,
          @BUSINESSUNITS = null,
          @OVERRIDEBUSINESSUNITS = @OVERRIDEBUSINESSUNITS,
          @BASECURRENCYID = @BASECURRENCYID,
          @ORGANIZATIONCURRENCYEXCHANGERATEID = @ORGANIZATIONCURRENCYEXCHANGERATEID,
          @RUNMARKETINGEXCLUSIONSREPORT = @RUNMARKETINGEXCLUSIONSREPORT,
          @CHANNELCODE = @EFFORTCHANNELCODE,
          @ALLOWRESERVINGFINDERNUMBERS = @ALLOWRESERVINGFINDERNUMBERS,
          @ALLOWSPECIFYBUDGET = @ALLOWSPECIFYBUDGET,
          @ALLOWEXCLUDEPREVIOUSEFFORTS = @ALLOWEXCLUDEPREVIOUSEFFORTS,
          @DUEDATE = @DUEDATE;

      --Copy the template and name pattern if there is one

      if @EFFORTCOMMUNICATIONTEMPLATEID is not null
      begin
        exec dbo.[USP_MKTCOMMUNICATIONTEMPLATE_COPY]
          @EFFORTCOMMUNICATIONTEMPLATEID output,
          @CURRENTAPPUSERID,
          @CHANGEAGENTID,
          @TEMPLATENAME,
          @TARGETSEGMENTATIONID;

        --copy name pattern

        if @COMMUNICATIONNAMESCHEMEID is not null
        begin
          exec dbo.[USP_MKTCOMMUNICATIONNAMESCHEME_COPY] @COMMUNICATIONNAMESCHEMEID output, @CURRENTAPPUSERID, @CHANGEAGENTID, @COMMUNICATIONNAMESCHEMENAME, @TARGETSEGMENTATIONID;

          --update part values

          update
            dbo.[MKTCOMMUNICATIONNAMESCHEMEPART]
          set
            [MKTCOMMUNICATIONNAMESCHEMEPART].[COMMUNICATIONEFFORTVALUE] = case when [MKTCOMMUNICATIONNAMESCHEMEPART].[NAMEPARTTYPECODE] = 8 then @COUNTERVALUE else [NAMESCHEMEPARTS].[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)
            where T.c.value('(@SEQUENCE)[1]', 'int') > 0
            ) [NAMESCHEMEPARTS] on [NAMESCHEMEPARTS].[ID] = [MKTCOMMUNICATIONNAMESCHEMEPART].[MKTCOMMUNICATIONNAMESCHEMEID]
          where [MKTCOMMUNICATIONNAMESCHEMEPART].[SEQUENCE] = [NAMESCHEMEPARTS].[SEQUENCE] and [MKTCOMMUNICATIONNAMESCHEMEPART].[NAMEPARTTYPECODE] in (8, 10);
        end
      end

        /***************************************/
        /* Update the Test Mailing information */
        /***************************************/
        declare @PARENTSEGMENTATIONID uniqueidentifier;
        declare @TESTSAMPLESIZE int;
        declare @TESTSAMPLESIZETYPECODE tinyint;

        select
          @PARENTSEGMENTATIONID = [PARENTSEGMENTATIONID],
          @TESTSAMPLESIZE = [SAMPLESIZE],
          @TESTSAMPLESIZETYPECODE = [SAMPLESIZETYPECODE]
        from dbo.[MKTSEGMENTATION]
        where [ID] = @SOURCESEGMENTATIONID;

        update dbo.[MKTSEGMENTATION] set
          [PARENTSEGMENTATIONID] = @PARENTSEGMENTATIONID,
          [SAMPLESIZE] = @TESTSAMPLESIZE,
          [SAMPLESIZETYPECODE] = @TESTSAMPLESIZETYPECODE,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [ID] = @TARGETSEGMENTATIONID;


        /*************************************/
        /* Copy the previous mailing filters */
        /*************************************/
        insert into dbo.[MKTSEGMENTATIONFILTERSEGMENTATION] 
        (
          [SEGMENTATIONID],
          [PREVIOUSSEGMENTATIONID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          @TARGETSEGMENTATIONID,
          [PREVIOUSSEGMENTATIONID],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.[MKTSEGMENTATIONFILTERSEGMENTATION]
        where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;


        /**************************************************/
        /* Copy the universe/exclusion selection filters  */
        /**************************************************/
        insert into dbo.[MKTSEGMENTATIONFILTERSELECTION] (
          [SEGMENTATIONID],
          [FILTERTYPECODE],
          [SELECTIONID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          @TARGETSEGMENTATIONID,
          [FILTERTYPECODE],
          [SELECTIONID],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.[MKTSEGMENTATIONFILTERSELECTION]
        where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;


        /******************/
        /* Copy the seeds */
        /******************/
        insert into dbo.[MKTSEGMENTATIONSEED] 
        (
          [SEGMENTATIONID],
      [SEEDID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          @TARGETSEGMENTATIONID,
          [SEEDID],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.[MKTSEGMENTATIONSEED]
        where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;


        /*************************************/
        /* Copy the activation appeal fields */
        /*************************************/
        insert into dbo.[MKTSEGMENTATIONACTIVATE] (
          [ID],
          [SEGMENTATIONID],
          [RECORDSOURCEID],
          [APPEALSYSTEMID],
          [APPEALID],
          [APPEALDESCRIPTION],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select 
          newid(),
          @TARGETSEGMENTATIONID,
          [RECORDSOURCEID],
          [APPEALSYSTEMID],
          [APPEALID],
          [APPEALDESCRIPTION],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.[MKTSEGMENTATIONACTIVATE]
        where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;


        /****************************/
        /* Copy the activation KPIs */
        /****************************/
        insert into dbo.[MKTSEGMENTATIONACTIVATEKPI] (
          [ID],
          [SEGMENTATIONID],
          [KPICATALOGID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          newid(),
          @TARGETSEGMENTATIONID,
          [KPICATALOGID],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.[MKTSEGMENTATIONACTIVATEKPI]
        where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;


        /*********************************/
        /* Copy any ask ladder overrides */
        /*********************************/
        insert into dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE] (
          [ID],
          [SEGMENTATIONID],
          [ASKLADDERID],
          [IDSETREGISTERID],
          [SEQUENCE],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          newid(),
          @TARGETSEGMENTATIONID,
          [ASKLADDERID],
          [IDSETREGISTERID],
          [SEQUENCE],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE]
        where [SEGMENTATIONID] = @SOURCESEGMENTATIONID;

        /**********************************************************/
        /* copy the MKTSEGMENTATIONSEGMENTCALCULATEPROCESS values */
        /**********************************************************/
        declare @RUNSEGMENTATIONSEGMENTREFRESHPROCESSCOUNTS bit = 0;
        declare @CACHESOURCEANALYSISRULEDATACOUNTS bit = 0;
        declare @RUNMARKETINGEXCLUSIONSREPORTCOUNTS bit = 0;

        select
          @RUNSEGMENTATIONSEGMENTREFRESHPROCESSCOUNTS = [RUNSEGMENTATIONSEGMENTREFRESHPROCESS],
          @CACHESOURCEANALYSISRULEDATACOUNTS = [CACHESOURCEANALYSISRULEDATA],
          @RUNMARKETINGEXCLUSIONSREPORTCOUNTS = [RUNMARKETINGEXCLUSIONSREPORT]
        from
          dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
        where
          [SEGMENTATIONID] = @SOURCESEGMENTATIONID;

        update
          dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
        set 
          [RUNSEGMENTATIONSEGMENTREFRESHPROCESS] = @RUNSEGMENTATIONSEGMENTREFRESHPROCESSCOUNTS,
          [CACHESOURCEANALYSISRULEDATA] = @CACHESOURCEANALYSISRULEDATACOUNTS,
          [RUNMARKETINGEXCLUSIONSREPORT] = @RUNMARKETINGEXCLUSIONSREPORTCOUNTS,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where
          [SEGMENTATIONID] = @TARGETSEGMENTATIONID;

        /**********************************************************/
        /*   Copy the export values                               */
        /**********************************************************/         
        declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint = null;
        declare @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE tinyint = null;
        declare @CURRENCYDECIMALDIGITS int = null;
        declare @CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE tinyint = null;
        declare @CURRENCYGROUPSEPARATOR nvarchar(4) = null;
        declare @CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE tinyint = null;
        declare @CURRENCYDECIMALSEPARATOR nvarchar(4) = null;
        declare @ORGANIZATIONCURRENCYID uniqueidentifier = null;
        declare @DATEFORMAT nvarchar(50) = null;
        declare @FUZZYDATEFORMAT nvarchar(50) = null;
        declare @MONTHDAYFORMAT nvarchar(50) = null;
        declare @HOURMINUTEFORMAT nvarchar(50) = null;
        declare @CSVLINEBREAKCODE tinyint = null;

        /* Select values from original template */
        select
          @CURRENCYSYMBOLDISPLAYSETTINGCODE = [CURRENCYSYMBOLDISPLAYSETTINGCODE],
          @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE = [CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE],
          @CURRENCYDECIMALDIGITS = [CURRENCYDECIMALDIGITS],
          @CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE = [CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE],
          @CURRENCYGROUPSEPARATOR = [CURRENCYGROUPSEPARATOR],
          @CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE = [CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE],
          @CURRENCYDECIMALSEPARATOR = [CURRENCYDECIMALSEPARATOR],
          @DATEFORMAT = [DATEFORMAT],
          @FUZZYDATEFORMAT = [FUZZYDATEFORMAT],
          @MONTHDAYFORMAT = [MONTHDAYFORMAT],
          @HOURMINUTEFORMAT = [HOURMINUTEFORMAT],
          @CSVLINEBREAKCODE = [CSVLINEBREAKCODE]
        from dbo.[BUSINESSPROCESSEXPORTFORMAT]
          inner join [MKTSEGMENTATIONEXPORTPROCESSEXPORTFORMAT] on [BUSINESSPROCESSEXPORTFORMAT].[ID] = [MKTSEGMENTATIONEXPORTPROCESSEXPORTFORMAT].[ID]
          inner join [MKTSEGMENTATIONEXPORTPROCESS] on [MKTSEGMENTATIONEXPORTPROCESSEXPORTFORMAT].[PARAMETERSETID] = [MKTSEGMENTATIONEXPORTPROCESS].[ID]
        where
          [MKTSEGMENTATIONEXPORTPROCESS].[SEGMENTATIONID] = @SOURCESEGMENTATIONID;

        /* Insert values into new template */
        update 
          dbo.[BUSINESSPROCESSEXPORTFORMAT]
        set
          [CURRENCYSYMBOLDISPLAYSETTINGCODE] = @CURRENCYSYMBOLDISPLAYSETTINGCODE,
          [CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE] = @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE,
          [CURRENCYDECIMALDIGITS] = @CURRENCYDECIMALDIGITS,
          [CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE] = @CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE,
          [CURRENCYGROUPSEPARATOR] = @CURRENCYGROUPSEPARATOR,
          [CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE] = @CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE,
          [CURRENCYDECIMALSEPARATOR] = @CURRENCYDECIMALSEPARATOR,
          [DATEFORMAT] = @DATEFORMAT,
          [FUZZYDATEFORMAT] = @FUZZYDATEFORMAT,
          [MONTHDAYFORMAT] = @MONTHDAYFORMAT,
          [HOURMINUTEFORMAT] = @HOURMINUTEFORMAT,
          [CSVLINEBREAKCODE] = @CSVLINEBREAKCODE,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        from dbo.[BUSINESSPROCESSEXPORTFORMAT]
          inner join [MKTSEGMENTATIONEXPORTPROCESSEXPORTFORMAT] on [BUSINESSPROCESSEXPORTFORMAT].[ID] = [MKTSEGMENTATIONEXPORTPROCESSEXPORTFORMAT].[ID]
          inner join [MKTSEGMENTATIONEXPORTPROCESS] on [MKTSEGMENTATIONEXPORTPROCESSEXPORTFORMAT].[PARAMETERSETID] = [MKTSEGMENTATIONEXPORTPROCESS].[ID]
        where [MKTSEGMENTATIONEXPORTPROCESS].[SEGMENTATIONID] = @TARGETSEGMENTATIONID;

        /*****************************************/
        /* END:  Non-Public media effort section */
    /*****************************************/
      end

      /**********************************************************************************************/
      /* update RUNSEGMENTATIONSEGMENTCALCULATEPROCESS as it defaults to 1 when the effort is added */
      /**********************************************************************************************/
      declare @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS bit;
      select
        @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS = [RUNSEGMENTATIONSEGMENTCALCULATEPROCESS]
      from
        dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
      where 
        [SEGMENTATIONID] = @SOURCESEGMENTATIONID;

      update
        dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
      set 
        [RUNSEGMENTATIONSEGMENTCALCULATEPROCESS] = @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      where
        [SEGMENTATIONID] = @TARGETSEGMENTATIONID;


    /*********************************/
    /* Update the budget information */
    /*********************************/
    declare @BUDGETAMOUNT money;
    declare @FIXEDCOST money;
    declare @ORGANIZATIONBUDGETAMOUNT money;
    declare @ORGANIZATIONFIXEDCOST money;

    select
      @BUDGETAMOUNT = [BUDGETAMOUNT],
      @FIXEDCOST = [FIXEDCOST],
      @ORGANIZATIONBUDGETAMOUNT = [ORGANIZATIONBUDGETAMOUNT],
      @ORGANIZATIONFIXEDCOST = [ORGANIZATIONFIXEDCOST],
      @ORGANIZATIONCURRENCYEXCHANGERATEID = [ORGANIZATIONCURRENCYEXCHANGERATEID]
    from dbo.[MKTSEGMENTATIONBUDGET]
    where [ID] = @SOURCESEGMENTATIONID;

    update dbo.[MKTSEGMENTATIONBUDGET] set
      [BUDGETAMOUNT] = @BUDGETAMOUNT,
      [FIXEDCOST] = @FIXEDCOST,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE,
      [ORGANIZATIONBUDGETAMOUNT] = @ORGANIZATIONBUDGETAMOUNT,
      [ORGANIZATIONFIXEDCOST] = @ORGANIZATIONFIXEDCOST,
      [ORGANIZATIONCURRENCYEXCHANGERATEID] = @ORGANIZATIONCURRENCYEXCHANGERATEID
    where [ID] = @TARGETSEGMENTATIONID;


    /**********************************************************/
    /* Copy the mailing-level user defined source code parts. */
    /**********************************************************/
    declare SOURCECODEPARTCURSOR cursor local fast_forward for
      select 
        [MARKETINGPLANITEMID],
        [SOURCECODEITEMID],
        [LISTID],
        [CHANNELCODE],
        [CODE],
        [PARTDEFINITIONVALUESID]
      from dbo.[MKTSOURCECODEPART]
      where [SEGMENTATIONID] = @SOURCESEGMENTATIONID 
      and [SEGMENTATIONSEGMENTID] is null 
      and [SEGMENTATIONTESTSEGMENTID] is null;

    open SOURCECODEPARTCURSOR;
    fetch next from SOURCECODEPARTCURSOR into @MARKETINGPLANITEMID, @SOURCECODEITEMID, @LISTID, @CHANNELCODE, @CODE, @PARTDEFINITIONVALUESID;

    while (@@FETCH_STATUS = 0)
      begin
        if dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUE_GETAUTOINCREMENTSETTING](@PARTDEFINITIONVALUESID) = 1
          set @CODE = dbo.[UFN_MKTSOURCECODE_AUTOINCREMENTCODE](@PARTDEFINITIONVALUESID, @MAILINGTYPECODE);

        insert into dbo.[MKTSOURCECODEPART] (
          [SEGMENTATIONID],
          [MARKETINGPLANITEMID],
          [SOURCECODEITEMID],
          [LISTID],
          [CHANNELCODE],
          [CODE],
          [PARTDEFINITIONVALUESID],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        ) values (
          @TARGETSEGMENTATIONID,
          @MARKETINGPLANITEMID,
          @SOURCECODEITEMID,
          @LISTID,
          @CHANNELCODE,
          @CODE,
          @PARTDEFINITIONVALUESID,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        );

        fetch next from SOURCECODEPARTCURSOR into @MARKETINGPLANITEMID, @SOURCECODEITEMID, @LISTID, @CHANNELCODE, @CODE, @PARTDEFINITIONVALUESID;
      end

    close SOURCECODEPARTCURSOR;
 deallocate SOURCECODEPARTCURSOR;


    /*********************************/
    /* Copy any business units       */
    /*********************************/
    insert into dbo.[MKTSEGMENTATIONBUSINESSUNIT] (
      [ID],
      [MKTSEGMENTATIONID],
      [BUSINESSUNITCODEID],
      [PERCENTVALUE],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED]
    )
    select
      newid(),
      @TARGETSEGMENTATIONID,
      [BUSINESSUNITCODEID],
      [PERCENTVALUE],
      @CHANGEAGENTID,
      @CHANGEAGENTID,
      @CURRENTDATE,
      @CURRENTDATE
    from dbo.[MKTSEGMENTATIONBUSINESSUNIT]
    where [MKTSEGMENTATIONID] = @SOURCESEGMENTATIONID;


    /********************************/
    /* Copy the segments via cursor */
    /********************************/
    exec dbo.[USP_MKTSEGMENTATIONSEGMENT_COPYSEGMENTSFROMEFFORT] @TARGETSEGMENTATIONID, @CHANGEAGENTID, @CURRENTAPPUSERID, @SOURCESEGMENTATIONID;

    /*************************************/
    /* Copy any test mailings via cursor */
    /*************************************/
    if @MAILINGTYPECODE <> 4 and @COPYTESTMAILINGS = 1 
      begin
        declare @TESTMAILINGID uniqueidentifier;
        declare @NEWTESTMAILINGID uniqueidentifier;

        declare TESTMAILINGCURSOR cursor local fast_forward for
          select [MKTSEGMENTATION].[ID]
          from dbo.[MKTSEGMENTATION]
          where [MKTSEGMENTATION].[PARENTSEGMENTATIONID] = @SOURCESEGMENTATIONID;

        open TESTMAILINGCURSOR;
        fetch next from TESTMAILINGCURSOR into @TESTMAILINGID;

        while (@@FETCH_STATUS = 0)
        begin
          --@TESTMAILINGID goes in as the SOURCE SEGMENTATION ID, and comes out as the COPY's ID

          exec dbo.[USP_MKTSEGMENTATION_COPY_HELPER] @TESTMAILINGID output, @CURRENTAPPUSERID, @CHANGEAGENTID, 0, null, @COPYFORMAT;

          --Update the parent id

          update dbo.[MKTSEGMENTATION] set
            [PARENTSEGMENTATIONID] = @TARGETSEGMENTATIONID,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
          where [ID] = @TESTMAILINGID;

          fetch next from TESTMAILINGCURSOR into @TESTMAILINGID;
        end;

        close TESTMAILINGCURSOR;
        deallocate TESTMAILINGCURSOR;
      end

    --Return the new mailing ID...

    set @ID = @TARGETSEGMENTATIONID;
  end try

  begin catch
    exec dbo.USP_RAISE_ERROR;
    return 1;
  end catch

  return 0;