USP_GETCMSUSERPARTVIEWS

Returns a point value for the views a CMS user has for each part, weighted based on how recently the view occurred.

Parameters

Parameter Parameter Type Mode Description
@USERGUID uniqueidentifier IN
@CONSTANTS xml IN

Definition

Copy


CREATE procedure dbo.USP_GETCMSUSERPARTVIEWS(@USERGUID uniqueidentifier, @CONSTANTS xml)
as
begin

  --Define output table

  declare @partViews table (partID int, viewPoints float, viewedPenalty float)

  --Load the users page view data

  declare @XMLDATA xml
  set @XMLDATA = (select [XMLDATA] from [dbo].[PAGEVIEWDATA] where [ID] = @USERGUID)

  if @XMLDATA is null
  begin 
    declare @TEMP table (BinaryData image, TextData ntext)
    insert into @TEMP
    exec [dbo].[spTempDataFetch] @USERGUID    

    set @XMLDATA = (select top 1 TEXTDATA from @TEMP)
  end    

  if @XMLDATA is not null
  begin

    ------------------------------------

      ------------------------------------

      --Declare the point scaler constants


      declare @OldViewsPoints int  
    set @OldViewsPoints = (select ISNULL(c.c.value('@OldViewsPoints', 'nvarchar(255)'),1) from @CONSTANTS.nodes('/constants') c(c))  
    declare @RecentViewsPoints int  
    set @RecentViewsPoints = (select ISNULL(c.c.value('@RecentViewsPoints', 'nvarchar(255)'),5) from @CONSTANTS.nodes('/constants') c(c))  
    declare @ViewsPointsTimeRange int  
    set @ViewsPointsTimeRange = (select ISNULL(c.c.value('@ViewsPointsTimeRange', 'nvarchar(255)'),7) from @CONSTANTS.nodes('/constants') c(c))


      declare @OldViewedPenalty int  
    set @OldViewedPenalty = (select ISNULL(c.c.value('@OldViewedPenalty', 'nvarchar(255)'),5) from @CONSTANTS.nodes('/constants') c(c))  
    declare @RecentViewedPenalty int  
    set @RecentViewedPenalty = (select ISNULL(c.c.value('@RecentViewedPenalty', 'nvarchar(255)'),25) from @CONSTANTS.nodes('/constants') c(c))  
    declare @ViewedPenaltyTimeRange int  
    set @ViewedPenaltyTimeRange = (select ISNULL(c.c.value('@ViewedPenaltyTimeRange', 'nvarchar(255)'),7) from @CONSTANTS.nodes('/constants') c(c))
    ------------------------------------

    ------------------------------------


      ------------------------------------

      ------------------------------------

    --Apply some transformations on these constants

    set @ViewsPointsTimeRange = @ViewsPointsTimeRange * -1  
    set @ViewedPenaltyTimeRange = @ViewedPenaltyTimeRange * -1
    set @OldViewedPenalty = @OldViewedPenalty * -1
    set @RecentViewedPenalty = @RecentViewedPenalty * -1

    declare @ViewsPointsRange int
    set @ViewsPointsRange = @RecentViewsPoints - @OldViewsPoints

    declare @ViewedPenaltyRange int
    set @ViewedPenaltyRange = @RecentViewedPenalty - @OldViewedPenalty
    ------------------------------------

    ------------------------------------


    ------------------------------------

    ------------------------------------

    --Initialize some time vars

    declare @now datetime
    set @now = GETUTCDATE()

    declare @baseDifferenceViewPoints int
    set @baseDifferenceViewPoints = DATEDIFF(s, DATEADD(d, @ViewsPointsTimeRange, @now), @now)

    declare @baseDifferenceViewedPenalty int
    set @baseDifferenceViewedPenalty = DATEDIFF(s, DATEADD(d, @ViewedPenaltyTimeRange, @now), @now)
    ------------------------------------

    ------------------------------------


    -----------------------------------

      ------------------------------------

      --Select out the part views for the current user

      declare @baseTable table (partID int, Time datetime, timepercentViewPoints float, timepercentViewedPenalty float)

      insert into @baseTable
      select 
      T2.P.value('@ID', 'int') as PartID,
      PVS.PV.value('@T', 'datetime') as Time,
    0,
    0
      from @XMLDATA.nodes('/PageViews/Pg') as PVS(PV)
      cross apply PVS.PV.nodes('./Pt') as T2(P)
      order by partid  

    update @baseTable
    set timepercentViewPoints = (@baseDifferenceViewPoints - cast(DATEDIFF(s, BT.Time, @now) as float))/@baseDifferenceViewPoints
    from @baseTable BT
    where BT.Time > DATEADD(d, @ViewsPointsTimeRange, @now)

    update @baseTable
    set timepercentViewedPenalty = (@baseDifferenceViewedPenalty - cast(DATEDIFF(s, BT.Time, @now) as float))/@baseDifferenceViewedPenalty
    from @baseTable BT
    where BT.Time > DATEADD(d, @ViewedPenaltyTimeRange, @now)

      insert into @partViews
      select SC.ID, p.viewPoints, p.viewedPenalty
      from
      (select partID, SUM(@OldViewsPoints + timepercentViewPoints * @ViewsPointsRange) as viewPoints, SUM(@OldViewedPenalty + timepercentViewedPenalty * @ViewedPenaltyRange) as viewedPenalty
      from @baseTable
      group by partID) p
      inner join dbo.SiteContent SC on SC.ID = p.partID
      ------------------------------------

      ------------------------------------


  end

  insert into #PartViews
  select * from @partViews

end