Example #1
0
        /// <summary>
        /// Runs the activity asynchronously.
        /// </summary>
        /// <param name="sharedContext">The shared context.</param>
        /// <returns>
        /// Next activity to be run or <c>null</c> if last in flow.
        /// </returns>
        public async Task <IActivity> RunAsync(SharedContext sharedContext)
        {
            IBargainFinderMaxData data = sharedContext.GetResult <IBargainFinderMaxData>(InputDataSharedContextKey);

            if (data == null)
            {
                throw new ArgumentException("No data found under key: " + InputDataSharedContextKey);
            }

            var security = await this.sessionPool.TakeSessionAsync(sharedContext.ConversationId);

            var service = this.soapServiceFactory.CreateBargainFinderMaxService(sharedContext.ConversationId, security);
            var request = this.CreateRequest(data);

            sharedContext.AddSerializedResultXML(RequestXmlSharedContextKey, request);
            try
            {
                var result = service.BargainFinderMaxRQ(request);
                sharedContext.AddSerializedResultXML(ResponseXmlSharedContextKey, result);
                EnhancedAirBookData enhancedAirBookData = this.CreateEnhancedAirBookData(result);
                sharedContext.AddResult(EnhancedAirBookActivity.InputDataSharedContextKey, enhancedAirBookData);
                return(new PassengerDetailsContactActivity(this.soapServiceFactory, this.sessionPool));
            }
            catch (Exception ex)
            {
                sharedContext.AddResult(CommonConstants.ExceptionSharedContextKey, ex);
                sharedContext.IsFaulty = true;
                this.sessionPool.ReleaseSession(sharedContext.ConversationId);
                return(null);
            }
        }
Example #2
0
        /// <summary>
        /// Creates the input data for <see cref="EnhancedAirBookActivity"/>.
        /// </summary>
        /// <param name="result">The BargainFinderMax result.</param>
        /// <returns>The data.</returns>
        private EnhancedAirBookData CreateEnhancedAirBookData(OTA_AirLowFareSearchRS result)
        {
            OTA_AirLowFareSearchRSPricedItineraries itineraries = result.Items.OfType <OTA_AirLowFareSearchRSPricedItineraries>().First();
            EnhancedAirBookData enhancedAirBookData             = new EnhancedAirBookData();

            enhancedAirBookData.FlightSegments = itineraries.PricedItinerary.First().AirItinerary.OriginDestinationOptions.First().FlightSegment
                                                 .Select(flightSegment => new FlightSegmentData
            {
                DepartureDateTime       = DateTime.ParseExact(flightSegment.DepartureDateTime, "s", CultureInfo.InvariantCulture),
                DestinationLocationCode = flightSegment.ArrivalAirport.LocationCode,
                FlightNumber            = flightSegment.FlightNumber,
                MarketingAirlineCode    = flightSegment.MarketingAirline.Code,
                OriginLocationCode      = flightSegment.DepartureAirport.LocationCode,
                DesignationCode         = flightSegment.ResBookDesigCode
            });
            return(enhancedAirBookData);
        }