UFN_RESERVATION_GETITINERARIESSTRING

Returns a string containing itinerary information including itinerary names, item names, and item dates and times.

Return

Return Type
nvarchar(max)

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_RESERVATION_GETITINERARIESSTRING(@ID uniqueidentifier)
            returns nvarchar(max)
            as begin
                declare @NUMBEROFDAYS int;
                declare @ARRIVALDATE date;
                declare @LASTITINERARYITEMDATE date;
                declare @ITINERARIES nvarchar(max);
                declare @ITINERARYID uniqueidentifier;
                declare @ITINERARYNAME nvarchar(154);
                declare @CRLF char(2);

                set @CRLF = char(13) + char(10);
                set @ITINERARIES = '';

                select @ARRIVALDATE = ARRIVALDATE from dbo.RESERVATION where ID = @ID;

                select
                    @LASTITINERARYITEMDATE = max(ITINERARYITEM.STARTDATE)
                from
                    dbo.ITINERARYITEM
                inner join
                    dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                where
                    ITINERARY.RESERVATIONID = @ID;

                set @NUMBEROFDAYS = datediff(day, @ARRIVALDATE, @LASTITINERARYITEMDATE);

                declare ITINERARIES_CURSOR cursor local fast_forward for
                select
                    ID,
                    NAME
                from
                    dbo.ITINERARY
                where
                    RESERVATIONID = @ID
                order by
                    NAME;

                open ITINERARIES_CURSOR;

                fetch next from ITINERARIES_CURSOR
                into @ITINERARYID, @ITINERARYNAME;

                while @@FETCH_STATUS = 0
                begin
                    if len(@ITINERARIES) = 0    
                        set @ITINERARIES = @ITINERARYNAME;
                    else
                        set @ITINERARIES = @ITINERARIES + @CRLF + @CRLF + @ITINERARYNAME;

                    declare @ITEMNAME nvarchar(100);
                    declare @STARTDATE date;
                    declare @STARTTIME dbo.UDT_HOURMINUTE;
                    declare @PREVIOUSSTARTDATE date;

                    set @PREVIOUSSTARTDATE = null;

                    declare ITINERARYITEMS_CURSOR cursor local fast_forward for
                    select
                        NAME,
                        STARTDATE,
                        STARTTIME
                    from
                        dbo.ITINERARYITEM
                    where
                        ITINERARYID = @ITINERARYID
                    order by
                        STARTDATE,
                        STARTTIME,
                        NAME;

                    open ITINERARYITEMS_CURSOR;

                    fetch next from ITINERARYITEMS_CURSOR
                    into @ITEMNAME, @STARTDATE, @STARTTIME;

                    while @@FETCH_STATUS = 0
                    begin
                        if @PREVIOUSSTARTDATE is null or @STARTDATE <> @PREVIOUSSTARTDATE
                        begin
                            set @ITINERARIES = @ITINERARIES + @CRLF;

                            if @NUMBEROFDAYS > 0
                                set @ITINERARIES = @ITINERARIES + @CRLF + char(9) + convert(nchar(12), @STARTDATE, 107);
                        end

                        set @ITINERARIES = @ITINERARIES + @CRLF + char(9) + char(9) + dbo.UFN_HOURMINUTE_DISPLAYTIME(@STARTTIME) + char(9) + @ITEMNAME;
                        set @PREVIOUSSTARTDATE = @STARTDATE;

                        fetch next from ITINERARYITEMS_CURSOR
                        into @ITEMNAME, @STARTDATE, @STARTTIME;
                    end

                    close ITINERARYITEMS_CURSOR;
                    deallocate ITINERARYITEMS_CURSOR;

                    fetch next from ITINERARIES_CURSOR
                    into @ITINERARYID, @ITINERARYNAME;
                end

                close ITINERARIES_CURSOR;
                deallocate ITINERARIES_CURSOR;

                return @ITINERARIES;
            end