USP_REFUND_MEMBERSHIPSEARCH
Search for memberships to refund.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GROUPORGKEYNAME | nvarchar(100) | IN | |
@NAME | nvarchar(100) | IN | |
@KEYNAME | nvarchar(100) | IN | |
@FIRSTNAME | nvarchar(50) | IN | |
@MAXROWS | int | IN | |
@COUNTRYID | uniqueidentifier | IN | |
@STATEID | uniqueidentifier | IN | |
@CITY | nvarchar(50) | IN | |
@ADDRESSBLOCK | nvarchar(100) | IN | |
@POSTCODE | nvarchar(20) | IN | |
@PHONENUMBER | nvarchar(25) | IN | |
@MEMBERSHIPLOOKUPID | nvarchar(25) | IN | |
@MEMBERSHIPPROGRAMID | uniqueidentifier | IN | |
@INCLUDEINDIVIDUALS | bit | IN | |
@INCLUDEORGANIZATIONS | bit | IN | |
@INCLUDEGROUPS | bit | IN | |
@FUZZYSEARCHONNAME | bit | IN | |
@CHECKNICKNAMES | bit | IN | |
@CHECKALIASES | bit | IN | |
@EXCLUDENONREFUNDABLE | bit | IN | |
@LAPSEDSTRING | nvarchar(10) | IN | |
@HASADDRESSFILTER | bit | IN | |
@HASPHONEFILTER | bit | IN | |
@FIRSTNAMEPRESENT | bit | IN | |
@EXACTMATCHONLY | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_REFUND_MEMBERSHIPSEARCH
(
@GROUPORGKEYNAME nvarchar(100) = null,
@NAME nvarchar(100) = null,
@KEYNAME nvarchar(100) = null,
@FIRSTNAME nvarchar(50) = null,
@MAXROWS int = 100,
@COUNTRYID uniqueidentifier = null,
@STATEID uniqueidentifier = null,
@CITY nvarchar(50) = null,
@ADDRESSBLOCK nvarchar(100) = null,
@POSTCODE nvarchar(20) = null,
@PHONENUMBER nvarchar(25) = null,
@MEMBERSHIPLOOKUPID nvarchar(25) = null,
@MEMBERSHIPPROGRAMID uniqueidentifier = null,
@INCLUDEINDIVIDUALS bit,
@INCLUDEORGANIZATIONS bit,
@INCLUDEGROUPS bit,
@FUZZYSEARCHONNAME bit,
@CHECKNICKNAMES bit,
@CHECKALIASES bit,
@EXCLUDENONREFUNDABLE bit,
@LAPSEDSTRING nvarchar(10) = 'Lapsed',
@HASADDRESSFILTER bit,
@HASPHONEFILTER bit,
@FIRSTNAMEPRESENT bit,
@EXACTMATCHONLY bit
)
as
begin
set nocount on;
declare @CURRENTDATE datetime = getdate();
declare @PHONENUMBERNOFORMAT nvarchar(50)
if @HASPHONEFILTER = 1
begin
if @EXACTMATCHONLY = 0
set @PHONENUMBERNOFORMAT = dbo.UFN_PHONE_REMOVEFORMATTING(@PHONENUMBER) + '%';
else
set @PHONENUMBERNOFORMAT = dbo.UFN_PHONE_REMOVEFORMATTING(@PHONENUMBER);
end
-- If search criteria has been given, search for constituents whose info matches the criteria
if (@NAME is not null and @NAME <> '') or @HASADDRESSFILTER = 1 or @HASPHONEFILTER = 1
begin
declare @CONSTITUENTMEMBERS table (ID uniqueidentifier)
insert into @CONSTITUENTMEMBERS
select ID from dbo.CONSTITUENT as C where
-- match on name
(
(@NAME is null or @NAME = '') or
(
(([C].[KEYNAME] like @KEYNAME escape '\' and [C].[ISORGANIZATION] = 0 and [C].[ISGROUP] = 0) or
([C].[KEYNAME] like @GROUPORGKEYNAME escape '\' and ([C].[ISORGANIZATION] = 1 or [C].[ISGROUP] = 1)))
or
(@FUZZYSEARCHONNAME = 1 and
((soundex([C].[KEYNAME]) like soundex(@KEYNAME) escape '\' and [C].[ISORGANIZATION] = 0 and [C].[ISGROUP] = 0) or
(soundex([C].[KEYNAME]) like soundex(@GROUPORGKEYNAME) escape '\' and ([C].[ISORGANIZATION] = 1 or [C].[ISGROUP] = 1))))
or
(@CHECKALIASES = 1 and
exists(
select [A].[ID] from dbo.[ALIAS] as [A]
where [C].[ID] = [A].[CONSTITUENTID] and
((
(([A].[KEYNAME] like @KEYNAME escape '\' and (C.ISORGANIZATION = 0 and C.ISGROUP = 0)) or
([A].[KEYNAME] like @GROUPORGKEYNAME escape '\' and (C.ISORGANIZATION = 1 or C.ISGROUP = 1)))
or
(@FUZZYSEARCHONNAME = 1 and ((soundex([A].[KEYNAME]) like soundex(@KEYNAME) escape '\' and (C.ISORGANIZATION = 0 and C.ISGROUP = 0)) or
(soundex([A].[KEYNAME]) like soundex(@GROUPORGKEYNAME) escape '\' and (C.ISORGANIZATION = 1 or C.ISGROUP = 1))))
))
))
or
(@FIRSTNAMEPRESENT = 1 and
([C].[FIRSTNAME] like @FIRSTNAME escape '\' or
(@FUZZYSEARCHONNAME = 1 and soundex([C].[FIRSTNAME]) like soundex(@FIRSTNAME) escape '\') or
(@CHECKALIASES = 1 and
exists(
select [A].[ID] from dbo.[ALIAS] as [A]
where [C].[ID] = [A].[CONSTITUENTID] and
([A].[FIRSTNAME] like @FIRSTNAME escape '\'
or (@FUZZYSEARCHONNAME = 1 and soundex([A].[FIRSTNAME]) like soundex(@FIRSTNAME) escape '\')
)
))))
or
((@CHECKNICKNAMES = 1 and @FIRSTNAMEPRESENT = 1) and
([C].[NICKNAME] like @FIRSTNAME escape '\' or
(@FUZZYSEARCHONNAME = 1 and soundex([C].[NICKNAME]) like soundex(@FIRSTNAME) escape '\')))
)
)
and
-- match address
(
@HASADDRESSFILTER = 0 or
exists(
select [ADDRESS].[ID] from dbo.[ADDRESS]
where
[ADDRESS].[CONSTITUENTID] = [C].[ID] and
(@COUNTRYID is null or [ADDRESS].[COUNTRYID] = @COUNTRYID) and
((@ADDRESSBLOCK is null or @ADDRESSBLOCK = '') or [ADDRESS].[ADDRESSBLOCK] like @ADDRESSBLOCK escape '\') and
((@CITY is null or @CITY = '') or [ADDRESS].[CITY] like @CITY escape '\') and
(@STATEID is null or [ADDRESS].[STATEID] = @STATEID) and
((@POSTCODE is null or @POSTCODE = '') or [ADDRESS].[POSTCODE] like @POSTCODE escape '\')
)
)
and
-- match phone
(
@HASPHONEFILTER = 0 or
exists(
select [PHONE].[ID] from dbo.[PHONE]
where [PHONE].[NUMBERNOFORMAT] like @PHONENUMBERNOFORMAT escape '\' and
[PHONE].[CONSTITUENTID] = [C].[ID]
)
)
and
(
(@INCLUDEINDIVIDUALS = 1 and @INCLUDEGROUPS = 1 and @INCLUDEORGANIZATIONS = 1) or
(@INCLUDEGROUPS = 1 and [C].[ISGROUP] = 1) or
(@INCLUDEORGANIZATIONS = 1 and [C].[ISORGANIZATION] = 1) or
(@INCLUDEINDIVIDUALS = 1 and ([C].[ISGROUP] = 0 and [C].[ISORGANIZATION] = 0))
);
with MEMBERSHIP_CTE as (
select top(@MAXROWS)
[MEMBERSHIP].[ID],
[MEMBERSHIPTRANSACTION].[TRANSACTIONDATE] as [DATE],
[MEMBERSHIP].[LOOKUPID] as [LOOKUPID],
[CONSTITUENT].[NAME] as [PRIMARYMEMBERNAME],
-- build membership string
[MEMBERSHIPTRANSACTION].[ACTION] + ' - ' +
[MEMBERSHIPPROGRAM].[NAME] + ' - ' +
[MEMBERSHIPLEVEL].[NAME] + ' (' +
[MEMBERSHIPLEVELTERM].[TERM] + ')' as [MEMBERSHIP],
[MEMBERSHIP].[EXPIRATIONDATE],
coalesce(REVENUESPLIT.AMOUNT, 0) as AMOUNT,
(
select dbo.UDA_BUILDLIST(dbo.UFN_CONSTITUENT_BUILDNAME([MEMBER].[CONSTITUENTID]))
from dbo.[MEMBER]
where [MEMBER].[MEMBERSHIPID] = [MEMBERSHIP].[ID]
) as [MEMBERS],
coalesce((select NAME from dbo.CONSTITUENT where ID = [MEMBERSHIP].[GIVENBYID]),'') as [GIVENBY],
case
when [MEMBERSHIP].[EXPIRATIONDATE] < @CURRENTDATE then @LAPSEDSTRING
else [MEMBERSHIP].[STATUS]
end as [STATUS],
[ADDRESS].POSTCODE,
[PHONE].NUMBER AS [PHONENUMBER]
from dbo.MEMBERSHIP with(nolock)
inner join dbo.[MEMBERSHIPTRANSACTION] on [MEMBERSHIP].[ID] = [MEMBERSHIPTRANSACTION].[MEMBERSHIPID]
inner join dbo.MEMBER on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
inner join dbo.MEMBERSHIPPROGRAM on MEMBERSHIP.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
inner join dbo.MEMBERSHIPLEVELTERM on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
inner join dbo.CONSTITUENT on MEMBER.CONSTITUENTID = CONSTITUENT.ID
left join dbo.ADDRESS on MEMBER.CONSTITUENTID = ADDRESS.CONSTITUENTID
left join dbo.PHONE on MEMBER.CONSTITUENTID = PHONE.CONSTITUENTID
left join dbo.REVENUESPLIT on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
where
MEMBER.ISPRIMARY = 1
and MEMBER.CONSTITUENTID in (select ID from @CONSTITUENTMEMBERS)
and (ADDRESS.ISPRIMARY is null or ADDRESS.ISPRIMARY = 1)
and (PHONE.ISPRIMARY is null or PHONE.ISPRIMARY = 1)
and ((@MEMBERSHIPLOOKUPID is null or @MEMBERSHIPLOOKUPID = '') or [MEMBERSHIP].[LOOKUPID] like @MEMBERSHIPLOOKUPID escape '\')
and (@MEMBERSHIPPROGRAMID is null or [MEMBERSHIP].[MEMBERSHIPPROGRAMID] = @MEMBERSHIPPROGRAMID)
and [MEMBERSHIPTRANSACTION].[ID] = dbo.UFN_MEMBERSHIP_GETLASTMEMBERSHIPTRANSACTIONID([MEMBERSHIP].[ID])
and
-- Exclude non-refundable
(
@EXCLUDENONREFUNDABLE = 0 or
(
[MEMBERSHIP].[STATUSCODE] = 0 and
[MEMBERSHIP].[EXPIRATIONDATE] > @CURRENTDATE
)
)
)
select top (@MAXROWS)
[ID],
[DATE],
[LOOKUPID],
[PRIMARYMEMBERNAME],
[MEMBERSHIP],
[EXPIRATIONDATE],
[AMOUNT],
[MEMBERS],
[GIVENBY],
[STATUS],
[POSTCODE],
[PHONENUMBER]
from MEMBERSHIP_CTE as MEMBERSHIP
order by [PRIMARYMEMBERNAME] asc, [MEMBERSHIP] asc, [STATUS] asc
end
-- If no search criteria given, just pull back the top @MAXROWS
else
begin
with MEMBERSHIP_CTE as (
select top(@MAXROWS)
[MEMBERSHIP].[ID],
[MEMBERSHIPTRANSACTION].[TRANSACTIONDATE] as [DATE],
[MEMBERSHIP].[LOOKUPID] as [LOOKUPID],
[CONSTITUENT].[NAME] as [PRIMARYMEMBERNAME],
-- build membership string
[MEMBERSHIPTRANSACTION].[ACTION] + ' - ' +
[MEMBERSHIPPROGRAM].[NAME] + ' - ' +
[MEMBERSHIPLEVEL].[NAME] + ' (' +
[MEMBERSHIPLEVELTERM].[TERM] + ')' as [MEMBERSHIP],
[MEMBERSHIP].[EXPIRATIONDATE],
coalesce(REVENUESPLIT.AMOUNT, 0) as AMOUNT,
(
select dbo.UDA_BUILDLIST(dbo.UFN_CONSTITUENT_BUILDNAME([MEMBER].[CONSTITUENTID]))
from dbo.[MEMBER]
where [MEMBER].[MEMBERSHIPID] = [MEMBERSHIP].[ID]
) as [MEMBERS],
coalesce((select NAME from dbo.CONSTITUENT where ID = [MEMBERSHIP].[GIVENBYID]),'') as [GIVENBY],
case
when [MEMBERSHIP].[EXPIRATIONDATE] < @CURRENTDATE then @LAPSEDSTRING
else [MEMBERSHIP].[STATUS]
end as [STATUS],
[ADDRESS].POSTCODE,
[PHONE].NUMBER AS [PHONENUMBER]
from dbo.MEMBERSHIP with(nolock)
inner join dbo.[MEMBERSHIPTRANSACTION] on [MEMBERSHIP].[ID] = [MEMBERSHIPTRANSACTION].[MEMBERSHIPID]
inner join dbo.MEMBER on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
inner join dbo.MEMBERSHIPPROGRAM on MEMBERSHIP.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
inner join dbo.MEMBERSHIPLEVELTERM on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
inner join dbo.CONSTITUENT on MEMBER.CONSTITUENTID = CONSTITUENT.ID
left join dbo.ADDRESS on MEMBER.CONSTITUENTID = ADDRESS.CONSTITUENTID
left join dbo.PHONE on MEMBER.CONSTITUENTID = PHONE.CONSTITUENTID
left join dbo.REVENUESPLIT on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
where
MEMBER.ISPRIMARY = 1
and ((@INCLUDEGROUPS = 1 and @INCLUDEINDIVIDUALS = 1 and @INCLUDEORGANIZATIONS = 1)
or (@INCLUDEGROUPS = 1 and CONSTITUENT.ISGROUP = 1)
or (@INCLUDEINDIVIDUALS = 1 and CONSTITUENT.ISGROUP = 0 and CONSTITUENT.ISORGANIZATION = 0)
or @INCLUDEORGANIZATIONS = 1 and CONSTITUENT.ISORGANIZATION = 1)
and (ADDRESS.ISPRIMARY is null or ADDRESS.ISPRIMARY = 1)
and (PHONE.ISPRIMARY is null or PHONE.ISPRIMARY = 1)
and ((@MEMBERSHIPLOOKUPID is null or @MEMBERSHIPLOOKUPID = '') or [MEMBERSHIP].[LOOKUPID] like @MEMBERSHIPLOOKUPID escape '\')
and (@MEMBERSHIPPROGRAMID is null or [MEMBERSHIP].[MEMBERSHIPPROGRAMID] = @MEMBERSHIPPROGRAMID)
and [MEMBERSHIPTRANSACTION].[ID] = dbo.UFN_MEMBERSHIP_GETLASTMEMBERSHIPTRANSACTIONID([MEMBERSHIP].[ID])
and
-- Exclude non-refundable
(
@EXCLUDENONREFUNDABLE = 0 or
(
[MEMBERSHIP].[STATUSCODE] = 0 and
[MEMBERSHIP].[EXPIRATIONDATE] > @CURRENTDATE
)
)
)
select top (@MAXROWS)
[ID],
[DATE],
[LOOKUPID],
[PRIMARYMEMBERNAME],
[MEMBERSHIP],
[EXPIRATIONDATE],
[AMOUNT],
[MEMBERS],
[GIVENBY],
[STATUS],
[POSTCODE],
[PHONENUMBER]
from MEMBERSHIP_CTE as MEMBERSHIP
order by [PRIMARYMEMBERNAME] asc, [MEMBERSHIP] asc, [STATUS] asc
end
end