UFN_SMARTQUERY_MEMBERS

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPPROGRAMID uniqueidentifier IN
@MEMBERSHIPLEVELID uniqueidentifier IN
@STATUS nvarchar(9) IN
@MEMBERSHIPLEVELTYPECODEID uniqueidentifier IN
@TIERCODEID uniqueidentifier IN
@CHECKEXPIRATIONDATE bit IN
@MONTHSTOEXPIRATION int IN
@CURRENTAPPUSERID uniqueidentifier IN
@MAXROWS int IN

Definition

Copy


create function dbo.UFN_SMARTQUERY_MEMBERS
(
  @MEMBERSHIPPROGRAMID uniqueidentifier,
  @MEMBERSHIPLEVELID uniqueidentifier,
  @STATUS nvarchar(9),
  @MEMBERSHIPLEVELTYPECODEID uniqueidentifier,
  @TIERCODEID uniqueidentifier,
  @CHECKEXPIRATIONDATE bit,
  @MONTHSTOEXPIRATION int,
  @CURRENTAPPUSERID uniqueidentifier = null,           
  @MAXROWS int
)
returns @T table 
(
  ID uniqueidentifier,    
  MEMBERSHIPID uniqueidentifier,
  MEMBERNAME nvarchar(154), 
  MEMBERSHIPPROGRAMNAME nvarchar(100),
  MEMBERSHIPLEVELNAME nvarchar(100),
  EXPIRATIONDATE datetime,
  STATUS nvarchar(9),
  TYPE nvarchar(50),
  TIER nvarchar(100),
  TERM nvarchar(8)
)
as
begin

  declare @ISADMIN bit;
  declare @APPUSER_IN_NONRACROLE bit;
  declare @APPUSER_IN_NOSECGROUPROLE bit;
  declare @APPUSER_IN_NONSITEROLE bit;
  declare @APPUSER_IN_NO_SITE_ROLE bit;
  declare @TODAY datetime;

  set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
  set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
  set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
  set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NONSITEROLE(@CURRENTAPPUSERID);
  set @APPUSER_IN_NO_SITE_ROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SITE_ROLE(@CURRENTAPPUSERID);
  set @TODAY = getdate();

  insert into @T
    select top (@MAXROWS)
      MEMBER.CONSTITUENTID as ID,
      MEMBERSHIP.ID,
      [CONSTITUENT].[NAME] [MEMBERNAME],
      [MEMBERSHIPPROGRAM].[NAME] [MEMBERSHIPPROGRAMNAME],
      [MEMBERSHIPLEVEL].[NAME] [MEMBERSHIPLEVELNAME],
      --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

      cast([MEMBERSHIP].[EXPIRATIONDATE] as date) as EXPIRATIONDATE,
      dbo.UFN_MEMBERSHIPSTATUS_GETVALUE(MEMBERSHIP.ID) as [STATUS],
      [MEMBERSHIPLEVELTYPECODE].[DESCRIPTION] [TYPE],
      [TIERCODE].[DESCRIPTION] [TIER],
      [MEMBERSHIPLEVELTERM].[TERM]
    from dbo.MEMBERSHIP
      inner join dbo.MEMBER on MEMBER.MEMBERSHIPID=MEMBERSHIP.ID and MEMBER.ISDROPPED = 0
      left join dbo.[CONSTITUENT] on [CONSTITUENT].[ID] = [MEMBER].[CONSTITUENTID]
      left join dbo.[MEMBERSHIPPROGRAM] on [MEMBERSHIPPROGRAM].[ID] = [MEMBERSHIP].[MEMBERSHIPPROGRAMID]
      left join dbo.[MEMBERSHIPLEVEL] on [MEMBERSHIPLEVEL].[ID] = [MEMBERSHIP].[MEMBERSHIPLEVELID]
      left join dbo.[MEMBERSHIPLEVELTYPECODE] on [MEMBERSHIPLEVELTYPECODE].[ID] = [MEMBERSHIP].[MEMBERSHIPLEVELTYPECODEID]
      left join dbo.[TIERCODE] on [TIERCODE].[ID] = [MEMBERSHIPLEVEL].[TIERCODEID]
      left join dbo.[MEMBERSHIPLEVELTERM] on [MEMBERSHIPLEVELTERM].[ID] = [MEMBERSHIP].[MEMBERSHIPLEVELTERMID]
    where 
      (@MEMBERSHIPPROGRAMID is null or MEMBERSHIP.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
        and (
          @ISADMIN = 1 or @APPUSER_IN_NONSITEROLE = 1 or (
            (MEMBERSHIPPROGRAM.SITEID is null and @APPUSER_IN_NO_SITE_ROLE = 1) or
            MEMBERSHIPPROGRAM.SITEID in (select SITEID from dbo.UFN_SITESFORUSER(@CURRENTAPPUSERID))
        )
      )
      and (@MEMBERSHIPLEVELID is null or MEMBERSHIP.MEMBERSHIPLEVELID=@MEMBERSHIPLEVELID)
      and (@STATUS is null or @STATUS in (dbo.UFN_MEMBERSHIPSTATUS_GETVALUE(MEMBERSHIP.ID)))
      and (@MEMBERSHIPLEVELTYPECODEID is null or MEMBERSHIP.MEMBERSHIPLEVELTYPECODEID=@MEMBERSHIPLEVELTYPECODEID)
      and (@TIERCODEID is null or (MEMBERSHIP.MEMBERSHIPLEVELID in (
        select MEMBERSHIPLEVEL.ID
        from dbo.MEMBERSHIP
        inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
        where MEMBERSHIPLEVEL.TIERCODEID=@TIERCODEID
      )))
      and (@ISADMIN = 1 or @APPUSER_IN_NONRACROLE = 1 or dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, MEMBER.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1)
      and (
          @CHECKEXPIRATIONDATE = 0 or (
  @CHECKEXPIRATIONDATE = 1 and (
                  datediff(m, getdate(), [MEMBERSHIP].[EXPIRATIONDATE]) = @MONTHSTOEXPIRATION
              )
          )
      )
    order by MEMBERNAME, MEMBERSHIPPROGRAMNAME;

  return;
end;