USP_JOBOCCURRENCE_ASSIGN_VOLUNTEER

Executes the "Job Occurrence: Assign Volunteer" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID nvarchar(max) IN Input parameter indicating the ID of the record being updated.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the update.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy


                    CREATE procedure dbo.USP_JOBOCCURRENCE_ASSIGN_VOLUNTEER
                    (
                    @ID nvarchar(max),
                    @CHANGEAGENTID uniqueidentifier,
                    @CURRENTAPPUSERID uniqueidentifier
                    )
                    as
                        set nocount on;                        

                        declare @ISADMIN bit;
                        declare @APPUSER_IN_NONRACROLE bit;
                        declare @APPUSER_IN_NOSECGROUPROLE bit;
                        declare @APPUSER_IN_NONSITEROLE bit;
                        declare @APPUSER_IN_NOSITEROLE bit;

                        set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NONSITEROLE(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NOSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SITE_ROLE(@CURRENTAPPUSERID);


                        declare @NOW datetime;
                        declare @JOBOCCURRENCEID uniqueidentifier;
                        declare @VOLUNTEERID uniqueidentifier;
                        declare @DAYLIST nvarchar(max);
                        declare @DAYLISTORIGINAL nvarchar(max);
                        declare @DATE datetime;
                        declare @DAY table (DY datetime);

                        set @NOW = getdate()

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

                        --get job and volunteer IDs

                        set @JOBOCCURRENCEID = cast(left(@ID, 36) as uniqueidentifier);
                        set @VOLUNTEERID = cast(substring(@ID, 37, 36) as uniqueidentifier);

                        if not (@ISADMIN = 1 or 
                            (@APPUSER_IN_NONRACROLE = 1 or
                            dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, @VOLUNTEERID, @APPUSER_IN_NOSECGROUPROLE) = 1)
                            and
                            (@APPUSER_IN_NONSITEROLE = 1 or
                            dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, @VOLUNTEERID, @APPUSER_IN_NOSITEROLE) = 1)
                            )
                        begin
                            raiserror ('ERR_NOVOLUNTEERACCESS',13,1);
                            return 0;
                        end
                        else
                        begin
                            --Put days into a table variable

                            set @DAYLIST = right(@ID, len(@ID) - 72)
                            set @DAYLISTORIGINAL = @DAYLIST;
                            set @DATE = cast(right(@ID, 8) as datetime);

                            Set @DAYLIST = ltrim(rtrim(@DAYLIST))
                            while len(@DAYLIST) >= 8
                            begin
                                set @DATE = left(@DAYLIST, 8)
                                insert into @DAY(DY) values(cast(@DATE as datetime));
                                if len(@DAYLIST) > 8
                                    set @DAYLIST = right(@DAYLIST, len(@DAYLIST) - 8)
                                else
                                    set @DAYLIST = ''
                            end

                            -- bwj WI#79005 Validate that the assignment doesn't overlap with another assignment by the volunteer.

                            if not exists(
                                select
                                    AVAILABLE.VOLUNTEERID
                                from
                                    dbo.UFN_JOBOCCURRENCE_SCHEDULE(@DATE,@DATE,@JOBOCCURRENCEID,null) JOBOCCURENCES_ONDATE
                                inner join
                                    dbo.JOBOCCURRENCE on JOBOCCURRENCE.ID = @JOBOCCURRENCEID
                                inner join
                                    dbo.UFN_VOLUNTEER_AVAILABLESPECIFICDAYS(@DAYLISTORIGINAL, @VOLUNTEERID, 1) AVAILABLE on AVAILABLE.AVAILABLEDATE = JOBOCCURENCES_ONDATE.ASSIGNMENTDATE
                                left outer join
                                    dbo.VOLUNTEERASSIGNMENT on AVAILABLE.VOLUNTEERID = VOLUNTEERASSIGNMENT.VOLUNTEERID and VOLUNTEERASSIGNMENT.DATE = JOBOCCURENCES_ONDATE.ASSIGNMENTDATE
                                left outer join
                                    dbo.JOBOCCURRENCE ASSIGNEDJOB on ASSIGNEDJOB.ID = VOLUNTEERASSIGNMENT.JOBOCCURRENCEID and 
                                    (
                                        ASSIGNEDJOB.STARTTIME between JOBOCCURRENCE.STARTTIME and JOBOCCURRENCE.ENDTIME    or
                                        ASSIGNEDJOB.ENDTIME between JOBOCCURRENCE.STARTTIME and JOBOCCURRENCE.ENDTIME or 
                                        ASSIGNEDJOB.STARTTIME = '' or ASSIGNEDJOB.ENDTIME = '' or 
                                        JOBOCCURRENCE.STARTTIME = '' or JOBOCCURRENCE.ENDTIME  = ''
                                    )
                                where
                                    (AVAILABLE.STARTTIME <= JOBOCCURRENCE.STARTTIME or JOBOCCURRENCE.STARTTIME = '')
                                and
                                    (AVAILABLE.ENDTIME >= JOBOCCURRENCE.ENDTIME or AVAILABLE.ENDTIME = '')
                                group by
                                    AVAILABLE.VOLUNTEERID
                                having
                                    max(case when ASSIGNEDJOB.ID is null then 0 else 1 end) = 0
                            )
                            begin
                                raiserror('ERR_VOLUNTEERALREADYSCHEDULED', 13, 1);            
                                return 0;
                            end                

                            insert into dbo.VOLUNTEERASSIGNMENT(JOBOCCURRENCEID, VOLUNTEERID,DATE,ADDEDBYID,CHANGEDBYID,DATECHANGED,DATEADDED)
                            select @JOBOCCURRENCEID, @VOLUNTEERID, DYTBL.DY, @CHANGEAGENTID,@CHANGEAGENTID, @NOW, @NOW
                            from @DAY DYTBL

                            return 0;
                        end