USP_REPORT_ITINERARY

Parameters

Parameter Parameter Type Mode Description
@RESERVATIONID uniqueidentifier IN
@ITINERARYID uniqueidentifier IN
@INCLUDERESOURCES bit IN

Definition

Copy

create procedure dbo.USP_REPORT_ITINERARY 
(
    @RESERVATIONID uniqueidentifier = null,
    @ITINERARYID uniqueidentifier = null
    @INCLUDERESOURCES bit = null 
)
as
set nocount on;

begin
    if @INCLUDERESOURCES = 0
    begin
        select
            case
                when LEADERID is null then
                    ITINERARY.NAME
                else ITINERARY.NAME + ' - ' + CONSTITUENTNAMEFORMAT.NAME
            end ITINERARYNAME,
            RESERVATION.NAME RESERVATIONNAME,
            ITINERARYITEM.NAME ITEMNAME,
            case ITINERARYITEM.ITEMTYPECODE 
                when 0 then 
                    dbo.UFN_EVENT_GETLOCATIONNAME(ITINERARYITEM.EVENTID) 
                when 1 then 
                    dbo.UFN_PROGRAM_GETLOCATIONNAME(ITINERARYITEM.PROGRAMID) 
                when 2 then 
                    dbo.UFN_EVENTLOCATION_GETNAME(ITINERARYITEM.EVENTLOCATIONID) 
                else 
                    ''
            end LOCATIONS,
            ITINERARYITEM.STARTDATETIME as ITEMSTARTTIME,
            ITINERARYITEM.ENDDATETIME as ITEMENDTIME,
            dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) VISITORCOUNT,
            ITINERARYITEM.STARTDATE as ITINERARYARRIVALDATE,
            ITINERARY.ID as ITINERARYID,
            null as QUANTITY,
            ITINERARYITEM.ID as ITINERARYITEMID,
            0 as ISITEMRESOURCE,
            null as RESOURCEID,
            null as RESOURCENAME,
            null as ASSIGNEDRESOURCES,
            ITINERARYITEM.ENDDATE as ITEMENDDATE,
            ITINERARYITEM.STARTDATE as ITEMSTARTDATE
        from 
            dbo.RESERVATION
        inner join 
            dbo.ITINERARY on RESERVATION.ID = ITINERARY.RESERVATIONID
        inner join 
            dbo.ITINERARYITEM on ITINERARY.ID = ITINERARYITEM.ITINERARYID
        outer apply 
            dbo.UFN_CONSTITUENT_DISPLAYNAME(ITINERARY.LEADERID) as CONSTITUENTNAMEFORMAT
        where 
            RESERVATION.ID = @RESERVATIONID 
            and (ITINERARY.ID = @ITINERARYID or @ITINERARYID is null)
            and ITINERARYITEM.ITEMTYPECODE <> 3
        order by 
            ITINERARY.NAME, ITINERARYARRIVALDATE, ITEMSTARTTIME
    end

    else
    begin
        declare @RESERVATIONNAME nvarchar(100);

        select 
            @RESERVATIONNAME = NAME
        from 
            dbo.RESERVATION
        where 
            ID = @RESERVATIONID

        declare @ITINERARY table
        (
            ITINERARYNAME nvarchar(255),
            RESERVATIONNAME nvarchar(100),
            ITEMNAME nvarchar(255),
            LOCATIONS nvarchar(255),
            ITEMSTARTTIME datetime,
            ITEMENDTIME datetime,
            VISITORCOUNT integer,
            ITINERARYARRIVALDATE datetime,
            ITINERARYID uniqueidentifier,
            QUANTITY integer,
            ITINERARYITEMID uniqueidentifier,
            ISRESOURCE bit,
            RESOURCEID uniqueidentifier,
            RESOURCENAME nvarchar(255),
            ASSIGNEDRESOURCES nvarchar(max),
            ITEMENDDATE date,
            ITEMSTARTDATE date
        );

        insert into @ITINERARY
        select
            case
                when LEADERID is null then
                    ITINERARY.NAME
                else 
                    ITINERARY.NAME + ' - ' + dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARY.LEADERID) 
            end ITINERARYNAME,
            RESERVATION.NAME RESERVATIONNAME,
            ITINERARYITEM.NAME ITEMNAME,
            case ITINERARYITEM.ITEMTYPECODE 
                when 0 then 
                    dbo.UFN_EVENT_GETLOCATIONNAME(ITINERARYITEM.EVENTID) 
                when 1 then 
                    dbo.UFN_PROGRAM_GETLOCATIONNAME(ITINERARYITEM.PROGRAMID) 
                when 2 then 
                    dbo.UFN_EVENTLOCATION_GETNAME(ITINERARYITEM.EVENTLOCATIONID) 
                else 
                    ''
            end LOCATIONS,
            ITINERARYITEM.STARTDATETIME as ITEMSTARTTIME,
            ITINERARYITEM.ENDDATETIME as ITEMENDTIME,
            dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) VISITORCOUNT,
            ITINERARYITEM.STARTDATE as ITINERARYARRIVALDATE,
            ITINERARY.ID as ITINERARYID,
            null,
            ITINERARYITEM.ID,
            0,
            null as RESOURCEID,
            null as RESOURCENAME,
            null as ASSIGNEDRESOURCES,
            ITINERARYITEM.ENDDATE as ITEMENDDATE,
            ITINERARYITEM.STARTDATE as ITEMSTARTDATE
        from 
            dbo.RESERVATION
        inner join 
            dbo.ITINERARY on RESERVATION.ID = ITINERARY.RESERVATIONID
        inner join 
            dbo.ITINERARYITEM on ITINERARY.ID = ITINERARYITEM.ITINERARYID
        where 
            RESERVATION.ID = @RESERVATIONID 
            and (ITINERARY.ID = @ITINERARYID or @ITINERARYID is null)
            and ITINERARYITEM.ITEMTYPECODE <> 3

        union all

        select
            case
                when ITINERARY.LEADERID is null then
                    ITINERARY.NAME
                else 
                    ITINERARY.NAME + ' - ' + dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARY.LEADERID) 
            end ITINERARYNAME,
            @RESERVATIONNAME,
            NULL ITEMNAME,
            null,
            ITINERARY.STARTDATETIME,
            ITINERARY.ENDDATETIME,
            dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) VISITORCOUNT,
            null,
            ITINERARYSTAFFRESOURCE.ITINERARYID,
            ITINERARYSTAFFRESOURCE.QUANTITYNEEDED,
            NULL,
            1,
            ITINERARYSTAFFRESOURCE.ID as RESOURCEID,
            dbo.UFN_VOLUNTEERTYPE_GETDESCRIPTION(ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID) RESOURCENAME,
            case when (ITINERARYSTAFFRESOURCE.FILLEDBYCODE != 0) or (ITINERARY.STARTDATETIME is null) then 
                dbo.UFN_ITINERARYSTAFFRESOURCE_GETASSIGNMENTSTRING(ITINERARYSTAFFRESOURCE.ID) 
            else 
                dbo.UFN_JOBOCCURRENCE_GETASSIGNMENTSTRING(ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID) 
            end as ASSIGNEDRESOURCES,
            null as ITEMENDDATE,
            null as ITEMSTARTDATE
        from 
            dbo.SALESORDERITEM
        inner join 
            dbo.SALESORDERITEMITINERARYSTAFFRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYSTAFFRESOURCE.SALESORDERITEMID
        inner join 
            dbo.ITINERARYSTAFFRESOURCE on SALESORDERITEMITINERARYSTAFFRESOURCE.ITINERARYSTAFFRESOURCEID = ITINERARYSTAFFRESOURCE.ID
        inner join 
            dbo.ITINERARY on ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
        where 
            SALESORDERITEM.SALESORDERID = @RESERVATIONID
            and (ITINERARYSTAFFRESOURCE.ITINERARYID = @ITINERARYID or @ITINERARYID is null)
            and SALESORDERITEM.TYPECODE = 10

        union all

        select
            case
                when ITINERARY.LEADERID is null then
                    ITINERARY.NAME
                else 
                    ITINERARY.NAME + ' - ' + dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARY.LEADERID) 
            end ITINERARYNAME,
            @RESERVATIONNAME,
            NULL ITEMNAME,
            null,
            ITINERARY.STARTDATETIME,
            ITINERARY.ENDDATETIME,
            dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) VISITORCOUNT,
            null,
            ITINERARY.ID,
            case RESOURCE.ISPERTICKETITEM
                when 0 then
                    ITINERARYRESOURCE.QUANTITYNEEDED
                else
                    dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2(dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) * ITINERARYRESOURCE.PERTICKETQUANTITY, ITINERARYRESOURCE.PERTICKETDIVISOR)
            end as QUANTITY,
            null,
            1,
            ITINERARYRESOURCE.ID as RESOURCEID,
            RESOURCE.NAME as RESOURCENAME,
            null as ASSIGNEDRESOURCES,
            null as ITEMENDDATE,
            null as ITEMSTARTDATE
        from 
            dbo.SALESORDERITEM
        inner join 
            dbo.SALESORDERITEMITINERARYRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYRESOURCE.SALESORDERITEMID
        inner join 
            dbo.ITINERARYRESOURCE on SALESORDERITEMITINERARYRESOURCE.ITINERARYRESOURCEID = ITINERARYRESOURCE.ID
        inner join 
            dbo.ITINERARY on ITINERARYRESOURCE.ITINERARYID = ITINERARY.ID
        inner join 
            dbo.RESOURCE on ITINERARYRESOURCE.RESOURCEID = RESOURCE.ID
        where 
            SALESORDERITEM.SALESORDERID = @RESERVATIONID
            and (ITINERARY.ID = @ITINERARYID or @ITINERARYID is null)
            and SALESORDERITEM.TYPECODE = 8

        declare @ITEMRESOURCES table
        (
            ITINERARYNAME nvarchar(255),
            RESERVATIONNAME nvarchar(100),
            ITEMNAME nvarchar(255),
            LOCATIONS nvarchar(255),
            ITEMSTARTTIME datetime,
            ITEMENDTIME datetime,
            VISITORCOUNT integer,
            ITINERARYARRIVALDATE datetime,
            ITINERARYID uniqueidentifier,
            QUANTITY integer,
            ITINERARYITEMID uniqueidentifier,
            ISRESOURCE bit,
            RESOURCEID uniqueidentifier,
            RESOURCENAME nvarchar(255),
            ASSIGNEDRESOURCES nvarchar(max)
        );

        insert into @ITEMRESOURCES
        select 
            case
                when ITINERARY.LEADERID is null then
                    ITINERARY.NAME
                else ITINERARY.NAME + ' - ' + dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARY.LEADERID) 
            end ITINERARYNAME,
            @RESERVATIONNAME,
            null,
            null,
            null,
            null,
            dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) VISITORCOUNT,
            ITINERARYITEM.STARTDATE as ITINERARYARRIVALDATE,
            ITINERARYITEM.ITINERARYID,
            ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED,
            ITINERARYITEM.ID,
            1,
            ITINERARYITEMSTAFFRESOURCE.ID as RESOURCEID,
            dbo.UFN_VOLUNTEERTYPE_GETDESCRIPTION(ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID) RESOURCENAME,
            case when (ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE != 0) or (ITINERARY.STARTDATETIME is null) then 
                dbo.UFN_ITINERARYITEMSTAFFRESOURCE_GETASSIGNMENTSTRING(ITINERARYITEMSTAFFRESOURCE.ID) 
            else 
                dbo.UFN_JOBOCCURRENCE_GETASSIGNMENTSTRING(ITINERARYITEMSTAFFRESOURCE.JOBOCCURRENCEID) 
            end as ASSIGNEDRESOURCES
        from 
            dbo.SALESORDERITEM
        inner join 
            dbo.SALESORDERITEMITINERARYITEMSTAFFRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYITEMSTAFFRESOURCE.SALESORDERITEMID
        inner join 
            dbo.ITINERARYITEMSTAFFRESOURCE on SALESORDERITEMITINERARYITEMSTAFFRESOURCE.ITINERARYITEMSTAFFRESOURCEID = ITINERARYITEMSTAFFRESOURCE.ID
        inner join 
            dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
        inner join 
            dbo.ITINERARY on ITINERARY.ID = ITINERARYITEM.ITINERARYID
        where 
            SALESORDERITEM.SALESORDERID = @RESERVATIONID
            and (ITINERARY.ID = @ITINERARYID or @ITINERARYID is null)
            and SALESORDERITEM.TYPECODE = 11
            and ITINERARYITEM.ITEMTYPECODE <> 3

        union all

        select 
            case
                when ITINERARY.LEADERID is null then
                    ITINERARY.NAME
                else ITINERARY.NAME + ' - ' + dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARY.LEADERID) 
            end ITINERARYNAME,
            @RESERVATIONNAME,
            null,
            null,
            null,
            null,
            dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) VISITORCOUNT,
            ITINERARYITEM.STARTDATE as ITINERARYARRIVALDATE,
            ITINERARY.ID,
            case RESOURCE.ISPERTICKETITEM
                when 0 then
                    ITINERARYITEMRESOURCE.QUANTITYNEEDED
                else
                    dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2(dbo.UFN_ITINERARY_TOTALVISITORCOUNT(ITINERARY.ID) * ITINERARYITEMRESOURCE.PERTICKETQUANTITY, ITINERARYITEMRESOURCE.PERTICKETDIVISOR)
            end as QUANTITY,
            ITINERARYITEM.ID,
            1,
            ITINERARYITEMRESOURCE.ID as RESOURCEID,
            RESOURCE.NAME as RESOURCENAME,
            null as ASSIGNEDRESOURCES
        from 
            dbo.SALESORDERITEM
        inner join 
            dbo.SALESORDERITEMITINERARYITEMRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYITEMRESOURCE.SALESORDERITEMID
        inner join 
            dbo.ITINERARYITEMRESOURCE on SALESORDERITEMITINERARYITEMRESOURCE.ITINERARYITEMRESOURCEID = ITINERARYITEMRESOURCE.ID
        inner join 
            dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
        inner join 
            dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
        inner join 
            dbo.RESOURCE on RESOURCE.ID = ITINERARYITEMRESOURCE.RESOURCEID
        where 
            SALESORDERITEM.SALESORDERID = @RESERVATIONID
            and (ITINERARY.ID = @ITINERARYID or @ITINERARYID is null)
            and SALESORDERITEM.TYPECODE = 9    
            and ITINERARYITEM.ITEMTYPECODE <> 3

        select
            IT.ITINERARYNAME ITINERARYNAME,
            IT.RESERVATIONNAME RESERVATIONNAME,
            IT.ITEMNAME ITEMNAME,
            IT.LOCATIONS LOCATIONS,
            IT.ITEMSTARTTIME ITEMSTARTTIME,
            IT.ITEMENDTIME ITEMENDTIME,
            IT.VISITORCOUNT VISITORCOUNT,
            IT.ITINERARYARRIVALDATE ITINERARYARRIVALDATE,
            IT.ITINERARYID ITINERARYID,
            coalesce(IT.QUANTITY, R.QUANTITY, null) QUANTITY,
            IT.ITINERARYITEMID ITINERARYITEMID,
            IT.ISRESOURCE ISITEMRESOURCE,
            R.RESOURCEID RESOURCEID,
            isnull(IT.RESOURCENAME, R.RESOURCENAME) RESOURCENAME,
            IT.RESOURCEID ITINERARYRESOURCEID,
            isnull(IT.ASSIGNEDRESOURCES, R.ASSIGNEDRESOURCES) ASSIGNEDRESOURCES,
            IT.ITEMENDDATE,
            IT.ITEMSTARTDATE
        from 
            @ITINERARY IT
        left join 
            @ITEMRESOURCES R on IT.ITINERARYITEMID = R.ITINERARYITEMID
        order by 
            ITINERARYNAME, ITINERARYARRIVALDATE, ITEMSTARTTIME
    end
end