USP_APPEAL_TEAMFUNDRAISINGCOPY

Copies team fundraising teams and team fundraisers from one appeal to another.

Parameters

Parameter Parameter Type Mode Description
@SOURCEAPPEALID uniqueidentifier IN
@SOURCETEAMID uniqueidentifier IN
@DESTINATIONAPPEALID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@COPYTEAMFUNDRAISERS bit IN
@CURRENTAPPUSERID uniqueidentifier IN
@FEATUREID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_APPEAL_TEAMFUNDRAISINGCOPY
            (
                @SOURCEAPPEALID uniqueidentifier,
                @SOURCETEAMID uniqueidentifier,
                @DESTINATIONAPPEALID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @COPYTEAMFUNDRAISERS bit = 0,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @FEATUREID uniqueidentifier = null
            )
            with execute as caller
            as
                set nocount on;

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

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

                if @CURRENTAPPUSERID is null
                    raiserror('ERR_CURRENTAPPUSERID_REQUIRED', 13, 1);

                if not @SOURCEAPPEALID is null
                begin
                    if not (select dbo.UFN_APPEAL_USERHASSITEACCESS(@CURRENTAPPUSERID, @SOURCEAPPEALID)) = 1
                        raiserror('ERR_SECURITY_APPEALID', 13, 1);
                end

                if @FEATUREID is null
                    raiserror('ERR_FEATUREID_REQUIRED', 13, 1);

                declare @DESTINATIONBASECURRENCYID uniqueidentifier;
                select @DESTINATIONBASECURRENCYID = APPEAL.BASECURRENCYID
                from dbo.APPEAL
                where APPEAL.ID = @DESTINATIONAPPEALID;

                declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
                declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE(@DESTINATIONBASECURRENCYID, @ORGANIZATIONCURRENCYID, getdate(), null, null);

                declare @ISADMIN bit = 0;
                declare @USERISNONRAC bit = 0;
                declare @NOCONSTITUENTSECURITY bit = 0;

                set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
                if @ISADMIN <> 1
                begin
                    set @USERISNONRAC = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);

                    if @USERISNONRAC = 0 
                        set @USERISNONRAC = dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_IN_NONRACROLE(@CURRENTAPPUSERID, @FEATUREID);
                end

                if @ISADMIN = 1 or @USERISNONRAC = 1
                    set @NOCONSTITUENTSECURITY = 1;

                --TODO: If duplicate teams exist, use source goal, merge captains, merge members

                declare @TEAMMAPPINGTABLE table
                (
                    SOURCETEAMID uniqueidentifier,
                    SOURCETEAMNAME nvarchar(100),
                    SOURCETEAMFUNDRAISINGTEAMGROUPID uniqueidentifier,
                    DESTINATIONTEAMID uniqueidentifier
                );

                --Team names are only unique given their parent team, use a recursive CTE to map

                -- destination teams by level otherwise all teams with the same name get merged during a copy

                with TEAMHIERARCHY
                as
                (
                    select
                        SOURCETEAM.ID [SOURCETEAMID],
                        SOURCETEAM.NAME [SOURCETEAMNAME],
                        case
                            when SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID is null then newid()
                            else SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID
                        end [SOURCETEAMFUNDRAISINGTEAMGROUPID],
                        DESTINATIONTEAM.ID [DESTINATIONTEAMID],
                        0 [LEVEL]
                    from
                        dbo.TEAMFUNDRAISINGTEAM SOURCETEAM
                        inner join dbo.TEAMFUNDRAISINGTEAM DESTINATIONTEAM on
                            DESTINATIONTEAM.PARENTTEAMID is null
                            and DESTINATIONTEAM.NAME = SOURCETEAM.NAME
                            and @DESTINATIONAPPEALID = DESTINATIONTEAM.APPEALID
                    where
                        (
                            -- Either get all top-level teams from an appeal, ...

                            SOURCETEAM.PARENTTEAMID is null
                            and
                            SOURCETEAM.APPEALID = @SOURCEAPPEALID
                        )
                        or
                        (
                            -- ... or get the one selected team if no appeal is specified

                            @SOURCEAPPEALID is null
                            and
                            SOURCETEAM.ID = @SOURCETEAMID
                        )

                    union all

                    select
                        SOURCETEAM.ID,
                        SOURCETEAM.NAME,
                        case
                            when SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID is null then newid()
                            else SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID
                        end,
                        DESTINATIONTEAM.ID,
                        [LEVEL] + 1
                    from
                        TEAMHIERARCHY
                        inner join dbo.TEAMFUNDRAISINGTEAM SOURCETEAM on TEAMHIERARCHY.SOURCETEAMID = SOURCETEAM.PARENTTEAMID
                        inner join dbo.TEAMFUNDRAISINGTEAM DESTINATIONTEAM on
                            TEAMHIERARCHY.DESTINATIONTEAMID = DESTINATIONTEAM.PARENTTEAMID
                            and DESTINATIONTEAM.NAME = SOURCETEAM.NAME
                )
                insert into @TEAMMAPPINGTABLE
                (
                    SOURCETEAMID,
                    SOURCETEAMNAME,
                    SOURCETEAMFUNDRAISINGTEAMGROUPID,
                    DESTINATIONTEAMID
                )
                select
                    TEAMHIERARCHY.SOURCETEAMID,
                    TEAMHIERARCHY.SOURCETEAMNAME,
                    TEAMHIERARCHY.SOURCETEAMFUNDRAISINGTEAMGROUPID,
                    TEAMHIERARCHY.DESTINATIONTEAMID
                from
                    TEAMHIERARCHY
                order by
                    TEAMHIERARCHY.[LEVEL]
                option (maxrecursion 9);

                -- Add all of the other teams from the selected appeal or when no

                -- appeal was specified just add the subteams of the selected team

                if @SOURCEAPPEALID is not null
                    insert into @TEAMMAPPINGTABLE
                    (
                        SOURCETEAMID,
                        SOURCETEAMNAME,
                        SOURCETEAMFUNDRAISINGTEAMGROUPID,
                        DESTINATIONTEAMID
                    )
                    select
                        SOURCETEAM.ID,
                        SOURCETEAM.NAME,
                        case
                            when SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID is null then newid()
                            else SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID
                        end,
                        newid()
                    from
                        dbo.TEAMFUNDRAISINGTEAM SOURCETEAM
                    where
                        SOURCETEAM.APPEALID = @SOURCEAPPEALID
                        and SOURCETEAM.ID not in (select SOURCETEAMID from @TEAMMAPPINGTABLE);

                else
                    with TEAMHIERARCHY
                    as
                    (
                        select
                            SOURCETEAM.ID [SOURCETEAMID],
                            SOURCETEAM.NAME [SOURCETEAMNAME],
                            case
                                when SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID is null then newid()
                                else SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID
                            end [SOURCETEAMFUNDRAISINGTEAMGROUPID],
                            0 [LEVEL]
                        from
                            dbo.TEAMFUNDRAISINGTEAM SOURCETEAM
                        where
                            SOURCETEAM.ID = @SOURCETEAMID

                        union all

                        select
                            SOURCETEAM.ID,
                            SOURCETEAM.NAME,
                            case
                                when SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID is null then newid()
                                else SOURCETEAM.TEAMFUNDRAISINGTEAMGROUPID
                            end,
                            [LEVEL] + 1
                        from
                            TEAMHIERARCHY
                            inner join dbo.TEAMFUNDRAISINGTEAM SOURCETEAM on TEAMHIERARCHY.SOURCETEAMID = SOURCETEAM.PARENTTEAMID
                    )
                    insert into @TEAMMAPPINGTABLE
                    (
                        SOURCETEAMID,
                        SOURCETEAMNAME,
                        SOURCETEAMFUNDRAISINGTEAMGROUPID,
                        DESTINATIONTEAMID
                    )
                    select
                        TEAMHIERARCHY.SOURCETEAMID,
                        TEAMHIERARCHY.SOURCETEAMNAME,
                        TEAMHIERARCHY.SOURCETEAMFUNDRAISINGTEAMGROUPID,
                        newid()
                    from
                        TEAMHIERARCHY
                    where
                        TEAMHIERARCHY.SOURCETEAMID not in (select SOURCETEAMID from @TEAMMAPPINGTABLE);


                insert into dbo.TEAMFUNDRAISINGTEAMGROUP
                (
                    ID,
                    NAME,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                select
                    TEAMMAPPING.SOURCETEAMFUNDRAISINGTEAMGROUPID,
                    TEAMMAPPING.SOURCETEAMNAME,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                from
                    @TEAMMAPPINGTABLE TEAMMAPPING
                    left join dbo.TEAMFUNDRAISINGTEAMGROUP on TEAMMAPPING.SOURCETEAMFUNDRAISINGTEAMGROUPID = TEAMFUNDRAISINGTEAMGROUP.ID
                where
                    TEAMFUNDRAISINGTEAMGROUP.ID is null;

                --Set the team group ID on the source teams if the group is new

                update dbo.TEAMFUNDRAISINGTEAM set
                    TEAMFUNDRAISINGTEAMGROUPID = TEAMMAPPING.SOURCETEAMFUNDRAISINGTEAMGROUPID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                from
                    @TEAMMAPPINGTABLE TEAMMAPPING
                    inner join dbo.TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.ID = TEAMMAPPING.SOURCETEAMID
                where
                    TEAMFUNDRAISINGTEAM.TEAMFUNDRAISINGTEAMGROUPID is null;

                --Set the team group ID on the existing destination teams if they do not already have a group

                update dbo.TEAMFUNDRAISINGTEAM set
                    TEAMFUNDRAISINGTEAMGROUPID = TEAMMAPPING.SOURCETEAMFUNDRAISINGTEAMGROUPID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                from
                    @TEAMMAPPINGTABLE TEAMMAPPING
                    inner join dbo.TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.ID = TEAMMAPPING.DESTINATIONTEAMID
                where
                    TEAMFUNDRAISINGTEAM.TEAMFUNDRAISINGTEAMGROUPID is null;

                --Using recursive CTE so that teams are inserted level-by-level

                with TEAMHIERARCHY
                (
                    ID,
                    APPEALID,
                    NAME,
                    GOAL,
                    PARENTTEAMID,
                    LEVEL
                )
                as
                ( 
                    select
                        TEAMFUNDRAISINGTEAM.ID,
                        TEAMFUNDRAISINGTEAM.APPEALID,
                        TEAMFUNDRAISINGTEAM.NAME,
                        TEAMFUNDRAISINGTEAM.GOAL,
                        TEAMFUNDRAISINGTEAM.PARENTTEAMID,
                        0 [LEVEL]
                    from
                        dbo.TEAMFUNDRAISINGTEAM
                    where
                        (
                            (
                                -- Either get all top-level teams from an appeal, ...

                                TEAMFUNDRAISINGTEAM.PARENTTEAMID is null
                                and
                                TEAMFUNDRAISINGTEAM.APPEALID = @SOURCEAPPEALID
                            )
                            or
                            (
                                -- ... or get the one selected team if no appeal is specified

                                @SOURCEAPPEALID is null
                                and
                                TEAMFUNDRAISINGTEAM.ID = @SOURCETEAMID
                            )
                        )
                        and TEAMFUNDRAISINGTEAM.ID in (select SOURCETEAMID from @TEAMMAPPINGTABLE)

                union all

                    select
                        TEAMFUNDRAISINGTEAM.ID,
                        TEAMFUNDRAISINGTEAM.APPEALID,
                        TEAMFUNDRAISINGTEAM.NAME,
                        TEAMFUNDRAISINGTEAM.GOAL,
                        TEAMFUNDRAISINGTEAM.PARENTTEAMID,
                        TEAMHIERARCHY.LEVEL + 1 [LEVEL]
                    from
                        dbo.TEAMFUNDRAISINGTEAM
                        inner join TEAMHIERARCHY on TEAMFUNDRAISINGTEAM.PARENTTEAMID = TEAMHIERARCHY.ID
                )
                insert into dbo.TEAMFUNDRAISINGTEAM
                (
                    ID,
                    APPEALID,
                    NAME,
                    GOAL,
                    PARENTTEAMID,
                    TEAMFUNDRAISINGTEAMGROUPID,
                    ORGANIZATIONGOAL,
                    ORGANIZATIONEXCHANGERATEID,
                    BASECURRENCYID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                select
                    TEAMMAPPING.DESTINATIONTEAMID,
                    @DESTINATIONAPPEALID,
                    TEAMHIERARCHY.NAME,
                    TEAMHIERARCHY.GOAL,
                    PARENTTEAM.DESTINATIONTEAMID,
                    TEAMMAPPING.SOURCETEAMFUNDRAISINGTEAMGROUPID,

                    dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(TEAMHIERARCHY.GOAL, @ORGANIZATIONEXCHANGERATEID, null),
                    @ORGANIZATIONEXCHANGERATEID,
                    @DESTINATIONBASECURRENCYID,

                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                from
                    TEAMHIERARCHY
                    left join @TEAMMAPPINGTABLE TEAMMAPPING on TEAMHIERARCHY.ID = TEAMMAPPING.SOURCETEAMID
                    left join @TEAMMAPPINGTABLE PARENTTEAM on TEAMHIERARCHY.PARENTTEAMID = PARENTTEAM.SOURCETEAMID
                    left join dbo.TEAMFUNDRAISINGTEAM [EXISTINGDESTINATIONTEAM] on TEAMMAPPING.DESTINATIONTEAMID = [EXISTINGDESTINATIONTEAM].ID
                where
                    [EXISTINGDESTINATIONTEAM].ID is null
                order by
                    TEAMHIERARCHY.[LEVEL]
                option (maxrecursion 9);

                insert into dbo.TEAMFUNDRAISINGTEAMCAPTAIN
                (
                    TEAMFUNDRAISINGTEAMID,
                    CONSTITUENTID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                select
                    TEAMMAPPING.DESTINATIONTEAMID,
                    TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                from
                    dbo.TEAMFUNDRAISINGTEAMCAPTAIN
                    left join @TEAMMAPPINGTABLE TEAMMAPPING on TEAMFUNDRAISINGTEAMCAPTAIN.TEAMFUNDRAISINGTEAMID = TEAMMAPPING.SOURCETEAMID
                    left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORFORM(@CURRENTAPPUSERID, @FEATUREID) as [RAC] on [RAC].ID = TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID
                where
                    TEAMFUNDRAISINGTEAMCAPTAIN.TEAMFUNDRAISINGTEAMID in (select SOURCETEAMID from @TEAMMAPPINGTABLE)
                    and (@NOCONSTITUENTSECURITY = 1 or [RAC].ID is not null)
                    and
                    (
                        TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID not in 
                        (
                            select
                                DTFTC.CONSTITUENTID
                            from
                                dbo.TEAMFUNDRAISINGTEAMCAPTAIN DTFTC
                                left join dbo.TEAMFUNDRAISINGTEAM DTFT on DTFT.ID = DTFTC.TEAMFUNDRAISINGTEAMID

                            where
                                DTFT.APPEALID = @DESTINATIONAPPEALID
                                and DTFT.ID = TEAMMAPPING.DESTINATIONTEAMID
                        )
                        and
                        TEAMMAPPING.DESTINATIONTEAMID not in
                        (
                            select
                                DTFT.ID
                            from
                                dbo.TEAMFUNDRAISINGTEAM DTFT
                                left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN DTFTC on DTFTC.TEAMFUNDRAISINGTEAMID = DTFT.ID
                            where
                                DTFT.APPEALID = @DESTINATIONAPPEALID
                                and DTFTC.CONSTITUENTID = TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID
                        )
                    );



                if @COPYTEAMFUNDRAISERS = 1
                    begin
                        if @SOURCEAPPEALID is not null
                            update dbo.TEAMFUNDRAISER
                            set
                                GOAL = SOURCETEAMFUNDRAISER.GOAL
                            from
                                dbo.TEAMFUNDRAISER
                                inner join dbo.TEAMFUNDRAISER SOURCETEAMFUNDRAISER on
                                    TEAMFUNDRAISER.CONSTITUENTID = SOURCETEAMFUNDRAISER.CONSTITUENTID
                                left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORFORM(@CURRENTAPPUSERID, @FEATUREID) as [RAC] on [RAC].ID = SOURCETEAMFUNDRAISER.CONSTITUENTID
                                    and @SOURCEAPPEALID = SOURCETEAMFUNDRAISER.APPEALID
                                    and (@NOCONSTITUENTSECURITY = 1 or [RAC].ID is not null)
                            where
                                TEAMFUNDRAISER.APPEALID = @DESTINATIONAPPEALID;
                        else
                            update dbo.TEAMFUNDRAISER
                            set
                                GOAL = SOURCETEAMFUNDRAISER.GOAL,
                                ORGANIZATIONGOAL = dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(SOURCETEAMFUNDRAISER.GOAL, @ORGANIZATIONEXCHANGERATEID, null),
                                ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                                BASECURRENCYID = @DESTINATIONBASECURRENCYID
                            from
                                dbo.TEAMFUNDRAISER
                                inner join dbo.TEAMFUNDRAISER SOURCETEAMFUNDRAISER on TEAMFUNDRAISER.CONSTITUENTID = SOURCETEAMFUNDRAISER.CONSTITUENTID
                                left join dbo.TEAMFUNDRAISINGTEAMMEMBER on SOURCETEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
                                left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORFORM(@CURRENTAPPUSERID, @FEATUREID) as [RAC] on [RAC].ID = SOURCETEAMFUNDRAISER.CONSTITUENTID
                            where
                                TEAMFUNDRAISER.APPEALID = @DESTINATIONAPPEALID
                                and TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID in (select SOURCETEAMID from @TEAMMAPPINGTABLE)
                                and (@NOCONSTITUENTSECURITY = 1 or [RAC].ID is not null);

                        if @SOURCEAPPEALID is not null
                            insert into dbo.TEAMFUNDRAISER
                            (
                                APPEALID,
                                CONSTITUENTID,
                                GOAL,
                                ORGANIZATIONGOAL,
                                ORGANIZATIONEXCHANGERATEID,
                                BASECURRENCYID,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                @DESTINATIONAPPEALID,
                                TEAMFUNDRAISER.CONSTITUENTID,
                                TEAMFUNDRAISER.GOAL,
                                ORGANIZATIONGOAL = dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(TEAMFUNDRAISER.GOAL, @ORGANIZATIONEXCHANGERATEID, null),
                                ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                                BASECURRENCYID = @DESTINATIONBASECURRENCYID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                dbo.TEAMFUNDRAISER
                            left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORFORM(@CURRENTAPPUSERID, @FEATUREID) as [RAC] on [RAC].ID = TEAMFUNDRAISER.CONSTITUENTID
                            where 
                                TEAMFUNDRAISER.APPEALID = @SOURCEAPPEALID
                                and
                                TEAMFUNDRAISER.CONSTITUENTID not in 
                                (
                                    select
                                        DTF.CONSTITUENTID
                                    from
                                        dbo.TEAMFUNDRAISER DTF
                                    where
                                        DTF.APPEALID = @DESTINATIONAPPEALID
                                )
                                and (@NOCONSTITUENTSECURITY = 1 or [RAC].ID is not null);

                        else
                            insert into dbo.TEAMFUNDRAISER
                            (
                                APPEALID,
                                CONSTITUENTID,
                                GOAL,
                                ORGANIZATIONGOAL,
                                ORGANIZATIONEXCHANGERATEID,
                                BASECURRENCYID,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                @DESTINATIONAPPEALID,
                                TEAMFUNDRAISER.CONSTITUENTID,
                                TEAMFUNDRAISER.GOAL,
                                ORGANIZATIONGOAL = dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(TEAMFUNDRAISER.GOAL, @ORGANIZATIONEXCHANGERATEID, null),
                                ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                                BASECURRENCYID = @DESTINATIONBASECURRENCYID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                dbo.TEAMFUNDRAISER
                                left join dbo.TEAMFUNDRAISINGTEAMMEMBER on TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
                                left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORFORM(@CURRENTAPPUSERID, @FEATUREID) as [RAC] on [RAC].ID = TEAMFUNDRAISER.CONSTITUENTID
                            where 
                                TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID in (select SOURCETEAMID from @TEAMMAPPINGTABLE)
                                and
                                TEAMFUNDRAISER.CONSTITUENTID not in 
                                (
                                    select
                                        DTF.CONSTITUENTID
                                    from
                                        dbo.TEAMFUNDRAISER DTF
                                    where
                                        DTF.APPEALID = @DESTINATIONAPPEALID
                                )
                                and (@NOCONSTITUENTSECURITY = 1 or [RAC].ID is not null);


                        with SELECTEDTEAMFUNDRAISINGTEAMMEMBER
                        as
                        (
                            select
                                TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID,
                                TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID,
                                TEAMFUNDRAISER.CONSTITUENTID
                            from
                                dbo.TEAMFUNDRAISINGTEAMMEMBER
                                inner join dbo.TEAMFUNDRAISER on TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID = TEAMFUNDRAISER.ID
                                left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORFORM(@CURRENTAPPUSERID, @FEATUREID) as [RAC] on [RAC].ID = TEAMFUNDRAISER.CONSTITUENTID
                            where
                                TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID in (select SOURCETEAMID from @TEAMMAPPINGTABLE)
                                or
                                TEAMFUNDRAISER.APPEALID = @SOURCEAPPEALID
                                and (@NOCONSTITUENTSECURITY = 1 or [RAC].ID is not null)
                        )
                        insert into dbo.TEAMFUNDRAISINGTEAMMEMBER
                        (
                            TEAMFUNDRAISINGTEAMID,
                            TEAMFUNDRAISERID,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED
                        )
                        select
                            TEAMMAPPING.DESTINATIONTEAMID,
                            DESTINATIONTEAMFUNDRAISER.ID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                        from
                            SELECTEDTEAMFUNDRAISINGTEAMMEMBER
                            inner join dbo.TEAMFUNDRAISER DESTINATIONTEAMFUNDRAISER on
                                SELECTEDTEAMFUNDRAISINGTEAMMEMBER.CONSTITUENTID = DESTINATIONTEAMFUNDRAISER.CONSTITUENTID
                                and @DESTINATIONAPPEALID = DESTINATIONTEAMFUNDRAISER.APPEALID
                            left join @TEAMMAPPINGTABLE TEAMMAPPING on SELECTEDTEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID = TEAMMAPPING.SOURCETEAMID
                        where
                            -- Exclude rows where the team membership already exists

                            (
                                TEAMMAPPING.DESTINATIONTEAMID is not null
                                and
                                not exists
                                (
                                    select
                                        TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID
                                    from
                                        dbo.TEAMFUNDRAISINGTEAMMEMBER
                                    where
                                        TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID = TEAMMAPPING.DESTINATIONTEAMID
                                        and TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID = DESTINATIONTEAMFUNDRAISER.ID
                                )
                            )
                            or
                            (
                                TEAMMAPPING.DESTINATIONTEAMID is null
                                and
                                not exists
                                (
                                    select
                                        TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID
                                    from
                                        dbo.TEAMFUNDRAISINGTEAMMEMBER
                                    where
                                        TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID is null
                                        and TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID = DESTINATIONTEAMFUNDRAISER.ID
                                )
                            );
                    end

                return 0;