USP_DATAFORMTEMPLATE_ADD_MKTCOMMUNICATIONEFFORT

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@EFFORTCOMMUNICATIONTEMPLATEID uniqueidentifier IN
@EFFORTNAME nvarchar(100) 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
@MARKETINGPLANITEMID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_ADD_MKTCOMMUNICATIONEFFORT]
(
  @ID uniqueidentifier = null output,
  @CHANGEAGENTID uniqueidentifier = null,
  @EFFORTCOMMUNICATIONTEMPLATEID uniqueidentifier = null,
  @EFFORTNAME nvarchar(100) = '',
  @EFFORTNAMESCHEMETEXT xml = null,
  @EFFORTDESCRIPTION nvarchar(255) = '',
  @APPEALINFORMATION xml = null,
  @EFFORTCHANNELCODE tinyint = 255,
  @EFFORTSITEID uniqueidentifier = null,
  @EFFORTDUEDATE datetime = null,
  @EFFORTLAUNCHDATE datetime = null,
  @EFFORTALLOWRESERVINGFINDERNUMBERS bit = 0,
  @EFFORTALLOWSPECIFYBUDGET bit = 0,
  @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS bit = 0,
  @EFFORTBASECURRENCYID uniqueidentifier = null,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @MARKETINGPLANITEMID uniqueidentifier = null
)
as
  set nocount on;

  if @ID is null
    set @ID = newid();

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

  declare @CURRENTDATE datetime = getdate();

  begin try

    --load template values


      declare @OVERRIDEAPPEALBUSINESSUNITS bit;
      declare @DESCRIPTIONLOCKED bit;
      declare @APPEALLOCKED bit;
      declare @CHANNELCODELOCKED bit;
      declare @ALLOWRESERVINGFINDERNUMBERSLOCKED bit;
      declare @ALLOWSPECIFYBUDGETLOCKED bit;
      declare @ALLOWEXCLUDEPREVIOUSEFFORTSLOCKED bit;
      declare @SOURCECODEIDDEFAULT uniqueidentifier;
      declare @SOURCECODELOCKED bit;  
      declare @EXPORTDEFINITIONRECORDTYPE nvarchar(50);
      declare @EXPORTDEFINITIONRECORDTYPEID uniqueidentifier;
      declare @MAILEXPORTDEFINITIONID uniqueidentifier;
      declare @PHONEEXPORTDEFINITIONID uniqueidentifier;
      declare @EMAILEXPORTDEFINITIONID uniqueidentifier;
      declare @EXPORTDESCRIPTION nvarchar(255);
      declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;
      declare @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE tinyint;
      declare @CURRENCYDECIMALDIGITS int;
      declare @CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE tinyint;
      declare @CURRENCYGROUPSEPARATOR nvarchar(4);
      declare @CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE tinyint;
      declare @CURRENCYDECIMALSEPARATOR nvarchar(4);
      declare @ORGANIZATIONCURRENCYID uniqueidentifier;
      declare @DATEFORMAT nvarchar(50);
      declare @FUZZYDATEFORMAT nvarchar(50);
      declare @MONTHDAYFORMAT nvarchar(50);
      declare @HOURMINUTEFORMAT nvarchar(50);
      declare @CSVLINEBREAKCODE tinyint;
      declare @RUNSEGMENTATIONSEGMENTREFRESHPROCESS bit;
      declare @RUNMARKETINGEXCLUSIONSREPORT bit;
      declare @CACHESOURCEANALYSISRULEDATA bit;
      declare @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS bit;
      declare @RUNSEGMENTATIONSEGMENTREFRESHPROCESSACTIVATE bit;
      declare @RUNMARKETINGEXCLUSIONSREPORTACTIVATE bit;
      declare @CACHESOURCEANALYSISRULEDATAACTIVATE bit;
      declare @EXPORTAFTERACTIVATE bit;
      declare @USEADDRESSPROCESSING bit;
      declare @ADDRESSPROCESSINGOPTIONID uniqueidentifier;
      declare @NAMEFORMATPARAMETERID uniqueidentifier;
      declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint;
      declare @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime;
      declare @ENABLEHOUSEHOLDING bit;
      declare @HOUSEHOLDINGTYPECODE tinyint;
      declare @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS bit;
      declare @HOUSEHOLDINGONERECORDPERHOUSEHOLD bit;
      declare @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD bit;
      declare @DEFAULTKPIS xml;
      declare @INCLUDESELECTIONS xml;
      declare @EXCLUDESELECTIONS xml;
      declare @EXCLUDEDECEASED bit;
      declare @EXCLUDEINACTIVE bit;
      declare @EXCLUSIONASOFDATE datetime;
      declare @EXCLUSIONDATETYPECODE tinyint;
      declare @EXCLUSIONS xml;
      declare @ASKLADDEROVERRIDES xml;
      declare @SEEDS xml;
      declare @BUSINESSUNITS xml;
      declare @TEMPLATENAME nvarchar(100);
      declare @COMMUNICATIONNAMESCHEMEID uniqueidentifier;
      declare @NAMESCHEMENAME nvarchar(100);
      declare @NAMESCHEMEHASCOUNTER bit = 0;
      declare @COUNTERVALUE nvarchar(10);
      declare @COUNTER int = 0;
      declare @COUNTERFORMAT nvarchar(10);
      declare @TMPEFFORTNAME nvarchar(max) = '';
      declare @CODEVALUEID uniqueidentifier;
      declare @CODE nvarchar(10) = '';
      declare @PLANSOURCECODEID uniqueidentifier;
      declare @PLANCODE nvarchar(10);

      /* load values from plan */
      select top 1
        @PLANSOURCECODEID = [MKTMARKETINGPLANITEM].[SOURCECODEID],
        @PLANCODE = [MKTMARKETINGPLANITEM].[CODE]
      from dbo.[MKTMARKETINGPLANITEM]
      inner join dbo.[MKTMARKETINGPLAN] on [MKTMARKETINGPLAN].[ID] = [MKTMARKETINGPLANITEM].[MARKETINGPLANID]
      where dbo.[MKTMARKETINGPLANITEM].[ID] = @MARKETINGPLANITEMID;

      /* load existing communication template */
      exec dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTCOMMUNICATIONTEMPLATE]
        @ID = @EFFORTCOMMUNICATIONTEMPLATEID,
        @NAME = @TEMPLATENAME output,
        @CURRENTAPPUSERID = @CURRENTAPPUSERID,
        @BASECURRENCYID = @EFFORTBASECURRENCYID output,
        @OVERRIDEAPPEALBUSINESSUNITS = @OVERRIDEAPPEALBUSINESSUNITS output,
        @COMMUNICATIONNAMESCHEMEID = @COMMUNICATIONNAMESCHEMEID output,
        @DESCRIPTIONLOCKED = @DESCRIPTIONLOCKED output,
        @APPEALLOCKED = @APPEALLOCKED output,
        @CHANNELCODELOCKED = @CHANNELCODELOCKED output,
        @ALLOWRESERVINGFINDERNUMBERSLOCKED = @ALLOWRESERVINGFINDERNUMBERSLOCKED output,
        @ALLOWSPECIFYBUDGETLOCKED = @ALLOWSPECIFYBUDGETLOCKED output,
        @ALLOWEXCLUDEPREVIOUSEFFORTSLOCKED = @ALLOWEXCLUDEPREVIOUSEFFORTSLOCKED output,
        @SOURCECODEIDDEFAULT = @SOURCECODEIDDEFAULT output,
        @SOURCECODELOCKED = @SOURCECODELOCKED output,  
        @EXPORTDEFINITIONRECORDTYPE = @EXPORTDEFINITIONRECORDTYPE output,
        @EXPORTDEFINITIONRECORDTYPEID = @EXPORTDEFINITIONRECORDTYPEID output,
        @MAILEXPORTDEFINITIONID = @MAILEXPORTDEFINITIONID output,
        @PHONEEXPORTDEFINITIONID = @PHONEEXPORTDEFINITIONID output,
        @EMAILEXPORTDEFINITIONID = @EMAILEXPORTDEFINITIONID output,
        @EXPORTDESCRIPTION = @EXPORTDESCRIPTION output,
        @CURRENCYSYMBOLDISPLAYSETTINGCODE = @CURRENCYSYMBOLDISPLAYSETTINGCODE output,
        @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE = @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE output,
        @CURRENCYDECIMALDIGITS = @CURRENCYDECIMALDIGITS output,
        @CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE = @CURRENCYGROUPSEPARATORDISPLAYSETTINGCODE output,
        @CURRENCYGROUPSEPARATOR = @CURRENCYGROUPSEPARATOR output,
        @CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE = @CURRENCYDECIMALSEPARATORDISPLAYSETTINGCODE output,
        @CURRENCYDECIMALSEPARATOR = @CURRENCYDECIMALSEPARATOR output,
        @ORGANIZATIONCURRENCYID = @ORGANIZATIONCURRENCYID output,
        @DATEFORMAT = @DATEFORMAT output,
        @FUZZYDATEFORMAT = @FUZZYDATEFORMAT output,
        @MONTHDAYFORMAT = @MONTHDAYFORMAT output,
        @HOURMINUTEFORMAT = @HOURMINUTEFORMAT output,
        @CSVLINEBREAKCODE = @CSVLINEBREAKCODE output,
        @RUNSEGMENTATIONSEGMENTREFRESHPROCESS = @RUNSEGMENTATIONSEGMENTREFRESHPROCESS output,
        @RUNMARKETINGEXCLUSIONSREPORT = @RUNMARKETINGEXCLUSIONSREPORT output,
        @CACHESOURCEANALYSISRULEDATA = @CACHESOURCEANALYSISRULEDATA output,
        @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS = @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS output,
        @RUNSEGMENTATIONSEGMENTREFRESHPROCESSACTIVATE = @RUNSEGMENTATIONSEGMENTREFRESHPROCESSACTIVATE output,
        @RUNMARKETINGEXCLUSIONSREPORTACTIVATE = @RUNMARKETINGEXCLUSIONSREPORTACTIVATE output,
        @CACHESOURCEANALYSISRULEDATAACTIVATE = @CACHESOURCEANALYSISRULEDATAACTIVATE output,
        @EXPORTAFTERACTIVATE = @EXPORTAFTERACTIVATE output,
        @USEADDRESSPROCESSING = @USEADDRESSPROCESSING output,
        @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID output,
        @NAMEFORMATPARAMETERID = @NAMEFORMATPARAMETERID output,
        @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE output,
        @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE output,
        @ENABLEHOUSEHOLDING = @ENABLEHOUSEHOLDING output,
        @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE output,
        @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS output,
        @HOUSEHOLDINGONERECORDPERHOUSEHOLD = @HOUSEHOLDINGONERECORDPERHOUSEHOLD output,
        @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD output,
        @DEFAULTKPIS = @DEFAULTKPIS output,
        @INCLUDESELECTIONS = @INCLUDESELECTIONS output,
        @EXCLUDESELECTIONS = @EXCLUDESELECTIONS output,
        @EXCLUDEDECEASED = @EXCLUDEDECEASED output,
        @EXCLUDEINACTIVE = @EXCLUDEINACTIVE output,
        @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE output,
        @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE output,
        @EXCLUSIONS = @EXCLUSIONS output,
        @ASKLADDEROVERRIDES = @ASKLADDEROVERRIDES output,
        @SEEDS = @SEEDS output,
        @BUSINESSUNITS = @BUSINESSUNITS output;

      --load default values for those that were locked and editable on the effort Add form

      declare @ISBBEC bit = (case when dbo.[UFN_INSTALLEDPRODUCTS_PRODUCTIS]('BB9873D7-F1ED-430A-8AB4-F09F47056538') = 0 then 1 else 0 end);

      select
        @SOURCECODEIDDEFAULT = (case when @SOURCECODELOCKED = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[SOURCECODEID] else case when @PLANSOURCECODEID is null then @SOURCECODEIDDEFAULT else @PLANSOURCECODEID end end),
        @EFFORTDESCRIPTION = (case when @DESCRIPTIONLOCKED = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[DESCRIPTION] else @EFFORTDESCRIPTION end),
        @EFFORTCHANNELCODE = (case when @CHANNELCODELOCKED = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[CHANNELCODE] else @EFFORTCHANNELCODE end),
        @EFFORTALLOWRESERVINGFINDERNUMBERS = (case when @ALLOWRESERVINGFINDERNUMBERSLOCKED = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWRESERVINGFINDERNUMBERS] else @EFFORTALLOWRESERVINGFINDERNUMBERS end),
        @EFFORTALLOWSPECIFYBUDGET = (case when @ALLOWSPECIFYBUDGETLOCKED = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWSPECIFYBUDGET] else @EFFORTALLOWSPECIFYBUDGET end),
        @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS = (case when @ALLOWEXCLUDEPREVIOUSEFFORTSLOCKED = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWEXCLUDEPREVIOUSEFFORTS] else @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS end),
        @APPEALINFORMATION = (case when @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 [NAME] from dbo.[APPEAL] where [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 [DESCRIPTION] from dbo.[APPEAL] where [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;

      --convert attribute serializations to element based

      set @EXCLUDESELECTIONS = (
        select
          newid() as [ID],
          [SELECTIONID],
          [FILTERTYPECODE] 
        from dbo.[UFN_MKTCOMMUNICATIONTEMPLATEDEFAULTFILTERSELECTION_GETEXCLUDESELECTIONS_FROMITEMLISTXML](@EXCLUDESELECTIONS)
        for xml path('ITEM'),type,elements,root('EXCLUDESELECTIONS'),BINARY BASE64);

      set @INCLUDESELECTIONS = (
        select 
          newid() as [ID],
          [SELECTIONID],
          [FILTERTYPECODE]
        from dbo.[UFN_MKTCOMMUNICATIONTEMPLATEDEFAULTFILTERSELECTION_GETINCLUDESELECTIONS_FROMITEMLISTXML](@INCLUDESELECTIONS
        for xml path('ITEM'),type,elements,root('INCLUDESELECTIONS'),BINARY BASE64);

      set @EXCLUSIONS = (
          select
            newid() as [ID],
            [SOLICITCODEID] 
          from
            (
              select
                T.c.value('(SOLICITCODEID)[1]', 'uniqueidentifier') as [SOLICITCODEID]
              from
                @EXCLUSIONS.nodes('/EXCLUSIONS/ITEM') T(c)
            ) [KPIS] 
          for xml path('ITEM'),type,elements,root('EXCLUSIONS'),BINARY BASE64
      );

    -- KPIs

      set @DEFAULTKPIS = 
        (
          select 
            [KPICATALOGID] 
          from
            (
              select
                T.c.value('(@KPICATALOGID)[1]', 'uniqueidentifier') as [KPICATALOGID]
              from
                @DEFAULTKPIS.nodes('/DEFAULTKPIS/ITEM') T(c)
            ) [KPIS] 
          for xml path('ITEM'),type,elements,root('ACTIVATIONKPIS'),BINARY BASE64
        );

    -- business units

      set @BUSINESSUNITS = 
        (
          select 
            [BUSINESSUNITCODEID],
            [PERCENTVALUE] 
          from 
            (
              select
                T.c.value('(@BUSINESSUNITCODEID)[1]', 'uniqueidentifier') as [BUSINESSUNITCODEID],
                T.c.value('(@PERCENTVALUE)[1]', 'decimal(20, 4)') as [PERCENTVALUE]
              from @BUSINESSUNITS.nodes('/BUSINESSUNITS/ITEM') T(c)
            ) [BUSINESSUNITS]
          for xml path('ITEM'),type,elements,root('BUSINESSUNITS'),BINARY BASE64
        );

      --place the namescheme data into a table variable

      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;
      end

      --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 =  null;

      --update the name pattern counter if needed

      if @COMMUNICATIONNAMESCHEMEID is not null
        update
          dbo.[MKTCOMMUNICATIONNAMESCHEME]
        set
          [MAXCOUNTERVALUE] = @COUNTER
        where
          [ID] = @COMMUNICATIONNAMESCHEMEID;

      --check if the source code, if any, has an auto increment marketing effort part

      if @SOURCECODEIDDEFAULT is not null
      begin
        select
          @CODEVALUEID = [MKTSOURCECODEPARTDEFINITIONVALUES].[ID]
        from
          dbo.[MKTSOURCECODEITEM]
          inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID] and [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 0
          inner join dbo.[MKTSOURCECODEVALIDPARTVALUES] on [MKTSOURCECODEVALIDPARTVALUES].[MKTSOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID]
          inner join dbo.[MKTSOURCECODEPARTDEFINITIONVALUES] on [MKTSOURCECODEPARTDEFINITIONVALUES].[ID] = [MKTSOURCECODEVALIDPARTVALUES].[MKTSOURCECODEPARTDEFINITIONVALUESID]
        where
          [MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEIDDEFAULT;

        /* if this has a PLANCODE use it */
        if @PLANCODE is not null
          set @CODE = @PLANCODE;
        else
        begin
          /*Auto-Increment effort source code if auto-increment is enabled */
          if dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUE_GETAUTOINCREMENTSETTING](@CODEVALUEID) = 1
            set @CODE = isnull(dbo.[UFN_MKTSOURCECODE_AUTOINCREMENTCODE](@CODEVALUEID, 0), '');
        end
      end

      --some default templates have BBEC only features turned on.  If this is not BBEC, make sure those are cleared

      if @ISBBEC = 0
      begin
        set @USEADDRESSPROCESSING = 0;
        set @ADDRESSPROCESSINGOPTIONID = null;
        set @NAMEFORMATPARAMETERID = null;
        set @EXCLUSIONS = null;
        set @BUSINESSUNITS = null;
        set @OVERRIDEAPPEALBUSINESSUNITS = 0;
        set @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = 0;
      end
      -- if the Exclusion is set to 'TODAY' (for specific date the EXCLUSIONDATETYPECODE is 1) then we need to set EXCLUSIONASOFDATE to null

      if @EXCLUSIONDATETYPECODE = 0 
         set @EXCLUSIONASOFDATE = null;  

      --create the marketing effort

      exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATION]
          @ID = @ID output,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID,
          @CHANGEAGENTID = @CHANGEAGENTID,
          @CODE = @CODE,
          @NAME = @EFFORTNAME,
          @DESCRIPTION = @EFFORTDESCRIPTION,
          @INCLUDESELECTIONS = @INCLUDESELECTIONS,
          @EXCLUDESELECTIONS = @EXCLUDESELECTIONS,
          @MARKETINGPLANITEMID = @MARKETINGPLANITEMID,
          @SOURCECODEID = @SOURCECODEIDDEFAULT,
          @MAILDATE = @EFFORTLAUNCHDATE,
          @HOUSEHOLDINGTYPECODE = @HOUSEHOLDINGTYPECODE,
          @SITEID = @EFFORTSITEID,
          @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE,
          @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE,
          @EXCLUDEDECEASED = @EXCLUDEDECEASED,
          @EXCLUDEINACTIVE = @EXCLUDEINACTIVE,
          @EXCLUSIONS = @EXCLUSIONS,
          @USEADDRESSPROCESSING = @USEADDRESSPROCESSING,
          @ADDRESSPROCESSINGOPTIONID = @ADDRESSPROCESSINGOPTIONID,
          @NAMEFORMATPARAMETERID = @NAMEFORMATPARAMETERID,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE,
          @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE,
          @ACTIVATIONKPIS = @DEFAULTKPIS,
          @USEKPISASDEFAULT = 0,
          @APPEALINFORMATION = @APPEALINFORMATION,
          @RUNACTIVATEANDEXPORT = @EXPORTAFTERACTIVATE,
          @EXPORTDESCRIPTION = @EXPORTDESCRIPTION,
          @MAILEXPORTDEFINITIONID = @MAILEXPORTDEFINITIONID,
          @EMAILEXPORTDEFINITIONID = @EMAILEXPORTDEFINITIONID,
          @PHONEEXPORTDEFINITIONID = @PHONEEXPORTDEFINITIONID,
          @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD = @HOUSEHOLDINGINCLUDEINDIVIDUALSWITHNOHOUSEHOLD,
          @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS = @HOUSEHOLDINGINCLUDEHOUSEHOLDSWITHNOMEMBERS,
          @HOUSEHOLDINGONERECORDPERHOUSEHOLD = @HOUSEHOLDINGONERECORDPERHOUSEHOLD,
          @CODEVALUEID = @CODEVALUEID,
          @RUNSEGMENTATIONSEGMENTREFRESHPROCESS = @RUNSEGMENTATIONSEGMENTREFRESHPROCESS,
          @CACHESOURCEANALYSISRULEDATA = @CACHESOURCEANALYSISRULEDATA,
          @BUSINESSUNITS = @BUSINESSUNITS,
          @OVERRIDEBUSINESSUNITS = @OVERRIDEAPPEALBUSINESSUNITS,
          @BASECURRENCYID = @EFFORTBASECURRENCYID,
          @RUNMARKETINGEXCLUSIONSREPORT = @RUNMARKETINGEXCLUSIONSREPORT,
          @DUEDATE = @EFFORTDUEDATE,
          @CHANNELCODE = @EFFORTCHANNELCODE,
          @ALLOWRESERVINGFINDERNUMBERS = @EFFORTALLOWRESERVINGFINDERNUMBERS,
          @ALLOWSPECIFYBUDGET = @EFFORTALLOWSPECIFYBUDGET,
          @ALLOWEXCLUDEPREVIOUSEFFORTS = @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS;

      --save ask ladder overrides

      set @ASKLADDEROVERRIDES = (
        select 
          newid() as [ID], 
          [ASKLADDERID],
          [IDSETREGISTERID],
          [SEQUENCE
        from 
          (
            select
              T.c.value('(@ASKLADDERID)[1]', 'uniqueidentifier') as [ASKLADDERID],
              T.c.value('(@IDSETREGISTERID)[1]', 'uniqueidentifier') as [IDSETREGISTERID],
              T.c.value('(@SEQUENCE)[1]', 'int') as [SEQUENCE]
            from @ASKLADDEROVERRIDES.nodes('/ASKLADDEROVERRIDES/ITEM') T(c)  
          ) [ASKLADDEROVERRIDES]
          for xml path('ITEM'),type,elements,root('ITEMLIST'),BINARY BASE64);

      exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONASKLADDEROVERRIDES] @ID, @CHANGEAGENTID, @ASKLADDEROVERRIDES;

      --save seeds

      set @SEEDS = 
        (select 
          [ID],
          1 [SELECTED]
        from 
          (
            select
              T.c.value('(@SEEDID)[1]', 'uniqueidentifier') as [ID]
            from @SEEDS.nodes('/SEEDS/ITEM') T(c)
          ) [SEEDS]
        for xml path('ITEM'),type,elements,root('SEEDS'),BINARY BASE64);

      exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEED_2] @ID, @CHANGEAGENTID, @SEEDS;

      --save format options for currency/date

      update
        dbo.[BUSINESSPROCESSEXPORTFORMAT]
      set
        [CURRENCYDECIMALDIGITS] = @CURRENCYDECIMALDIGITS,
        [CURRENCYSYMBOLDISPLAYSETTINGCODE] = @CURRENCYSYMBOLDISPLAYSETTINGCODE,
        [CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE] = @CURRENCYDECIMALDIGITSDISPLAYSETTINGCODE,
        [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] = @ID;

      --copy template

      exec dbo.[USP_MKTCOMMUNICATIONTEMPLATE_COPY] @EFFORTCOMMUNICATIONTEMPLATEID output, @CURRENTAPPUSERID, @CHANGEAGENTID, @TEMPLATENAME, @ID;

      --copy name pattern

      if @COMMUNICATIONNAMESCHEMEID is not null
        begin
          select
            @NAMESCHEMENAME = [MKTCOMMUNICATIONNAMESCHEME].[NAME] 
          from
            dbo.[MKTCOMMUNICATIONNAMESCHEME]
          where 
            [MKTCOMMUNICATIONNAMESCHEME].[ID] = @COMMUNICATIONNAMESCHEMEID;

          exec dbo.[USP_MKTCOMMUNICATIONNAMESCHEME_COPY] @COMMUNICATIONNAMESCHEMEID output, @CURRENTAPPUSERID, @CHANGEAGENTID, @NAMESCHEMENAME, @ID;

          --update part values

          update
            dbo.[MKTCOMMUNICATIONNAMESCHEMEPART]
          set
            [MKTCOMMUNICATIONNAMESCHEMEPART].[COMMUNICATIONEFFORTVALUE] = case when [MKTCOMMUNICATIONNAMESCHEMEPART].[NAMEPARTTYPECODE] = 8 then @COUNTERVALUE else [NSP].[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)
            ) [NSP] on [NSP].[ID] = [MKTCOMMUNICATIONNAMESCHEMEPART].[MKTCOMMUNICATIONNAMESCHEMEID]
          where [MKTCOMMUNICATIONNAMESCHEMEPART].[SEQUENCE] = [NSP].[SEQUENCE] and [MKTCOMMUNICATIONNAMESCHEMEPART].[NAMEPARTTYPECODE] in (8, 10);

        end

      --save calculation options

      update dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
      set
        [RUNSEGMENTATIONSEGMENTREFRESHPROCESS] = @RUNSEGMENTATIONSEGMENTREFRESHPROCESS,
        [CACHESOURCEANALYSISRULEDATA] = @CACHESOURCEANALYSISRULEDATA,
        [RUNMARKETINGEXCLUSIONSREPORT] = @RUNMARKETINGEXCLUSIONSREPORT,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = getdate()
      from dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
      where [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[SEGMENTATIONID] = @ID;

      --save activation options

      update dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
      set
        [RUNSEGMENTATIONSEGMENTCALCULATEPROCESS] = @RUNSEGMENTATIONSEGMENTCALCULATEPROCESS,
        [RUNSEGMENTATIONSEGMENTREFRESHPROCESS] = @RUNSEGMENTATIONSEGMENTREFRESHPROCESSACTIVATE,
        [CACHESOURCEANALYSISRULEDATA] = @CACHESOURCEANALYSISRULEDATAACTIVATE,
        [RUNMARKETINGEXCLUSIONSREPORT] = @RUNMARKETINGEXCLUSIONSREPORTACTIVATE,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = getdate()
      from dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
      where [MKTSEGMENTATIONACTIVATEPROCESS].[SEGMENTATIONID] = @ID;

      --update the name on the plan item the mailings is from

      if @MARKETINGPLANITEMID is not null
        update dbo.[MKTMARKETINGPLANITEM] set 
          [NAME] = @EFFORTNAME,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [ID] = @MARKETINGPLANITEMID;

      if @SOURCECODEIDDEFAULT is not null
      begin

        if @MARKETINGPLANITEMID is null
        begin
          --save user defined source code parts

            with [SOURCECODEPARTDEFINITIONVALUES_CTE] ([MKTSOURCECODEITEMID], [MKTSOURCECODEPARTDEFINITIONVALUESID]) as
            (
              select
              [MKTSOURCECODEITEMID],
              [MKTSOURCECODEPARTDEFINITIONVALUESID]
              from
              dbo.[MKTSOURCECODEVALIDPARTVALUES]
            )
            insert into dbo.[MKTSOURCECODEPART]
              ([SEGMENTATIONID], [SOURCECODEITEMID], [CODE], [ADDEDBYID], [CHANGEDBYID], [DATEADDED], [DATECHANGED], [PARTDEFINITIONVALUESID])
              select
              @ID,
              [MKTSOURCECODEITEM].[ID],                    
              case
                when dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUE_GETAUTOINCREMENTSETTING]([SOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONVALUESID]) = 1
                then isnull(dbo.[UFN_MKTSOURCECODE_AUTOINCREMENTCODE]([SOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONVALUESID], 0), '')
                else ''
              end,                    
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE,
              @CURRENTDATE,
              [SOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONVALUESID]
              from
              dbo.[MKTSOURCECODEITEM]
              inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
              outer apply (              
                select top 1 
                [MKTSOURCECODEPARTDEFINITIONVALUESID]
                from [SOURCECODEPARTDEFINITIONVALUES_CTE]
                where [SOURCECODEPARTDEFINITIONVALUES_CTE].[MKTSOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] 
              ) as [SOURCECODEPARTDEFINITIONVALUES]
              where
              ([MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEIDDEFAULT)
              and ([MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 5);
            end
            else
          begin
            --save user defined source code parts

            with [SOURCECODEPARTDEFINITIONVALUES_CTE] ([MKTSOURCECODEITEMID], [MKTSOURCECODEPARTDEFINITIONVALUESID]) as
            (
              select
              [MKTSOURCECODEITEMID],
              [MKTSOURCECODEPARTDEFINITIONVALUESID]
              from
              dbo.[MKTSOURCECODEVALIDPARTVALUES]
            )
            insert into dbo.[MKTSOURCECODEPART]
              ([SEGMENTATIONID], [SOURCECODEITEMID], [CODE], [ADDEDBYID], [CHANGEDBYID], [DATEADDED], [DATECHANGED], [PARTDEFINITIONVALUESID])
              select
              @ID,
              [MKTSOURCECODEITEM].[ID],                    
              isnull((select [CODE] from dbo.[MKTSOURCECODEPART] where [MARKETINGPLANITEMID] = @MARKETINGPLANITEMID and [MKTSOURCECODEITEM].[ID] = [MKTSOURCECODEPART].[SOURCECODEITEMID]), ''),                    
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE,
              @CURRENTDATE,
              [SOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONVALUESID]
              from
              dbo.[MKTSOURCECODEITEM]
              inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
              outer apply (              
                select top 1 
                [MKTSOURCECODEPARTDEFINITIONVALUESID]
                from [SOURCECODEPARTDEFINITIONVALUES_CTE]
                inner join MKTSOURCECODEPARTDEFINITIONVALUES on MKTSOURCECODEPARTDEFINITIONVALUES.ID = SOURCECODEPARTDEFINITIONVALUES_CTE.[MKTSOURCECODEPARTDEFINITIONVALUESID]
                inner join MKTSOURCECODEPART on MKTSOURCECODEPART.PARTDEFINITIONVALUESID = MKTSOURCECODEPARTDEFINITIONVALUES.ID
                where [SOURCECODEPARTDEFINITIONVALUES_CTE].[MKTSOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and MKTSOURCECODEPART.MARKETINGPLANITEMID = @MARKETINGPLANITEMID
              ) as [SOURCECODEPARTDEFINITIONVALUES]
              where
              ([MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEIDDEFAULT)
              and ([MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 5);
            end
        end

  end try

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

  return 0;