USP_FAFADDRESSBOOK_REGISTRANT_ADD

Adds a registrant to FAF participant's address book.

Parameters

Parameter Parameter Type Mode Description
@TEAMFUNDRAISINGTEAMID uniqueidentifier IN
@REGISTRANTCONSTITUENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@NEWTEAMFUNDRAISINGTEAMID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_FAFADDRESSBOOK_REGISTRANT_ADD (    
    @TEAMFUNDRAISINGTEAMID uniqueidentifier,  
    @REGISTRANTCONSTITUENTID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
  @NEWTEAMFUNDRAISINGTEAMID uniqueidentifier = null --only used in the event of a restart



as

set nocount on;

if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();

declare @SequenceID int;
declare @FIRSTNAME nvarchar(255);
declare @LASTNAME nvarchar(255);
declare @MIDDLENAME nvarchar(100);
declare @TITLECODEID uniqueidentifier;
declare @EMAILADDRESS dbo.UDT_EMAILADDRESS;
declare @HOMEPHONE nvarchar(25);
declare @ADDRESSBLOCK nvarchar(300);
declare @CITY nvarchar(100);
declare @STATEID uniqueidentifier;
declare @COUNTRYID uniqueidentifier;
declare @POSTCODE nvarchar(24);

select @SequenceID = C.SEQUENCEID,
        @FIRSTNAME = C.FIRSTNAME,
        @LASTNAME = C.KEYNAME,
        @MIDDLENAME = C.MIDDLENAME,
        @TITLECODEID = C.TITLECODEID,
        @EMAILADDRESS = isnull(E.EMAILADDRESS, ''),
        @HOMEPHONE = isnull(P.NUMBER, ''),
        @ADDRESSBLOCK = isnull(A.ADDRESSBLOCK, ''),
        @CITY = isnull(A.CITY, ''),
        @STATEID = A.STATEID,
        @COUNTRYID = A.COUNTRYID,
        @POSTCODE = isnull(A.POSTCODE, '')
from dbo.CONSTITUENT C(nolock) 
left outer join dbo.EMAILADDRESS E(nolock) on E.CONSTITUENTID = C.ID and E.ISPRIMARY = 1
left outer join dbo.PHONE P(nolock) on P.CONSTITUENTID = C.ID and P.ISPRIMARY = 1
left outer join dbo.ADDRESS A(nolock) on A.CONSTITUENTID = C.ID and A.ISPRIMARY = 1
where C.ID = @REGISTRANTCONSTITUENTID;  

declare @ClientUsersID int;
set @ClientUsersID = dbo.fnGetUserIDFromLinkedRecordID(@SequenceID, 0);

DECLARE @ISTEAMCAPTAINOFRESTARTEDTEAM bit
SET @ISTEAMCAPTAINOFRESTARTEDTEAM = CASE WHEN @NEWTEAMFUNDRAISINGTEAMID is null THEN 0 Else 1 END

begin try

    create table #TEMP_TEAMPEOPLE
    (        
        CLIENTUSERSID int,
        CONSTITUENTID uniqueidentifier,
        FIRSTNAME nvarchar(255),
        LASTNAME nvarchar(255),
        MIDDLENAME nvarchar(100),
        TITLECODEID uniqueidentifier,
        EMAILADDRESS nvarchar(200),
        HOMEPHONE nvarchar(25),
        ADDRESSBLOCK nvarchar(300),
        CITY nvarchar(100),
        STATEID uniqueidentifier,
        COUNTRYID uniqueidentifier,
        POSTCODE nvarchar(24),
        FOUNDREGISTRANTADDRESSBOOKID uniqueidentifier,
        FOUNDMEMBERADDRESSBOOKID uniqueidentifier,
        RECIPROCAL tinyint -- 0 = both way; 1 = only to team captain; 2 = only to registrant

    );

    insert into #TEMP_TEAMPEOPLE
    (        
        CLIENTUSERSID,
        CONSTITUENTID,
        FIRSTNAME,
        LASTNAME,
        MIDDLENAME,
        TITLECODEID,
        EMAILADDRESS,
        HOMEPHONE,
        ADDRESSBLOCK,
        CITY,
        STATEID,
        COUNTRYID,
        POSTCODE,
        FOUNDREGISTRANTADDRESSBOOKID,
        FOUNDMEMBERADDRESSBOOKID,
        RECIPROCAL
    )
    select
        dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0),
        C.ID,
        C.FIRSTNAME,
        C.KEYNAME,
        C.MIDDLENAME,
        C.TITLECODEID,
        isnull(E.EMAILADDRESS, '') as EMAILADDRESS,
        isnull(P.NUMBER, '') as NUMBER,
        isnull(A.ADDRESSBLOCK, '') as ADDRESSBLOCK,
        isnull(A.CITY, '') as CITY,
        A.STATEID,
        A.COUNTRYID,
        isnull(A.POSTCODE, '') as POSTCODE,
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0), @REGISTRANTCONSTITUENTID),
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(@ClientUsersID, C.ID),
        0 -- bothway

    from
        dbo.CONSTITUENT C(nolock)
    left outer join 
        dbo.EMAILADDRESS E(nolock) on E.CONSTITUENTID = C.ID and E.ISPRIMARY = 1
    left outer join 
        dbo.PHONE P(nolock) on P.CONSTITUENTID = C.ID and P.ISPRIMARY = 1
    left outer join 
        dbo.[ADDRESS] A(nolock) on A.CONSTITUENTID = C.ID and A.ISPRIMARY = 1
    inner join
        dbo.TEAMFUNDRAISER TR(nolock) on TR.CONSTITUENTID = C.ID
    inner join
        dbo.TEAMFUNDRAISINGTEAMMEMBER TM(nolock) on TM.TEAMFUNDRAISERID = TR.ID
    inner join
        dbo.TEAMEXTENSION TE(nolock) on TE.TEAMFUNDRAISINGTEAMID = TM.TEAMFUNDRAISINGTEAMID
    where TE.TYPECODE in (1, 3) -- team and household

        and TE.TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID
        and C.ID <> @REGISTRANTCONSTITUENTID

    union
    -- adding team child household leader

    select
        dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0),
        C.ID,
        C.FIRSTNAME,
        C.KEYNAME,
        C.MIDDLENAME,
        C.TITLECODEID,
        isnull(E.EMAILADDRESS, '') as EMAILADDRESS,
        isnull(P.NUMBER, '') as NUMBER,
        isnull(A.ADDRESSBLOCK, '') as ADDRESSBLOCK,
        isnull(A.CITY, '') as CITY,
        A.STATEID,
        A.COUNTRYID,
        isnull(A.POSTCODE, '') as POSTCODE,
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0), @REGISTRANTCONSTITUENTID),
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(@ClientUsersID, C.ID),
        0 -- bothway

    from
        dbo.CONSTITUENT C(nolock)
    left outer join 
        dbo.EMAILADDRESS E(nolock) on E.CONSTITUENTID = C.ID and E.ISPRIMARY = 1
    left outer join 
        dbo.PHONE P(nolock) on P.CONSTITUENTID = C.ID and P.ISPRIMARY = 1
    left outer join 
        dbo.[ADDRESS] A(nolock) on A.CONSTITUENTID = C.ID and A.ISPRIMARY = 1
    inner join
        dbo.TEAMFUNDRAISINGTEAMCAPTAIN TC(nolock) on TC.CONSTITUENTID = C.ID
    inner join
        dbo.TEAMEXTENSION TE(nolock) on TE.TEAMFUNDRAISINGTEAMID = TC.TEAMFUNDRAISINGTEAMID
    inner join
        dbo.TEAMFUNDRAISINGTEAM T(nolock) on T.ID = TE.TEAMFUNDRAISINGTEAMID
    inner join
        dbo.TEAMEXTENSION PTE(nolock) on PTE.TEAMFUNDRAISINGTEAMID = T.PARENTTEAMID
    where TE.TYPECODE = 3 -- household

        and PTE.TYPECODE = 1 -- team

        and PTE.TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID
        and C.ID <> @REGISTRANTCONSTITUENTID

    union
    -- adding to company leader

    select dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0),
        null, null, null, null, null, null, null, null, null, null, null, null,
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0), @REGISTRANTCONSTITUENTID),
        null,
        1 -- one way

    from dbo.CONSTITUENT C(nolock)
    inner join TEAMFUNDRAISINGTEAMCAPTAIN TC(nolock) 
        on C.ID = TC.CONSTITUENTID
    inner join dbo.TEAMEXTENSION TE(nolock) 
        on TE.TEAMFUNDRAISINGTEAMID = TC.TEAMFUNDRAISINGTEAMID
    where TE.TYPECODE = 2 -- company

        and TE.TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID
        and C.ID <> @REGISTRANTCONSTITUENTID;

    -- adding household donor to registrant

    insert into #TEMP_TEAMPEOPLE
    (        
        CLIENTUSERSID,
        CONSTITUENTID,
        FIRSTNAME,
        LASTNAME,
        MIDDLENAME,
        TITLECODEID,
        EMAILADDRESS,
        HOMEPHONE,
        ADDRESSBLOCK,
        CITY,
        STATEID,
        COUNTRYID,
        POSTCODE,
        FOUNDREGISTRANTADDRESSBOOKID,
        FOUNDMEMBERADDRESSBOOKID,
        RECIPROCAL
    )
    select
        dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0),
        C.ID,
        C.FIRSTNAME,
        C.KEYNAME,
        C.MIDDLENAME,
        C.TITLECODEID,
        isnull(E.EMAILADDRESS, '') as EMAILADDRESS,
        isnull(P.NUMBER, '') as NUMBER,
        isnull(A.ADDRESSBLOCK, '') as ADDRESSBLOCK,
        isnull(A.CITY, '') as CITY,
        A.STATEID,
        A.COUNTRYID,
        isnull(A.POSTCODE, '') as POSTCODE,
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0), @REGISTRANTCONSTITUENTID),
        dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(@ClientUsersID, C.ID),
        2 -- add to registrant

    from
        dbo.CONSTITUENT C(nolock)
    left outer join 
        dbo.EMAILADDRESS E(nolock) on E.CONSTITUENTID = C.ID and E.ISPRIMARY = 1
    left outer join 
        dbo.PHONE P(nolock) on P.CONSTITUENTID = C.ID and P.ISPRIMARY = 1
    left outer join 
        dbo.[ADDRESS] A(nolock) on A.CONSTITUENTID = C.ID and A.ISPRIMARY = 1
    inner join
        dbo.REVENUE R(nolock) on R.CONSTITUENTID = C.ID
    inner join 
        dbo.REVENUESPLIT RS(nolock) on RS.REVENUEID = R.ID
    inner join 
        dbo.REVENUERECOGNITION RR(nolock) on RR.REVENUESPLITID = RS.ID
    inner join
        dbo.TEAMEXTENSION TE(nolock) on TE.TEAMCONSTITUENTID = RR.CONSTITUENTID
    where TE.TYPECODE = 3 -- household

        and TE.TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID
        and C.ID <> @REGISTRANTCONSTITUENTID
        and C.ID not in    (select TP.CONSTITUENTID from #TEMP_TEAMPEOPLE TP(nolock) where TP.RECIPROCAL = 0);

  --add in general team donors from old team (if user is a team captain of a restarted team)

  If @ISTEAMCAPTAINOFRESTARTEDTEAM=1
  BEGIN
  insert into #TEMP_TEAMPEOPLE  
   (          
    CLIENTUSERSID,  
    CONSTITUENTID,  
    FIRSTNAME,  
    LASTNAME,  
    MIDDLENAME,  
    TITLECODEID,  
    EMAILADDRESS,  
    HOMEPHONE,  
    ADDRESSBLOCK,  
    CITY,  
    STATEID,  
    COUNTRYID,  
    POSTCODE,  
    FOUNDREGISTRANTADDRESSBOOKID,  
    FOUNDMEMBERADDRESSBOOKID,  
    RECIPROCAL  
   )  
   select  
    dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0),  
    C.ID,  
    C.FIRSTNAME,  
    C.KEYNAME,  
    C.MIDDLENAME,  
    C.TITLECODEID,  
    isnull(E.EMAILADDRESS, '') as EMAILADDRESS,  
    isnull(P.NUMBER, '') as NUMBER,  
    isnull(A.ADDRESSBLOCK, '') as ADDRESSBLOCK,  
    isnull(A.CITY, '') as CITY,  
    A.STATEID,  
    A.COUNTRYID,  
    isnull(A.POSTCODE, '') as POSTCODE,  
    dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(dbo.fnGetUserIDFromLinkedRecordID(C.SEQUENCEID, 0), @REGISTRANTCONSTITUENTID),  
    dbo.UFN_FAFADDRESSBOOK_CONSTITUENT_LOOKUP(@ClientUsersID, C.ID),  
    2 -- add to registrant  

   from  
    dbo.CONSTITUENT C(nolock)  
   left outer join   
    dbo.EMAILADDRESS E(nolock) on E.CONSTITUENTID = C.ID and E.ISPRIMARY = 1  
   left outer join   
    dbo.PHONE P(nolock) on P.CONSTITUENTID = C.ID and P.ISPRIMARY = 1  
   left outer join   
    dbo.[ADDRESS] A(nolock) on A.CONSTITUENTID = C.ID and A.ISPRIMARY = 1  
   inner join  
    dbo.REVENUE R(nolock) on R.CONSTITUENTID = C.ID  
   inner join   
    dbo.REVENUESPLIT RS(nolock) on RS.REVENUEID = R.ID  
   inner join   
    dbo.REVENUERECOGNITION RR(nolock) on RR.REVENUESPLITID = RS.ID  
   inner join  
    dbo.TEAMEXTENSION TE(nolock) on TE.TEAMCONSTITUENTID = RR.CONSTITUENTID  
   where TE.TYPECODE = 1 -- team

    and TE.TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID  
    and C.ID <> @REGISTRANTCONSTITUENTID  
    and C.ID not in (select TP.CONSTITUENTID from #TEMP_TEAMPEOPLE TP(nolock) where TP.RECIPROCAL = 0);
  END

    --start processing address book


    --update the registrant's constituent id in member's address book

    update
        AB
    set
        CONSTITUENTID = @REGISTRANTCONSTITUENTID,
        CHANGEDBYID = @CHANGEAGENTID,
        DATECHANGED = @CURRENTDATE
    from
        dbo.ADDRESSBOOKFAF AB
    inner join
        #TEMP_TEAMPEOPLE TP    on TP.CLIENTUSERSID = AB.CLIENTUSERSID
        and TP.FOUNDREGISTRANTADDRESSBOOKID = AB.ID
        and    TP.CLIENTUSERSID not in
        (
            select TP.CLIENTUSERSID
            from #TEMP_TEAMPEOPLE TP(nolock)
            inner join ADDRESSBOOKFAF AB(nolock) on AB.CLIENTUSERSID = TP.CLIENTUSERSID
            and AB.CONSTITUENTID = @REGISTRANTCONSTITUENTID
        )
        and TP.RECIPROCAL in (0, 1)
    where AB.CONSTITUENTID is null;

    --insert the registrant's information to member's address book

    insert into dbo.ADDRESSBOOKFAF 
    (
        ID,
        CLIENTUSERSID,
        CONSTITUENTID,
        FIRSTNAME,
        LASTNAME,
        MIDDLENAME,
        TITLECODEID,
        EMAILADDRESS,
        HOMEPHONE,
        ADDRESSBLOCK,
        CITY,
        STATEID,
        COUNTRYID,
        POSTCODE,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED
    )
    select newid(),
        TP.CLIENTUSERSID,
        @REGISTRANTCONSTITUENTID,
        @FIRSTNAME,
        @LASTNAME,
        @MIDDLENAME,
        @TITLECODEID,
        @EMAILADDRESS,
        @HOMEPHONE,
        @ADDRESSBLOCK,
        @CITY,
        @STATEID,
        @COUNTRYID,
        @POSTCODE,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE
    from
        #TEMP_TEAMPEOPLE TP(nolock)
    where
        TP.CLIENTUSERSID not in
        (
            select TP.CLIENTUSERSID
            from #TEMP_TEAMPEOPLE TP(nolock)
            inner join ADDRESSBOOKFAF AB(nolock) on AB.CLIENTUSERSID = TP.CLIENTUSERSID
            and AB.CONSTITUENTID = @REGISTRANTCONSTITUENTID
        )
        and TP.CLIENTUSERSID is not null
        and TP.RECIPROCAL in (0, 1);

    if @ClientUsersID is not null
    begin
        --update the member's constituent id in registrant's address book

        update
            AB
        set
            CONSTITUENTID = TP.CONSTITUENTID,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        from
            dbo.ADDRESSBOOKFAF AB
        inner join
            #TEMP_TEAMPEOPLE TP    on TP.FOUNDMEMBERADDRESSBOOKID = AB.ID
            and TP.CONSTITUENTID not in
            (
                select TP.CONSTITUENTID
                from #TEMP_TEAMPEOPLE TP(nolock)
                inner join ADDRESSBOOKFAF AB(nolock) on AB.CONSTITUENTID = TP.CONSTITUENTID
                and AB.CLIENTUSERSID = @ClientUsersID
            )
            and TP.RECIPROCAL in (0, 2)
        where AB.CONSTITUENTID is null
            and AB.CLIENTUSERSID = @ClientUsersID;


        --insert the member's information to registrant's address book

        insert into dbo.ADDRESSBOOKFAF 
        (
            ID,
            CLIENTUSERSID,
            CONSTITUENTID,
            FIRSTNAME,
            LASTNAME,
            MIDDLENAME,
            TITLECODEID,
            EMAILADDRESS,
            HOMEPHONE,
            ADDRESSBLOCK,
            CITY,
            STATEID,
            COUNTRYID,
            POSTCODE,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        select newid(),
            @ClientUsersID,
            TP.CONSTITUENTID,
            TP.FIRSTNAME,
            TP.LASTNAME,
            TP.MIDDLENAME,
            TP.TITLECODEID,
            TP.EMAILADDRESS,
            TP.HOMEPHONE,
            TP.ADDRESSBLOCK,
            TP.CITY,
            TP.STATEID,
            TP.COUNTRYID,
            TP.POSTCODE,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from
            #TEMP_TEAMPEOPLE TP(nolock)
        where
            TP.CONSTITUENTID not in
            (
                select TP.CONSTITUENTID
                from #TEMP_TEAMPEOPLE TP(nolock)
                inner join ADDRESSBOOKFAF AB(nolock) on AB.CONSTITUENTID = TP.CONSTITUENTID
                and AB.CLIENTUSERSID = @ClientUsersID
            )
            and TP.RECIPROCAL in (0, 2);
    end

  drop table #TEMP_TEAMPEOPLE;

end try

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

return 0;