USP_SEARCHLIST_BANK_2

Parameters

Parameter Parameter Type Mode Description
@KEYNAME nvarchar(50) IN
@LOOKUPID nvarchar(36) IN
@DEFAULTROUTINGINFORMATION nvarchar(25) IN
@ADDRESSBLOCK nvarchar(100) IN
@CITY nvarchar(100) IN
@STATEID uniqueidentifier IN
@POSTCODE nvarchar(20) IN
@COUNTRYID uniqueidentifier IN
@EXACTMATCHONLY bit IN
@CHECKALIASES bit IN
@PRIMARYADDRESSONLY bit IN
@CHECKALTERNATELOOKUPIDS bit IN
@FUZZYSEARCHONNAME bit IN
@MAXROWS smallint IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_SEARCHLIST_BANK_2
(
    @KEYNAME nvarchar(50) = null
    ,@LOOKUPID nvarchar(36) = null
    ,@DEFAULTROUTINGINFORMATION nvarchar(25) = null
    ,@ADDRESSBLOCK nvarchar(100) = null
    ,@CITY nvarchar(100) = null
    ,@STATEID uniqueidentifier = null
    ,@POSTCODE nvarchar(20) = null
    ,@COUNTRYID uniqueidentifier = null
    ,@EXACTMATCHONLY bit = null
    ,@CHECKALIASES bit = null
    ,@PRIMARYADDRESSONLY bit = null
    ,@CHECKALTERNATELOOKUPIDS bit = null
    ,@FUZZYSEARCHONNAME bit = null
    ,@MAXROWS smallint = 500
    ,@CURRENTAPPUSERID uniqueidentifier = null
)
as

    declare @IsSysAdmin bit = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID)
    declare @BypassSecurityGroupCheck bit = @IsSysAdmin
    declare @SecurityGroupSecurityForUser table(GRANTORDENY bit, SYSTEMROLEID uniqueidentifier, RECORDSECURITYMODE tinyint)
    declare @SecurityGroupsUserCanView table(SECURITYATTRIBUTEID uniqueidentifier)

    if @BypassSecurityGroupCheck = 0
    begin
        insert into @SecurityGroupSecurityForUser
        select GRANTORDENY, SYSTEMROLEID, RECORDSECURITYMODE 
        from 
            dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_SEARCHLIST 
        where 
            APPUSERID = @CURRENTAPPUSERID AND 
            SEARCHLISTCATALOGID = N'EAA4435B-839F-43C0-A0C2-664FE57F4B37'  -- this searchlists's ID


        declare @NumSecurityGroupSecurityPermissionsForUser int = (select COUNT(*) from @SecurityGroupSecurityForUser)
        if @NumSecurityGroupSecurityPermissionsForUser = 0
            return -- user is not allowed to view any records


        if exists(
                select 
                    1 
                from 
                    @SecurityGroupSecurityForUser 
                where 
                    GRANTORDENY = 1 AND 
                    RECORDSECURITYMODE = 0)
            set @BypassSecurityGroupCheck = 1
        else
            set @BypassSecurityGroupCheck = 0
        if @BypassSecurityGroupCheck is null
            set @ByPassSecurityGroupCheck = 0
        if @BypassSecurityGroupCheck = 0
        begin
            insert into @SecurityGroupsUserCanView
            select 
                SYSTEMROLEAPPUSERCONSTITUENTSECURITY.CONSTITUENTSECURITYATTRIBUTEID
            from 
                @SecurityGroupSecurityForUser SGS
                inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.SYSTEMROLEID = SGS.SYSTEMROLEID
                inner join dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY on SYSTEMROLEAPPUSERCONSTITUENTSECURITY.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID                                
            where
                SYSTEMROLEAPPUSER.APPUSERID = @CURRENTAPPUSERID and
                SGS.RECORDSECURITYMODE = 2 and
                SGS.GRANTORDENY = 1
            union
            -- if the user is allowed to view constits with null security group attribute, 

            -- signify by inserting a null into the table var

            select
                null
            from
                @SecurityGroupSecurityForUser
            where
                GRANTORDENY = 1 and
                RECORDSECURITYMODE = 1
        end
    end

    declare @CHECKADDRESS bit = 1;
    if (@ADDRESSBLOCK is null or @ADDRESSBLOCK = '')
          and (@CITY is null or @CITY = ''
          and (@POSTCODE is null or @POSTCODE = ''
          and @STATEID is null 
          and @COUNTRYID is null

        set @CHECKADDRESS = 0;

        set @EXACTMATCHONLY = COALESCE(@EXACTMATCHONLY, 0);
        set @PRIMARYADDRESSONLY = COALESCE(@PRIMARYADDRESSONLY, 0);
        set @CHECKALTERNATELOOKUPIDS = COALESCE(@CHECKALTERNATELOOKUPIDS, 0);
        set @FUZZYSEARCHONNAME = COALESCE(@FUZZYSEARCHONNAME, 0);

        if @EXACTMATCHONLY = 0
        begin
            set @KEYNAME = REPLACE(REPLACE(COALESCE(@KEYNAME,''), '*', '%'), '?', '_') + '%';
            set @LOOKUPID = REPLACE(REPLACE(COALESCE(@LOOKUPID,''), '*', '%'), '?', '_') + '%';
            set @ADDRESSBLOCK = REPLACE(REPLACE(COALESCE(@ADDRESSBLOCK,''), '*', '%'), '?', '_') + '%';
            set @CITY = REPLACE(REPLACE(COALESCE(@CITY,''), '*', '%'), '?', '_') + '%';
            set @POSTCODE = REPLACE(REPLACE(COALESCE(@POSTCODE,''), '*', '%'), '?', '_') + '%';
            set @DEFAULTROUTINGINFORMATION = REPLACE(REPLACE(COALESCE(@DEFAULTROUTINGINFORMATION,''), '*', '%'), '?', '_') + '%';

            select top(@MAXROWS
                  B.ID
                ,C.LOOKUPID
                ,C.NAME
                ,B.DEFAULTROUTINGNUMBER
                ,B.DEFAULTSORTCODE
                ,B.DEFAULTBIC
                ,B.DEFAULTBANKCODE
                ,A.ADDRESSBLOCK [ADDRESS]
                ,A.CITY
                ,S.ABBREVIATION [STATE]
                ,A.POSTCODE
                ,C.WEBADDRESS
                ,E.EMAILADDRESS
                ,P.NUMBER [PHONE]
            from dbo.BANK B
                inner join dbo.CONSTITUENT C on C.ID = B.ID
                left join dbo.PHONE P on P.ISPRIMARY = 1 and P.CONSTITUENTID = C.ID
                left join dbo.EMAILADDRESS E on E.ISPRIMARY = 1 and E.CONSTITUENTID = C.ID
                left join dbo.ADDRESS A on A.ISPRIMARY = 1 and A.CONSTITUENTID = C.ID
                left join dbo.STATE S on A.STATEID = S.ID
            where 
                -- Bank/Org name & fuzzy search

                (C.KEYNAME like @KEYNAME
                    or (C.KEYNAMESOUNDEX = soundex(@KEYNAME) and @FUZZYSEARCHONNAME <> 0)
                    or (C.ID in (select A.CONSTITUENTID from dbo.ALIAS A where A.KEYNAME like @KEYNAME) and @CHECKALIASES <> 0))
                --Lookup ID

                and ((C.LOOKUPID like @LOOKUPID)
                    or ((C.ID in (select AL.CONSTITUENTID from dbo.ALTERNATELOOKUPID AL where AL.ALTERNATELOOKUPID like @LOOKUPID)
                        and @CHECKALTERNATELOOKUPIDS <> 0)))
                --Default routing information

                and
                (
                    B.DEFAULTROUTINGNUMBER like @DEFAULTROUTINGINFORMATION
                    or B.DEFAULTSORTCODE like @DEFAULTROUTINGINFORMATION
                    or B.DEFAULTBIC like @DEFAULTROUTINGINFORMATION
                    or B.DEFAULTBANKCODE like @DEFAULTROUTINGINFORMATION

                )
                --Address fields

                and ((
                    A.ADDRESSBLOCK like @ADDRESSBLOCK
                    and A.CITY like @CITY
                    and A.POSTCODE like @POSTCODE
                    and (A.STATEID = @STATEID or @STATEID is null)
                    and (A.COUNTRYID = @COUNTRYID or @COUNTRYID is null)) 
                    or (A.ID is null and @CHECKADDRESS = 0
                    or (@PRIMARYADDRESSONLY = 0 and @CHECKADDRESS = 1
                        and C.ID in (select AD.CONSTITUENTID 
                                 from dbo.[ADDRESS] AD 
                                 where 
                                    AD.ADDRESSBLOCK like @ADDRESSBLOCK 
                                    and AD.CITY like @CITY 
                                    and AD.POSTCODE like @POSTCODE 
                                    and (AD.STATEID = @STATEID or @STATEID is null
                                    and (AD.COUNTRYID = @COUNTRYID or @COUNTRYID is null)))
                )
                and    (
                    (@BypassSecurityGroupCheck = 1) or 
                    exists(
                        select 1 
                        from 
                            @SecurityGroupsUserCanView SG 
                        left join 
                            dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT CSSA on CSSA.CONSTITUENTID = C.ID 
                        where 
                            (SG.SECURITYATTRIBUTEID = CSSA.CONSTIT_SECURITY_ATTRIBUTEID) or 
                            (SG.SECURITYATTRIBUTEID is null and CSSA.CONSTIT_SECURITY_ATTRIBUTEID is null)) 
                )
            order by
                C.KEYNAME ASC
        end
        else
        begin
            select top(@MAXROWS
                  B.ID
                ,C.LOOKUPID
                ,C.NAME
                ,B.DEFAULTROUTINGNUMBER
                ,B.DEFAULTSORTCODE
                ,B.DEFAULTBIC
                ,B.DEFAULTBANKCODE
                ,A.ADDRESSBLOCK [ADDRESS]
                ,A.CITY
                ,S.ABBREVIATION [STATE]
                ,A.POSTCODE
                ,C.WEBADDRESS
                ,E.EMAILADDRESS
                ,P.NUMBER [PHONE]
            from dbo.BANK B
                inner join dbo.CONSTITUENT C on C.ID = B.ID
                left join dbo.PHONE P on P.ISPRIMARY = 1 and P.CONSTITUENTID = C.ID
                left join dbo.EMAILADDRESS E on E.ISPRIMARY = 1 and E.CONSTITUENTID = C.ID
                left join dbo.ADDRESS A on A.ISPRIMARY = 1 and A.CONSTITUENTID = C.ID
                left join dbo.STATE S on A.STATEID = S.ID
            where
                --Bank/Org name & fuzzy search

                ((@KEYNAME is null
                or (c.KEYNAME = @KEYNAME 
                or (C.KEYNAMESOUNDEX = soundex(@KEYNAME) and @FUZZYSEARCHONNAME <> 0
                or (C.ID in (select A.CONSTITUENTID from dbo.ALIAS A where A.KEYNAME = @KEYNAME) and @CHECKALIASES <> 0)))
                --Lookup ID

                and (((@LOOKUPID is null
                or (C.LOOKUPID = @LOOKUPID
                or ((C.ID in (select AL.CONSTITUENTID from dbo.ALTERNATELOOKUPID AL where @LOOKUPID is not null and AL.ALTERNATELOOKUPID = @LOOKUPID
                and @CHECKALTERNATELOOKUPIDS <> 0))))
                --Default routing information

                and
                (
                    @DEFAULTROUTINGINFORMATION is null
                    or B.DEFAULTROUTINGNUMBER = @DEFAULTROUTINGINFORMATION
                    or B.DEFAULTSORTCODE = @DEFAULTROUTINGINFORMATION
                    or B.DEFAULTBIC = @DEFAULTROUTINGINFORMATION
                    or B.DEFAULTBANKCODE = @DEFAULTROUTINGINFORMATION

                )
                --Address fields

                and (
                ((A.ADDRESSBLOCK = @ADDRESSBLOCK or @ADDRESSBLOCK is null)
                    and (A.CITY = @CITY or @CITY is null)
                    and (A.POSTCODE = @POSTCODE or @POSTCODE is null)
                    and (A.STATEID = @STATEID or @STATEID is null)
                    and (A.COUNTRYID = @COUNTRYID or @COUNTRYID is null)) 
                or (A.ID is null and @CHECKADDRESS = 0
                or (@PRIMARYADDRESSONLY = 0 and @CHECKADDRESS = 1
                    and C.ID in (select AD.CONSTITUENTID 
                                 from dbo.[ADDRESS] AD 
                                 where 
                                    (AD.ADDRESSBLOCK = @ADDRESSBLOCK or @ADDRESSBLOCK is null)
                                    and (AD.CITY = @CITY or @CITY is null)
                                    and (AD.POSTCODE = @POSTCODE or @POSTCODE is null)
                                    and (AD.STATEID = @STATEID or @STATEID is null
                                    and (AD.COUNTRYID = @COUNTRYID or @COUNTRYID is null)))
                )
                and    (
                    (@BypassSecurityGroupCheck = 1) or 
                    exists(
                        select 1 
                        from 
                            @SecurityGroupsUserCanView SG 
                        left join 
                            dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT CSSA on CSSA.CONSTITUENTID = C.ID 
                        where 
                            (SG.SECURITYATTRIBUTEID = CSSA.CONSTIT_SECURITY_ATTRIBUTEID) or 
                            (SG.SECURITYATTRIBUTEID is null and CSSA.CONSTIT_SECURITY_ATTRIBUTEID is null)) 
                )
            order by
                C.KEYNAME ASC
        end