Beispiel #1
0
        public async Task ProcessConfirmation(Data.Booking.Booking booking, EdoContracts.Accommodations.Booking bookingResponse)
        {
            await GetBookingInfo(booking.ReferenceCode, booking.LanguageCode)
            .Tap(Confirm)
            .Tap(NotifyBookingFinalization)
            .Bind(SendInvoice)
            .OnFailure(WriteFailureLog);

            Task <Result <AccommodationBookingInfo> > GetBookingInfo(string referenceCode, string languageCode) => _bookingRecordsManager
            .GetAccommodationBookingInfo(referenceCode, languageCode);


            Task Confirm(AccommodationBookingInfo bookingInfo) => _bookingRecordsManager.Confirm(bookingResponse, booking);


            Task NotifyBookingFinalization(AccommodationBookingInfo bookingInfo) => _bookingMailingService
            .NotifyBookingFinalized(bookingInfo);


            Task <Result> SendInvoice(AccommodationBookingInfo bookingInfo) => _bookingMailingService
            .SendInvoice(bookingInfo.BookingId, bookingInfo.AgentInformation.AgentEmail, booking.AgentId);


            void WriteFailureLog(string error) => _logger
            .LogBookingConfirmationFailure($"Booking '{booking.ReferenceCode} confirmation failed: '{error}");

            // TODO: Revert supplier order placing NIJO-1015
            // await SaveSupplierOrder();
            //
            // async Task SaveSupplierOrder()
            // {
            //     var supplierPrice = bookingResponse.RoomContractSet.Price.NetTotal;
            //     await _supplierOrderService.Add(bookingResponse.ReferenceCode, ServiceTypes.HTL, supplierPrice);
            // }
        }
Beispiel #2
0
        public async Task When_success_booking_should_be_passed_to_process_response()
        {
            InitializeMocks();
            var service       = CreateBookingRequestExecutor();
            var referenceCode = "RefCode12";
            var booking       = new Booking {
                ReferenceCode = referenceCode
            };

            EdoContracts.Accommodations.Booking bookingPassedToProcessResponse = default;
            SaveResponseProcessorPassedParameter();
            Utility.SetupConnectorBookSuccess(_supplierConnectorMock);

            await service.Execute(booking, default, default);
Beispiel #3
0
        public async Task ProcessBookingNotFound(Data.Booking.Booking booking, EdoContracts.Accommodations.Booking bookingResponse)
        {
            if (_dateTimeProvider.UtcNow() < booking.Created + BookingCheckTimeout)
            {
                _logger.LogBookingResponseProcessSuccess(
                    $"The booking response with the reference code '{bookingResponse.ReferenceCode}' has not been processed due to '{BookingStatusCodes.NotFound}' status.");
            }
            else
            {
                await _bookingRecordsManager.SetNeedsManualCorrectionStatus(booking);

                _logger.LogBookingResponseProcessSuccess(
                    $"The booking response with the reference code '{bookingResponse.ReferenceCode}' set as needed manual processing.");
            }
        }
Beispiel #4
0
        private async Task <Result <EdoContracts.Accommodations.Booking, ProblemDetails> > GenerateInvoice(EdoContracts.Accommodations.Booking details, string referenceCode, AgentContext agent)
        {
            var(_, isInvoiceFailure, invoiceError) = await _documentsService.GenerateInvoice(referenceCode);

            if (isInvoiceFailure)
            {
                return(ProblemDetailsBuilder.Fail <EdoContracts.Accommodations.Booking>(invoiceError));
            }

            return(Result.Success <EdoContracts.Accommodations.Booking, ProblemDetails>(details));
        }
Beispiel #5
0
        private async Task <Result <EdoContracts.Accommodations.Booking, ProblemDetails> > SendReceipt(EdoContracts.Accommodations.Booking details, Data.Booking.Booking booking, AgentContext agentContext)
        {
            var(_, isReceiptFailure, receiptInfo, receiptError) = await _documentsService.GenerateReceipt(booking.Id, agentContext.AgentId);

            if (isReceiptFailure)
            {
                return(ProblemDetailsBuilder.Fail <EdoContracts.Accommodations.Booking>(receiptError));
            }

            await _notificationService.SendReceiptToCustomer(receiptInfo, agentContext.Email);

            return(Result.Success <EdoContracts.Accommodations.Booking, ProblemDetails>(details));
        }