USP_DATAFORMTEMPLATE_ADD_ORGANIZATIONHIERARCHYPOSITIONFUNDRAISERADD

The save procedure used by the add dataform template "Organization Hierarchy Position Fundraiser Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@ORGANIZATIONPOSITIONID 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.
@CURRENTPOSITIONHOLDERID uniqueidentifier IN CURRENTPOSITIONHOLDERID
@CONSTITUENTID uniqueidentifier IN Replace with
@CURRENTDATETO datetime IN End date
@DATEFROM datetime IN Start date

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_ORGANIZATIONHIERARCHYPOSITIONFUNDRAISERADD
                    (
                        @ID uniqueidentifier output,
                        @ORGANIZATIONPOSITIONID uniqueidentifier, 
                        @CHANGEAGENTID uniqueidentifier = null,
                        @CURRENTPOSITIONHOLDERID uniqueidentifier = null,
                        @CONSTITUENTID uniqueidentifier = null,
                        @CURRENTDATETO datetime = null,
                        @DATEFROM datetime = null
                    )
                    as
                    begin
                        set nocount on;

                        declare @CURRENTDATE datetime;
                        declare @CURRENTDATEFROM datetime;

                        begin try

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

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

                            select 
                                @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate()),
                                @CURRENTDATETO = dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATETO),
                                @DATEFROM = dbo.UFN_DATE_GETEARLIESTTIME(@DATEFROM)

                            if @CURRENTDATETO >= @CURRENTDATE
                                raiserror('ENDDATEMUSTBEBEFORETODAY', 13, 1)

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

                            --Two vacancies are not allowed.

                            if @CONSTITUENTID is null 
                                set @DATEFROM = dateadd(d, 1, @CURRENTDATETO)

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

                                --The current fundraiser can not end before it has started

                                if @CURRENTDATETO <= @CURRENTDATEFROM
                                    raiserror('ENDDATEMUSTBEBEFORESTARTEDATE', 13, 1)

                                --The current fundraiser can not start before the previous

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

                                update dbo.ORGANIZATIONPOSITIONHOLDER
                                set DATETO = @CURRENTDATETO,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @CURRENTPOSITIONHOLDERID;

                                --Add vacancy if necessary

                                if @DATEFROM > dateadd(d, 1, @CURRENTDATETO)
                                begin
                                    insert into dbo.ORGANIZATIONPOSITIONHOLDER(ID, POSITIONID, CONSTITUENTID, DATEFROM, DATETO, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                    values(newid(), @ORGANIZATIONPOSITIONID, null, dateadd(d, 1, @CURRENTDATETO), dateadd(d, -1, @DATEFROM), @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
                                end
                            end

                            insert into dbo.ORGANIZATIONPOSITIONHOLDER(ID, POSITIONID, CONSTITUENTID, DATEFROM, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@ID, @ORGANIZATIONPOSITIONID, @CONSTITUENTID, @DATEFROM, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);


                        end try

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

                        return 0;
                    end