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); // } }
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);
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."); } }
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)); }
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)); }