예제 #1
0
        private async Task <SegmentSSRRequest[]> CreateSegmentSSRRequests(dto.SellJourneyByKeyRequestData sellJourneyByKeyRequestData)
        {
            var segmentSSRRequests = new List <SegmentSSRRequest>();
            var infantPaxCount     = Array.Find(sellJourneyByKeyRequestData.PaxTypeCounts,
                                                p => p.PaxTypeCode.Equals(Global.INFANT_CODE));

            if (infantPaxCount != null && infantPaxCount.PaxCount > 0)
            {
                var ssrs = await _resourcesService.GetSSRList(await _sessionBag.CultureCode());

                var infantSsr   = Array.Find(ssrs.SSRList, p => p.SSRCode == Global.INFANT_CODE);
                var sellKeyList = Mapper.Map <SellKeyList[]>(sellJourneyByKeyRequestData.JourneySellKeys);
                var journeys    = NewskiesHelper.GetJourneysFromSellKeys(sellKeyList).ToList();
                var paxNumbers  = new List <int>();
                for (var i = 0; i < infantPaxCount.PaxCount; i++)
                {
                    paxNumbers.Add(i);
                }
                var journeySegmentLegIndexes = new List <Tuple <int, List <Tuple <int, int[]> > > >();
                for (var j = 0; j < journeys.Count(); j++)
                {
                    var segmentLegIndexes = new List <Tuple <int, int[]> >();
                    for (var s = 0; s < journeys[j].Segments.Length; s++)
                    {
                        segmentLegIndexes.Add(new Tuple <int, int[]>(s, null));
                    }
                    journeySegmentLegIndexes.Add(new Tuple <int, List <Tuple <int, int[]> > >(j, segmentLegIndexes));
                }
                segmentSSRRequests = NewskiesHelper.CreateSegmentSSRRequests(
                    journeys, Mapper.Map <SSR>(infantSsr), paxNumbers.ToArray(), 1, journeySegmentLegIndexes);
            }
            return(segmentSSRRequests.ToArray());
        }
예제 #2
0
        public async Task <dto.CancelResponse> CancelSSR(dto.CancelSSRRequest cancelSSRRequest)
        {
            var signature = await _sessionBag.Signature();

            var data = cancelSSRRequest.SSRRequestData;
            var journeySegmentLegIndexes = new List <Tuple <int, List <Tuple <int, int[]> > > > {
                new Tuple <int, List <Tuple <int, int[]> > >(data.JourneyIndex, new List <Tuple <int, int[]> > {
                    new Tuple <int, int[]>(data.SegmentIndex, data.LegIndex.HasValue ? new[] { data.LegIndex.Value } : null)
                })
            };
            var ssrs = await _resourcesService.GetSSRList(await _sessionBag.CultureCode());

            var ssr             = Array.Find(ssrs.SSRList, p => p.SSRCode == data.SSRCode);
            var existingPaxSsrs = Array.FindAll((await _sessionBag.Booking()).Journeys[data.JourneyIndex].Segments[data.SegmentIndex].PaxSSRs,
                                                p => p.SSRCode == data.SSRCode && p.PassengerNumber == data.PaxNumber && (data.Note != null ? data.Note == p.Note : true));
            var ssrNumbersAll          = existingPaxSsrs.Select(p => p.SSRNumber).ToList();
            var ssrNumbersToCancel     = ssrNumbersAll.GetRange(ssrNumbersAll.Count() - data.SSRCount, data.SSRCount);
            var ssrNumbersToCancelDict = new Dictionary <int, List <short> >();

            ssrNumbersToCancelDict.Add(data.PaxNumber, ssrNumbersToCancel.ToList());
            var navJourneys        = Mapper.Map <Journey[]>((await _sessionBag.Booking()).Journeys);
            var segmentSSRRequests = NewskiesHelper.CreateSegmentSSRRequests(navJourneys.ToList(), Mapper.Map <SSR>(ssr),
                                                                             new[] { data.PaxNumber }, data.SSRCount, journeySegmentLegIndexes, ssrNumbersToCancelDict, data.Note);
            var cancelRequestData = new CancelRequestData
            {
                CancelBy  = CancelBy.SSR,
                CancelSSR = new CancelSSR
                {
                    SSRRequest = new SSRRequest
                    {
                        CurrencyCode       = (await _sessionBag.Booking()).CurrencyCode,
                        SegmentSSRRequests = segmentSSRRequests.ToArray()
                    }
                }
            };
            var cancelSSRsResponse = await _client.CancelAsync(new CancelRequest
            {
                ContractVersion        = _navApiContractVer,
                MessageContractVersion = _navMsgContractVer,
                Signature = signature,
                EnableExceptionStackTrace = false,
                CancelRequestData         = cancelRequestData
            });

            // _navApiContractVer, false, _navMsgContractVer, signature, cancelRequestData);
            return(Mapper.Map <dto.CancelResponse>(cancelSSRsResponse));
        }
