コード例 #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));
コード例 #2
0
            static AccommodationBookingDetails GetDetails(Booking booking, Accommodation accommodationDetails)
            {
                var passengerNumber = booking.Rooms.Sum(r => r.Passengers.Count);
                var numberOfNights  = (booking.CheckOutDate - booking.CheckInDate).Days;

                return(new AccommodationBookingDetails(
                           referenceCode: booking.ReferenceCode,
                           clientReferenceCode: booking.ClientReferenceCode,
                           agentReference: booking.SupplierReferenceCode,
                           status: booking.Status,
                           numberOfNights: numberOfNights,
                           checkInDate: booking.CheckInDate.DateTime,
                           checkOutDate: booking.CheckOutDate.DateTime,
                           location: booking.Location,
                           contactInfo: accommodationDetails.Contacts,
                           accommodationId: booking.AccommodationId,
                           accommodationName: booking.AccommodationName,
                           accommodationInfo: booking.AccommodationInfo,
                           deadlineDate: booking.DeadlineDate?.DateTime,
                           roomDetails: booking.Rooms,
                           numberOfPassengers: passengerNumber,
                           cancellationPolicies: booking.CancellationPolicies,
                           created: booking.Created.DateTime,
                           propertyOwnerConfirmationCode: booking.PropertyOwnerConfirmationCode,
                           isAdvancePurchaseRate: booking.IsAdvancePurchaseRate));
            }
コード例 #3
0
        public async Task <Result <BookingVoucherData> > GenerateVoucher(Booking booking, string languageCode)
        {
            var(_, isAccommodationFailure, accommodationDetails, accommodationError) = await _accommodationMapperClient.GetAccommodation(booking.HtId, languageCode);

            if (isAccommodationFailure)
            {
                return(Result.Failure <BookingVoucherData>(accommodationError.Detail));
            }

            var bannerMaybe = await _imageFileService.GetBanner(booking.AgencyId);

            var logoMaybe = await _imageFileService.GetLogo(booking.AgencyId);

            var agent = await _context.Agents.SingleOrDefaultAsync(a => a.Id == booking.AgentId);

            if (agent == default)
            {
                return(Result.Failure <BookingVoucherData>("Could not find agent"));
            }

            if (!AvailableForVoucherBookingStatuses.Contains(booking.Status))
            {
                return(Result.Failure <BookingVoucherData>($"Voucher is not allowed for booking status '{EnumFormatters.FromDescription(booking.Status)}'"));
            }

            if (!AvailableForVoucherPaymentStatuses.Contains(booking.PaymentStatus))
            {
                return(Result.Failure <BookingVoucherData>($"Voucher is not allowed for payment status '{EnumFormatters.FromDescription(booking.PaymentStatus)}'"));
            }

            return(new BookingVoucherData
                   (
                       agentName: $"{agent.FirstName} {agent.LastName}",
                       bookingId: booking.Id,
                       accommodation: GetAccommodationInfo(accommodationDetails.ToEdoContract()),
                       nightCount: (booking.CheckOutDate - booking.CheckInDate).Days,
                       checkInDate: booking.CheckInDate.DateTime,
                       checkOutDate: booking.CheckOutDate.DateTime,
                       deadlineDate: booking.DeadlineDate?.DateTime,
                       mainPassengerName: booking.MainPassengerName,
                       referenceCode: booking.ReferenceCode,
                       supplierReferenceCode: booking.SupplierReferenceCode,
                       propertyOwnerConfirmationCode: booking.PropertyOwnerConfirmationCode,
                       bannerUrl: bannerMaybe.HasValue ? bannerMaybe.Value.Url : null,
                       logoUrl: logoMaybe.HasValue ? logoMaybe.Value.Url : null,
                       roomDetails: booking.Rooms.Select(r => new BookingVoucherData.RoomInfo(r.ContractDescription,
                                                                                              r.BoardBasis,
                                                                                              r.MealPlan,
                                                                                              r.DeadlineDate?.DateTime,
                                                                                              r.ContractDescription,
                                                                                              r.Passengers,
                                                                                              r.Remarks,
                                                                                              r.SupplierRoomReferenceCode))
                       .ToList()
                   ));
        }
コード例 #4
0
 static Suppliers?GetSupplier(Booking booking, AccommodationBookingSettings?settings)
 => settings switch
 {
     null => (Suppliers)booking.Supplier,