Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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}");
        }
Exemplo n.º 4
0
        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.");
            }
        }