예제 #3
0
        public ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var fareSellKey = value as string;

            if (string.IsNullOrEmpty(fareSellKey))
            {
                return(ValidationResult.Success); //return new ValidationResult("Missing Fare sell key.");
            }
            var validationErrors = new List <string>();

            if (!NewskiesHelper.IsFareSellKeyValid(fareSellKey, out validationErrors))
            {
                var str = "Fare sell key invalid: ";
                validationErrors.ForEach(p => str += p + " ");
                return(new ValidationResult(str.Trim()));
            }
            return(ValidationResult.Success);
        }
예제 #4
0
        public async Task <dto.SellResponse> SellSSR(dto.SellSSRRequest sellSSRRequest)
        {
            var data = sellSSRRequest.SSRRequestData;
            var journeySegmentLegIndexes = new List <Tuple <int, List <Tuple <int, int[]> > > > {
                new Tuple <int, List <Tuple <int, int[]> > >(data.JourneyIndex, new List <Tuple <int, int[]> > {
                    new Tuple <int, int[]>(data.SegmentIndex, data.LegIndex.HasValue ? new[] { data.LegIndex.Value } : null)
                })
            };
            var signature = await _sessionBag.Signature();

            var ssrs = await _resourcesService.GetSSRList(await _sessionBag.CultureCode());

            var ssr                = ssrs.SSRList.FirstOrDefault(p => p.SSRCode == data.SSRCode);//Array.Find(ssrs.SSRList, p => p.SSRCode == data.SSRCode);
            var navJourneys        = Mapper.Map <Journey[]>((await _sessionBag.Booking()).Journeys);
            var segmentSSRRequests = NewskiesHelper.CreateSegmentSSRRequests(navJourneys.ToList(), Mapper.Map <SSR>(ssr),
                                                                             new[] { data.PaxNumber }, data.SSRCount, journeySegmentLegIndexes, note: data.Note);
            var ssrSellRequestData = new SellRequestData
            {
                SellBy  = SellBy.SSR,
                SellSSR = new SellSSR
                {
                    SSRRequest = new SSRRequest
                    {
                        CurrencyCode       = (await _sessionBag.Booking()).CurrencyCode,
                        SegmentSSRRequests = segmentSSRRequests.ToArray()
                    }
                }
            };
            var sellSSRsResponse = await _client.SellAsync(new SellRequest
            {
                ContractVersion        = _navApiContractVer,
                MessageContractVersion = _navMsgContractVer,
                Signature = signature,
                EnableExceptionStackTrace = false,
                SellRequestData           = ssrSellRequestData
            });

            //_navApiContractVer, false, _navMsgContractVer, signature, ssrSellRequestData);
            return(Mapper.Map <dto.SellResponse>(sellSSRsResponse));
        }
예제 #5
0
        public override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var baseResult = base.IsValid(value, validationContext);

            if (baseResult != null)
            {
                return(baseResult);
            }
            try
            {
                var airlineSettingsOptions = ((IOptions <AppSettings>)validationContext.GetService(typeof(IOptions <AppSettings>))).Value;
                var bookingSettings        = airlineSettingsOptions.AvailabilitySettings;
                var sellKeysList           = (dto.SellKeyList[])value;
                if (sellKeysList.Length > 1)
                {
                    var journeysList = new List <Journey>();
                    foreach (var sellKey in sellKeysList)
                    {
                        journeysList.Add(
                            NewskiesHelper.CreateJourney(am.Mapper.Map <SellKeyList>(sellKey)));
                    }
                    for (var i = 0; i < journeysList.Count - 1; i++)
                    {
                        if (journeysList[i].GetJourneySTA().AddHours(bookingSettings.MinHoursBetweenJourneys)
                            > journeysList[i + 1].GetJourneySTD())
                        {
                            return(new ValidationResult(string.Format("{0} error. Journey {1} departure must be after journey {2} arrival plus {3} hour(s).",
                                                                      validationContext.DisplayName, i + 1, i, bookingSettings.MinHoursBetweenJourneys)));
                        }
                    }
                }

                return(ValidationResult.Success);
            }
            catch (Exception e)
            {
                return(new ValidationResult(string.Format("Unable to validate {0} array length. {1}", validationContext.DisplayName, e.Message)));
            }
        }
