USP_MKTSEGMENT_UPDATEDATEREFRESHED

Sets the date a segment was last refreshed.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENT_UPDATEDATEREFRESHED]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @ISCHILDLISTSEGMENT bit;
  declare @SEGMENTLISTID uniqueidentifier;
  declare @SEGMENTVIEW nvarchar(60);
  declare @COUNTSQL nvarchar(max);
  declare @NUMROWS int;

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

    select
      @ISCHILDLISTSEGMENT = (case when [MKTSEGMENTLIST].[PARENTSEGMENTID] is null then 0 else 1 end),
      @SEGMENTLISTID = [MKTSEGMENTLIST].[ID]
    from dbo.[MKTSEGMENT]
    inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
    where [MKTSEGMENT].[ID] = @ID;

    --Update the date refreshed for the segment...

    update dbo.[MKTSEGMENT] set
      [DATEREFRESHED] = getdate(),
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = getdate()
    where [ID] = @ID;

    --Get the segment view row count...

    set @SEGMENTVIEW = dbo.[UFN_MKTSEGMENT_MAKEVIEWNAME](@ID);
    set @COUNTSQL = 'select @NUMROWS = count(*) from dbo.[' + @SEGMENTVIEW + ']';
    exec sp_executeSQL @COUNTSQL, N'@NUMROWS int output', @NUMROWS = @NUMROWS output;

    --Update the row count for the segment ID set record...

    update dbo.[IDSETREGISTER] set
      [NUMROWS] = @NUMROWS,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = getdate()
    where [DBOBJECTNAME] = @SEGMENTVIEW;

    --If we are refreshing a child list segment, then we need to update the rental and exchange quantities too...

    if @ISCHILDLISTSEGMENT = 1 and @SEGMENTLISTID is not null
      update dbo.[MKTSEGMENTLIST] set
        [RENTALQUANTITY] = (case when [EXCHANGEQUANTITY] - @NUMROWS > 0 then 0 else @NUMROWS - [EXCHANGEQUANTITY] end),
        [EXCHANGEQUANTITY] = (case when [EXCHANGEQUANTITY] > @NUMROWS then @NUMROWS else [EXCHANGEQUANTITY] end),
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = getdate()
      where [ID] = @SEGMENTLISTID;
  end try

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

  return 0;