UFN_SALESORDERITEM_GETREGISTEREDEVENTSWITHCONFLICTINGTIMINGS
Returns a table of user registered events in shopping cart that conflict with given event timings
Return
| Return Type |
|---|
| table |
Parameters
| Parameter | Parameter Type | Mode | Description |
|---|---|---|---|
| @CONSTITUENTID | uniqueidentifier | IN | |
| @EVENTID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_SALESORDERITEM_GETREGISTEREDEVENTSWITHCONFLICTINGTIMINGS
(
@CONSTITUENTID as uniqueidentifier,
@EVENTID as uniqueidentifier
)
returns table
as
return
(
with xmlnamespaces('urn:blackbaud.RE7.XDATA' as XDATA)
select distinct
CONFLICTINGEVENT.ID,
CONFLICTINGEVENT.NAME
from dbo.SALESORDERITEM
inner join dbo.SALESORDER on SALESORDER.ID = SALESORDERITEM.SALESORDERID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = SALESORDER.CONSTITUENTID
cross apply SALESORDERITEM.DATA.nodes('/ShelbyEventRegTran/XDATA:Registrations/XDATA:RegistrationInformation') REGISTRATIONINFORMATION(ELEMENT)
inner join dbo.BBNCEVENTIDMAP on BBNCEVENTIDMAP.ID = REGISTRATIONINFORMATION.ELEMENT.value('(XDATA:Event/XDATA:BackOfficeID)[1]', 'int')
inner join dbo.EVENT CONFLICTINGEVENT on CONFLICTINGEVENT.ID = BBNCEVENTIDMAP.EVENTID
inner join dbo.EVENT REGISTEREDEVENT on REGISTEREDEVENT.ID = @EVENTID
where SALESORDER.CONSTITUENTID = @CONSTITUENTID
and SALESORDER.SALESMETHODTYPECODE = 2
and SALESORDERITEM.TYPECODE = 6
and CONFLICTINGEVENT.ID <> @EVENTID
and (
( --registered event starts between conflicting event start/end times
DATEDIFF(mi, CONFLICTINGEVENT.STARTDATETIME, REGISTEREDEVENT.STARTDATETIME) > 0 and DATEDIFF(mi, CONFLICTINGEVENT.ENDDATETIME, REGISTEREDEVENT.STARTDATETIME) < 0
)
or
( --registered event ends between conflicting event start/end times
DATEDIFF(mi, CONFLICTINGEVENT.STARTDATETIME, REGISTEREDEVENT.ENDDATETIME) > 0 and DATEDIFF(mi, CONFLICTINGEVENT.ENDDATETIME, REGISTEREDEVENT.ENDDATETIME) < 0
)
or
( --conflicting event starts and ends between registered event start/end times
DATEDIFF(mi, REGISTEREDEVENT.STARTDATETIME, CONFLICTINGEVENT.STARTDATETIME) > 0 and DATEDIFF(mi, REGISTEREDEVENT.ENDDATETIME, CONFLICTINGEVENT.STARTDATETIME) < 0 and DATEDIFF(mi, REGISTEREDEVENT.STARTDATETIME, CONFLICTINGEVENT.ENDDATETIME) > 0 and DATEDIFF(mi, REGISTEREDEVENT.ENDDATETIME, CONFLICTINGEVENT.ENDDATETIME) < 0
)
or
( --registered event starts at the same time as conflicting event
DATEDIFF(mi, CONFLICTINGEVENT.STARTDATETIME, REGISTEREDEVENT.STARTDATETIME) = 0
)
)
and exists (
select 1
from REGISTRATIONINFORMATION.ELEMENT.nodes('XDATA:Fees/XDATA:RegistrationFeeInformation/XDATA:Guests/XDATA:RegistrantInformation') REGISTRANTINFORMATION(ELEMENT)
where REGISTRANTINFORMATION.ELEMENT.value('substring((XDATA:Name)[1], 1, 154)', 'nvarchar(154)') = CONSTITUENT.NAME
)
)