USP_DATAFORMTEMPLATE_VIEW_TICKETSCANNINGVALIDATION
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(max) | IN | |
@DATALOADED | bit | INOUT | |
@TICKETID | uniqueidentifier | INOUT | |
@RESULTCODE | tinyint | INOUT | |
@PROGRAMNAME | nvarchar(100) | INOUT | |
@EVENTNAME | nvarchar(100) | INOUT | |
@EVENTSTARTDATETIME | datetime | INOUT | |
@PRICETYPE | nvarchar(100) | INOUT | |
@CONSTITUENTNAME | nvarchar(max) | INOUT | |
@TICKETSCANDATETIME | datetime | INOUT | |
@TICKETNUMBER | int | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_TICKETSCANNINGVALIDATION
(
@ID nvarchar(max),
@DATALOADED bit = 0 output,
@TICKETID uniqueidentifier = null output,
@RESULTCODE tinyint = null output,
@PROGRAMNAME nvarchar(100) = null output,
@EVENTNAME nvarchar(100) = null output,
@EVENTSTARTDATETIME datetime = null output,
@PRICETYPE nvarchar(100) = null output,
@CONSTITUENTNAME nvarchar(max) = null output,
@TICKETSCANDATETIME datetime = null output,
@TICKETNUMBER int = null output
)
as
set nocount on;
declare @SEPARATORINDEX int;
declare @LOOKUPID nvarchar(max);
declare @ONLINESUFFIX nvarchar(4);
declare @LATESTTICKETNUMBER int;
declare @TICKETSTATUSCODE tinyint;
declare @EVENTSTARTDATEWITHTIMEOFFSET datetimeoffset;
declare @SWAPREFUNDTICKETID uniqueidentifier;
declare @MINUTESBEFORECUTOFF int;
declare @MINUTESAFTERCUTOFF int;
declare @CURRENTDATEWITHTIMEOFFSET datetimeoffset;
-- Normally you wouldn't do this, but one of the result
-- codes of this view form for not finding a ticket.
set @DATALOADED = 1;
set @TICKETID = null;
set @RESULTCODE = 0; -- Valid
set @SEPARATORINDEX = charindex('~', @ID);
if @SEPARATORINDEX > 0
begin
set @LOOKUPID = left(@ID, @SEPARATORINDEX - 1);
-- For now, online barcodes will have the last for of the ID
set @ONLINESUFFIX = right(@ID, 4);
end
else
begin
set @LOOKUPID = @ID
end
set @LOOKUPID = '8-' + @LOOKUPID;
select
@TICKETID = TICKETPRINTINFO.TICKETID,
@TICKETNUMBER = TICKETPRINTINFO.SEQUENCEID,
@LATESTTICKETNUMBER = TICKET.TICKETNUMBER,
@TICKETSTATUSCODE = TICKET.STATUSCODE,
@TICKETSCANDATETIME = TICKET.SCANDATEWITHTIMEOFFSET,
@PRICETYPE = PRICETYPECODE.DESCRIPTION,
@PROGRAMNAME = PROGRAM.NAME,
@EVENTNAME = EVENT.NAME,
@EVENTSTARTDATETIME = EVENT.STARTDATETIME,
@EVENTSTARTDATEWITHTIMEOFFSET = EVENT.STARTDATETIMEWITHOFFSET,
@CONSTITUENTNAME = NF.NAME
from
dbo.TICKETPRINTINFO
inner join
dbo.TICKET on TICKET.ID = TICKETPRINTINFO.TICKETID
inner join
dbo.SALESORDERITEM on SALESORDERITEM.ID = TICKET.SALESORDERITEMTICKETID
inner join
dbo.SALESORDER on SALESORDER.ID = SALESORDERITEM.SALESORDERID
inner join
dbo.PRICETYPECODE on PRICETYPECODE.ID = TICKET.PRICETYPECODEID
left outer join
dbo.PROGRAM on PROGRAM.ID = TICKET.PROGRAMID
left outer join
dbo.EVENT on EVENT.ID = TICKET.EVENTID
outer apply
dbo.UFN_CONSTITUENT_DISPLAYNAME(SALESORDER.RECIPIENTID) as NF
where
TICKETPRINTINFO.LOOKUPID = @LOOKUPID
and (
@ONLINESUFFIX is null
or @ONLINESUFFIX = right(convert(nvarchar(36), TICKET.ID), 4)
);
if @TICKETID is null
begin
set @RESULTCODE = 1; -- Not found
end
else
begin
if @TICKETSTATUSCODE = 2 -- Refunded
begin
set @SWAPREFUNDTICKETID = dbo.UFN_TICKET_GETNEXTACTIVE(@TICKETID);
if @SWAPREFUNDTICKETID is null
begin
set @RESULTCODE = 5; -- Ticket was refunded
return 0;
end
-- We set that there is a valid replacement,
-- but don't return so we can continue validating
set @RESULTCODE = 6; -- Refunded with valid replacement
end
if @TICKETNUMBER <> @LATESTTICKETNUMBER
begin
set @RESULTCODE = 2; -- Ticket was reprinted
end
else if @TICKETSCANDATETIME is not null
begin
set @RESULTCODE = 3; -- Already scanned
end
else
begin
if @EVENTSTARTDATETIME is not null
begin
select
@CURRENTDATEWITHTIMEOFFSET = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(getutcdate(), 1),
@MINUTESBEFORECUTOFF = MINUTESBEFORECUTOFF,
@MINUTESAFTERCUTOFF = MINUTESAFTERCUTOFF
from
dbo.UFN_TICKETSCANNINGCONFIGURATION();
-- Adding an extra minute and subracting a millisecond to include the full minute of the minute after start setting
if not @CURRENTDATEWITHTIMEOFFSET between dateadd(minute, -@MINUTESBEFORECUTOFF, @EVENTSTARTDATEWITHTIMEOFFSET) and dateadd(millisecond, -1, dateadd(minute, @MINUTESAFTERCUTOFF + 1, @EVENTSTARTDATEWITHTIMEOFFSET))
begin
set @RESULTCODE = 4 -- Outside of entry times
end
end
end
end
return 0;