USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONTESTSEGMENT_6

The save procedure used by the edit dataform template "Marketing Effort Test Segment Edit Form 3".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NAME nvarchar(100) IN Name
@DESCRIPTION nvarchar(255) IN Description
@CODE nvarchar(10) IN Code
@TESTSEGMENTCODE nvarchar(10) IN Test segment
@PACKAGEID uniqueidentifier IN Package
@PACKAGECODE nvarchar(10) IN Package code
@RESPONSERATE decimal(5, 2) IN Response rate
@GIFTAMOUNT money IN Gift amount
@SAMPLESIZE int IN Sample size
@SAMPLESIZETYPECODE tinyint IN Sample size type
@SAMPLESIZEMETHODCODE tinyint IN Sample size method
@ASKLADDERID uniqueidentifier IN Ask ladder
@PREFIXCODE tinyint IN Prepend list
@CODEVALUEID uniqueidentifier IN Code value ID
@TESTSEGMENTCODEVALUEID uniqueidentifier IN Test segment code value ID
@PACKAGECODEVALUEID uniqueidentifier IN Package code value ID
@ITEMLIST xml IN Items
@CHANNELSOURCECODE nvarchar(10) IN Channel source code
@CHANNELSOURCECODEVALUEID uniqueidentifier IN Channel code value ID
@FRACTION nvarchar(10) IN Fraction
@OVERRIDEBUSINESSUNITS bit IN Override business units
@BUSINESSUNITS xml IN Business units
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONTESTSEGMENT_6]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @NAME nvarchar(100),
  @DESCRIPTION nvarchar(255),
  @CODE nvarchar(10),
  @TESTSEGMENTCODE nvarchar(10),
  @PACKAGEID uniqueidentifier,
  @PACKAGECODE nvarchar(10),
  @RESPONSERATE decimal(5,2),
  @GIFTAMOUNT money,
  @SAMPLESIZE int,
  @SAMPLESIZETYPECODE tinyint,
  @SAMPLESIZEMETHODCODE tinyint,
  @ASKLADDERID uniqueidentifier,
  @PREFIXCODE tinyint,
  @CODEVALUEID uniqueidentifier,
  @TESTSEGMENTCODEVALUEID uniqueidentifier,
  @PACKAGECODEVALUEID uniqueidentifier,
  @ITEMLIST xml,
  @CHANNELSOURCECODE nvarchar(10),
  @CHANNELSOURCECODEVALUEID uniqueidentifier,
  @FRACTION nvarchar(10),
  @OVERRIDEBUSINESSUNITS bit,
  @BUSINESSUNITS xml,
  @CURRENTAPPUSERID uniqueidentifier
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @ACTIVE bit;
  declare @MAILINGTYPECODE tinyint;
  declare @PARENTSEGMENTID uniqueidentifier;
  declare @OLDSEGMENTATIONPACKAGEID uniqueidentifier;
  declare @OLDPACKAGEID uniqueidentifier;
  declare @OLDSAMPLESIZE int;
  declare @OLDSAMPLESIZETYPECODE tinyint;
  declare @OLDSAMPLESIZEMETHODCODE tinyint;
  declare @OLDFRACTION nvarchar(10);
  declare @OLDASKLADDERID uniqueidentifier;
  declare @CURRENTDATE datetime;
  declare @SEGMENTNAME nvarchar(100);
  declare @TESTSEGMENTNAME nvarchar(100);
  declare @SEGMENTCODE nvarchar(50);
  declare @BASECURRENCYID uniqueidentifier;
  declare @ORGANIZATIONCURRENCYID uniqueidentifier;
  declare @ORGANIZATIONGIFTAMOUNT money;
  declare @ORGANIZATIONCURRENCYEXCHANGERATEID uniqueidentifier;
  declare @DATEADDED datetime;
  declare @SEGMENTEDHOUSEFILEEXISTS bit;

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

    set @CURRENTDATE = getdate();

    select
      @SEGMENTATIONID = [MKTSEGMENTATION].[ID],
      @ACTIVE = [MKTSEGMENTATION].[ACTIVE],
      @MAILINGTYPECODE = [MKTSEGMENTATION].[MAILINGTYPECODE],
      @BASECURRENCYID = [MKTSEGMENTATIONTESTSEGMENT].[BASECURRENCYID],
      @ORGANIZATIONCURRENCYEXCHANGERATEID = [MKTSEGMENTATIONTESTSEGMENT].[ORGANIZATIONCURRENCYEXCHANGERATEID],
      @DATEADDED = [MKTSEGMENTATIONTESTSEGMENT].[DATEADDED],
      @SEGMENTEDHOUSEFILEEXISTS = dbo.[UFN_MKTCONSTITUENTFILEIMPORT_IMPORTTABLEEXISTS]([MKTSEGMENTATION].[ID])
    from dbo.[MKTSEGMENTATIONTESTSEGMENT]
    inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
    inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
    where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @ID;

    set @ORGANIZATIONCURRENCYID = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();

    if (@ORGANIZATIONCURRENCYID = @BASECURRENCYID)
      set @ORGANIZATIONGIFTAMOUNT = @GIFTAMOUNT;
    else
      begin
        if @ORGANIZATIONCURRENCYEXCHANGERATEID is null
          set @ORGANIZATIONCURRENCYEXCHANGERATEID = dbo.[UFN_CURRENCYEXCHANGERATE_GETLATEST](@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @DATEADDED, 0, null);

        set @ORGANIZATIONGIFTAMOUNT = dbo.[UFN_CURRENCY_CONVERT](@GIFTAMOUNT, @ORGANIZATIONCURRENCYEXCHANGERATEID);
      end

    if @ACTIVE = 1
      begin
        /* Save the test segment */
        update dbo.[MKTSEGMENTATIONTESTSEGMENT] set 
          [NAME] = @TESTSEGMENTNAME,
          [DESCRIPTION] = @DESCRIPTION,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [ID] = @ID;
      end
    else
      begin
        --Check if the mailing is currently being activated...

        exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;

        /* Grab the old packageID info before we save the test segment */
        select
          @PARENTSEGMENTID = [TESTSEG].[SEGMENTID],
        @OLDSEGMENTATIONPACKAGEID = (select [PAK].[ID] from dbo.[MKTSEGMENTATIONPACKAGE] as [PAK] where [PAK].[SEGMENTATIONID] = [SEG].[SEGMENTATIONID] and [PAK].[PACKAGEID] = [TESTSEG].[PACKAGEID]),
          @OLDPACKAGEID = [TESTSEG].[PACKAGEID],
          @OLDSAMPLESIZE = [TESTSEG].[SAMPLESIZE],
          @OLDSAMPLESIZETYPECODE = [TESTSEG].[SAMPLESIZETYPECODE],
          @OLDSAMPLESIZEMETHODCODE = [TESTSEG].[SAMPLESIZEMETHODCODE],
          @OLDFRACTION  = [TESTSEG].[FRACTION],
          @OLDASKLADDERID = [TESTSEG].[ASKLADDERID]
        from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [TESTSEG]
        inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SEG] on [SEG].[ID] = [TESTSEG].[SEGMENTID]
        where [TESTSEG].[ID] = @ID;

        --For acknowledgement mailings, don't allow the user to change the package...

        if @MAILINGTYPECODE = 1 and @PACKAGEID <> @OLDPACKAGEID
          set @PACKAGEID = @OLDPACKAGEID;

        /* Save the test segment */
        update dbo.[MKTSEGMENTATIONTESTSEGMENT] set 
          [PREFIXCODE] = @PREFIXCODE,
          [NAME] = @NAME,
          [DESCRIPTION] = @DESCRIPTION,
          [CODE] = @CODE,
          [PARTDEFINITIONVALUESID] = @CODEVALUEID,
          [TESTSEGMENTCODE] = @TESTSEGMENTCODE,
          [TESTPARTDEFINITIONVALUESID] = @TESTSEGMENTCODEVALUEID,
          [PACKAGEID] = @PACKAGEID,
          [RESPONSERATE] = @RESPONSERATE,
          [GIFTAMOUNT] = @GIFTAMOUNT,
          [SAMPLESIZE] = (case when @SEGMENTEDHOUSEFILEEXISTS = 1 then [SAMPLESIZE] else @SAMPLESIZE end),
          [SAMPLESIZETYPECODE] = (case when @SEGMENTEDHOUSEFILEEXISTS = 1 then [SAMPLESIZETYPECODE] else @SAMPLESIZETYPECODE end),
          [SAMPLESIZEMETHODCODE] = (case when @SEGMENTEDHOUSEFILEEXISTS = 1 then [SAMPLESIZEMETHODCODE] else @SAMPLESIZEMETHODCODE end),
          [ASKLADDERID] = @ASKLADDERID,
          [FRACTION] = case when @SAMPLESIZETYPECODE = 2 then @FRACTION else '' end,
          [OVERRIDEBUSINESSUNITS] = @OVERRIDEBUSINESSUNITS,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE,
          [ORGANIZATIONGIFTAMOUNT] = @ORGANIZATIONGIFTAMOUNT,
          [ORGANIZATIONCURRENCYEXCHANGERATEID] = @ORGANIZATIONCURRENCYEXCHANGERATEID
        where [ID] = @ID;

        if @OLDSAMPLESIZE <> @SAMPLESIZE or @OLDSAMPLESIZETYPECODE <> @SAMPLESIZETYPECODE or @OLDSAMPLESIZEMETHODCODE <> @SAMPLESIZEMETHODCODE or @OLDFRACTION <> @FRACTION or
          (@OLDASKLADDERID is null and @ASKLADDERID is not null) or (@OLDASKLADDERID is not null and @ASKLADDERID is null) or (@OLDASKLADDERID <> @ASKLADDERID)
          -- clear the cached information for the parent segment to force mailing data recalculation

          exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @PARENTSEGMENTID, 0, 1;

        /* Save and update the package for the test segment */
        if @OLDPACKAGEID <> @PACKAGEID
          begin
            /* Remove the old package, only if is not being used by any other segments and test segments */
            if not exists(select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @OLDPACKAGEID) and 
               not exists(select [MKTSEGMENTATIONTESTSEGMENT].[ID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID and [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = @OLDPACKAGEID)
              exec dbo.[USP_MKTSEGMENTATIONPACKAGE_DELETE] @OLDSEGMENTATIONPACKAGEID, @CHANGEAGENTID;

            /* Add the new package, only if it doesn't exist already */
            if not exists(select [ID] from dbo.[MKTSEGMENTATIONPACKAGE] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @PACKAGEID)
              exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONPACKAGE] null, @CHANGEAGENTID, @SEGMENTATIONID, @PACKAGEID;
          end

        /* Save business unit information if override has been specified */
        exec dbo.USP_MKTSEGMENTATIONTESTSEGMENTBUSINESSUNIT_GETBUSINESSUNITS_UPDATEFROMXML @ID, @BUSINESSUNITS, @CHANGEAGENTID     

        /* Update the package with the selected code */
        exec dbo.[USP_MKTPACKAGE_UPDATECODE] @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @CHANGEAGENTID, @CURRENTAPPUSERID;

        /* Save the source code information */
        exec dbo.[USP_MKTSOURCECODEPART_SEGMENTATIONTESTSEGMENT_GETITEMLIST3_UPDATEFROMXML] @ID, @ITEMLIST, @CHANGEAGENTID, @CURRENTDATE;

      end
  end try

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

  return 0;