USP_ITINERARY_CHECKPERTICKETRESOURCES

Checks all itinerary and itinerary item resources for a given itinerary for an over capacity inventory error.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN

Definition

Copy


        CREATE procedure dbo.USP_ITINERARY_CHECKPERTICKETRESOURCES
        (
            @ID uniqueidentifier
        )
        as
        begin

            declare @VISITORCOUNT int
            set @VISITORCOUNT = isnull((
                                    select sum(ITINERARYATTENDEE.QUANTITY)
                                    from dbo.ITINERARYATTENDEE
                                    where ITINERARYID = @ID
                                ),0);

            declare @RESOURCEID uniqueidentifier
            declare @NAME nvarchar(100)
            declare @TOTALQUANTITY as int
            declare @QUANTITYNEEDED as int

            select top 1
                @RESOURCEID = ID,
                @NAME = NAME,
                @TOTALQUANTITY = TOTALQUANTITY,
                @QUANTITYNEEDED = QUANTITYNEEDED
            from
            (
                select
                    RESOURCE.ID as ID,
                    RESOURCE.NAME as NAME,
                    RESOURCE.QUANTITY as TOTALQUANTITY,
                    dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2
                        (@VISITORCOUNT * RESOURCE.PERTICKETQUANTITY, RESOURCE.PERTICKETDIVISOR) as QUANTITYNEEDED
                from dbo.ITINERARYRESOURCE
                inner join dbo.RESOURCE on ITINERARYRESOURCE.RESOURCEID = RESOURCE.ID
                inner join dbo.ITINERARY on ITINERARYRESOURCE.ITINERARYID = ITINERARY.ID
                where
                    RESOURCE.TYPECODE = 0 and
                    ITINERARY.ID = @ID and
                    ITINERARYRESOURCE.IGNORESQUANTITYFORCAPACITY = 0 and
                    RESOURCE.ISPERTICKETITEM = 1

                union

                select
                    RESOURCE.ID as ID,
                    RESOURCE.NAME as NAME,
                    RESOURCE.QUANTITY as TOTALQUANTITY,
                    dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2
                        (@VISITORCOUNT * RESOURCE.PERTICKETQUANTITY, RESOURCE.PERTICKETDIVISOR) as QUANTITYNEEDED
                from dbo.ITINERARYITEMRESOURCE
                inner join dbo.RESOURCE on ITINERARYITEMRESOURCE.RESOURCEID = RESOURCE.ID
                inner join dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                where
                    RESOURCE.TYPECODE = 0 and
                    ITINERARYITEM.ITINERARYID = @ID and
                    ITINERARYITEMRESOURCE.IGNORESQUANTITYFORCAPACITY = 0 and
                    ITINERARYITEM.ITEMTYPECODE <> 3 and
                    RESOURCE.ISPERTICKETITEM = 1
            ) as T
            where
                QUANTITYNEEDED > TOTALQUANTITY

            if @RESOURCEID is not null
            begin
                declare @ERRORMESSAGE nvarchar(500)    
                set @ERRORMESSAGE = convert(nvarchar(10), @QUANTITYNEEDED) + ' ' + @NAME + 
                    '(s) are required for this group.  Only ' + convert(nvarchar(10), @TOTALQUANTITY) + ' are available.  ' +
                    'You can either reduce the group size or remove the resource.'

                raiserror(@ERRORMESSAGE, 13, 1)            
            end


        end