/// <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); }
/// <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(); }