USP_MKTSEGMENTATIONSEGMENTLIST_SAVE

Saves changes to an existing marketing effort list segment.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@SEGMENTID uniqueidentifier IN
@USAGECODE tinyint IN
@CODE nvarchar(10) IN
@TESTSEGMENTCODE nvarchar(10) IN
@OVERRIDEQUANTITIESANDORSEGMENTCOSTS bit IN
@RENTALQUANTITY int IN
@RENTALCOSTADJUSTMENT money IN
@RENTALCOSTADJUSTMENTBASISCODE tinyint IN
@EXCHANGEQUANTITY int IN
@EXCHANGECOSTADJUSTMENT money IN
@EXCHANGECOSTADJUSTMENTBASISCODE tinyint IN
@PACKAGEID uniqueidentifier IN
@PACKAGECODE nvarchar(10) IN
@RESPONSERATE decimal(5, 2) IN
@GIFTAMOUNT money IN
@SAMPLESIZE int IN
@SAMPLESIZETYPECODE tinyint IN
@SAMPLESIZEMETHODCODE tinyint IN
@SAMPLESIZEEXCLUDEREMAINDER bit IN
@ASKLADDERID uniqueidentifier IN
@CODEVALUEID uniqueidentifier IN
@TESTSEGMENTCODEVALUEID uniqueidentifier IN
@PACKAGECODEVALUEID uniqueidentifier IN
@ITEMLIST xml IN
@CHANNELSOURCECODE nvarchar(10) IN
@CHANNELSOURCECODEVALUEID uniqueidentifier IN
@LISTCODE nvarchar(10) IN
@LISTCODEVALUEID uniqueidentifier IN
@OVERRIDEBUSINESSUNITS bit IN
@BUSINESSUNITS xml IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATIONSEGMENTLIST_SAVE]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @SEGMENTID uniqueidentifier,
  @USAGECODE tinyint,
  @CODE nvarchar(10),
  @TESTSEGMENTCODE nvarchar(10),
  @OVERRIDEQUANTITIESANDORSEGMENTCOSTS bit,
  @RENTALQUANTITY integer,
  @RENTALCOSTADJUSTMENT money,
  @RENTALCOSTADJUSTMENTBASISCODE tinyint,
  @EXCHANGEQUANTITY integer,
  @EXCHANGECOSTADJUSTMENT money,
  @EXCHANGECOSTADJUSTMENTBASISCODE tinyint,
  @PACKAGEID uniqueidentifier,
  @PACKAGECODE nvarchar(10),
  @RESPONSERATE decimal(5,2),
  @GIFTAMOUNT money,
  @SAMPLESIZE int,
  @SAMPLESIZETYPECODE tinyint,
  @SAMPLESIZEMETHODCODE tinyint,
  @SAMPLESIZEEXCLUDEREMAINDER bit,
  @ASKLADDERID uniqueidentifier,
  @CODEVALUEID uniqueidentifier = null,
  @TESTSEGMENTCODEVALUEID uniqueidentifier = null,
  @PACKAGECODEVALUEID uniqueidentifier = null,
  @ITEMLIST xml = null,
  @CHANNELSOURCECODE nvarchar(10) = '',
  @CHANNELSOURCECODEVALUEID uniqueidentifier = null,
  @LISTCODE nvarchar(10) = '',
  @LISTCODEVALUEID uniqueidentifier = null,
  @OVERRIDEBUSINESSUNITS bit = 0,
  @BUSINESSUNITS xml = null,
  @CURRENTAPPUSERID uniqueidentifier = null
)
as
  set nocount on;

  declare @SEGMENTATIONACTIVE bit;
  declare @QUANTITIESANDORVARIABLECOSTSWEREOVERRIDDEN bit;
  declare @CURRENTDATE datetime;
  declare @RECEIVEDVIACODE tinyint;
  declare @BASERENTALCOST money;
  declare @BASERENTALCOSTBASISCODE tinyint;
  declare @BASEEXCHANGECOST money;
  declare @BASEEXCHANGECOSTBASISCODE tinyint;

  begin try
    select
      @SEGMENTATIONACTIVE = [MKTSEGMENTATION].[ACTIVE],
      @QUANTITIESANDORVARIABLECOSTSWEREOVERRIDDEN = isnull([MKTSEGMENTATIONSEGMENTLIST].[OVERRIDEQUANTITIESANDORSEGMENTCOSTS], 0)
    from dbo.[MKTSEGMENTATIONSEGMENT]
    inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
    left outer join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
    where [MKTSEGMENTATIONSEGMENT].[ID] = @ID;

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

    set @CURRENTDATE = getdate();

    --Don't allow the user to set the sample size fields for a vendor managed segment...

    if dbo.[UFN_MKTSEGMENT_ISVENDORMANAGEDLIST](@SEGMENTID) = 1
      begin
        set @SAMPLESIZE = 100;
        set @SAMPLESIZETYPECODE = 0;
        set @SAMPLESIZEMETHODCODE = 0;
        set @SAMPLESIZEEXCLUDEREMAINDER = 1;
      end

    exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_8]
      @ID,
      @CHANGEAGENTID,
      @SEGMENTID,
      @CODE,
      @TESTSEGMENTCODE,
      @PACKAGEID,
      @PACKAGECODE,
      @RESPONSERATE,
      @GIFTAMOUNT,
      @SAMPLESIZE,
      @SAMPLESIZETYPECODE,
      @SAMPLESIZEMETHODCODE,
      @SAMPLESIZEEXCLUDEREMAINDER,
      @ASKLADDERID,
      0,
      0,
      null,
      0,
      null,
      null,
      @CODEVALUEID,
      @PACKAGECODEVALUEID,
      @TESTSEGMENTCODEVALUEID,
      @ITEMLIST,
      @CHANNELSOURCECODE,
      @CHANNELSOURCECODEVALUEID,
      0,
      @OVERRIDEBUSINESSUNITS,
      @BUSINESSUNITS,
      @CURRENTAPPUSERID,
      0;

    /* Update the list with the selected code */
    declare @OLDLISTCODE nvarchar(10);
    declare @OLDLISTCODEVALUEID uniqueidentifier;
    declare @LISTID uniqueidentifier;

    /* Get the list ID for the segment */
    select
      @LISTID = [MKTSEGMENTLIST].[LISTID]
    from dbo.[MKTSEGMENT]
      inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
    where [MKTSEGMENT].[ID] = @SEGMENTID;

    select
      @OLDLISTCODE = isnull([CODE], ''),
      @OLDLISTCODEVALUEID = [PARTDEFINITIONVALUESID],
      @CODE = isnull(@LISTCODE, '')
    from dbo.[MKTLIST]
    where [ID] = @LISTID;

    /* Update the segment code if the old code value ID is nothing and the segment code value ID is supplied */
    if @LISTCODEVALUEID is not null and (@OLDLISTCODEVALUEID is null or @OLDLISTCODE <> @LISTCODE)
      update dbo.[MKTLIST] set
        [CODE] = @LISTCODE,
        [PARTDEFINITIONVALUESID] = @LISTCODEVALUEID,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      where [ID] = @LISTID;

    /* save the usage code */
    update dbo.[MKTSEGMENTATIONSEGMENT] set
      [USAGECODE] = @USAGECODE,
      [OVERRIDEBUSINESSUNITS] = @OVERRIDEBUSINESSUNITS,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] = @ID;

    /* business units */
    exec dbo.USP_MKTSEGMENTATIONSEGMENTBUSINESSUNIT_GETBUSINESSUNITS_UPDATEFROMXML @ID, @BUSINESSUNITS, @CHANGEAGENTID;  

    /* an activated mailing is always in an overridden state - any segment that didn't have its values overridden by 
       the client before activation will have a row in MKTSEGMENTATIONSEGMENTLIST with OVERRIDEQUANTITIESANDORSEGMENTCOSTS = 0
       which was created by the activation
       (it's done this way so that the ROLLBACK sp knows which rows in this table to delete if activation fails) */

    if @OVERRIDEQUANTITIESANDORSEGMENTCOSTS = 1
      begin
        if @QUANTITIESANDORVARIABLECOSTSWEREOVERRIDDEN <> @OVERRIDEQUANTITIESANDORSEGMENTCOSTS
          begin
            -- override was set from false to true

            -- row might already exist because a list cost was overridden

            if not exists(select top 1 1 from dbo.[MKTSEGMENTATIONSEGMENTLIST] where [ID] = @ID
              insert into dbo.[MKTSEGMENTATIONSEGMENTLIST] (
                [ID],
                [OVERRIDEQUANTITIESANDORSEGMENTCOSTS],
                [BASERENTALCOST],
                [BASERENTALCOSTBASISCODE],
                [RENTALQUANTITY],
                [RENTALCOSTADJUSTMENT],
                [RENTALCOSTADJUSTMENTBASISCODE],
                [BASEEXCHANGECOST],
                [BASEEXCHANGECOSTBASISCODE],
                [EXCHANGEQUANTITY],
                [EXCHANGECOSTADJUSTMENT],
                [EXCHANGECOSTADJUSTMENTBASISCODE],
                [ADDEDBYID],
                [CHANGEDBYID],
                [DATEADDED],
                [DATECHANGED]
              )
              select 
                @ID,
                1,
                [MKTLIST].[BASERENTALCOST],
                [MKTLIST].[BASERENTALCOSTBASISCODE],
                @RENTALQUANTITY,
                @RENTALCOSTADJUSTMENT,
                @RENTALCOSTADJUSTMENTBASISCODE,
                [MKTLIST].[BASEEXCHANGECOST],
                [MKTLIST].[BASEEXCHANGECOSTBASISCODE],
                @EXCHANGEQUANTITY,
                @EXCHANGECOSTADJUSTMENT,
                @EXCHANGECOSTADJUSTMENTBASISCODE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
              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;
            else
              update dbo.[MKTSEGMENTATIONSEGMENTLIST] set 
                [OVERRIDEQUANTITIESANDORSEGMENTCOSTS] = 1,
                [RENTALQUANTITY] = @RENTALQUANTITY,
                [RENTALCOSTADJUSTMENT] = @RENTALCOSTADJUSTMENT,
                [RENTALCOSTADJUSTMENTBASISCODE] = @RENTALCOSTADJUSTMENTBASISCODE,
                [EXCHANGEQUANTITY] = @EXCHANGEQUANTITY,
                [EXCHANGECOSTADJUSTMENT] = @EXCHANGECOSTADJUSTMENT,
                [EXCHANGECOSTADJUSTMENTBASISCODE] = @EXCHANGECOSTADJUSTMENTBASISCODE,
                [CHANGEDBYID] = @CHANGEAGENTID,
                [DATECHANGED] = @CURRENTDATE
              where [ID] = @ID;
          end
        else
     -- override was already true

          update dbo.[MKTSEGMENTATIONSEGMENTLIST] set 
            [RENTALQUANTITY] = @RENTALQUANTITY,
            [RENTALCOSTADJUSTMENT] = @RENTALCOSTADJUSTMENT,
            [RENTALCOSTADJUSTMENTBASISCODE] = @RENTALCOSTADJUSTMENTBASISCODE,
            [EXCHANGEQUANTITY] = @EXCHANGEQUANTITY,
            [EXCHANGECOSTADJUSTMENT] = @EXCHANGECOSTADJUSTMENT,
            [EXCHANGECOSTADJUSTMENTBASISCODE] = @EXCHANGECOSTADJUSTMENTBASISCODE,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
           where [ID] = @ID;
      end
    else -- @OVERRIDEQUANTITIESANDORSEGMENTCOSTS = 0

      -- restore values from segment

      update dbo.[MKTSEGMENTATIONSEGMENTLIST] set 
        [OVERRIDEQUANTITIESANDORSEGMENTCOSTS] = 0,
        [BASERENTALCOST] = (case when [MKTSEGMENTATIONSEGMENTLIST].[OVERRIDELISTCOSTS] = 1 then [MKTSEGMENTATIONSEGMENTLIST].[BASERENTALCOST] else [MKTLIST].[BASERENTALCOST] end),
        [BASERENTALCOSTBASISCODE] = (case when [MKTSEGMENTATIONSEGMENTLIST].[OVERRIDELISTCOSTS] = 1 then [MKTSEGMENTATIONSEGMENTLIST].[BASERENTALCOSTBASISCODE] else [MKTLIST].[BASERENTALCOSTBASISCODE] end),
        [RENTALQUANTITY] = [MKTSEGMENTLIST].[RENTALQUANTITY],
        [RENTALCOSTADJUSTMENT] = [MKTSEGMENTLIST].[RENTALCOSTADJUSTMENT],
        [RENTALCOSTADJUSTMENTBASISCODE] = [MKTSEGMENTLIST].[RENTALCOSTBASISCODE],
        [BASEEXCHANGECOST] = (case when [MKTSEGMENTATIONSEGMENTLIST].[OVERRIDELISTCOSTS] = 1 then [MKTSEGMENTATIONSEGMENTLIST].[BASEEXCHANGECOST] else [MKTLIST].[BASEEXCHANGECOST] end),
        [BASEEXCHANGECOSTBASISCODE] = (case when [MKTSEGMENTATIONSEGMENTLIST].[OVERRIDELISTCOSTS] = 1 then [MKTSEGMENTATIONSEGMENTLIST].[BASEEXCHANGECOSTBASISCODE] else [MKTLIST].[BASEEXCHANGECOSTBASISCODE] end),
        [EXCHANGEQUANTITY] = [MKTSEGMENTLIST].[EXCHANGEQUANTITY],
        [EXCHANGECOSTADJUSTMENT] = [MKTSEGMENTLIST].[EXCHANGECOSTADJUSTMENT],
        [EXCHANGECOSTADJUSTMENTBASISCODE] = [MKTSEGMENTLIST].[EXCHANGECOSTBASISCODE],
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      from dbo.[MKTSEGMENTATIONSEGMENTLIST]
      inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[ID]
      inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
      inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
      inner join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]
      where [MKTSEGMENTATIONSEGMENTLIST].[ID] = @ID;
  end try

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

  return 0;