USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATION_6

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CODE nvarchar(10) IN
@NAME nvarchar(100) IN
@DESCRIPTION nvarchar(255) IN
@SITEID uniqueidentifier IN
@SOURCECODEID uniqueidentifier IN
@ITEMLIST xml IN
@MAILDATE datetime IN
@HOUSEHOLDINGTYPECODE tinyint IN
@EXCLUSIONDATETYPECODE tinyint IN
@EXCLUSIONASOFDATE datetime IN
@EXCLUDEDECEASED bit IN
@EXCLUDEINACTIVE bit IN
@EXCLUSIONS xml IN
@USEADDRESSPROCESSING bit IN
@ADDRESSPROCESSINGOPTIONID uniqueidentifier IN
@NAMEFORMATPARAMETERID uniqueidentifier IN
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint IN
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime IN
@ACTIVATIONKPIS xml IN
@USEKPISASDEFAULT bit IN
@APPEALINFORMATION xml IN
@RUNACTIVATEANDEXPORT bit IN
@EXPORTDESCRIPTION nvarchar(255) IN
@MAILEXPORTDEFINITIONID uniqueidentifier IN
@EMAILEXPORTDEFINITIONID uniqueidentifier IN
@PHONEEXPORTDEFINITIONID uniqueidentifier IN
@CODEVALUEID uniqueidentifier IN
@RUNSEGMENTATIONSEGMENTREFRESHPROCESS bit IN
@CACHESOURCEANALYSISRULEDATA bit IN
@BUSINESSUNITS xml IN
@OVERRIDEBUSINESSUNITS bit IN
@RUNMARKETINGEXCLUSIONSREPORT bit IN

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATION_6]
(
  @ID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @CODE nvarchar(10),
  @NAME nvarchar(100),
  @DESCRIPTION nvarchar(255),
  @SITEID uniqueidentifier,
  @SOURCECODEID uniqueidentifier,
  @ITEMLIST xml,
  @MAILDATE datetime,
  @HOUSEHOLDINGTYPECODE tinyint,
  @EXCLUSIONDATETYPECODE tinyint,
  @EXCLUSIONASOFDATE datetime,
  @EXCLUDEDECEASED bit,
  @EXCLUDEINACTIVE bit,
  @EXCLUSIONS xml,
  @USEADDRESSPROCESSING bit,
  @ADDRESSPROCESSINGOPTIONID uniqueidentifier,
  @NAMEFORMATPARAMETERID uniqueidentifier,
  @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint,
  @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime,
  @ACTIVATIONKPIS xml,
  @USEKPISASDEFAULT bit,
  @APPEALINFORMATION xml,
  @RUNACTIVATEANDEXPORT bit,
  @EXPORTDESCRIPTION nvarchar(255),
  @MAILEXPORTDEFINITIONID uniqueidentifier,
  @EMAILEXPORTDEFINITIONID uniqueidentifier,
  @PHONEEXPORTDEFINITIONID uniqueidentifier,
  @CODEVALUEID uniqueidentifier,
  @RUNSEGMENTATIONSEGMENTREFRESHPROCESS bit,
  @CACHESOURCEANALYSISRULEDATA bit,
  @BUSINESSUNITS xml,
  @OVERRIDEBUSINESSUNITS bit,
  @RUNMARKETINGEXCLUSIONSREPORT bit
)
as
  set nocount on;

  declare @CURRENTDATE datetime;
  declare @OLDNAME nvarchar(100);
  declare @OLDSOURCECODEID uniqueidentifier;
  declare @OLDHOUSEHOLDINGTYPECODE tinyint;
  declare @OLDUSEADDRESSPROCESSING bit;
  declare @OLDADDRESSPROCESSINGOPTIONID uniqueidentifier;
  declare @OLDADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint;
  declare @OLDADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime;
  declare @OLDEXCLUSIONDATETYPECODE as tinyint;
  declare @OLDEXCLUSIONASOFDATE as datetime;
  declare @OLDEXCLUDEDECEASED as bit;
  declare @OLDEXCLUDEINACTIVE as bit;
  declare @OLDEXCLUSIONS as xml;
  declare @CURRENTSITEID uniqueidentifier;
  declare @ACTIVE bit;
  declare @ISHISTORICAL bit;
  declare @MKTSEGMENTATIONACTIVATEPROCESSID uniqueidentifier;
  declare @ADDRESSPROCESSINGOPTIONSCHANGED bit;
  declare @EXCLUSIONSCHANGED bit;
  declare @SEGMENTATIONEXPORTPROCESSID uniqueidentifier;

  if @USEADDRESSPROCESSING = 0
    begin
      set @ADDRESSPROCESSINGOPTIONID = null;
      set @NAMEFORMATPARAMETERID = null;
      set @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = 0;
      set @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE = null;
    end;

  begin try
    select
      @ACTIVE = [MKTSEGMENTATION].[ACTIVE],
      @ISHISTORICAL = [MKTSEGMENTATION].[ISHISTORICAL],
      @SEGMENTATIONEXPORTPROCESSID = [MKTSEGMENTATIONEXPORTPROCESS].[ID],
      @OLDNAME = [MKTSEGMENTATION].[NAME],
      @OLDSOURCECODEID = [MKTSEGMENTATION].[SOURCECODEID],
      @OLDHOUSEHOLDINGTYPECODE = [MKTSEGMENTATION].[HOUSEHOLDINGTYPECODE],
      @OLDUSEADDRESSPROCESSING = [MKTSEGMENTATION].[USEADDRESSPROCESSING],
      @OLDADDRESSPROCESSINGOPTIONID = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONID],
      @OLDADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE],
      @OLDADDRESSPROCESSINGOPTIONSEASONALASOFDATE = [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONSEASONALASOFDATE],
      @OLDEXCLUSIONDATETYPECODE = [BUSINESSPROCESSCOMMPREF].[DATETYPECODE],
      @OLDEXCLUSIONASOFDATE = [BUSINESSPROCESSCOMMPREF].[ASOFDATE],
      @OLDEXCLUDEDECEASED = [BUSINESSPROCESSCOMMPREF].[EXCLUDEDECEASED],
      @OLDEXCLUDEINACTIVE = [BUSINESSPROCESSCOMMPREF].[EXCLUDEINACTIVE],
      @OLDEXCLUSIONS = dbo.[UFN_BUSINESSPROCESSCOMMPREF_GETEXCLUSIONS_TOITEMLISTXML]([MKTSEGMENTATIONACTIVATEPROCESS].[ID]),
      @CURRENTDATE = getdate()
    from dbo.[MKTSEGMENTATION]
    inner join dbo.[MKTSEGMENTATIONACTIVATEPROCESS] on [MKTSEGMENTATIONACTIVATEPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
    left outer join dbo.[MKTSEGMENTATIONEXPORTPROCESS] on [MKTSEGMENTATIONEXPORTPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
    left join dbo.[BUSINESSPROCESSCOMMPREF] on [BUSINESSPROCESSCOMMPREF].[BUSINESSPROCESSPARAMETERSETID] = [MKTSEGMENTATIONACTIVATEPROCESS].[ID]
    where [MKTSEGMENTATION].[ID] = @ID;

    if @ACTIVE = 0
      exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @ID;

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

    update dbo.[MKTSEGMENTATION] set
      [NAME] = @NAME,
      [DESCRIPTION] = @DESCRIPTION,
      [CODE] = @CODE,
      [PARTDEFINITIONVALUESID] = @CODEVALUEID,
      [SITEID] = @SITEID,
      [SOURCECODEID] = @SOURCECODEID,
      [MAILDATE] = @MAILDATE,
      [HOUSEHOLDINGTYPECODE] = @HOUSEHOLDINGTYPECODE,
      [USEADDRESSPROCESSING] = @USEADDRESSPROCESSING,
      [ADDRESSPROCESSINGOPTIONID] = case when @USEADDRESSPROCESSING = 1 then @ADDRESSPROCESSINGOPTIONID else null end,
      [ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE] = case when @USEADDRESSPROCESSING = 1 then @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE else 0 end,
      [ADDRESSPROCESSINGOPTIONSEASONALASOFDATE] = case when @USEADDRESSPROCESSING = 1 then @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE else null end,
      [NAMEFORMATPARAMETERID] = case when @USEADDRESSPROCESSING = 1 then @NAMEFORMATPARAMETERID else null end,
      [RUNACTIVATEANDEXPORT] = @RUNACTIVATEANDEXPORT,
      [OVERRIDEBUSINESSUNITS] = @OVERRIDEBUSINESSUNITS,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] = @ID;

    exec dbo.USP_MKTSEGMENTATIONBUSINESSUNIT_GETBUSINESSUNITS_UPDATEFROMXML @ID, @BUSINESSUNITS, @CHANGEAGENTID;  

    if @ACTIVE = 0
      exec dbo.[USP_MKTSOURCECODEPART_GETITEMLIST2_UPDATEFROMXML] @ID, @ITEMLIST, @CHANGEAGENTID, @CURRENTDATE;

    -- update any segment codes in this mailing with their base segment codes

    if isnull(cast(@OLDSOURCECODEID as varchar(36)),'') <> isnull(cast(@SOURCECODEID as varchar(36)),'')
      update dbo.[MKTSEGMENTATIONSEGMENT] set
        [CODE] = (case when @SOURCECODEID is null then '' else [MKTSEGMENT].[CODE] end),
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      from dbo.[MKTSEGMENTATIONSEGMENT] as [SS]
      inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [SS].[SEGMENTID]
      where [SS].[SEGMENTATIONID] = @ID;

    set @ADDRESSPROCESSINGOPTIONSCHANGED = dbo.[UFN_MKTSEGMENTATION_COMPAREADDRESSPROCESSINGOPTIONS](@USEADDRESSPROCESSING, @ADDRESSPROCESSINGOPTIONID, @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE, @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE, @OLDUSEADDRESSPROCESSING, @OLDADDRESSPROCESSINGOPTIONID, @OLDADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE, @OLDADDRESSPROCESSINGOPTIONSEASONALASOFDATE);
    set @EXCLUSIONSCHANGED = dbo.[UFN_MKTSEGMENTATION_COMPARECOMMPREFS](@EXCLUSIONDATETYPECODE, @EXCLUSIONASOFDATE, @EXCLUDEDECEASED, @EXCLUDEINACTIVE, @EXCLUSIONS, @OLDEXCLUSIONDATETYPECODE, @OLDEXCLUSIONASOFDATE, @OLDEXCLUDEDECEASED, @OLDEXCLUDEINACTIVE, @OLDEXCLUSIONS);

    if @ACTIVE = 0
      begin
        select @MKTSEGMENTATIONACTIVATEPROCESSID = [ID]
        from dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
        where [SEGMENTATIONID] = @ID;

        exec dbo.[USP_MKTSEGMENTATIONACTIVATEPROCESS_SAVE] @ID, @CHANGEAGENTID, 1, @RUNSEGMENTATIONSEGMENTREFRESHPROCESS, @CACHESOURCEANALYSISRULEDATA, @RUNMARKETINGEXCLUSIONSREPORT;

        if @EXCLUSIONSCHANGED = 1 
          exec dbo.[USP_BUSINESSPROCESSCOMMPREF_UPDATE]
            @CHANGEAGENTID = @CHANGEAGENTID,
            @BUSINESSPROCESSCATALOGID = '22C3D75C-A956-4BFC-A5FD-4B866BAEF509',
            @BUSINESSPROCESSPARAMETERSETID = @MKTSEGMENTATIONACTIVATEPROCESSID,
            @EXCLUSIONDATETYPECODE = @EXCLUSIONDATETYPECODE,
            @EXCLUSIONASOFDATE = @EXCLUSIONASOFDATE,
            @EXCLUDEDECEASED = @EXCLUDEDECEASED,
            @EXCLUDEINACTIVE = @EXCLUDEINACTIVE,
            @EXCLUSIONS = @EXCLUSIONS,
            @CURRENTAPPUSERID = @CURRENTAPPUSERID;
      end;

    -- if they changed the householding options or communication preferences, clear the cache tables so the cache will get rebuilt the next time they want record counts

    if @ACTIVE = 0 and (@HOUSEHOLDINGTYPECODE <> @OLDHOUSEHOLDINGTYPECODE or @ADDRESSPROCESSINGOPTIONSCHANGED = 1 or @EXCLUSIONSCHANGED = 1)
      exec dbo.[USP_MKTSEGMENTATION_CLEARCACHE] @ID, 1;

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

    update dbo.[MKTMARKETINGPLANITEM] set 
      [MKTMARKETINGPLANITEM].[NAME] = @NAME,
      [MKTMARKETINGPLANITEM].[CHANGEDBYID] = @CHANGEAGENTID,
      [MKTMARKETINGPLANITEM].[DATECHANGED] = @CURRENTDATE
    from [MKTSEGMENTATION]
    where [MKTSEGMENTATION].[ID] = @ID
    and [MKTMARKETINGPLANITEM].[ID] = [MKTSEGMENTATION].[MARKETINGPLANITEMID];

    -- update the name of any gift ID set associated with this mailing to reflect its name

    update dbo.[IDSETREGISTER] set
      [NAME] = @NAME + substring([NAME], len(@OLDNAME) + 1, 300),
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] in (
      select [NORMALGIFTIDSETREGISTERID] from dbo.[MKTSEGMENTATIONACTIVATE] where [SEGMENTATIONID] = @ID and [NORMALGIFTIDSETREGISTERID] is not null
      union all
      select [UNRESOLVEDGIFTIDSETREGISTERID] from dbo.[MKTSEGMENTATIONACTIVATE] where [SEGMENTATIONID] = @ID and [UNRESOLVEDGIFTIDSETREGISTERID] is not null
    )
    and [NAME] like (replace(replace(replace(@OLDNAME, '\', '\\'), '_', '\_'), '%', '\%') + ' (%)') escape '\';

    exec dbo.[USP_MKTSEGMENTATIONACTIVATEKPI_SAVEFIELD_FROMXML] 
      @ID,
      @ACTIVATIONKPIS,
      @USEKPISASDEFAULT,
      @CHANGEAGENTID,
      @CURRENTAPPUSERID;

    -- update the name of any KPIs associated with this marketing effort to reflect its name

    update dbo.[KPIINSTANCE] set
      [NAME] = @NAME + substring([NAME], len(@OLDNAME) + 1, 255),
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] in (
      select [KPIINSTANCE].[ID]
      from dbo.[MKTSEGMENTATIONACTIVATEKPI]
      inner join dbo.[KPIINSTANCE] on [KPIINSTANCE].[KPICATALOGID] = [MKTSEGMENTATIONACTIVATEKPI].[KPICATALOGID]
      where [MKTSEGMENTATIONACTIVATEKPI].[SEGMENTATIONID] = @ID
      and [KPIINSTANCE].[CONTEXTRECORDID] = cast([MKTSEGMENTATIONACTIVATEKPI].[SEGMENTATIONID] as nvarchar(36))
      and [KPIINSTANCE].[NAME] like (replace(replace(replace(@OLDNAME, '\', '\\'), '_', '\_'), '%', '\%') + ' - %') escape '\'
    );

    exec dbo.[USP_MKTSEGMENTATIONACTIVATE_SAVEFIELD_FROMXML]
      @ID,
      @APPEALINFORMATION,
      @CHANGEAGENTID;

    if @ISHISTORICAL = 0
      exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONEXPORTPROCESS_4]
        @SEGMENTATIONEXPORTPROCESSID,
        @CHANGEAGENTID,
        @ID, 
        @EXPORTDESCRIPTION,
        @MAILEXPORTDEFINITIONID,
        @EMAILEXPORTDEFINITIONID,
        @PHONEEXPORTDEFINITIONID;
  end try

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

  return 0;