USP_DATAFORMTEMPLATE_ADD_ITINERARYSTAFFRESOURCE

The save procedure used by the add dataform template "Itinerary Staff Resource Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@ITINERARYID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@VOLUNTEERTYPEID uniqueidentifier IN Resource
@QUANTITYNEEDED int IN Quantity needed
@FILLEDBYCODE tinyint IN Filled by
@JOBID uniqueidentifier IN Job being performed
@JOBNAME nvarchar(100) IN Name
@JOBDESCRIPTION nvarchar(255) IN Description
@IGNORECONFLICTS bit IN Ignore conflicts when saving
@VOLUNTEERS xml IN Volunteers
@ASSIGNMENTS xml IN Volunteers

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_ITINERARYSTAFFRESOURCE
                    (
                        @ID uniqueidentifier = null output,
                        @ITINERARYID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @VOLUNTEERTYPEID uniqueidentifier,
                        @QUANTITYNEEDED int,
                        @FILLEDBYCODE tinyint = 0,
                        @JOBID uniqueidentifier = null,
                        @JOBNAME nvarchar(100) = null,
                        @JOBDESCRIPTION nvarchar(255) = null,
                        @IGNORECONFLICTS bit,
                        @VOLUNTEERS xml = null,
                        @ASSIGNMENTS xml = null
                    )
                    as
                        set nocount on;

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

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

                        declare @CURRENTDATE datetime
                        set @CURRENTDATE = getdate()

                        declare @STATUSCODE tinyint;
                        select @STATUSCODE = SALESORDER.STATUSCODE
                        from dbo.ITINERARY
                        inner join dbo.SALESORDER on SALESORDER.ID = ITINERARY.RESERVATIONID
                        where ITINERARY.ID = @ITINERARYID

                        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

                            --  Check to see if a resource of this volunteer type already exists

                            --    for this itinerary, if so there is no need for a conflict check 

                            --    since the insert will fail


                            if not exists 
                            (
                                select 1 from dbo.ITINERARYSTAFFRESOURCE 
                                where ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = @VOLUNTEERTYPEID and 
                                ITINERARYSTAFFRESOURCE.ITINERARYID = @ITINERARYID
                            )
                            begin
                                declare @START datetime;
                                declare @END datetime;

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

                                /* 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
                        end

                        begin try
                            -- Need to work on creating the job

                            -- Use the JOBNAME and JOBDESCRIPTION fields

                            if ((@JOBID is null) and (@FILLEDBYCODE = 0))
                            begin
                                /* Update the null job fields with the corresponding jobs of any existing jobs with the same name as those we would create */                            
                                select @JOBID = JOB.ID
                                from dbo.JOB
                                where JOB.NAME = @JOBNAME and JOB.VOLUNTEERTYPEID = @VOLUNTEERTYPEID;

                                if (@JOBID is null)
                                begin
                                    set @JOBID = newid();

                                    insert into dbo.JOB
                                        (ID, 
                                        NAME, 
                                        DESCRIPTION, 
                                        VOLUNTEERTYPEID, 
                                        ADDEDBYID, 
                                        CHANGEDBYID, 
                                        DATEADDED, 
                                        DATECHANGED)
                                    values 
                                        (@JOBID
                                        @JOBNAME
                                        @JOBDESCRIPTION
                                        @VOLUNTEERTYPEID
                                        @CHANGEAGENTID
                                        @CHANGEAGENTID
                                        @CURRENTDATE
                                        @CURRENTDATE)
                                end
                            end

                            -- handle inserting the data

                            insert into dbo.ITINERARYSTAFFRESOURCE
                                (ID,
                                ITINERARYID,
                                VOLUNTEERTYPEID,
                                QUANTITYNEEDED,
                                FILLEDBYCODE,
                                JOBID,
                                PRICE,
                                PRICINGSTRUCTURECODE,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED)
                            select
                                @ID,
                                @ITINERARYID,
                                @VOLUNTEERTYPEID,
                                @QUANTITYNEEDED,
                                @FILLEDBYCODE,
                                @JOBID,
                                COALESCE(VOLUNTEERTYPEPRICING.PRICE, 0),
                                COALESCE(VOLUNTEERTYPEPRICING.PRICINGSTRUCTURECODE,0),
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from dbo.VOLUNTEERTYPE
                                left join dbo.VOLUNTEERTYPEPRICING on VOLUNTEERTYPE.ID = VOLUNTEERTYPEPRICING.ID
                            where dbo.VOLUNTEERTYPE.ID = @VOLUNTEERTYPEID

                            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