예제 #6
0
        public async Task <dto.AssignSeatsResponse> UnAssignSeat(dto.AssignSeatRequest assignSeatRequest)
        {
            var sellSeatRequest = await GetSellSeatRequest(assignSeatRequest, true);

            var unAssignSeatsResponse = await _client.UnassignSeatsAsync(new UnassignSeatsRequest
            {
                ContractVersion        = _navApiContractVer,
                MessageContractVersion = _navMsgContractVer,
                Signature = await _sessionBag.Signature(),
                EnableExceptionStackTrace = false,
                SellSeatRequest           = sellSeatRequest
            });

            var error = NewskiesHelper.GetUpdateResponseError(unAssignSeatsResponse.BookingUpdateResponseData);

            if (error != null)
            {
                throw new dto.ResponseErrorException(
                          dto.Enumerations.ResponseErrorCode.SeatAssignmentFailure, error);
            }
            return(Mapper.Map <dto.AssignSeatsResponse>(unAssignSeatsResponse));
        }
예제 #7
0
        public async Task <object> OnRequest(object request, ActionExecutingContext context, Dictionary <string, string> settings)
        {
            var sessionBag = context.HttpContext.RequestServices.GetService(typeof(ISessionBagService)) as SessionBagService;

            if (sessionBag == null || await sessionBag.Booking() == null)
            {
                return(await Task.FromResult(request));
            }
            var booking = await sessionBag.Booking();

            var existingBookingFlightCount  = !string.IsNullOrEmpty(booking.RecordLocator) && booking.Journeys != null ? booking.Journeys.Length : 0;
            var sellJourneyByKeyRequestData = request as SellJourneyByKeyRequestData;

            if (sellJourneyByKeyRequestData != null && sellJourneyByKeyRequestData.JourneySellKeys != null)
            {
                var sellKeys    = sellJourneyByKeyRequestData.JourneySellKeys;
                var flightCount = existingBookingFlightCount + sellKeys.Length;
                if (flightCount > 2)
                {
                    throw new ResponseErrorException(ResponseErrorCode.InvalidFlightsLimit, "Maximum 2 flights allowed. ");
                }
                if (flightCount == 2)
                {
                    // disallow multi-city
                    if (existingBookingFlightCount == 0 && sellKeys.Length == 2)
                    {
                        // no flights sold yet and requesting to sell 2 flights
                        if (!NewskiesHelper.IsJourneySellKeyValid(sellKeys[0].JourneySellKey, out List <string> errors))
                        {
                            throw new ResponseErrorException(ResponseErrorCode.InvalidRequest, errors.ToArray());
                        }
                        if (!NewskiesHelper.IsJourneySellKeyValid(sellKeys[1].JourneySellKey, out List <string> errors2))
                        {
                            throw new ResponseErrorException(ResponseErrorCode.InvalidRequest, errors2.ToArray());
                        }
                        var f1Array = sellKeys[0].JourneySellKey.Split(new char[] { '~' });
                        var f1Orig  = f1Array[4];
                        var f1Dest  = f1Array[6];
                        var f2Array = sellKeys[1].JourneySellKey.Split(new char[] { '~' });
                        var f2Orig  = f2Array[4];
                        var f2Dest  = f2Array[6];
                        if (f1Orig != f2Dest || f1Dest != f2Orig)
                        {
                            throw new ResponseErrorException(ResponseErrorCode.InvalidMarket, "Multi-city prohibited. ");
                        }
                    }
                    else if (existingBookingFlightCount == 1 && sellKeys.Length == 1)
                    {
                        // 1 flight already sold and requesting to sell second flight
                        var f1Orig  = booking.Journeys[0].GetDepartureStation();
                        var f1Dest  = booking.Journeys[0].GetArrivalStation();
                        var f2Array = sellKeys[0].JourneySellKey.Split(new char[] { '~' });
                        var f2Orig  = f2Array[4];
                        var f2Dest  = f2Array[6];
                        if (f1Orig != f2Dest || f1Dest != f2Orig)
                        {
                            throw new ResponseErrorException(ResponseErrorCode.InvalidMarket, "Multi-city prohibited. ");
                        }
                    }
                }
                return(await Task.FromResult(request));
            }
            return(await Task.FromResult(request));
        }