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