USP_DATAFORMTEMPLATE_ADD_REGISTRANTTEAMFUNDRAISER

The save procedure used by the add dataform template "Registrant Team Fundraising Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@EVENTID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CONSTITUENTID uniqueidentifier IN Registrant
@DATEPURCHASED datetime IN Date
@WAIVEBENEFITS bit IN Waive benefits
@REGISTRATIONS xml IN Registrations
@REGISTRANTMAPPINGS xml IN Guests and details

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_REGISTRANTTEAMFUNDRAISER
                    (
                        @ID uniqueidentifier = null output,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @EVENTID uniqueidentifier,
                        @CONSTITUENTID uniqueidentifier = null,
                        @DATEPURCHASED datetime = null,
                        @WAIVEBENEFITS bit = 0,
                        @REGISTRATIONS xml = null,
                        @REGISTRANTMAPPINGS xml = null
                    )
                    as                    
                        set nocount on;

                        declare @CURRENTDATE datetime;

                        if @ID is null
                            set @ID = newid();

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

                        set @CURRENTDATE = getdate();

                        begin try
                            declare @REGISTRANTMAPPINGTABLE table
                            (
                                REGISTRANTID uniqueidentifier default newid(),
                                EVENTPRICEID uniqueidentifier,
                                CONSTITUENTID uniqueidentifier,
                                TEAMFUNDRAISERTYPECODE tinyint,
                                TEAMFUNDRAISINGTEAMID uniqueidentifier,
                                GOAL money,
                                ISTEAMCAPTAIN bit
                            );

                            insert into @REGISTRANTMAPPINGTABLE
                            (
                                EVENTPRICEID,
                                CONSTITUENTID,
                                TEAMFUNDRAISERTYPECODE,
                                TEAMFUNDRAISINGTEAMID,
                                GOAL,
                                ISTEAMCAPTAIN
                            )
                            --TODO: Change to FROMITEMLISTXML function

                            SELECT
                            T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                            T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') AS 'CONSTITUENTID',
                            T.c.value('(TEAMFUNDRAISERTYPECODE)[1]','bit') AS 'TEAMFUNDRAISERTYPECODE',
                            T.c.value('(TEAMFUNDRAISINGTEAMID)[1]','uniqueidentifier') AS 'TEAMFUNDRAISINGTEAMID',
                            T.c.value('(GOAL)[1]','money') AS 'GOAL',
                            T.c.value('(ISTEAMCAPTAIN)[1]','bit') AS 'ISTEAMCAPTAIN'
                            FROM   @REGISTRANTMAPPINGS.nodes('/REGISTRANTMAPPINGS/ITEM') T(c);

                            declare @WILLNOTATTEND bit;

                            --Mark the registrant as WILLNOTATTEND if they are not mapped to a registration

                            if not exists
                            (
                                select
                                    CONSTITUENTID
                                from
                                    @REGISTRANTMAPPINGTABLE
                                where
                                    CONSTITUENTID = @CONSTITUENTID
                            )
                                set @WILLNOTATTEND = 1;
                            else
                                set @WILLNOTATTEND = 0;

                            insert into dbo.REGISTRANT
                            (
                                ID,
                                CONSTITUENTID,
                                EVENTID,
                                BENEFITSWAIVED,
                                WILLNOTATTEND,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            values
                            (
                                @ID,
                                @CONSTITUENTID,
                                @EVENTID,
                                @WAIVEBENEFITS,
                                @WILLNOTATTEND,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            );    

                            declare @SELECTEDREGISTRATIONTABLE table
                            (
                                REGISTRANTREGISTRATIONID uniqueidentifier default newid(),
                                EVENTPRICEID uniqueidentifier,
                                AMOUNT money,
                                RECEIPTAMOUNT money,
                                QUANTITY int
                            );

                            insert into @SELECTEDREGISTRATIONTABLE
                            (
                                EVENTPRICEID,
                                AMOUNT,
                                RECEIPTAMOUNT,
                                QUANTITY
                            )
                            select
                                EVENTPRICEID,
                                AMOUNT,
                                RECEIPTAMOUNT,
                                QUANTITY
                            from
                                dbo.UFN_REGISTRANT_GETREGISTRATIONS_FROMITEMLISTXML(@REGISTRATIONS);

                            insert into dbo.REGISTRANTREGISTRATION
                            (
                                ID,
                                REGISTRANTID,
                                EVENTPRICEID,
                                AMOUNT,
                                RECEIPTAMOUNT,
                                QUANTITY,
                                DATEPURCHASED,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                REGISTRANTREGISTRATIONID,
                                @ID,
                                EVENTPRICEID,
                                AMOUNT,
                                RECEIPTAMOUNT,
                                QUANTITY,
                                @DATEPURCHASED,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @SELECTEDREGISTRATIONTABLE;

                            --Add guests, both known and unknown

                            insert into dbo.REGISTRANT
                            (
                                ID,
                                EVENTID,
                                CONSTITUENTID,
                                GUESTOFREGISTRANTID,
                                BENEFITSWAIVED,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                REGISTRANTMAPPING.REGISTRANTID,
                                @EVENTID,
                                REGISTRANTMAPPING.CONSTITUENTID,
                                @ID,
                                @WAIVEBENEFITS,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                            where
                                REGISTRANTMAPPING.CONSTITUENTID is null
                                or REGISTRANTMAPPING.CONSTITUENTID <> @CONSTITUENTID;

                            --The registrant was inserted with an earlier statement, update the registrant ID for use when inserting benefits

                            update @REGISTRANTMAPPINGTABLE
                            set
                                REGISTRANTID = @ID
                            where
                                CONSTITUENTID = @CONSTITUENTID;

                            --Add the default benefits for the added registrations, give benefits to

                            --the registrant/guests when they are mapped and when the registration count is 1.

                            insert into dbo.REGISTRANTBENEFIT
                            (
                                REGISTRANTID,
                                BENEFITID,
                                UNITVALUE,
                                QUANTITY,
                                TOTALVALUE,
                                DETAILS,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                REGISTRANTMAPPING.REGISTRANTID,
                                EVENTPRICEBENEFIT.BENEFITID,
                                EVENTPRICEBENEFIT.UNITVALUE,
                                EVENTPRICEBENEFIT.QUANTITY,
                                (EVENTPRICEBENEFIT.UNITVALUE * EVENTPRICEBENEFIT.QUANTITY),
                                EVENTPRICEBENEFIT.DETAILS,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                                inner join dbo.EVENTPRICEBENEFIT on REGISTRANTMAPPING.EVENTPRICEID = EVENTPRICEBENEFIT.EVENTPRICEID
                                left join dbo.EVENTPRICE on REGISTRANTMAPPING.EVENTPRICEID = EVENTPRICE.ID
                                left join dbo.EVENTREGISTRATIONTYPE on EVENTPRICE.EVENTREGISTRATIONTYPEID = EVENTREGISTRATIONTYPE.ID
                            where
                                EVENTPRICE.REGISTRATIONCOUNT = 1;

                            --Benefits from registration options with high registration counts always

                            --go to the registrant so that they don't have to be divided among guests

                            insert into dbo.REGISTRANTBENEFIT
                            (
                                REGISTRANTID,
                                BENEFITID,
                                UNITVALUE,
                                QUANTITY,
                                TOTALVALUE,
                                DETAILS,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                @ID,
                                EVENTPRICEBENEFIT.BENEFITID,
                                (SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.UNITVALUE),
                                (SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.QUANTITY),
                                ((SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.UNITVALUE) * (SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.QUANTITY)),
                                EVENTPRICEBENEFIT.DETAILS,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @SELECTEDREGISTRATIONTABLE SELECTEDREGISTRATION
                                inner join dbo.EVENTPRICEBENEFIT on SELECTEDREGISTRATION.EVENTPRICEID = EVENTPRICEBENEFIT.EVENTPRICEID
                                left join dbo.EVENTPRICE on SELECTEDREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
                                left join dbo.EVENTREGISTRATIONTYPE on EVENTPRICE.EVENTREGISTRATIONTYPEID = EVENTREGISTRATIONTYPE.ID
                            where
                                EVENTPRICE.REGISTRATIONCOUNT > 1;

                            --Team fundraising

                            declare @APPEALID uniqueidentifier;
                            select
                                @APPEALID = EVENT.APPEALID
                            from
                                dbo.EVENT
                            where
                                EVENT.ID = @EVENTID;

                            update
                                dbo.TEAMFUNDRAISER
                            set
                                GOAL = REGISTRANTMAPPING.GOAL,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                                inner join dbo.TEAMFUNDRAISER on
                                    REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
                                    and @APPEALID = TEAMFUNDRAISER.APPEALID
                            where
                                TEAMFUNDRAISER.GOAL <> REGISTRANTMAPPING.GOAL
                                and
                                (
                                    REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 1
                                    or
                                    REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 2
                                );

                            insert into dbo.TEAMFUNDRAISER
                            (
                                APPEALID,
                                CONSTITUENTID,
                                GOAL,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                @APPEALID,
                                REGISTRANTMAPPING.CONSTITUENTID,
                                REGISTRANTMAPPING.GOAL,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                                left join dbo.TEAMFUNDRAISER on REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
                            where
                                TEAMFUNDRAISER.ID is null
                                and 
                                (
                                    REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 1
                                    or
                                    REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 2
                                );

                            insert into dbo.TEAMFUNDRAISINGTEAMMEMBER
                            (
                                TEAMFUNDRAISINGTEAMID,
                                TEAMFUNDRAISERID,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                REGISTRANTMAPPING.TEAMFUNDRAISINGTEAMID,
                                TEAMFUNDRAISER.ID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                                left join dbo.TEAMFUNDRAISER on
                                    REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
                                    and @APPEALID = TEAMFUNDRAISER.APPEALID
                                left join dbo.TEAMFUNDRAISINGTEAMMEMBER on
                                    REGISTRANTMAPPING.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID
                                    and TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
                            where
                                REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 1
                                and TEAMFUNDRAISINGTEAMMEMBER.ID is null;

                            insert into dbo.TEAMFUNDRAISINGTEAMMEMBER
                            (
                                TEAMFUNDRAISINGTEAMID,
                                TEAMFUNDRAISERID,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                null,
                                TEAMFUNDRAISER.ID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                                left join dbo.TEAMFUNDRAISER on
                                    REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
                                    and @APPEALID = TEAMFUNDRAISER.APPEALID
                                left join dbo.TEAMFUNDRAISINGTEAMMEMBER on
                                    TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID is null
                                    and TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
                            where
                                REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 2
                                and TEAMFUNDRAISINGTEAMMEMBER.ID is null;

                            insert into dbo.TEAMFUNDRAISINGTEAMCAPTAIN
                            (
                                TEAMFUNDRAISINGTEAMID,
                                CONSTITUENTID,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                REGISTRANTMAPPING.TEAMFUNDRAISINGTEAMID,
                                REGISTRANTMAPPING.CONSTITUENTID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
                                left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN on
                                    REGISTRANTMAPPING.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAMCAPTAIN.TEAMFUNDRAISINGTEAMID
                                    and REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID
                            where
                                REGISTRANTMAPPING.TEAMFUNDRAISERTYPECODE = 1
                                and REGISTRANTMAPPING.ISTEAMCAPTAIN = 1
                                and TEAMFUNDRAISINGTEAMCAPTAIN.ID is null;
                        end try

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

                        return 0;