USP_MKTACKNOWLEDGEMENTMAILINGTEMPLATEKPI_SAVEFIELD

Saves a KPI type for an marketing acknowledgement template.

Parameters

Parameter Parameter Type Mode Description
@ACKNOWLEDGEMENTTEMPLATEID uniqueidentifier IN
@ACTIVATIONKPIS xml IN
@DEFAULT bit IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTACKNOWLEDGEMENTMAILINGTEMPLATEKPI_SAVEFIELD]
(
  @ACKNOWLEDGEMENTTEMPLATEID uniqueidentifier,
  @ACTIVATIONKPIS xml,
  @DEFAULT bit,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @KPIS table ([KPICATALOGID] uniqueidentifier);
  declare @ID uniqueidentifier;
  declare @CURRENTDATE datetime;

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

    set @CURRENTDATE = getdate();

    insert into @KPIS
    select
      T.c.value('(KPICATALOGID)[1]', 'uniqueidentifier') as [KPICATALOGID]
    from @ACTIVATIONKPIS.nodes('/ACTIVATIONKPIS/ITEM') T(c);

    -- insert selected KPIs that aren't already selected

    insert into dbo.[MKTACKNOWLEDGEMENTMAILINGTEMPLATEKPI]
    (
      [ID],
      [ACKNOWLEDGEMENTTEMPLATEID],
      [KPICATALOGID],
      [ADDEDBYID],
      [DATEADDED],
      [CHANGEDBYID],
      [DATECHANGED]
    )
    select
      newid(),
      @ACKNOWLEDGEMENTTEMPLATEID,
      [I].[KPICATALOGID],
      @CHANGEAGENTID,
      @CURRENTDATE,
      @CHANGEAGENTID,
      @CURRENTDATE
    from @KPIS as [I]
    where not exists (select top 1 1 from dbo.[MKTACKNOWLEDGEMENTMAILINGTEMPLATEKPI] as [K]
                      where [K].[ACKNOWLEDGEMENTTEMPLATEID] = @ACKNOWLEDGEMENTTEMPLATEID
                      and [K].[KPICATALOGID] = [I].[KPICATALOGID]);

    -- delete KPIs that are no longer selected

    declare DELETECURSOR cursor local fast_forward for
      select [K].[ID]
      from dbo.[MKTACKNOWLEDGEMENTMAILINGTEMPLATEKPI] as [K]
      where [K].[ACKNOWLEDGEMENTTEMPLATEID] = @ACKNOWLEDGEMENTTEMPLATEID
      and not exists (select top 1 1 from @KPIS as [D]
                      where [K].[KPICATALOGID] = [D].[KPICATALOGID]);

    open DELETECURSOR;
    fetch next from DELETECURSOR into @ID;

    while (@@FETCH_STATUS = 0)
      begin
        exec dbo.[USP_MKTACKNOWLEDGEMENTMAILINGTEMPLATEKPI_DELETEBYID_WITHCHANGEAGENTID] @ID, @CHANGEAGENTID;
        fetch next from DELETECURSOR into @ID;
      end

    close DELETECURSOR;
    deallocate DELETECURSOR;

    if @DEFAULT = 1
      begin
        -- insert selected KPIs that aren't already defaults

        insert into dbo.[MKTSEGMENTATIONACTIVATEDEFAULTKPI]
        (
          [ID],
          [MAILINGTYPECODE],
          [KPICATALOGID],
          [ADDEDBYID],
          [DATEADDED],
          [CHANGEDBYID],
          [DATECHANGED]
        )
        select
          newid(),
          1,
          [I].[KPICATALOGID],
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CHANGEAGENTID,
          @CURRENTDATE
        from @KPIS as [I]
        where not exists (select top 1 1 from dbo.[MKTSEGMENTATIONACTIVATEDEFAULTKPI] as [K]
                          where [K].[MAILINGTYPECODE] = 1
                          and [K].[KPICATALOGID] = [I].[KPICATALOGID]);

        -- delete KPIs that are no longer defaults

        declare DELETECURSOR cursor local fast_forward for
          select [K].[ID]
          from dbo.[MKTSEGMENTATIONACTIVATEDEFAULTKPI] as [K]
          where [K].[MAILINGTYPECODE] = 1
          and not exists (select top 1 1 from @KPIS as [D]
                          where [K].[KPICATALOGID] = [D].[KPICATALOGID]);

        open DELETECURSOR;
        fetch next from DELETECURSOR into @ID;

        while (@@FETCH_STATUS = 0)
          begin
            exec dbo.[USP_MKTSEGMENTATIONACTIVATEDEFAULTKPI_DELETEBYID_WITHCHANGEAGENTID] @ID, @CHANGEAGENTID;
            fetch next from DELETECURSOR into @ID;
          end

        close DELETECURSOR;
        deallocate DELETECURSOR;
      end
  end try

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

  return 0;