USP_DATAFORMTEMPLATE_ADD_MKTTESTCOMMUNICATIONEFFORT

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@SEGMENTATIONID 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
@SAMPLESIZE int IN
@SAMPLESIZETYPECODE tinyint IN
@COPYFORMAT nvarchar(100) IN

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_ADD_MKTTESTCOMMUNICATIONEFFORT]
(
  @ID uniqueidentifier = null output,
  @CHANGEAGENTID uniqueidentifier = null,
  @SEGMENTATIONID uniqueidentifier,
  @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,
  @SAMPLESIZE int = 5,
  @SAMPLESIZETYPECODE tinyint = 0,
  @COPYFORMAT nvarchar(100) = null
)
as
  set nocount on;

  declare @PARENTID uniqueidentifier = @SEGMENTATIONID;

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

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

  declare @CURRENTDATE datetime = getdate();

  begin try

    --Check if the mailing is currently being activated...

    exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;

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

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

    select
      @EFFORTDESCRIPTION = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[DESCRIPTIONLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[DESCRIPTION] else @EFFORTDESCRIPTION end),
      @EFFORTCHANNELCODE = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[CHANNELCODELOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[CHANNELCODE] else @EFFORTCHANNELCODE end),
      @EFFORTALLOWRESERVINGFINDERNUMBERS = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWRESERVINGFINDERNUMBERSLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWRESERVINGFINDERNUMBERS] else @EFFORTALLOWRESERVINGFINDERNUMBERS end),
      @EFFORTALLOWSPECIFYBUDGET = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWSPECIFYBUDGETLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWSPECIFYBUDGET] else @EFFORTALLOWSPECIFYBUDGET end),
      @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWEXCLUDEPREVIOUSEFFORTSLOCKED] = 1 then [MKTCOMMUNICATIONTEMPLATEDEFAULT].[ALLOWEXCLUDEPREVIOUSEFFORTS] else @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS end),
      @APPEALINFORMATION = (case when [MKTCOMMUNICATIONTEMPLATEDEFAULT].[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;

    --make sure the name is unique if it is a manually entered name

    if @EFFORTNAMESCHEMETEXT is null
      exec dbo.[USP_MKTCOMMUNICATIONEFFORT_GETUNIQUENAME] 
        @COMMUNICATIONNAMESCHEMEID = null,
        @EFFORTNAMESCHEMETEXT = null,
        @EFFORTNAME = @EFFORTNAME output,
        @COUNTERVALUE = '1',
        @COUNTER = 1;

    --@SEGMENTATIONID goes in as the SOURCE SEGMENTATION ID, and comes out as the COPY's ID

    exec dbo.[USP_MKTSEGMENTATION_COPY_HELPER] @SEGMENTATIONID output, @CURRENTAPPUSERID, @CHANGEAGENTID, 0, null, @COPYFORMAT, @EFFORTNAMESCHEMETEXT;
    set @ID = @SEGMENTATIONID;

    --update the new effort with values the user is able to change

    update
      dbo.[MKTSEGMENTATION]
    set
      [DESCRIPTION] = @EFFORTDESCRIPTION,
      [CHANNELCODE] = @EFFORTCHANNELCODE,
      [SITEID] = @EFFORTSITEID,
      [MAILDATE] = @EFFORTLAUNCHDATE,
      [DUEDATE] = @EFFORTDUEDATE,
      [ALLOWRESERVINGFINDERNUMBERS] = @EFFORTALLOWRESERVINGFINDERNUMBERS,
      [ALLOWSPECIFYBUDGET] = @EFFORTALLOWSPECIFYBUDGET,
      [ALLOWEXCLUDEPREVIOUSEFFORTS] = @EFFORTALLOWEXCLUDEPREVIOUSEFFORTS,
      [NAME] = (case when @EFFORTNAMESCHEMETEXT is null then @EFFORTNAME else [NAME] end),
      [PARENTSEGMENTATIONID] = @PARENTID,
      [SAMPLESIZE] = @SAMPLESIZE,
      [SAMPLESIZETYPECODE] = @SAMPLESIZETYPECODE,
      [DATECHANGED] = [DATECHANGED],
      [CHANGEDBYID] = [CHANGEDBYID]
    where
      [ID] = @ID;

    --save appeal information

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

    --Copy in any test mailings as exclusions on the parent mailing...

    declare @PREVIOUSSEGMENTATIONID uniqueidentifier;
    declare SEGMENTATIONFILTERCURSOR cursor local fast_forward for
      select [ID]
      from [MKTSEGMENTATION]
      where [PARENTSEGMENTATIONID] = @PARENTID
      and [ACTIVE] = 1;

    open SEGMENTATIONFILTERCURSOR;
    fetch next from SEGMENTATIONFILTERCURSOR into @PREVIOUSSEGMENTATIONID;

    while (@@FETCH_STATUS = 0)
    begin
      if not exists(select [ID] from dbo.[MKTSEGMENTATIONFILTERSEGMENTATION] where [SEGMENTATIONID] = @ID and [PREVIOUSSEGMENTATIONID] = @PREVIOUSSEGMENTATIONID)
        exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONFILTERSEGMENTATION] null, @CHANGEAGENTID, @ID, @PREVIOUSSEGMENTATIONID;

      fetch next from SEGMENTATIONFILTERCURSOR into @PREVIOUSSEGMENTATIONID;
    end;

    close SEGMENTATIONFILTERCURSOR;
    deallocate SEGMENTATIONFILTERCURSOR;

    --Set all the segments to the correct sample size (only for non-vendormanaged segments)...

    update dbo.[MKTSEGMENTATIONSEGMENT] set
      [SAMPLESIZE] = @SAMPLESIZE,
      [SAMPLESIZETYPECODE] = @SAMPLESIZETYPECODE,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    from dbo.[MKTSEGMENTATIONSEGMENT] as [SS]
    inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [SS].[SEGMENTID]
    where [SS].[SEGMENTATIONID] = @ID
    and ([MKTSEGMENT].[SEGMENTTYPECODE] <> 2 or ([MKTSEGMENT].[SEGMENTTYPECODE] = 2 and dbo.[UFN_MKTSEGMENT_ISVENDORMANAGEDLIST]([MKTSEGMENT].[ID]) = 0));

    -- BTR CR287449-110707 11/20/2007

    -- respect sample size when creating test mailings for mailings with vendor managed list segments

    declare @SEGMENTATIONSEGMENTID uniqueidentifier;
    declare @SEGMENTID uniqueidentifier;
    declare @RENTALQUANTITY integer;
    declare @EXCHANGEQUANTITY integer;
    declare @BASERENTALCOST money;
    declare @BASERENTALCOSTBASISCODE tinyint;
    declare @BASEEXCHANGECOST money;
    declare @BASEEXCHANGECOSTBASISCODE tinyint;
    declare @RENTALCOSTADJUSTMENT money;
    declare @RENTALCOSTADJUSTMENTBASISCODE tinyint;
    declare @EXCHANGECOSTADJUSTMENT money;
    declare @EXCHANGECOSTADJUSTMENTBASISCODE tinyint;

    declare SEGMENTCURSOR cursor local fast_forward for
      select [MKTSEGMENTATIONSEGMENT].[ID], [MKTSEGMENT].[ID]
      from dbo.[MKTSEGMENTATIONSEGMENT]
      inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
      where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @ID
      and [MKTSEGMENT].[SEGMENTTYPECODE] = 2
      and dbo.[UFN_MKTSEGMENT_ISVENDORMANAGEDLIST]([MKTSEGMENT].[ID]) = 1;

    open SEGMENTCURSOR;
    fetch next from SEGMENTCURSOR into @SEGMENTATIONSEGMENTID, @SEGMENTID;

    while (@@FETCH_STATUS = 0)
    begin
      if exists(select top 1 1 from dbo.[MKTSEGMENTATIONSEGMENTLIST] where [ID] = @SEGMENTATIONSEGMENTID)
        begin
          select
            @RENTALQUANTITY = [RENTALQUANTITY],
            @EXCHANGEQUANTITY = [EXCHANGEQUANTITY]
          from dbo.[MKTSEGMENTATIONSEGMENTLIST]
          where [ID] = @SEGMENTATIONSEGMENTID;

          update dbo.[MKTSEGMENTATIONSEGMENTLIST] set
            [OVERRIDEQUANTITIESANDORSEGMENTCOSTS] = 1,
            [RENTALQUANTITY] = (case when @SAMPLESIZETYPECODE = 0 then -- percent

                                  floor(cast(@RENTALQUANTITY as decimal(20,5)) * (cast(@SAMPLESIZE as decimal(20,5)) / 100))
                                else -- records

                                  (case when @SAMPLESIZE < @RENTALQUANTITY then @SAMPLESIZE else @RENTALQUANTITY end)
                                end),
            [EXCHANGEQUANTITY] = (case when @SAMPLESIZETYPECODE = 0 then -- percent

                                    floor(cast(@EXCHANGEQUANTITY as decimal(20,5)) * (cast(@SAMPLESIZE as decimal(20,5)) / 100))
                                  else -- records

                                    (case when @SAMPLESIZE < @EXCHANGEQUANTITY then @SAMPLESIZE else @EXCHANGEQUANTITY end)
                                  end),
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
          where [ID] = @SEGMENTATIONSEGMENTID;
        end;
      else
        begin
          select
            @RENTALQUANTITY = [MKTSEGMENTLIST].[RENTALQUANTITY], 
            @EXCHANGEQUANTITY = [MKTSEGMENTLIST].[EXCHANGEQUANTITY],
            @BASERENTALCOST = [MKTLIST].[BASERENTALCOST],
            @BASERENTALCOSTBASISCODE = [MKTLIST].[BASERENTALCOSTBASISCODE],
            @BASEEXCHANGECOST = [MKTLIST].[BASEEXCHANGECOST],
            @BASEEXCHANGECOSTBASISCODE = [MKTLIST].[BASEEXCHANGECOSTBASISCODE],
            @RENTALCOSTADJUSTMENT = [MKTSEGMENTLIST].[RENTALCOSTADJUSTMENT],
            @RENTALCOSTADJUSTMENTBASISCODE = [MKTSEGMENTLIST].[RENTALCOSTBASISCODE],
            @EXCHANGECOSTADJUSTMENT = [MKTSEGMENTLIST].[EXCHANGECOSTADJUSTMENT],
            @EXCHANGECOSTADJUSTMENTBASISCODE = [MKTSEGMENTLIST].[EXCHANGECOSTBASISCODE]
          from dbo.[MKTSEGMENT]
          inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
          inner join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]
          where [MKTSEGMENT].[ID] = @SEGMENTID;

          insert into dbo.[MKTSEGMENTATIONSEGMENTLIST] (
            [ID],
            [OVERRIDEQUANTITIESANDORSEGMENTCOSTS],
            [OVERRIDELISTCOSTS],
            [BASERENTALCOST],
            [BASERENTALCOSTBASISCODE],
            [RENTALQUANTITY],
            [RENTALCOSTADJUSTMENT],
            [RENTALCOSTADJUSTMENTBASISCODE],
            [BASEEXCHANGECOST],
            [BASEEXCHANGECOSTBASISCODE],
            [EXCHANGEQUANTITY],
            [EXCHANGECOSTADJUSTMENT],
            [EXCHANGECOSTADJUSTMENTBASISCODE],
            [ADDEDBYID],
            [CHANGEDBYID],
            [DATEADDED],
            [DATECHANGED]
          ) values (
            @SEGMENTATIONSEGMENTID,
            1,
            0,
            @BASERENTALCOST,
            @BASERENTALCOSTBASISCODE,
            (case when @SAMPLESIZETYPECODE = 0 then 
              floor(cast(@RENTALQUANTITY as decimal(20,5)) * (cast(@SAMPLESIZE as decimal(20,5)) / 100))
            else
              (case when @SAMPLESIZE < @RENTALQUANTITY then @SAMPLESIZE else @RENTALQUANTITY end)
            end),
            @RENTALCOSTADJUSTMENT,
            @RENTALCOSTADJUSTMENTBASISCODE,
            @BASEEXCHANGECOST,
            @BASEEXCHANGECOSTBASISCODE,
            (case when @SAMPLESIZETYPECODE = 0 then 
              floor(cast(@EXCHANGEQUANTITY as decimal(20,5)) * (cast(@SAMPLESIZE as decimal(20,5)) / 100))
            else
              (case when @SAMPLESIZE < @EXCHANGEQUANTITY then @SAMPLESIZE else @EXCHANGEQUANTITY end)
            end),
            @EXCHANGECOSTADJUSTMENT,
            @EXCHANGECOSTADJUSTMENTBASISCODE,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
          );
        end;

      fetch next from SEGMENTCURSOR into @SEGMENTATIONSEGMENTID, @SEGMENTID;
    end;

  end try

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

  return 0;