Пример #1
0
        /// <summary>
        ///  Consultar assentos disponíveis. (O objetivo final é permitir que o cliente compre um assento especial)
        ///  Neste caso estamos usando uma reserva nacional, com apenas um passageiro.
        ///  O motivo disto é facilitar o manuseio da reserva, já que em reservas nacionais eu
        ///  tenho grupo de assento específicos para determinados tipos de tarifas.
        ///  Exemplo a tarifa Business que tem direito a um assento de luxo.Outro ponto que determinou fazermos desta forma,
        ///  foi o fato que em voos internacionais temos o skysofa. Assento personalizado da Azul, que possui uma série de regras,
        ///  que dificulta o desenvolvimento.
        ///
        /// No novo serviço da navitaire, não está sendo disponibilizado informações referentes ao as características do  assento,
        /// no caso não são informados as seguintes características do assento:
        /// * O Assento é na janela;
        /// * O Assento é na saida de emergencia;
        /// * O Assento é reclinável;
        /// * O assento é parcialmente reclinável;
        /// </summary>
        static async Task ConsultarAssentosDisponiveisEmUmVoo()
        {
            ///Obtendo o token necessário para consumir o serviço da Navitaire.
            string token = await(new LoginBusiness()).LogonAndGetTokenNavitaire();

            BookingBusiness bookingBusiness = new BookingBusiness(token);
            SeatBusiness    seatBusiness    = new SeatBusiness(token);

            ///Para que possamos fazer qualquer alteração de uma reserva, se faz necessário estamos com ela em sessão.
            ///por esse motivo realizamos usamos a função ReatriveBooking. Desta forma inserindo em sessão o booking que iremos trabalhar.
            BookingResponse booking = await bookingBusiness.ReatriveBooking("G7VIVI");

            ///Para facilitar o desenvolvimento, estamos sempre usando a chave do primeiro seguinto, da primeira jornada.
            List <SeatMapResponse> seatMapResponseList = await seatBusiness.GetSeatMapAvailabilityBySegmentKey(booking.Journeys[0].Segments[0].SegmentKey);

            ///Função retorna os assentos disponíveis, usando como base os atributos Type e Assignable, do objeto unit.
            ///O objeto unit representa uma unidade de espaço dentro a aeronave, ou seja posso ter unit, que representam
            ///espaços em brancos ou por exemplo o banheiro de uma determinada aeronave.
            ///Para trazermos apenas unidades que representam assento, estamos verificando sei o campo Type,
            ///está sendo preenchido com o valor “NormalSeat”. Alem de verificar se o valor do objeto Assignable está como true,
            ///indicando que o assento está disponível para marcação.
            ///Outro filtro que tive que incluir, pois a Navitaire estava me levantando erro é quando o assento está disponível para marcação,
            ///porém ele está em espera, por esse motivo, colocamos um filtro no campo Availability, trazendo apenas assentos com o valor
            ///deste campo igual a open (disponível).
            List <Unit> units = seatBusiness.GetAvailabilitySeat(seatMapResponseList);
        }
Пример #2
0
        /// <summary>
        ///  Reservar assento para um cliente em um voo e indicar um link do site onde ele possa pagar o assento
        ///  depois de deixar o booking negativo
        ///  Nesta função, irei repetir algumas chamadas do método ConsultarAssentosDisponiveisEmUmVoo,
        ///  pois a marcação de assento segue o mesmo princípio da exibição do mapa de assento.
        ///  Outro ponto é que para que eu possa marcar um assento, se faz necessário o unityKey,
        ///  que é retornado justamente na função que traz o mapa de assento. Com relação a marcação de assentos,
        ///  estamos usando apenas um fluxo feliz, ou seja o passageiro que iremos utilizar não possui assento,
        ///  caso contrário teríamos que  remover o assento, para após marcar um novo.
        ///  Outro ponto é que o usuário não pode realizar mudança de assento, para um assento de valor inferior ao já registrado na reserva.
        ///  Pois hoje a Azul não trabalha com reembolso do valor do assento.
        /// </summary>
        static async Task ComprarAssentoParaClienteEmUmVoo()
        {
            ///Obtendo o token necessário para consumir o serviço da Navitaire.
            string token = await(new LoginBusiness()).LogonAndGetTokenNavitaire();

            BookingBusiness bookingBusiness = new BookingBusiness(token);
            SeatBusiness    seatBusiness    = new SeatBusiness(token);

            ///Para que possamos fazer qualquer alteração de uma reserva, se faz necessário estamos com ela em sessão.
            ///por esse motivo realizamos usamos a função ReatriveBooking. Desta forma inserindo em sessão o booking que iremos trabalhar.
            BookingResponse booking = await bookingBusiness.ReatriveBooking("G7VIVI");

            ///Para facilitar o desenvolvimento, estamos sempre usando a chave do primeiro seguinto, da primeira jornada.
            List <SeatMapResponse> seatMapResponseList = await seatBusiness.GetSeatMapAvailabilityBySegmentKey(booking.Journeys[0].Segments[0].SegmentKey);

            ///Caso o tenhamos assento para o primeiro segmento, realizamos a remoção, assim prosseguindo com o fluxo de marcação.
            if (seatBusiness.ThereIsSeatReservedFirstPassenger(booking))
            {
                Seat seat = booking.Journeys[0]?.Segments[0]?.PassengersSegment[0].Value?.Seats[0];
                await seatBusiness.UnassignPassengerSegmentSeat(seat.PassengerKey, seat.UnitKey);
            }

            ///Função retorna os assentos disponíveis, usando como base os atributos Type e Assignable, do objeto unit.
            ///O objeto unit representa uma unidade de espaço dentro a aeronave, ou seja posso ter unit, que representam
            ///espaços em brancos ou por exemplo o banheiro de uma determinada aeronave.
            ///Para trazermos apenas unidades que representam assento, estamos verificando sei o campo Type,
            ///está sendo preenchido com o valor “NormalSeat”. Alem de verificar se o valor do objeto Assignable está como true,
            ///indicando que o assento está disponível para marcação.
            ///Outro filtro que tive que incluir, pois a Navitaire estava me levantando erro é quando o assento está disponível para marcação,
            ///porém ele está em espera, por esse motivo, colocamos um filtro no campo Availability, trazendo apenas assentos com o valor
            ///deste campo igual a open (disponível).
            List <Unit> units = seatBusiness.GetAvailabilitySeat(seatMapResponseList);

            ///Está função realiza a marcação de assento, usando como base o booking em sessão, a key do passageiro informado e a
            ///key do assento que será atrelado ao usuário.Caso o assento tenha valor a pagar será incluído uma fee(taxa) referente
            ///ao valor do assento.
            await seatBusiness.AssingnmentSeat(booking.Passengers[0].Key, units[0].UnitKey);

            ///Está função é responsavel por salvar as alterações feitas no booking em sessão.
            ///Ela tem como o booking, porém estou apenas retornando informações referente ao valor pago, valor a pagar.
            BookingCommitResponse bookingCommitResult = await bookingBusiness.CommitBooking();
        }