USP_MKTSOURCECODEPART_SAVEUSERDEFINEDPARTSFROMCODE

Parses a full sourcecode and saves the marketing effort segment and test segment user defined codes that override the default user defined codes on the marketing effort.

Parameters

Parameter Parameter Type Mode Description
@SOURCECODE nvarchar(50) IN
@SEGMENTATIONSEGMENTID uniqueidentifier IN
@SEGMENTATIONTESTSEGMENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSOURCECODEPART_SAVEUSERDEFINEDPARTSFROMCODE]
(
  @SOURCECODE nvarchar(50),
  @SEGMENTATIONSEGMENTID uniqueidentifier,
  @SEGMENTATIONTESTSEGMENTID uniqueidentifier = null,
  @CHANGEAGENTID uniqueidentifier = null,
  @CURRENTDATE datetime = null
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @SOURCECODEID uniqueidentifier;
  declare @SOURCECODEITEMID uniqueidentifier;
  declare @INHERITEDCODE nvarchar(10);
  declare @INHERITEDCODEVALUEID uniqueidentifier;
  declare @SOURCECODEPARTDEFINITIONID uniqueidentifier;
  declare @SOURCECODEPARTID uniqueidentifier;
  declare @POSITION int;
  declare @LENGTH int;
  declare @CODE nvarchar(10);
  declare @CODEVALUEID uniqueidentifier;

  select top 1
    @SEGMENTATIONID = [MKTSEGMENTATION].[ID],
    @SOURCECODEID = [MKTSEGMENTATION].[SOURCECODEID]
  from dbo.[MKTSEGMENTATION]
  inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
  left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and @SEGMENTATIONTESTSEGMENTID is not null
  where (@SEGMENTATIONSEGMENTID is null or [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTATIONSEGMENTID)
  and (@SEGMENTATIONTESTSEGMENTID is null or [MKTSEGMENTATIONTESTSEGMENT].[ID] = @SEGMENTATIONTESTSEGMENTID);


  declare INHERITEDCURSOR cursor local fast_forward for
    select
      [MKTSOURCECODEITEM].[ID],
      [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID],
      (select isnull(sum([T].[LENGTH] + [T].[DELIMLENGTH]), 0) + 1
       from (
         select distinct [SCI].[SEQUENCE], [SCI].[LENGTH], len([SCPDV].[DELIM]) as [DELIMLENGTH]
         from dbo.[MKTSOURCECODEITEM] as [SCI]
         inner join dbo.[MKTSOURCECODEPARTDEFINITIONVALUES] as [SCPDV] on [SCPDV].[MKTSOURCECODEPARTDEFINITIONID] = [SCI].[MKTSOURCECODEPARTDEFINITIONID]
         inner join dbo.[MKTSOURCECODEVALIDPARTVALUES] as [SCVPV] on [SCVPV].[MKTSOURCECODEPARTDEFINITIONVALUESID] = [SCPDV].[ID] and [SCVPV].[MKTSOURCECODEITEMID] = [SCI].[ID]
         where [SCI].[SOURCECODEID] = [MKTSOURCECODEITEM].[SOURCECODEID]
         and [SCI].[SEQUENCE] < [MKTSOURCECODEITEM].[SEQUENCE]
       ) as [T]) as [POSITION],
      [MKTSOURCECODEITEM].[LENGTH],
      [MKTSOURCECODEPART].[CODE],
      [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]
    from dbo.[MKTSOURCECODEITEM]
    inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
    left join dbo.[MKTSOURCECODEPART] on [MKTSOURCECODEPART].[SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID]
    where [MKTSOURCECODEPART].[SEGMENTATIONID] = @SEGMENTATIONID
    and [MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEID
    and [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 5
    and [MKTSOURCECODEPART].[SEGMENTATIONSEGMENTID] is null
    and [MKTSOURCECODEPART].[SEGMENTATIONTESTSEGMENTID] is null
    order by [MKTSOURCECODEITEM].[SEQUENCE];

  open INHERITEDCURSOR;
  fetch next from INHERITEDCURSOR into @SOURCECODEITEMID, @SOURCECODEPARTDEFINITIONID, @POSITION, @LENGTH, @INHERITEDCODE, @INHERITEDCODEVALUEID;

  while (@@fetch_status = 0)
  begin
    set @CODE = substring(@SOURCECODE, @POSITION, @LENGTH);

    if @CODE <> @INHERITEDCODE
      begin
        --Try to figure out the value ID from the user defined code...

        set @CODEVALUEID = dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUES_GETIDFROMCODE](@SOURCECODEID, @CODE, 5, @SOURCECODEPARTDEFINITIONID);

        if @CODEVALUEID is null
          raiserror('A valid source code part format/value could not be found that matches the user defined code.', 13, 1);

        select
          @SOURCECODEPARTID = [ID]
        from dbo.[MKTSOURCECODEPART]
        where [SEGMENTATIONID] = @SEGMENTATIONID
        and [SOURCECODEITEMID] = @SOURCECODEITEMID
        and ((@SEGMENTATIONTESTSEGMENTID is null and [SEGMENTATIONSEGMENTID] = @SEGMENTATIONSEGMENTID and [SEGMENTATIONTESTSEGMENTID] is null) or
             (@SEGMENTATIONTESTSEGMENTID is not null and [SEGMENTATIONSEGMENTID] is null and [SEGMENTATIONTESTSEGMENTID] = @SEGMENTATIONTESTSEGMENTID));

        --Save the user defined source code part values...

        if @SOURCECODEPARTID is not null
          update dbo.[MKTSOURCECODEPART] set
            [PARTDEFINITIONVALUESID] = @CODEVALUEID,
            [CODE] = @CODE,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
          where [ID] = @SOURCECODEPARTID;
        else
          insert into dbo.[MKTSOURCECODEPART] (
            [ID],
            [SEGMENTATIONID],
            [SOURCECODEITEMID],
            [CODE],
            [PARTDEFINITIONVALUESID],
            [SEGMENTATIONSEGMENTID],
            [SEGMENTATIONTESTSEGMENTID],
            [ADDEDBYID],
            [CHANGEDBYID],
            [DATEADDED],
            [DATECHANGED]
          ) values (
            newid(),
            @SEGMENTATIONID,
            @SOURCECODEITEMID,
            @CODE,
            @CODEVALUEID,
            (case when @SEGMENTATIONTESTSEGMENTID is null then @SEGMENTATIONSEGMENTID else null end),
            @SEGMENTATIONTESTSEGMENTID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
          );
      end

    fetch next from INHERITEDCURSOR into @SOURCECODEITEMID, @SOURCECODEPARTDEFINITIONID, @POSITION, @LENGTH, @INHERITEDCODE, @INHERITEDCODEVALUEID;
  end

  close INHERITEDCURSOR;
  deallocate INHERITEDCURSOR;

  return 0;