USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENTGROUP

The save procedure used by the add dataform template "Marketing Effort Segment Group Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE nvarchar(100) IN Input parameter indicating the context ID for the record being added.
@MARKETINGPLANBRIEFID uniqueidentifier IN
@SEGMENTGROUPID uniqueidentifier IN Segment group
@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
@SEQUENCE int IN
@ASKLADDERS xml IN Ask ladders
@SAMPLESIZEEXCLUDEREMAINDER bit IN Exclude remaining records from the marketing effort
@TESTSEGMENTCODE nvarchar(10) IN Test segment
@OVERRIDEADDRESSPROCESSING bit IN Override address processing / name format rules
@USEADDRESSPROCESSING bit IN Use address processing?
@ADDRESSPROCESSINGOPTIONID uniqueidentifier IN Address processing options
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint IN Consider seasonal addresses as of
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime IN Consider seasonal addresses as of
@NAMEFORMATPARAMETERID uniqueidentifier IN Name format options
@PACKAGECODEVALUEID uniqueidentifier IN Package code value ID
@TESTSEGMENTCODEVALUEID uniqueidentifier IN Test segment code value ID
@OVERRIDEBUSINESSUNITS bit IN Override business units
@BUSINESSUNITS xml IN Business units
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@EXCLUDE bit IN Exclude from effort but show counts
@CHANNELCODEVALUEID uniqueidentifier IN
@CHANNELCODE nvarchar(10) IN

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENTGROUP]
(
  @ID uniqueidentifier = null output,
  @CHANGEAGENTID uniqueidentifier = null,    
  @SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE nvarchar(100),
  @MARKETINGPLANBRIEFID uniqueidentifier = null,
  @SEGMENTGROUPID uniqueidentifier,
  @PACKAGEID uniqueidentifier = null,
  @PACKAGECODE nvarchar(10) = '',
  @RESPONSERATE decimal(5,2) = 5,
  @GIFTAMOUNT money,
  @SAMPLESIZE int = 100,
  @SAMPLESIZETYPECODE tinyint = 0,
  @SAMPLESIZEMETHODCODE tinyint = 0,
  @SEQUENCE int,
  @ASKLADDERS xml = null,
  @SAMPLESIZEEXCLUDEREMAINDER bit = 1,
  @TESTSEGMENTCODE nvarchar(10) = '',
  @OVERRIDEADDRESSPROCESSING bit = 0,
  @USEADDRESSPROCESSING bit = 0,
  @ADDRESSPROCESSINGOPTIONID uniqueidentifier = null,
  @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint = 0,
  @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime = null,
  @NAMEFORMATPARAMETERID uniqueidentifier = null,
  @PACKAGECODEVALUEID uniqueidentifier = null,
  @TESTSEGMENTCODEVALUEID uniqueidentifier = null,
  @OVERRIDEBUSINESSUNITS bit = 0,
  @BUSINESSUNITS xml = null,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @EXCLUDE bit = 0,
  @CHANNELCODEVALUEID uniqueidentifier = null,
  @CHANNELCODE nvarchar(10) = ''
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @MAILINGTYPECODE tinyint;

  if charindex('|', @SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE, 1) > 0
    set @SEGMENTATIONID = convert(uniqueidentifier, substring(@SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE, 1, charindex('|', @SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE, 1) - 1));
  else
    set @SEGMENTATIONID = convert(uniqueidentifier, @SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE);

  declare @ASKLADDERID uniqueidentifier;
  declare @SEGMENTID uniqueidentifier;
  declare @SEGMENTCODE nvarchar(10);
  declare @SEGMENTCODEVALUEID uniqueidentifier;
  declare @SEGMENTTYPECODE tinyint;
  declare @ASKLADDERTABLE table ([RECORDSOURCEID] uniqueidentifier, [ASKLADDERID] uniqueidentifier null);

  select @MAILINGTYPECODE = [MAILINGTYPECODE] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID;

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

    exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;

    select 
      @PACKAGECODEVALUEID = case when @PACKAGECODEVALUEID is null then [PARTDEFINITIONVALUESID] else @PACKAGECODEVALUEID end,
      @PACKAGECODE = case when len(@PACKAGECODE) = 0 then [CODE] else @PACKAGECODE end,
      @CHANNELCODEVALUEID = case when @CHANNELCODEVALUEID is null then [CHANNELPARTDEFINITIONVALUESID] else @CHANNELCODEVALUEID end,
      @CHANNELCODE = case when len(@CHANNELCODE) = 0 then [CHANNELSOURCECODE] else @CHANNELCODE end
    from dbo.[MKTPACKAGE] 
    where [ID] = @PACKAGEID;

    if @SAMPLESIZETYPECODE = 0 and @SAMPLESIZE = 100
      set @SAMPLESIZEEXCLUDEREMAINDER = 1;

    if @ASKLADDERS is not null
      begin
        insert into @ASKLADDERTABLE
          select
            T.c.value('(RECORDSOURCEID)[1]', 'uniqueidentifier') as [RECORDSOURCEID],
            T.c.value('(ASKLADDERID)[1]', 'uniqueidentifier') as [ASKLADDERID]
          from @ASKLADDERS.nodes('/ASKLADDERS/ITEM') T(c);
      end

    declare SEGMENTCURSOR cursor local fast_forward for
      select 
        [MKTGROUPSEGMENTS].[SEGMENTID], 
        [MKTSEGMENT].[CODE],
        [MKTSEGMENT].[PARTDEFINITIONVALUESID],
        [MKTSEGMENT].[SEGMENTTYPECODE], 
        (select [ASKLADDERID] from @ASKLADDERTABLE where [RECORDSOURCEID] = [MKTSEGMENT].[QUERYVIEWCATALOGID])
      from dbo.[MKTGROUPSEGMENTS]
      inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTGROUPSEGMENTS].[SEGMENTID]
      where [MKTGROUPSEGMENTS].[SEGMENTGROUPID] = @SEGMENTGROUPID
      -- load constituent and list segments into appeal mailings, membership segments into membership mailings, sponsorship segments into sponsorship mailings

      -- (the addition of segments to acknowledgement mailings is not supported)

      and ((@MAILINGTYPECODE = 0 and [MKTSEGMENT].[SEGMENTTYPECODE] in (1, 2)) or (@MAILINGTYPECODE = 2 and [MKTSEGMENT].[SEGMENTTYPECODE] = 4) or (@MAILINGTYPECODE = 3 and [MKTSEGMENT].[SEGMENTTYPECODE] = 5))
      order by [MKTGROUPSEGMENTS].[SEQUENCE];

    open SEGMENTCURSOR;
    fetch next from SEGMENTCURSOR into @SEGMENTID, @SEGMENTCODE, @SEGMENTCODEVALUEID, @SEGMENTTYPECODE, @ASKLADDERID;

    while (@@FETCH_STATUS = 0)
      begin
        set @ID = null;

        if @SEGMENTTYPECODE in (1, 4, 5)  -- constituent / membership / sponsorship segment

          -- for the moment, the membership and sponsorship add forms just call this SP

          exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENT] 
            @ID output
            @CHANGEAGENTID
            @SEGMENTATIONID
            @MARKETINGPLANBRIEFID
            @SEGMENTID
            @SEGMENTCODE
            @TESTSEGMENTCODE
            @PACKAGEID
            @PACKAGECODE
            @RESPONSERATE
            @GIFTAMOUNT
            @SAMPLESIZE
            @SAMPLESIZETYPECODE
            @SAMPLESIZEMETHODCODE
            @SEQUENCE
            @ASKLADDERID
            @SAMPLESIZEEXCLUDEREMAINDER
            @OVERRIDEADDRESSPROCESSING
            @USEADDRESSPROCESSING
            @ADDRESSPROCESSINGOPTIONID
            @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
            @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
            @NAMEFORMATPARAMETERID,
            @SEGMENTCODEVALUEID,
            @TESTSEGMENTCODEVALUEID,
            @PACKAGECODEVALUEID,
            null,
            @CHANNELCODE,
            @CHANNELCODEVALUEID,
            0,
            @OVERRIDEBUSINESSUNITS,
            @BUSINESSUNITS,
            @CURRENTAPPUSERID,
            @EXCLUDE;

        else if @SEGMENTTYPECODE = 2 and @EXCLUDE = 0 -- list segment; list segments cannot be added as exclusions and thus if EXCLUDE is true

                                                      -- then the list segments in the group cannot be added (PACKAGEID will be null)

          exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENTLIST] 
            @ID output
            @CHANGEAGENTID
            @SEGMENTATIONID
            @SEGMENTID
            @MARKETINGPLANBRIEFID
            default
            @SEGMENTCODE
            @TESTSEGMENTCODE
            0
            default
            default
            default
            default
            default
            default
            @PACKAGEID
            @PACKAGECODE
            @RESPONSERATE
            @GIFTAMOUNT
            @SEQUENCE
            @ASKLADDERID,
            default,
            default,
            default,
            default,
            @SEGMENTCODEVALUEID,
            @TESTSEGMENTCODEVALUEID,
            @PACKAGECODEVALUEID,
            null,
            @CHANNELCODE,
            @CHANNELCODEVALUEID,
            default,
            default,
            @OVERRIDEBUSINESSUNITS,
            @BUSINESSUNITS,
            @CURRENTAPPUSERID;

        set @SEQUENCE = @SEQUENCE + 1;

        fetch next from SEGMENTCURSOR into @SEGMENTID, @SEGMENTCODE, @SEGMENTCODEVALUEID, @SEGMENTTYPECODE, @ASKLADDERID;
      end

    close SEGMENTCURSOR;
    deallocate SEGMENTCURSOR;

    /* Update the package with the selected code */
    exec dbo.[USP_MKTPACKAGE_UPDATECODE] @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELCODE, @CHANNELCODEVALUEID, @CHANGEAGENTID, @CURRENTAPPUSERID;
  end try

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

  return 0;