USP_DATAFORMTEMPLATE_EDITLOAD_GROUPSALESCHECKINVISITOR

The load procedure used by the edit dataform template "Group Sales Check In Visitor Edit Data Form"

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@TSLONG bigint INOUT Output parameter indicating the TSLONG value of the record being edited. This is used to manage multi-user concurrency issues when multiple users access the same record.
@ITINERARIES xml INOUT
@PRICETYPES xml INOUT
@RESOURCES xml INOUT Resources
@STAFFRESOURCES xml INOUT Staffing resources
@RESERVATIONNAME nvarchar(100) INOUT Name
@ITINERARYCOUNT tinyint INOUT
@TOTALVISITORS int INOUT Total visitors
@ISFLATRATE bit INOUT
@RATESCALEMIN int INOUT
@RATESCALEMAX int INOUT
@UPDATERATESCALE bit INOUT Update group rate based on new number of visitors
@IGNORECONFLICTS bit INOUT Ignore conflicts when checking in
@ADDITIONALPRICETYPES xml INOUT
@USEPERTICKETAFTERMAX bit INOUT
@UPDATEPERTICKETBALANCE bit INOUT Update order balance based on new number of visitors
@CURRENTBALANCE money INOUT Current balance
@HASEMPTYITINERARY bit INOUT

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITLOAD_GROUPSALESCHECKINVISITOR
(
    @ID uniqueidentifier,
    @DATALOADED bit = 0 output,
    @TSLONG bigint = 0 output,
    @ITINERARIES xml = null output,
    @PRICETYPES xml = null output,
    @RESOURCES xml = null output,
    @STAFFRESOURCES xml = null output,
    @RESERVATIONNAME nvarchar(100) = null output,
    @ITINERARYCOUNT tinyint = null output,
    @TOTALVISITORS integer = null output,
    @ISFLATRATE bit = null output,
    @RATESCALEMIN integer = null output,
    @RATESCALEMAX integer = null output,
    @UPDATERATESCALE bit = null output,
    @IGNORECONFLICTS bit = null output,
    @ADDITIONALPRICETYPES xml = null output,
    @USEPERTICKETAFTERMAX bit = null output,
    @UPDATEPERTICKETBALANCE bit = null output,
    @CURRENTBALANCE money = null output,
    @HASEMPTYITINERARY bit = null output
)
as
    set nocount on;

    set @DATALOADED = 0
    set @TSLONG = 0

    select
        @DATALOADED = 1,
        @TSLONG = RESERVATION.TSLONG,
        @RESERVATIONNAME = RESERVATION.NAME,
        @IGNORECONFLICTS = 0,
        @ISFLATRATE = RESERVATION.PRICINGCODE,
        @USEPERTICKETAFTERMAX = coalesce(RESERVATIONRATESCALE.USEPERTICKETAFTERMAX, 0),
        @HASEMPTYITINERARY = dbo.UFN_RESERVATION_HASEMPTYITINERARY([RESERVATION].[ID])
    from dbo.RESERVATION
        left join dbo.RESERVATIONRATESCALE on RESERVATION.ID = RESERVATIONRATESCALE.ID
    where RESERVATION.ID = @ID

    if @DATALOADED = 1 begin
        select @ITINERARYCOUNT = count(ID)
        from dbo.ITINERARY
        where RESERVATIONID = @ID

        declare @ATTENDEES table (
            ITINERARYATTENDEEID uniqueidentifier,
            ITINERARYID uniqueidentifier,
            ITINERARYNAME nvarchar(154),
            PRICETYPECODEID uniqueidentifier,
            PRICETYPECODEDESCRIPTION nvarchar(100),
            QUANTITY smallint
        );

        insert into @ATTENDEES (
            ITINERARYATTENDEEID,
            ITINERARYID,
            ITINERARYNAME,
            PRICETYPECODEID,
            PRICETYPECODEDESCRIPTION,
            QUANTITY
        )
        select
            ITINERARYATTENDEE.ID,
            ITINERARY.ID,
            ITINERARY.NAME,
            ITINERARYATTENDEE.PRICETYPECODEID,
            PRICETYPECODE.DESCRIPTION,
            ITINERARYATTENDEE.QUANTITY
        from dbo.ITINERARY
        inner join dbo.ITINERARYATTENDEE on ITINERARY.ID = ITINERARYATTENDEE.ITINERARYID
        inner join dbo.PRICETYPECODE on PRICETYPECODE.ID = ITINERARYATTENDEE.PRICETYPECODEID
        where ITINERARY.RESERVATIONID = @ID;

        set @ITINERARIES =
        (
            select
                ITINERARYATTENDEEID as ID,
                ITINERARYID,
                PRICETYPECODEDESCRIPTION as PRICETYPE,
                ITINERARYNAME as NAME,
                PRICETYPECODEID,
                QUANTITY
            from
                @ATTENDEES
            for xml raw('ITEM'),type,elements,root('ITINERARIES'),binary base64
        );

        set @PRICETYPES =
        (
            select
                PRICETYPECODEDESCRIPTION as PRICETYPE,
                sum(QUANTITY) as QUANTITY,
                PRICETYPECODEID
            from
                @ATTENDEES
            group by
                PRICETYPECODEID, PRICETYPECODEDESCRIPTION
            for xml raw('ITEM'),type,elements,root('PRICETYPES'),binary base64    
        );

        set @ADDITIONALPRICETYPES =
        (
            select
                ITINERARYID,
                PRICETYPECODEDESCRIPTION as PRICETYPE,
                ITINERARYNAME as NAME,
                PRICETYPECODEID,
                QUANTITY
            from
                @ATTENDEES
            for xml raw('ITEM'), type, elements, root('ADDITIONALPRICETYPES'), binary base64
        );

        set @RESOURCES = 
        (
            select
                ID,
                ITINERARYID,
                ITINERARYITEMID,
                QUANTITYNEEDED,
                RESOURCENAME,
                RESOURCEID,
                ITINERARYITEMNAME,
                ISPERTICKETITEM,
                PRICINGSTRUCTURECODE,
                ISREQUIREDRESOURCE,
                REQUIREDRESOURCEQUANTITY,
                PRICE,
                STARTTIME,
                ENDTIME,
                PERTICKETQUANTITY,
                PERTICKETDIVISOR
            from
            (
                -- All itinerary resources
                select 
                    ITINERARYRESOURCE.ID AS ID,
                    ITINERARY.ID as ITINERARYID,
                    null as ITINERARYITEMID,
                    ITINERARYRESOURCE.QUANTITYNEEDED,
                    RESOURCE.NAME as RESOURCENAME,
                    ITINERARYRESOURCE.RESOURCEID,
                    'Entire itinerary' as ITINERARYITEMNAME,
                    RESOURCE.ISPERTICKETITEM,
                    ITINERARYRESOURCE.PRICINGSTRUCTURECODE,
                    case when (GROUPTYPEREQUIREDRESOURCE.ID is null) then 0 else 1 end as ISREQUIREDRESOURCE,
                    coalesce(GROUPTYPEREQUIREDRESOURCE.QUANTITYNEEDED, 0) as REQUIREDRESOURCEQUANTITY,
                    ITINERARYRESOURCE.PRICE,
                    [dbo].[UFN_HOURMINUTE_GETFROMDATE](ITINERARY.STARTDATETIME) as STARTTIME,
                    [dbo].[UFN_HOURMINUTE_GETFROMDATE](ITINERARY.ENDDATETIME) as ENDTIME,
                    ITINERARYRESOURCE.PERTICKETQUANTITY,
                    ITINERARYRESOURCE.PERTICKETDIVISOR
                from dbo.ITINERARYRESOURCE
                inner join dbo.RESOURCE    on ITINERARYRESOURCE.RESOURCEID = RESOURCE.ID
                inner join dbo.ITINERARY on ITINERARYRESOURCE.ITINERARYID = ITINERARY.ID
                left outer join dbo.GROUPTYPEREQUIREDRESOURCE on 
                    (ITINERARYRESOURCE.RESOURCEID = GROUPTYPEREQUIREDRESOURCE.RESOURCEID) and
                    (ITINERARY.GROUPSALESGROUPTYPECODEID = GROUPTYPEREQUIREDRESOURCE.GROUPSALESGROUPTYPECODEID)
                where 
                    ITINERARY.RESERVATIONID = @ID

                union all

                -- All itinerary item resources
                select 
                    ITINERARYITEMRESOURCE.ID AS ID,
                    ITINERARY.ID as ITINERARYID,
                    ITINERARYITEM.ID as ITINERARYITEMID,
                    ITINERARYITEMRESOURCE.QUANTITYNEEDED,
                    RESOURCE.NAME as RESOURCENAME,
                    ITINERARYITEMRESOURCE.RESOURCEID,
                    ITINERARYITEM.NAME as ITINERARYITEMNAME,
                    RESOURCE.ISPERTICKETITEM,
                    ITINERARYITEMRESOURCE.PRICINGSTRUCTURECODE,
                    0 as ISREQUIREDRESOURCE,
                    0 as REQUIREDRESOURCEQUANTITY,
                    ITINERARYITEMRESOURCE.PRICE,
                    ITINERARYITEM.STARTTIME,
                    ITINERARYITEM.ENDTIME,
                    ITINERARYITEMRESOURCE.PERTICKETQUANTITY,
                    ITINERARYITEMRESOURCE.PERTICKETDIVISOR
                from dbo.ITINERARYITEMRESOURCE
                inner join dbo.RESOURCE on ITINERARYITEMRESOURCE.RESOURCEID = RESOURCE.ID
                inner join dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                where 
                    ITINERARY.RESERVATIONID = @ID and
                    ITINERARYITEM.ITEMTYPECODE <> 3
            ) [RESOURCES]
            for xml raw('ITEM'),type,elements,root('RESOURCES'),binary base64
        );

        set @STAFFRESOURCES = 
        (
            select
                ID,
                ITINERARYID,
                ITINERARYITEMID,
                QUANTITYNEEDED,
                JOBNAME,
                ITINERARYITEMNAME,
                VOLUNTEERTYPEID,
                JOBID,
                JOBOCCURRENCEID,
                FILLEDBYCODE,
                PRICINGSTRUCTURECODE,
                PRICE,
                ISREQUIREDRESOURCE,
                REQUIREDRESOURCEQUANTITY,
                STARTTIME,
                ENDTIME
            from
            (
                select 
                    ITINERARYSTAFFRESOURCE.ID AS ID,
                    ITINERARY.ID as ITINERARYID,
                    null as ITINERARYITEMID,
                    ITINERARYSTAFFRESOURCE.QUANTITYNEEDED,
                    coalesce(JOB.NAME, VOLUNTEERTYPE.NAME,'') as JOBNAME,
                    'Entire itinerary' as ITINERARYITEMNAME,
                    ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID,
                    ITINERARYSTAFFRESOURCE.JOBID,
                    ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID,
                    ITINERARYSTAFFRESOURCE.FILLEDBYCODE,
                    ITINERARYSTAFFRESOURCE.PRICINGSTRUCTURECODE,
                    ITINERARYSTAFFRESOURCE.PRICE,
                    case when (GROUPTYPEREQUIREDSTAFFRESOURCE.ID is null) then 0 else 1 end as ISREQUIREDRESOURCE,
                    coalesce(GROUPTYPEREQUIREDSTAFFRESOURCE.QUANTITYNEEDED, 0) as REQUIREDRESOURCEQUANTITY,
                    [dbo].[UFN_HOURMINUTE_GETFROMDATE](ITINERARY.STARTDATETIME) as STARTTIME,
                    [dbo].[UFN_HOURMINUTE_GETFROMDATE](ITINERARY.ENDDATETIME) as ENDTIME
                from dbo.ITINERARYSTAFFRESOURCE
                inner join dbo.ITINERARY on ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
                left outer join dbo.JOB on ITINERARYSTAFFRESOURCE.JOBID = JOB.ID
                left outer join dbo.GROUPTYPEREQUIREDSTAFFRESOURCE on 
                    (ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = GROUPTYPEREQUIREDSTAFFRESOURCE.VOLUNTEERTYPEID) and
                    (ITINERARYSTAFFRESOURCE.JOBID = GROUPTYPEREQUIREDSTAFFRESOURCE.JOBID) and
                    (ITINERARYSTAFFRESOURCE.FILLEDBYCODE = GROUPTYPEREQUIREDSTAFFRESOURCE.FILLEDBYCODE) and
                    (ITINERARY.GROUPSALESGROUPTYPECODEID = GROUPTYPEREQUIREDSTAFFRESOURCE.GROUPSALESGROUPTYPECODEID)
                left outer join dbo.VOLUNTEERTYPE on
                    ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
                where 
                    ITINERARY.RESERVATIONID = @ID

                union all

                select 
                    ITINERARYITEMSTAFFRESOURCE.ID AS ID,
                    ITINERARY.ID as ITINERARYID,
                    ITINERARYITEM.ID as ITINERARYITEMID,
                    ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED,
                    coalesce(JOB.NAME, VOLUNTEERTYPE.NAME,'') as JOBNAME,
                    ITINERARYITEM.NAME as ITINERARYITEMNAME,
                    ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID,
                    ITINERARYITEMSTAFFRESOURCE.JOBID,
                    ITINERARYITEMSTAFFRESOURCE.JOBOCCURRENCEID,
                    ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE,
                    ITINERARYITEMSTAFFRESOURCE.PRICINGSTRUCTURECODE,
                    ITINERARYITEMSTAFFRESOURCE.PRICE,
                    0 as ISREQUIREDRESOURCE,
                    0 as REQUIREDRESOURCEQUANTITY,
                    ITINERARYITEM.STARTTIME,
                    ITINERARYITEM.ENDTIME
                from dbo.ITINERARYITEMSTAFFRESOURCE
                inner join dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                left outer join dbo.JOB    on ITINERARYITEMSTAFFRESOURCE.JOBID = JOB.ID
                left outer join dbo.VOLUNTEERTYPE on
                    ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
                where 
                    ITINERARY.RESERVATIONID = @ID and 
                    ITINERARYITEM.ITEMTYPECODE <> 3
            ) [STAFFRESOURCES]
            for xml raw('ITEM'),type,elements,root('STAFFRESOURCES'),binary base64                    
        );

        set @TOTALVISITORS = dbo.UFN_RESERVATION_TOTALVISITORCOUNT(@ID);

        if @ISFLATRATE = 1 begin
            select @RATESCALEMIN = RSP.GROUPMINIMUM,
                @RATESCALEMAX = RSP.GROUPMAXIMUM
            from dbo.RESERVATIONRATESCALEPRICE RSP
            inner join dbo.RESERVATIONRATESCALE RRS ON RRS.ID = RSP.RESERVATIONRATESCALEID
            where RRS.ID = @ID 
                and    RSP.INUSE = 1
        end

        set @UPDATEPERTICKETBALANCE = 1;
        select @CURRENTBALANCE = BALANCE from dbo.UFN_SALESORDER_TOTALS(@ID)
    end

    return 0;