Пример #1
0
        private async Task <Result <AccommodationBookingInfo> > ConvertToBookingInfo(Booking booking, string languageCode, AgentContext?agentContext = null)
        {
            var(_, isFailure, accommodation, error) = await _accommodationMapperClient.GetAccommodation(booking.HtId, languageCode);

            if (isFailure)
            {
                return(Result.Failure <AccommodationBookingInfo>(error.Detail));
            }

            var settings = agentContext.HasValue
                ? await _accommodationBookingSettingsService.Get(agentContext.Value)
                : (AccommodationBookingSettings?)null;

            var bookingDetails   = GetDetails(booking, accommodation.ToEdoContract());
            var supplier         = GetSupplier(booking, settings);
            var isDirectContract = GetDirectContractFlag(booking, settings);
            var agentInformation = await GetAgentInformation(booking.AgentId, booking.AgencyId);

            return(new AccommodationBookingInfo(
                       bookingId: booking.Id,
                       bookingDetails: bookingDetails,
                       agencyId: booking.AgencyId,
                       paymentStatus: booking.PaymentStatus,
                       totalPrice: new MoneyAmount(booking.TotalPrice, booking.Currency),
                       cancellationPenalty: BookingCancellationPenaltyCalculator.Calculate(booking, _dateTimeProvider.UtcNow()),
                       supplier: supplier,
                       agentInformation: agentInformation,
                       paymentMethod: booking.PaymentType,
                       tags: booking.Tags,
                       isDirectContract: isDirectContract));
        private decimal GetCancellationPenaltyAmount(FinalizedBookingsReportData data)
        {
            var booking = new Booking
            {
                Rooms = data.Rooms,
                CancellationPolicies = data.CancellationPolicies,
                Currency             = data.AgentCurrency
            };

            return(BookingCancellationPenaltyCalculator.Calculate(booking, data.CancellationDate.Value).Amount);
        }
Пример #3
0
        public async Task <IActionResult> GetBookingCancellationPenalty(int bookingId)
        {
            var(_, isFailure, booking, error) = await _bookingRecordManager.Get(bookingId);

            if (isFailure)
            {
                return(BadRequest(ProblemDetailsBuilder.Build(error)));
            }

            return(Ok(BookingCancellationPenaltyCalculator.Calculate(booking, _dateTimeProvider.UtcNow())));
        }
Пример #4
0
        public void No_policies_after_deadline_should_have_100_percent_penalty()
        {
            _booking.Rooms = new List <BookedRoom>
            {
                MakeBookedRoom(
                    deadline: new Deadline(new DateTime(2020, 1, 1), null, null, true),
                    price: new MoneyAmount(100m, Currencies.USD))
            };
            var forDate = new DateTime(2020, 1, 2);

            var cancellationPenalty = BookingCancellationPenaltyCalculator.Calculate(_booking, forDate);

            Assert.Equal(100, cancellationPenalty.Amount);
        }
Пример #5
0
        public void Everything_unknown_should_not_have_penalty()
        {
            _booking.Rooms = new List <BookedRoom>
            {
                MakeBookedRoom(
                    deadline: new Deadline(null, null, null, true),
                    price: new MoneyAmount(100m, Currencies.USD))
            };
            var forDate = new DateTime(2020, 1, 1);

            var cancellationPenalty = BookingCancellationPenaltyCalculator.Calculate(_booking, forDate);

            Assert.Equal(0, cancellationPenalty.Amount);
        }
Пример #6
0
        public void Existing_policies_should_ignore_deadline_date()
        {
            _booking.Rooms = new List <BookedRoom>
            {
                MakeBookedRoom(
                    deadline: new Deadline(
                        new DateTime(2020, 1, 1),
                        new List <CancellationPolicy>
                {
                    new CancellationPolicy(fromDate: new DateTime(2020, 1, 3), 0.3d)
                }, null, true),
                    price: new MoneyAmount(100m, Currencies.USD))
            };
            var forDate = new DateTime(2020, 1, 2);

            var cancellationPenalty = BookingCancellationPenaltyCalculator.Calculate(_booking, forDate);

            Assert.Equal(0, cancellationPenalty.Amount);
        }