USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTGENERATE

The save procedure used by the add dataform template "Segment Generate 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.
@QUERYVIEWCATALOGID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@RECORDTYPEID uniqueidentifier IN Record type
@GROUPNAME nvarchar(50) IN Group Name
@SEGMENTS xml IN Segments
@CODEVALUEID uniqueidentifier IN Segment
@GROUPID uniqueidentifier IN Group
@SEGMENTTYPECODE tinyint IN Segment type code
@RECORDSOURCEID uniqueidentifier IN Record source ID
@SITEID uniqueidentifier IN Site

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTGENERATE]
(
  @ID uniqueidentifier = null output,
  @CHANGEAGENTID uniqueidentifier = null,    
  @QUERYVIEWCATALOGID uniqueidentifier,
  @RECORDTYPEID uniqueidentifier = null,
  @GROUPNAME nvarchar(50) = '',
  @SEGMENTS xml = null,
  @CODEVALUEID uniqueidentifier = null,
  @GROUPID uniqueidentifier = null,
  @SEGMENTTYPECODE tinyint,
  @RECORDSOURCEID uniqueidentifier,
  @SITEID uniqueidentifier = null
)
as
  set nocount on;

  declare @CURRENTDATE datetime;
  declare @PARENTSEGMENTID uniqueidentifier;
  declare @RENTALCOSTADJUSTMENT money;
  declare @RENTALCOSTBASISCODE tinyint;
  declare @EXCHANGECOSTADJUSTMENT money;
  declare @EXCHANGECOSTBASISCODE tinyint;

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

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

    -- grab some extra fields for list segments

    if @SEGMENTTYPECODE = 2
      select
        @PARENTSEGMENTID = [MKTSEGMENT].[ID],
        @RENTALCOSTADJUSTMENT = [MKTSEGMENTLIST].[RENTALCOSTADJUSTMENT],
        @RENTALCOSTBASISCODE = [MKTSEGMENTLIST].[RENTALCOSTBASISCODE],
        @EXCHANGECOSTADJUSTMENT = [MKTSEGMENTLIST].[EXCHANGECOSTADJUSTMENT],
        @EXCHANGECOSTBASISCODE = [MKTSEGMENTLIST].[EXCHANGECOSTBASISCODE]
      from dbo.[MKTSEGMENTLIST]
      inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[CURRENTSEGMENTLISTID] = [MKTSEGMENTLIST].[ID]
      where [MKTSEGMENTLIST].[QUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID;

    declare @SEGMENTNAME nvarchar(100);
    declare @CODE nvarchar(10);
    declare @SELECTIONS xml;
    declare @SEQUENCE int;

    declare SEGMENTSCURSOR cursor for
      select 
        T.c.value('(../SEGMENTNAME)[1]', 'nvarchar(100)') as [SEGMENTNAME],
        T.c.value('(../SEGMENTCODE)[1]', 'nvarchar(10)') as [SEGMENTCODE],
        T.c.query('.') as [SELECTIONS]
      from @SEGMENTS.nodes('/SEGMENTS/ITEM/SELECTIONS') T(c);

    open SEGMENTSCURSOR;
    fetch next from SEGMENTSCURSOR into @SEGMENTNAME, @CODE, @SELECTIONS;

    select @SEQUENCE = isnull(max([SEQUENCE]) + 1, 0) from dbo.[MKTGROUPSEGMENTS] where [SEGMENTGROUPID] = @GROUPID;

    while (@@FETCH_STATUS = 0)
      begin
        set @ID = newid();
        set @SEGMENTNAME = dbo.[UFN_MKTSEGMENT_GETUNIQUENAME](@ID, @SEGMENTNAME, null);

        if @SEGMENTTYPECODE = 1  --Constituent

          exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENT] 
            @ID output
            @CHANGEAGENTID
            @RECORDSOURCEID
            @SEGMENTNAME
            ''
            @CODE,
            @SELECTIONS,
            null,
            1,
            null,
            @CODEVALUEID,
            @SITEID;

        else if @SEGMENTTYPECODE = 2  --List

          begin
            declare @SELECTIONIDS nvarchar(max);
            declare @DATALOADED bit;
            declare @NUMROWS int;

            -- get the record count of the combined selections so we can pass it in as the rental quantity of the segment

            select @SELECTIONIDS = stuff((select ',' + cast([SELECTIONID] as nvarchar(36)) from dbo.[UFN_MKTSEGMENT_GETSELECTIONS_FROMITEMLISTXML](@SELECTIONS) for xml path('')), 1, 1, '');
            exec dbo.[USP_DATAFORMTEMPLATE_VIEW_MKTSEGMENTLISTBYSELECTIONRECORDCOUNT] @SELECTIONIDS, @DATALOADED output, @NUMROWS output;

            if @DATALOADED = 1
              exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTLISTBYSELECTION] @ID output, @CHANGEAGENTID, @SEGMENTNAME, '', null, @CODE, @PARENTSEGMENTID, @SELECTIONS, @NUMROWS, @RENTALCOSTADJUSTMENT, @RENTALCOSTBASISCODE, 0, @EXCHANGECOSTADJUSTMENT, @EXCHANGECOSTBASISCODE, null, @CODEVALUEID;
          end
        else if @SEGMENTTYPECODE = 3  --Revenue

          exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTREVENUE] @ID output, @CHANGEAGENTID, @RECORDSOURCEID, @SEGMENTNAME, '', @CODE, @SELECTIONS, null, null, @CODEVALUEID, @SITEID;
        else if @SEGMENTTYPECODE = 4  --Membership

          exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTMEMBERSHIP] @ID output, @CHANGEAGENTID,    @RECORDSOURCEID, @SEGMENTNAME, '', @CODE, @SELECTIONS, null, null, @CODEVALUEID, @SITEID;
        else if @SEGMENTTYPECODE = 5  --Sponsorship

          exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTSPONSORSHIP] @ID output, @CHANGEAGENTID,    @RECORDSOURCEID, @SEGMENTNAME, '', @CODE, @SELECTIONS, null, null, @CODEVALUEID, @SITEID;

        if @GROUPID is not null
          begin
            set @CURRENTDATE = getdate();

            insert into dbo.[MKTGROUPSEGMENTS] (
              [SEGMENTID],
              [SEGMENTGROUPID],
              [SEQUENCE],
              [ADDEDBYID],
              [CHANGEDBYID],
              [DATEADDED],
              [DATECHANGED]
            ) values (
              @ID,
              @GROUPID,
              @SEQUENCE,
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE,
              @CURRENTDATE
            );

            set @SEQUENCE = @SEQUENCE + 1;
          end

        fetch next from SEGMENTSCURSOR into @SEGMENTNAME, @CODE, @SELECTIONS;
      end

    close SEGMENTSCURSOR;
    deallocate SEGMENTSCURSOR;
  end try

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

  return 0;