Пример #1
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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));
        }