USP_DATAFORMTEMPLATE_EDIT_ITINERARYSTAFFRESOURCE

The save procedure used by the edit dataform template "Itinerary Staff Resource Edit Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@QUANTITYNEEDED int IN Quantity needed
@IGNORECONFLICTS bit IN Ignore conflicts when saving
@VOLUNTEERS xml IN Volunteers
@ASSIGNMENTS xml IN Volunteers

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_ITINERARYSTAFFRESOURCE
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @QUANTITYNEEDED int,
                        @IGNORECONFLICTS bit,
                        @VOLUNTEERS xml,
                        @ASSIGNMENTS xml
                    )
                    as

                        set nocount on;

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

                        declare @CURRENTDATE datetime
                        set @CURRENTDATE = getdate()

                        declare @VOLUNTEERTYPEID uniqueidentifier;
                        declare @JOBOCCURRENCEID uniqueidentifier;
                        declare @FILLEDBYCODE tinyint;
                        declare @STATUSCODE tinyint;

                        select @VOLUNTEERTYPEID = ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID,
                                @FILLEDBYCODE = ITINERARYSTAFFRESOURCE.FILLEDBYCODE,
                                @JOBOCCURRENCEID = ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID,
                                @STATUSCODE = STATUSCODE
                        from dbo.ITINERARYSTAFFRESOURCE
                        inner join dbo.ITINERARY on ITINERARY.ID = ITINERARYSTAFFRESOURCE.ITINERARYID
                        inner join dbo.RESERVATION on RESERVATION.ID = ITINERARY.RESERVATIONID
                        inner join dbo.SALESORDER on SALESORDER.ID = RESERVATION.ID
                        where ITINERARYSTAFFRESOURCE.ID = @ID

                        if @STATUSCODE in (1, 5)
                            raiserror('BBERR_INVALIDSTATUS', 13, 1);

                        /* Make sure we are checking for conflicts and filled by code must be
                            volunteer as that is currently the only kind of staff resource 
                            that can cause conflicts. */
                        if (@IGNORECONFLICTS = 0) and (@FILLEDBYCODE = 0)
                        begin
                            declare @START datetime;
                            declare @END datetime;
                            declare @ITINERARYID uniqueidentifier;

                            select 
                                @START = ITINERARY.STARTDATETIME,
                                @END = ITINERARY.ENDDATETIME,
                                @ITINERARYID = ITINERARY.ID
                            from dbo.ITINERARY
                            inner join dbo.ITINERARYSTAFFRESOURCE on 
                                ITINERARY.ID = ITINERARYSTAFFRESOURCE.ITINERARYID
                            where ITINERARYSTAFFRESOURCE.ID = @ID;

                            /* We only want conflicts for the staff resource we are adding so we pretend this is the only one */
                            declare @ITINERARYSTAFFRESOURCE xml;
                            set @ITINERARYSTAFFRESOURCE = '<STAFFRESOURCES><ITEM><VOLUNTEERTYPEID>' + convert(nvarchar(36), @VOLUNTEERTYPEID) + '</VOLUNTEERTYPEID><QUANTITYNEEDED>' + convert(nvarchar(20), @QUANTITYNEEDED) + '</QUANTITYNEEDED><FILLEDBYCODE>0</FILLEDBYCODE></ITEM></STAFFRESOURCES>'


                            if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
                            (
                                @START, @END,
                                null, null,    @ITINERARYSTAFFRESOURCE,
                                null, @ITINERARYID, null,
                                0,
                                1,
                                0,
                                0
                            ) = 1
                            begin                    
                                raiserror('BBERR_CONFLICTSEXIST', 13, 1);
                                return 1;
                            end
                        end

                        begin try
                            -- handle updating the data

                            update dbo.ITINERARYSTAFFRESOURCE
                            set QUANTITYNEEDED = @QUANTITYNEEDED,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID;

                            update dbo.JOBOCCURRENCE
                            set VOLUNTEERSNEEDED = @QUANTITYNEEDED,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @JOBOCCURRENCEID;

                            declare @ORDERID uniqueidentifier
                            declare @ISFLATRATE bit = 0

                            select
                                @ORDERID = RESERVATION.ID,
                                @ISFLATRATE = case when PRICINGCODE = 1 then 1 else 0 end
                            from dbo.RESERVATION
                                inner join dbo.ITINERARY on ITINERARY.RESERVATIONID = RESERVATION.ID
                            where ITINERARY.ID = @ITINERARYID

                            exec dbo.USP_ITINERARY_STAFFRESOURCES_SALESORDERSYNC @ITINERARYID, @ORDERID, @CHANGEAGENTID

                            if @ISFLATRATE = 1
                                exec dbo.USP_RESERVATION_DISTRIBUTEAPPLICATIONS @ORDERID, @CHANGEAGENTID, @CURRENTDATE;    

                            -- Generate taxes last

                            exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;

                            if @ISFLATRATE = 1
                                exec dbo.USP_RESERVATIONRATESCALE_UPDATETAXES @ORDERID, @CHANGEAGENTID, @CURRENTDATE;    

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

                        return 0;