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