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