USP_DATAFORMTEMPLATE_EDIT_ORGANIZATIONHIERARCHYPOSITIONFUNDRAISEREDIT

The save procedure used by the edit dataform template "Organization Hierarchy Position Current Fundraiser Edit 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.
@ORGANIZATIONPOSITIONHOLDERID uniqueidentifier IN ORGANIZATIONPOSITIONHOLDERID
@DATEFROM datetime IN Start date

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_ORGANIZATIONHIERARCHYPOSITIONFUNDRAISEREDIT
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @ORGANIZATIONPOSITIONHOLDERID uniqueidentifier,
                        @DATEFROM datetime
                    )
                    as
                    begin
                        set nocount on;

                        declare @CURRENTDATE datetime;
                        declare @PRIORID uniqueidentifier;
                        declare @PRIORDATETO datetime;
                        declare @PRIORDATEFROM datetime;
                        declare @CURRENTDATEFROM datetime;
                        declare @UPDATEPRIOR bit

                        begin try

                            set @UPDATEPRIOR = 0;

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

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

                            set @CURRENTDATE = GetDate();

                            if @DATEFROM > @CURRENTDATE
                                raiserror('FUTURESTARTDATE', 13, 1)

                            select top 1
                                @PRIORID = ID,
                                @PRIORDATETO = DATETO,
                                @PRIORDATEFROM = DATEFROM
                            from dbo.ORGANIZATIONPOSITIONHOLDER
                            where ORGANIZATIONPOSITIONHOLDER.POSITIONID = @ID
                                and ORGANIZATIONPOSITIONHOLDER.ID <> @ORGANIZATIONPOSITIONHOLDERID
                            order by ORGANIZATIONPOSITIONHOLDER.DATEFROM desc;

                            if not (@PRIORID is null)
                            begin
                                select @CURRENTDATEFROM = DATEFROM
                                from dbo.ORGANIZATIONPOSITIONHOLDER
                                where ORGANIZATIONPOSITIONHOLDER.ID = @ORGANIZATIONPOSITIONHOLDERID;

                                --The current fundraiser can not start before the previous

                                if @DATEFROM <= @PRIORDATEFROM 
                                    raiserror('STARTDATE_PRECEDES_PREVIOUS', 13, 1)

                                --If there was not vacancy or this change erases the vacancy then update the date

                                if dateadd(d, 1, @PRIORDATETO) = @CURRENTDATEFROM or 
                                        @PRIORDATETO >= @DATEFROM
                                    set @UPDATEPRIOR = 1;
                            end

                            --Move forward

                            if @CURRENTDATEFROM < @DATEFROM
                            begin
                                update dbo.ORGANIZATIONPOSITIONHOLDER
                                set DATEFROM = @DATEFROM,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @ORGANIZATIONPOSITIONHOLDERID;

                                if @UPDATEPRIOR = 1
                                    update dbo.ORGANIZATIONPOSITIONHOLDER
                                    set DATETO = dateadd(d, -1, @DATEFROM),
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where ID = @PRIORID;
                            end
                            else --Move backward

                            begin
                                if @UPDATEPRIOR = 1
                                    update dbo.ORGANIZATIONPOSITIONHOLDER
                                    set DATETO = dateadd(d, -1, @DATEFROM),
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where ID = @PRIORID;

                                update dbo.ORGANIZATIONPOSITIONHOLDER
                                set DATEFROM = @DATEFROM,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @ORGANIZATIONPOSITIONHOLDERID;
                            end

                        end try

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

                        return 0;
                    end