USP_DATAFORMTEMPLATE_ADD_EVENTHIERARCHY
The save procedure used by the add dataform template "Multilevel Event Add Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@EVENTMANAGEMENTPROPERTYGROUPTEMPLATEID | uniqueidentifier | IN | Multi-level event template |
@EVENTHIERARCHY | xml | IN | Hierarchy |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_EVENTHIERARCHY
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@EVENTMANAGEMENTPROPERTYGROUPTEMPLATEID uniqueidentifier = null,
@EVENTHIERARCHY 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();
begin try
if not exists (
select
SITEID
from
dbo.EVENTMANAGEMENTPROPERTYGROUPTEMPLATE
left outer join
dbo.EVENTMANAGEMENTPROPERTYGROUPTEMPLATESITE on EVENTMANAGEMENTPROPERTYGROUPTEMPLATESITE.EVENTMANAGEMENTPROPERTYGROUPTEMPLATEID = EVENTMANAGEMENTPROPERTYGROUPTEMPLATE.ID
where
EVENTMANAGEMENTPROPERTYGROUPTEMPLATE.ID = @EVENTMANAGEMENTPROPERTYGROUPTEMPLATEID
and
dbo.UFN_SITEALLOWEDFORUSER(@CURRENTAPPUSERID, SITEID) = 1
)
begin
raiserror('ERR_EVENTMANAGEMENTPROPERTYGROUPTEMPLATEID_NOSITEACCESS',13,1);
return 1;
end
declare @HierarchyTable table
(
ID uniqueidentifier,
PARENTEVENTID uniqueidentifier,
NAME nvarchar(100),
DESCRIPTION nvarchar(255),
STARTDATE datetime,
STARTTIME dbo.UDT_HOURMINUTE,
ENDDATE datetime,
ENDTIME dbo.UDT_HOURMINUTE,
CAPACITY int,
EVENTLOCATIONID uniqueidentifier,
EVENTLOCATIONROOMID uniqueidentifier,
EVENTLOCATIONCONTACTID uniqueidentifier,
SITES xml,
EVENTCATEGORYCODEID uniqueidentifier,
APPEALID uniqueidentifier,
DISPLAYORDER int,
ISAUCTION bit
);
insert into
@HierarchyTable
select
T.c.value('(ID)[1]','uniqueidentifier'),
T.c.value('(PARENTEVENTID)[1]','uniqueidentifier'),
T.c.value('(NAME)[1]','nvarchar(100)'),
T.c.value('(DESCRIPTION)[1]','nvarchar(255)'),
T.c.value('(STARTDATE)[1]','datetime'),
T.c.value('(STARTTIME)[1]','dbo.UDT_HOURMINUTE'),
T.c.value('(ENDDATE)[1]','datetime'),
T.c.value('(ENDTIME)[1]','dbo.UDT_HOURMINUTE'),
T.c.value('(CAPACITY)[1]','int'),
T.c.value('(EVENTLOCATIONID)[1]','uniqueidentifier'),
T.c.value('(EVENTLOCATIONROOMID)[1]','uniqueidentifier'),
T.c.value('(EVENTLOCATIONCONTACTID)[1]','uniqueidentifier'),
case when T.c.exist('./SITES/ITEM') = 1 then T.c.query('(SITES)[1]') else null end as SITES,
T.c.value('(EVENTCATEGORYCODEID)[1]','uniqueidentifier'),
T.c.value('(APPEALID)[1]','uniqueidentifier'),
T.c.value('(DISPLAYORDER)[1]','int'),
T.c.value('(ISAUCTION)[1]','bit')
from
@EVENTHIERARCHY.nodes('/EVENTHIERARCHY/ITEM') T(c);
-- validate that there's at least one event in the structure
if ((select count(ID) from @HierarchyTable) = 0)
raiserror('ERR_EVENTHIERARCHY_NOEVENTS',13,1)
-- validate that there's only one root in the structure
if ((select count(ID) from @HierarchyTable where PARENTEVENTID is null) > 1)
raiserror('ERR_EVENTHIERARCHY_MULTIPLEROOT',13,1);
-- validate that auction events do not have children
if exists (
select
[CHILDEVENT].ID
from
@HierarchyTable [AUCTIONEVENT]
inner join
@HierarchyTable [CHILDEVENT] on [CHILDEVENT].PARENTEVENTID = [AUCTIONEVENT].ID
where
[AUCTIONEVENT].ISAUCTION = 1
)
raiserror('ERR_EVENTHIERARCHY_AUCTIONEVENT_CANNOTHAVECHILDREN',13,1);
select
@ID = ID
from
@HierarchyTable
where
PARENTEVENTID is null;
declare @MAINEVENTID uniqueidentifier;
declare @EVENTID uniqueidentifier;
declare @PARENTEVENTID uniqueidentifier;
declare @NAME nvarchar(100);
declare @DESCRIPTION nvarchar(255);
declare @STARTDATE datetime;
declare @STARTTIME dbo.UDT_HOURMINUTE;
declare @ENDDATE datetime;
declare @ENDTIME dbo.UDT_HOURMINUTE;
declare @CAPACITY int;
declare @EVENTLOCATIONID uniqueidentifier;
declare @EVENTLOCATIONROOMID uniqueidentifier;
declare @EVENTLOCATIONCONTACTID uniqueidentifier;
declare @SITES xml;
declare @EVENTCATEGORYCODEID uniqueidentifier;
declare @APPEALID uniqueidentifier;
declare @DISPLAYORDER int;
declare @ISAUCTION bit;
declare EVENTCURSOR cursor local fast_forward for
select
ID,
PARENTEVENTID,
NAME,
DESCRIPTION,
STARTDATE,
STARTTIME,
ENDDATE,
ENDTIME,
CAPACITY,
EVENTLOCATIONID,
EVENTLOCATIONROOMID,
EVENTLOCATIONCONTACTID,
SITES,
EVENTCATEGORYCODEID,
APPEALID,
DISPLAYORDER,
ISAUCTION
from
@HierarchyTable
-- ensure we create the main event first so the MAINEVENTID foreign key doesn't fail
order by
(case when PARENTEVENTID is null then 0 else 1 end) asc;
open EVENTCURSOR;
fetch next from EVENTCURSOR into @EVENTID,
@PARENTEVENTID,
@NAME,
@DESCRIPTION,
@STARTDATE,
@STARTTIME,
@ENDDATE,
@ENDTIME,
@CAPACITY,
@EVENTLOCATIONID,
@EVENTLOCATIONROOMID,
@EVENTLOCATIONCONTACTID,
@SITES,
@EVENTCATEGORYCODEID,
@APPEALID,
@DISPLAYORDER,
@ISAUCTION;
while @@FETCH_STATUS = 0
begin
if @EVENTID = @ID
set @MAINEVENTID = null;
else
set @MAINEVENTID = @ID;
exec dbo.USP_EVENT_ADD
@ID = @EVENTID output,
@CURRENTAPPUSERID = @CURRENTAPPUSERID,
@CHANGEAGENTID = @CHANGEAGENTID,
@NAME = @NAME,
@DESCRIPTION = @DESCRIPTION,
@STARTDATE = @STARTDATE,
@STARTTIME = @STARTTIME,
@ENDDATE = @ENDDATE,
@ENDTIME = @ENDTIME,
@CAPACITY = @CAPACITY,
@EVENTLOCATIONID = @EVENTLOCATIONID,
@EVENTLOCATIONCONTACTID = @EVENTLOCATIONCONTACTID,
@MAINEVENTID = @MAINEVENTID,
@COPYFROMEVENTID = null,
@COPYTASKS = 0,
@COPYEXPENSES = 0,
@COPYPRICES = 0,
@COPYINVITATIONS = 0,
@COPYINVITEES = 0,
@COPYATTRIBUTES = 0,
@ATTRIBUTEDEFINED = 0,
@SITES = @SITES,
@COPYPREFERENCES = 0,
@EVENTCATEGORYCODEID = @EVENTCATEGORYCODEID,
@COPYTEAMSTRUCTURE = 0,
@COPYTEAMFUNDRAISERS = 0,
@APPEALID = @APPEALID,
@ADDQUICKCOMPARE = 0,
@COPYLODGINGOPTIONS = 0,
@EVENTLOCATIONROOMID = @EVENTLOCATIONROOMID,
@COPYJOBOCCURRENCES = 0,
@ISAUCTION = @ISAUCTION;
fetch next from EVENTCURSOR into @EVENTID,
@PARENTEVENTID,
@NAME,
@DESCRIPTION,
@STARTDATE,
@STARTTIME,
@ENDDATE,
@ENDTIME,
@CAPACITY,
@EVENTLOCATIONID,
@EVENTLOCATIONROOMID,
@EVENTLOCATIONCONTACTID,
@SITES,
@EVENTCATEGORYCODEID,
@APPEALID,
@DISPLAYORDER,
@ISAUCTION;
end
deallocate EVENTCURSOR;
-- Use a recursive CTE to build up paths for the events (i.e. '/2/1/3/')
with EVENT_ROWNUMBER_CTE as (
select
ID,
PARENTEVENTID,
row_number() over (partition by PARENTEVENTID order by DISPLAYORDER) as ROWNUM,
DISPLAYORDER
from
@HierarchyTable
),
EVENT_PATHS_CTE as (
select
ID,
PARENTEVENTID,
cast(dbo.UFN_EVENT_GETHIERARCHYPATHINSERTPOSITION(null) as varchar(900)) as HIERARCHYPATH,
DISPLAYORDER
from
@HierarchyTable
where
PARENTEVENTID is null
union all
select
EVENT_ROWNUMBER_CTE.ID,
EVENT_ROWNUMBER_CTE.PARENTEVENTID,
cast(HIERARCHYPATH + cast(EVENT_ROWNUMBER_CTE.ROWNUM as varchar(20)) + '/' as varchar(900)),
EVENT_ROWNUMBER_CTE.DISPLAYORDER
from
EVENT_PATHS_CTE
inner join
EVENT_ROWNUMBER_CTE on EVENT_ROWNUMBER_CTE.PARENTEVENTID = EVENT_PATHS_CTE.ID
)
insert into dbo.EVENTHIERARCHY (
ID,
HIERARCHYPATH,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
EVENT_PATHS_CTE.ID,
EVENT_PATHS_CTE.HIERARCHYPATH,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
EVENT_PATHS_CTE;
declare @EVENTMANAGEMENTPROPERTYGROUPINSTANCEID uniqueidentifier;
exec dbo.USP_EVENTMANAGEMENTPROPERTYGROUPTEMPLATE_CREATEINSTANCE @EVENTMANAGEMENTPROPERTYGROUPTEMPLATEID, @EVENTMANAGEMENTPROPERTYGROUPINSTANCEID output, @CHANGEAGENTID;
with EVENTMANAGEMENTPROPERTYGROUP_CTE as (
select
ID,
LEVEL,
HASREGISTRANTSANDOPTIONS,
HASSPEAKERS,
HASEXPENSES,
HASINVITATIONS,
HASTASKS,
HASLODGINGOPTIONS,
HASJOBOCCURRENCES,
HASAPPEALS,
HASDOCUMENTATION
from
dbo.EVENTMANAGEMENTPROPERTYLEVELINSTANCE
where
EVENTMANAGEMENTPROPERTYLEVELINSTANCE.EVENTMANAGEMENTPROPERTYGROUPINSTANCEID = @EVENTMANAGEMENTPROPERTYGROUPINSTANCEID
)
insert into dbo.EVENTMANAGEMENTPROPERTYGROUP
(
ID,
EVENTMANAGEMENTPROPERTYLEVELINSTANCEID,
EVENTID,
HASREGISTRANTSANDOPTIONS,
HASSPEAKERS,
HASEXPENSES,
HASINVITATIONS,
HASTASKS,
HASLODGINGOPTIONS,
HASJOBOCCURRENCES,
HASAPPEALS,
HASDOCUMENTATION,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
EVENTMANAGEMENTPROPERTYGROUP_CTE.ID,
EVENT.ID,
isnull(HASREGISTRANTSANDOPTIONS,1),
isnull(HASSPEAKERS,1),
isnull(HASEXPENSES,1),
isnull(HASINVITATIONS,1),
isnull(HASTASKS,1),
isnull(HASLODGINGOPTIONS,1),
isnull(HASJOBOCCURRENCES,1),
isnull(HASAPPEALS,1),
isnull(HASDOCUMENTATION,1),
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.EVENT
inner join
dbo.EVENTHIERARCHY on EVENTHIERARCHY.ID = EVENT.ID
left outer join
EVENTMANAGEMENTPROPERTYGROUP_CTE on EVENTMANAGEMENTPROPERTYGROUP_CTE.LEVEL = EVENTHIERARCHY.HIERARCHYPATH.GetLevel()
where
((EVENT.MAINEVENTID = @ID) or (EVENT.ID = @ID));
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0