public List <AccommodationAvailabilityResult> AlignPrices(List <AccommodationAvailabilityResult> results) { var convertedResults = new List <AccommodationAvailabilityResult>(results.Count); foreach (var accommodationAvailability in results) { // Currency can differ in different results var roomContractSets = RoomContractSetPriceProcessor.AlignPrices(accommodationAvailability.RoomContractSets); convertedResults.Add(new AccommodationAvailabilityResult(searchId: accommodationAvailability.SearchId, supplier: accommodationAvailability.Supplier, created: accommodationAvailability.Created, availabilityId: accommodationAvailability.AvailabilityId, roomContractSets: roomContractSets, minPrice: accommodationAvailability.MinPrice, maxPrice: accommodationAvailability.MaxPrice, checkInDate: accommodationAvailability.CheckInDate, checkOutDate: accommodationAvailability.CheckOutDate, htId: accommodationAvailability.HtId, supplierAccommodationCode: accommodationAvailability.SupplierAccommodationCode, countryHtId: accommodationAvailability.CountryHtId, localityHtId: accommodationAvailability.LocalityHtId)); } return(convertedResults); }
public SingleAccommodationAvailability AlignPrices(SingleAccommodationAvailability source) { var roomContractSets = RoomContractSetPriceProcessor.AlignPrices(source.RoomContractSets); return(new SingleAccommodationAvailability(availabilityId: source.AvailabilityId, checkInDate: source.CheckInDate, roomContractSets: roomContractSets, htId: source.HtId, countryHtId: source.CountryHtId, localityHtId: source.LocalityHtId)); }
public async Task Should_process_daily_room_rates() { var roomContractSet = CreateRoomContractSet(Currencies.USD, contractSetTotalRate: (Gross: 100, Final: 50), roomDailyRate: (Gross: 100, Final: 50)); var processed = await RoomContractSetPriceProcessor.ProcessPrices(roomContractSet, AddTenReturnUsd); Assert.Equal(120, processed.Rooms[0].DailyRoomRates[0].Gross.Amount); Assert.Equal(60, processed.Rooms[0].DailyRoomRates[0].FinalPrice.Amount); Assert.Equal(Currencies.USD, processed.Rooms[0].DailyRoomRates[0].Gross.Currency); Assert.Equal(Currencies.USD, processed.Rooms[0].DailyRoomRates[0].FinalPrice.Currency); }
public async Task Should_process_room_rate_for_list() { var roomContractSet = CreateRoomContractSet(Currencies.USD, contractSetTotalRate: (Gross: 100, Final: 50), roomTotalRate: (Gross: 100, Final: 50)); var roomContractSets = new List <RoomContractSet> { roomContractSet }; var processed = await RoomContractSetPriceProcessor.ProcessPrices(roomContractSets, AddTenReturnUsd); Assert.Equal(120, processed[0].Rooms[0].Rate.Gross.Amount); Assert.Equal(60, processed[0].Rooms[0].Rate.FinalPrice.Amount); Assert.Equal(Currencies.USD, processed[0].Rooms[0].Rate.Gross.Currency); Assert.Equal(Currencies.USD, processed[0].Rooms[0].Rate.FinalPrice.Currency); }
public RoomContractSetAvailability AlignPrices(RoomContractSetAvailability value) { var roomContractSet = RoomContractSetPriceProcessor.AlignPrices(value.RoomContractSet); return(new RoomContractSetAvailability(availabilityId: value.AvailabilityId, checkInDate: value.CheckInDate, checkOutDate: value.CheckOutDate, numberOfNights: value.NumberOfNights, roomContractSet: roomContractSet, accommodation: value.Accommodation, availablePaymentMethods: value.AvailablePaymentMethods, countryHtId: value.CountryHtId, localityHtId: value.LocalityHtId, evaluationToken: value.EvaluationToken)); }
private static async ValueTask <RoomContractSetAvailability> ProcessPrices(RoomContractSetAvailability value, PriceProcessFunction processFunction) { var roomContractSet = await RoomContractSetPriceProcessor.ProcessPrices(value.RoomContractSet, processFunction); return(new RoomContractSetAvailability(availabilityId: value.AvailabilityId, checkInDate: value.CheckInDate, checkOutDate: value.CheckOutDate, numberOfNights: value.NumberOfNights, roomContractSet: roomContractSet, accommodation: value.Accommodation, availablePaymentMethods: value.AvailablePaymentMethods, countryHtId: value.CountryHtId, localityHtId: value.LocalityHtId, evaluationToken: value.EvaluationToken)); }
public async Task Should_be_change_rates_proportionally(decimal gross, decimal net, decimal ratio) { var roomContractSet = CreateRoomContractSet(Currencies.USD, contractSetTotalRate: (Gross: gross, Final: net), roomDailyRate: (Gross: gross, Final: net), roomTotalRate: (Gross: gross, Final: net)); var roomContractSets = new List <RoomContractSet> { roomContractSet }; ValueTask <MoneyAmount> PriceProcessFunction(MoneyAmount price) => new ValueTask <MoneyAmount>(new MoneyAmount(price.Amount * ratio, Currencies.USD)); var processed = await RoomContractSetPriceProcessor.ProcessPrices(roomContractSets, PriceProcessFunction); Assert.Equal(gross * ratio, processed[0].Rooms[0].DailyRoomRates[0].Gross.Amount); Assert.Equal(net * ratio, processed[0].Rooms[0].DailyRoomRates[0].FinalPrice.Amount); Assert.Equal(gross * ratio, processed[0].Rooms[0].Rate.Gross.Amount); Assert.Equal(net * ratio, processed[0].Rooms[0].Rate.FinalPrice.Amount); Assert.Equal(Currencies.USD, processed[0].Rooms[0].DailyRoomRates[0].Gross.Currency); Assert.Equal(Currencies.USD, processed[0].Rooms[0].DailyRoomRates[0].FinalPrice.Currency); }
public async Task <Result <List <AccommodationAvailabilityResult>, ProblemDetails> > ConvertCurrencies(List <AccommodationAvailabilityResult> results) { var convertedResults = new List <AccommodationAvailabilityResult>(results.Count); foreach (var slimAccommodationAvailability in results) { var convertedRoomContractSets = new List <RoomContractSet>(slimAccommodationAvailability.RoomContractSets.Count); foreach (var roomContractSet in slimAccommodationAvailability.RoomContractSets) { var(_, isFailure, convertedRoomContractSet, error) = await _priceProcessor.ConvertCurrencies(roomContractSet, async (rcs, function) => await RoomContractSetPriceProcessor.ProcessPrices(rcs, function), GetCurrency); if (isFailure) { return(Result.Failure <List <AccommodationAvailabilityResult>, ProblemDetails>(error)); } convertedRoomContractSets.Add(convertedRoomContractSet); } convertedResults.Add(new AccommodationAvailabilityResult(searchId: slimAccommodationAvailability.SearchId, supplier: slimAccommodationAvailability.Supplier, created: slimAccommodationAvailability.Created, availabilityId: slimAccommodationAvailability.AvailabilityId, roomContractSets: convertedRoomContractSets, minPrice: slimAccommodationAvailability.MinPrice, maxPrice: slimAccommodationAvailability.MaxPrice, checkInDate: slimAccommodationAvailability.CheckInDate, checkOutDate: slimAccommodationAvailability.CheckOutDate, htId: slimAccommodationAvailability.HtId, supplierAccommodationCode: slimAccommodationAvailability.SupplierAccommodationCode, countryHtId: slimAccommodationAvailability.CountryHtId, localityHtId: slimAccommodationAvailability.LocalityHtId)); } return(convertedResults); }
public async Task <List <AccommodationAvailabilityResult> > ApplyMarkups(List <AccommodationAvailabilityResult> results, AgentContext agent) { var convertedResults = new List <AccommodationAvailabilityResult>(results.Count); var subjectInfo = agent.ToMarkupSubjectInfo(); foreach (var slimAccommodationAvailability in results) { var convertedRoomContractSets = new List <RoomContractSet>(slimAccommodationAvailability.RoomContractSets.Count); foreach (var roomContractSet in slimAccommodationAvailability.RoomContractSets) { var convertedRoomContractSet = await _priceProcessor.ApplyMarkups(subjectInfo, roomContractSet, async (rcs, function) => await RoomContractSetPriceProcessor.ProcessPrices(rcs, function), _ => GetMarkupDestinationInfo(slimAccommodationAvailability)); convertedRoomContractSets.Add(convertedRoomContractSet); } convertedResults.Add(new AccommodationAvailabilityResult(searchId: slimAccommodationAvailability.SearchId, supplier: slimAccommodationAvailability.Supplier, created: slimAccommodationAvailability.Created, availabilityId: slimAccommodationAvailability.AvailabilityId, roomContractSets: convertedRoomContractSets, minPrice: slimAccommodationAvailability.MinPrice, maxPrice: slimAccommodationAvailability.MaxPrice, checkInDate: slimAccommodationAvailability.CheckInDate, checkOutDate: slimAccommodationAvailability.CheckOutDate, htId: slimAccommodationAvailability.HtId, supplierAccommodationCode: slimAccommodationAvailability.SupplierAccommodationCode, countryHtId: slimAccommodationAvailability.CountryHtId, localityHtId: slimAccommodationAvailability.LocalityHtId)); } return(convertedResults); }
public async Task <SingleAccommodationAvailability> ApplyMarkups(SingleAccommodationAvailability response, AgentContext agent) { var convertedRoomContractSets = new List <RoomContractSet>(response.RoomContractSets.Count); var subjectInfo = agent.ToMarkupSubjectInfo(); foreach (var roomContractSet in response.RoomContractSets) { var convertedRoomContractSet = await _priceProcessor.ApplyMarkups(subjectInfo, roomContractSet, async (rcs, function) => await RoomContractSetPriceProcessor.ProcessPrices(rcs, function), _ => GetMarkupDestinationInfo(response)); convertedRoomContractSets.Add(convertedRoomContractSet); } return(new SingleAccommodationAvailability(availabilityId: response.AvailabilityId, checkInDate: response.CheckInDate, roomContractSets: convertedRoomContractSets, htId: response.HtId, countryHtId: response.CountryHtId, localityHtId: response.LocalityHtId)); }
public async Task <Result <SingleAccommodationAvailability, ProblemDetails> > ConvertCurrencies(SingleAccommodationAvailability availabilityDetails) { var convertedRoomContractSets = new List <RoomContractSet>(availabilityDetails.RoomContractSets.Count); foreach (var roomContractSet in availabilityDetails.RoomContractSets) { var(_, isFailure, convertedRoomContractSet, error) = await _priceProcessor.ConvertCurrencies(roomContractSet, async (rcs, function) => await RoomContractSetPriceProcessor.ProcessPrices(rcs, function), GetCurrency); if (isFailure) { return(Result.Failure <SingleAccommodationAvailability, ProblemDetails>(error)); } convertedRoomContractSets.Add(convertedRoomContractSet); } return(new SingleAccommodationAvailability(availabilityId: availabilityDetails.AvailabilityId, checkInDate: availabilityDetails.CheckInDate, roomContractSets: convertedRoomContractSets, htId: availabilityDetails.HtId, countryHtId: availabilityDetails.CountryHtId, localityHtId: availabilityDetails.LocalityHtId)); }