USP_EVENTSEATING_SAVESEATINGLAYOUT
Saves the sections, sub-sections, and seats for a given event seating layout.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@EVENTSEATINGID | uniqueidentifier | IN | |
@SECTIONS | xml | IN | |
@SUBSECTIONS | xml | IN | |
@SEATS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDDATE | datetime | IN |
Definition
Copy
CREATE procedure [dbo].[USP_EVENTSEATING_SAVESEATINGLAYOUT]
(
@EVENTSEATINGID uniqueidentifier,
@SECTIONS xml,
@SUBSECTIONS xml,
@SEATS xml,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDDATE datetime
)
with execute as caller
as
set nocount on;
-- Convert xml to a temp table so it only has to be deserialized once
declare @SUBSECTIONTEMPTABLE as Table(ID uniqueidentifier,NAME nvarchar(100), SEQUENCE int, EVENTSEATINGSECTIONID uniqueidentifier)
insert into @SUBSECTIONTEMPTABLE(ID, NAME, SEQUENCE, EVENTSEATINGSECTIONID)(select
T.c.value('(ID)[1]','uniqueidentifier'),
T.c.value('(NAME)[1]','nvarchar(100)'),
T.c.value('(SEQUENCE)[1]','int'),
T.c.value('(EVENTSEATINGSECTIONID)[1]','uniqueidentifier')
from
@SUBSECTIONS.nodes('/SUBSECTIONS/ITEM') T(c))
-- Save sections
exec dbo.USP_EVENTSEATING_GETSECTIONS_UPDATEFROMXML @EVENTSEATINGID, @SECTIONS, @CHANGEAGENTID, @CHANGEDDATE;
-- Save sub-sections
declare @SECTIONID uniqueidentifier;
declare @SECTIONSUBSECTIONS xml;
declare SectionsCursor cursor local fast_forward for
select
ID
from
dbo.UFN_EVENTSEATING_GETSECTIONS_FROMITEMLISTXML(@SECTIONS);
open SectionsCursor;
fetch next from SectionsCursor into @SECTIONID;
while @@fetch_status = 0 begin
-- Get all of the sub-sections for this section and convert to xml
set @SECTIONSUBSECTIONS = (select ID, NAME, SEQUENCE from @SUBSECTIONTEMPTABLE where EVENTSEATINGSECTIONID = @SECTIONID for xml raw('ITEM'),type,elements,root('SUBSECTIONS'),BINARY BASE64)
-- Save sub-sections for this section
exec dbo.USP_EVENTSEATINGSECTION_GETSUBSECTIONS_UPDATEFROMXML @SECTIONID, @SECTIONSUBSECTIONS, @CHANGEAGENTID, @CHANGEDDATE;
fetch next from SectionsCursor into @SECTIONID;
end
close SectionsCursor;
deallocate SectionsCursor;
-- Save seats
if object_id('tempdb..#EVENTSEATING_SAVESEATINGLAYOUT_SEATS') is not null
drop table #EVENTSEATING_SAVESEATINGLAYOUT_SEATS;
select
T.c.value('(ID)[1]','uniqueidentifier') ID,
T.c.value('(NAME)[1]','nvarchar(100)') NAME,
T.c.value('(SEQUENCE)[1]','int') SEQUENCE,
T.c.value('(REGISTRANTID)[1]','uniqueidentifier') REGISTRANTID,
T.c.value('(EVENTSEATINGSUBSECTIONID)[1]','uniqueidentifier') EVENTSEATINGSUBSECTIONID
into #EVENTSEATING_SAVESEATINGLAYOUT_SEATS
from
@SEATS.nodes('/SEATS/ITEM') T(c)
delete from dbo.[EVENTSEATINGSEAT]
where [EVENTSEATINGSEAT].ID in
(
select ESSEAT.ID
from dbo.[EVENTSEATINGSEAT] ESSEAT
inner join dbo.EVENTSEATINGSUBSECTION ESSUB on ESSEAT.EVENTSEATINGSUBSECTIONID = ESSUB.ID
inner join dbo.EVENTSEATINGSECTION ESSECTION on ESSUB.EVENTSEATINGSECTIONID = ESSECTION.ID
where ESSECTION.EVENTSEATINGID = @EVENTSEATINGID
EXCEPT select ID from #EVENTSEATING_SAVESEATINGLAYOUT_SEATS
);
update dbo.EVENTSEATINGSEAT
set REGISTRANTID = null
from dbo.[EVENTSEATINGSEAT]
inner join #EVENTSEATING_SAVESEATINGLAYOUT_SEATS SEATS
on EVENTSEATINGSEAT.ID = SEATS.ID
where
EVENTSEATINGSEAT.REGISTRANTID <> SEATS.REGISTRANTID or
SEATS.REGISTRANTID is null
-- Update all fields
update dbo.EVENTSEATINGSEAT
set
NAME = SEATS.NAME,
SEQUENCE = SEATS.SEQUENCE,
REGISTRANTID = SEATS.REGISTRANTID,
EVENTSEATINGSUBSECTIONID = SEATS.EVENTSEATINGSUBSECTIONID
from dbo.[EVENTSEATINGSEAT]
inner join #EVENTSEATING_SAVESEATINGLAYOUT_SEATS SEATS
on EVENTSEATINGSEAT.ID = SEATS.ID
where
([EVENTSEATINGSEAT].[NAME] <> SEATS.[NAME]) or
([EVENTSEATINGSEAT].[REGISTRANTID]<>SEATS.[REGISTRANTID]) or
([EVENTSEATINGSEAT].[REGISTRANTID] is null and SEATS.[REGISTRANTID] is not null) or
([EVENTSEATINGSEAT].[REGISTRANTID] is not null and SEATS.[REGISTRANTID] is null) or
([EVENTSEATINGSEAT].[SEQUENCE]<>SEATS.[SEQUENCE]);
--Insert new rows
insert into dbo.[EVENTSEATINGSEAT]
(
[EVENTSEATINGSUBSECTIONID],
[ID],
[NAME],
[REGISTRANTID],
[SEQUENCE],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
[EVENTSEATINGSUBSECTIONID],
[ID],
[NAME],
[REGISTRANTID],
[SEQUENCE],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDDATE,
@CHANGEDDATE
from #EVENTSEATING_SAVESEATINGLAYOUT_SEATS as SEATS
where not exists (select ID from dbo.[EVENTSEATINGSEAT] as data where data.ID = SEATS.ID)
-- Do some validation
if exists(select NAME from dbo.EVENTSEATINGSECTION where ID = @SECTIONID group by NAME having count(NAME) > 1)
raiserror('Duplicate section names have been defined.',13,1);
if exists(select NAME from dbo.EVENTSEATINGSUBSECTION group by NAME, EVENTSEATINGSECTIONID having count(NAME) > 1)
raiserror('Duplicate sub-section names have been defined. The sub-section name must be unique in each section.',13,1);
if exists(select NAME from dbo.EVENTSEATINGSEAT group by NAME, EVENTSEATINGSUBSECTIONID having count(NAME) > 1)
raiserror('Duplicate seat names have been defined. The seat name must be unique in each sub-section.',13,1);
if exists(select REGISTRANTID from dbo.EVENTSEATINGSEAT where REGISTRANTID is not null group by REGISTRANTID, EVENTSEATINGSUBSECTIONID having count(REGISTRANTID) > 1)
raiserror('A registrant has been assigned to multiple seats.',13,1);