private Task Add(int bookingId, int agentId, Booking newBookingDetails) { _edoContext.BookingAuditLog.Add(new BookingAuditLogEntry { BookingId = bookingId, AgentId = agentId, BookingDetails = JsonConvert.SerializeObject(newBookingDetails), }); return(_edoContext.SaveChangesAsync()); }
/// <summary> /// Adds new booking details data to the log table /// </summary> /// <param name="newBookingDetails">Booking details that will be written to the booking table</param> /// <param name="currentBookingData">Current booking data from the booking table where BookingDetails value will be rewritten by the newBookingDetails value</param> /// <returns></returns> public async Task Add(Booking newBookingDetails, Data.Bookings.Booking currentBookingData = null) { if (currentBookingData is null) { currentBookingData = await _edoContext.Bookings.SingleOrDefaultAsync(i => i.ReferenceCode.Equals(newBookingDetails.ReferenceCode)); } await Add(currentBookingData.Id, currentBookingData.AgentId, newBookingDetails); }
public async Task ProcessResponse(Booking bookingResponse, ApiCaller apiCaller, BookingChangeEvents eventType) { var(_, isFailure, booking, error) = await _bookingRecordManager.Get(bookingResponse.ReferenceCode); if (isFailure) { _logger.LogBookingResponseProcessFailure(error); return; } _logger.LogBookingResponseProcessStarted(bookingResponse.ReferenceCode, booking.Status); await _bookingAuditLogService.Add(bookingResponse, booking); if (bookingResponse.Status == BookingStatusCodes.NotFound) { await ProcessBookingNotFound(booking, bookingResponse, eventType); return; } await _recordsUpdater.UpdateWithSupplierData(booking, bookingResponse.SupplierReferenceCode, bookingResponse.BookingUpdateMode, bookingResponse.Rooms); if (bookingResponse.Status.ToInternalStatus() == booking.Status) { _logger.LogBookingResponseProcessSuccess(bookingResponse.ReferenceCode, "No status changes applied"); return; } var changeReason = new BookingChangeReason { Event = eventType, Source = BookingChangeSources.Supplier }; var(_, isUpdateFailure, updateError) = await _recordsUpdater.ChangeStatus(booking, bookingResponse.Status.ToInternalStatus(), _dateTimeProvider.UtcNow(), apiCaller, changeReason); if (isUpdateFailure) { _logger.LogBookingResponseProcessFailure(updateError); return; } _logger.LogBookingResponseProcessSuccess(bookingResponse.ReferenceCode, $"New status: {bookingResponse.Status}"); }
private async Task ProcessBookingNotFound(Data.Bookings.Booking booking, Booking bookingResponse, BookingChangeEvents eventType) { // If booking was confirmed or if (_dateTimeProvider.UtcNow() < booking.Created + BookingCheckTimeout && booking.Status != BookingStatuses.Confirmed) { _logger.LogBookingResponseProcessSuccess(bookingResponse.ReferenceCode, $"Has not been processed due to '{BookingStatusCodes.NotFound}' status."); } else { await _recordsUpdater.ChangeStatus(booking, BookingStatuses.ManualCorrectionNeeded, _dateTimeProvider.UtcNow(), ApiCaller.InternalServiceAccount, new Data.Bookings.BookingChangeReason { Source = BookingChangeSources.System, Event = eventType }); _logger.LogBookingResponseProcessSuccess(bookingResponse.ReferenceCode, "Set as needed manual processing."); } }