USP_DATAFORMTEMPLATE_ADD_BATCHTICKETPRINTJOB

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@ITEMS xml IN
@WORKSTATIONMACHINENAME nvarchar(255) IN
@PRINTERNAME nvarchar(255) IN
@STARTDATE date IN
@ENDDATE date IN
@DELIVERYMETHODID uniqueidentifier IN
@DOCUMENTID uniqueidentifier IN
@INCLUDEDAILYADMISSION bit IN
@GROUPBYCODE tinyint IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_BATCHTICKETPRINTJOB
(
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTAPPUSERID uniqueidentifier,
    @ITEMS xml,
    @WORKSTATIONMACHINENAME nvarchar(255),
    @PRINTERNAME nvarchar(255),
    @STARTDATE date = null,
    @ENDDATE date = null,
    @DELIVERYMETHODID uniqueidentifier = null,
    @DOCUMENTID uniqueidentifier = null,
    @INCLUDEDAILYADMISSION bit = 0,
    @GROUPBYCODE tinyint = 0  -- Event
)
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();

    declare @CURRENTDATETIMEOFFSET datetimeoffset = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(getutcdate(), 1);
    declare @WORKSTATIONID uniqueidentifier;

    set @WORKSTATIONID = dbo.UFN_WORKSTATION_GETIDBYMACHINENAME(@WORKSTATIONMACHINENAME);

    begin try
        declare @SELECTEDITEMS table (
            ID uniqueidentifier,
            ITEMTYPE tinyint
        );

        insert into @SELECTEDITEMS (
            ID,
            ITEMTYPE
        )
        select
            T.item.value('(ID)[1]','uniqueidentifier') as ID,
            T.item.value('(ITEMTYPE)[1]','tinyint') as ITEMTYPE
        from
            @ITEMS.nodes('ITEMS/ITEM') as T(item);

        insert into dbo.BATCHTICKETPRINTJOB (
            ID,
            APPUSERID,
            PRINTERNAME,
            PRINTDATEWITHTIMEOFFSET,
            DELIVERYMETHODID,
            DOCUMENTID,
            GROUPBYCODE,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        values (
            @ID,
            @CURRENTAPPUSERID,
            @PRINTERNAME,
            @CURRENTDATETIMEOFFSET,
            @DELIVERYMETHODID,
            @DOCUMENTID,
            @GROUPBYCODE,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        );

        declare    @TICKETSTOPRINT table (
            TICKETPRINTINFOID uniqueidentifier,
            TICKETID uniqueidentifier,
            SEQUENCE int identity
        );

        insert into @TICKETSTOPRINT (
            TICKETPRINTINFOID,
            TICKETID
        )
        select
            newid(),
            TICKET.ID
        from
            dbo.TICKET with (updlock)
        inner join
            dbo.SALESORDERITEM on SALESORDERITEM.ID = TICKET.SALESORDERITEMTICKETID
        inner join
            dbo.SALESORDER on SALESORDER.ID = SALESORDERITEM.SALESORDERID
        inner join
            dbo.DELIVERYMETHOD on DELIVERYMETHOD.ID =  SALESORDER.DELIVERYMETHODID
        inner join
            dbo.PROGRAM on PROGRAM.ID = TICKET.PROGRAMID
        left outer join
            dbo.EVENT on EVENT.ID = TICKET.EVENTID
        inner join
            @SELECTEDITEMS as SELECTEDITEMS
                on 
                    SELECTEDITEMS.ID in (TICKET.PROGRAMID, TICKET.EVENTID, SALESORDER.RECIPIENTID)
                    or (
                        SALESORDER.RECIPIENTID is null
                        and (
                            SELECTEDITEMS.ID = SALESORDER.CONSTITUENTID
                            or (
                                SELECTEDITEMS.ITEMTYPE = 1  -- Patron
                                and SELECTEDITEMS.ID is null
                                and SALESORDER.CONSTITUENTID is null
                            )
                        )
                    )
        left outer join
            dbo.CONSTITUENT on CONSTITUENT.ID = isnull(SALESORDER.RECIPIENTID, SALESORDER.CONSTITUENTID)
        where
            TICKET.STATUSCODE in (0,1)  -- Active, Reserved
            and TICKET.ID not in (select TICKETID from dbo.TICKETPRINTINFO)  -- Not printed
            and (
                (@DELIVERYMETHODID is null and DELIVERYMETHOD.PRINTCODE = 0)  -- Defer for later printing
                or SALESORDER.DELIVERYMETHODID = @DELIVERYMETHODID
            )
            and (@INCLUDEDAILYADMISSION = 1 or TICKET.EVENTID is not null)
            and (
                TICKET.EVENTID is null
                or (
                    (
                        @STARTDATE is null
                        or EVENT.STARTDATE >= @STARTDATE
                    )
                    and (
                        @ENDDATE is null
                        or EVENT.ENDDATE <= @ENDDATE
                    )
                )
            )
            and PROGRAM.ISACTIVE = 1
            and PROGRAM.ID in (
                select PROGRAMDOCUMENT.PROGRAMID
                from dbo.PROGRAMDOCUMENT
                inner join dbo.DOCUMENT on DOCUMENT.ID = PROGRAMDOCUMENT.DOCUMENTID
                where DOCUMENT.ISACTIVE = 1
            )
        order by
            case when @GROUPBYCODE = 1 then CONSTITUENT.KEYNAME end,
            case when @GROUPBYCODE = 1 then CONSTITUENT.FIRSTNAME end,
            case when @GROUPBYCODE = 1 then CONSTITUENT.ID end,
            case when @GROUPBYCODE = 1 then SALESORDER.TRANSACTIONDATE end,
            case when @GROUPBYCODE = 1 then SALESORDER.ID end,
            EVENT.NAME,
            EVENT.STARTDATETIME,
            EVENT.ID,
            PROGRAM.NAME,
            PROGRAM.ID,
            case when @GROUPBYCODE = 0 then CONSTITUENT.KEYNAME end,
            case when @GROUPBYCODE = 0 then CONSTITUENT.FIRSTNAME end,
            case when @GROUPBYCODE = 0 then CONSTITUENT.ID end,
            case when @GROUPBYCODE = 0 then SALESORDER.TRANSACTIONDATE end,
            case when @GROUPBYCODE = 0 then SALESORDER.ID end;

        if @@rowcount = 0
            raiserror('BBERR_NOTICKETSTOPRINT', 13, 1);

        insert into dbo.TICKETPRINTINFO (
            ID,
            TICKETID,
            APPUSERID,
            WORKSTATIONID,
            PRINTDATEWITHTIMEOFFSET,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        select
            TICKETPRINTINFOID,
            TICKETID,
            @CURRENTAPPUSERID,
            @WORKSTATIONID,
            @CURRENTDATETIMEOFFSET,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from
            @TICKETSTOPRINT
        order by
            SEQUENCE;

        insert into dbo.BATCHTICKETPRINTJOBTICKETLINK (
            ID,
            BATCHTICKETPRINTJOBID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        select
            TICKETPRINTINFOID,
            @ID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from
            @TICKETSTOPRINT;
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;