public AccommodationBookingDetails(string referenceCode, string clientReferenceCode, string agentReference, BookingStatuses status, int numberOfNights,
                                    DateTime checkInDate, DateTime checkOutDate, AccommodationLocation location, ContactInfo contactInfo,
                                    string accommodationId, string accommodationName, AccommodationInfo accommodationInfo, DateTime?deadlineDate,
                                    List <BookedRoom> roomDetails, int numberOfPassengers, List <CancellationPolicy> cancellationPolicies, DateTime created,
                                    string propertyOwnerConfirmationCode, bool isAdvancePurchaseRate)
 {
     ReferenceCode       = referenceCode;
     ClientReferenceCode = clientReferenceCode;
     AgentReference      = agentReference;
     Status                        = status;
     NumberOfNights                = numberOfNights;
     CheckInDate                   = checkInDate;
     CheckOutDate                  = checkOutDate;
     Location                      = location;
     ContactInfo                   = contactInfo;
     AccommodationId               = accommodationId;
     AccommodationName             = accommodationName;
     AccommodationInfo             = accommodationInfo;
     DeadlineDate                  = deadlineDate;
     NumberOfPassengers            = numberOfPassengers;
     CancellationPolicies          = cancellationPolicies;
     Created                       = created;
     RoomDetails                   = roomDetails ?? new List <BookedRoom>(0);
     PropertyOwnerConfirmationCode = propertyOwnerConfirmationCode;
     IsAdvancePurchaseRate         = isAdvancePurchaseRate;
 }
    private void BindBookingStatuses()
    {
        DataTable table = new BookingStatuses().SelectAll();

        drpBookingStatus.DataSource     = table;
        drpBookingStatus.DataTextField  = table.Columns["BookingStatus_EN"].ToString();
        drpBookingStatus.DataValueField = table.Columns["BookingStatus_ID"].ToString();
        drpBookingStatus.DataBind();
    }
Exemple #3
0
 public BookingOrder(string id, BookingStatuses status, string referenceCode, DateTime checkInDate, DateTime checkOutDate, List <RateDetails> rateDetails, Models.Responses.Bookings.PaymentDetails paymentDetails, int accommodationId, string accommodationName)
 {
     Id                = id;
     Status            = status;
     ReferenceCode     = referenceCode;
     CheckInDate       = checkInDate;
     CheckOutDate      = checkOutDate;
     RateDetails       = rateDetails;
     PaymentDetails    = paymentDetails;
     AccommodationId   = accommodationId;
     AccommodationName = accommodationName;
 }
Exemple #4
0
 public SlimBooking(string clientReferenceCode, string referenceCode, DateTime checkInDate, DateTime checkOutDate,
                    string accommodationId, MoneyAmount totalPrice, bool isAdvancePurchaseRate, BookingStatuses status, string mainPassengerName)
 {
     ClientReferenceCode   = clientReferenceCode;
     ReferenceCode         = referenceCode;
     CheckInDate           = checkInDate;
     CheckOutDate          = checkOutDate;
     AccommodationId       = accommodationId;
     TotalPrice            = totalPrice;
     IsAdvancePurchaseRate = isAdvancePurchaseRate;
     Status            = status;
     MainPassengerName = mainPassengerName;
 }
        public async Task <Result> ChangeStatus(Booking booking, BookingStatuses status, DateTime date, ApiCaller apiCaller, BookingChangeReason reason)
        {
            if (booking.Status == status)
            {
                return(Result.Success());
            }

            await SetStatus(booking, status);

            var message = new BookingStatusChangeInfo
            {
                BookingId          = booking.Id,
                ReferenceCode      = booking.ReferenceCode,
                Status             = EnumFormatters.FromDescription(status),
                ChangeTime         = _dateTimeProvider.UtcNow(),
                AccommodationName  = booking.AccommodationName,
                AccommodationPhoto = booking.AccommodationInfo?.Photo,
                CheckInDate        = booking.CheckInDate.DateTime,
                CheckOutDate       = booking.CheckOutDate.DateTime
            };
            await _notificationsService.Send(apiCaller,
                                             JsonDocument.Parse(JsonSerializer.SerializeToUtf8Bytes(message, new JsonSerializerOptions(JsonSerializerDefaults.Web))),
                                             Notifications.Enums.NotificationTypes.BookingStatusChanged);

            // Temporary hot-fix for notifying admins about bookings statuses changed to "Pending" or "Waiting for response"
            // TODO: remove when we have appropriate admin panel booking monitoring
            if (status == BookingStatuses.Pending || status == BookingStatuses.WaitingForResponse)
            {
                var(isSuccess, _, bookingInfo, _) = await GetBookingInfo(booking.ReferenceCode);

                if (isSuccess)
                {
                    await _bookingNotificationService.NotifyAdminsStatusChanged(bookingInfo);
                }
            }

            await _bookingChangeLogService.Write(booking, status, date, apiCaller, reason);

            return(status switch
            {
                BookingStatuses.Confirmed => await ProcessConfirmation(booking, date),
                BookingStatuses.Cancelled => await ProcessCancellation(booking, date, apiCaller),
                BookingStatuses.Rejected => await ProcessDiscarding(booking, apiCaller),
                BookingStatuses.Invalid => await ProcessDiscarding(booking, apiCaller),
                BookingStatuses.Discarded => await ProcessDiscarding(booking, apiCaller),
                BookingStatuses.ManualCorrectionNeeded => await ProcessManualCorrectionNeeding(booking, apiCaller),
                BookingStatuses.PendingCancellation => Result.Success(),
                BookingStatuses.WaitingForResponse => Result.Success(),
                BookingStatuses.Pending => Result.Success(),
                _ => throw new ArgumentOutOfRangeException(nameof(status), status, "Invalid status value")
            });
        private BookingWebhookData CreateWebhookData(string bookingReferenceCode, BookingStatuses bookingStatus)
        {
            var timestamp = CalculateTimestamp();

            return(new BookingWebhookData
            {
                Data = new BookingStatusData
                {
                    Status = bookingStatus,
                    ReferenceCode = bookingReferenceCode
                },
                Signature = CalculateSignature(timestamp),
                Timestamp = timestamp
            });
        }
Exemple #7
0
 public Booking(string clientReferenceCode, string referenceCode, DateTime created, DateTime checkInDate, DateTime checkOutDate, MoneyAmount totalPrice,
                BookingStatuses status, List <BookedRoom> rooms, string accommodationId, List <CancellationPolicy> cancellationPolicies, DateTime?cancelled,
                bool isPackage)
 {
     ClientReferenceCode = clientReferenceCode;
     ReferenceCode       = referenceCode;
     Created             = created;
     CheckInDate         = checkInDate;
     CheckOutDate        = checkOutDate;
     TotalPrice          = totalPrice;
     Status               = status;
     Rooms                = rooms;
     AccommodationId      = accommodationId;
     CancellationPolicies = cancellationPolicies;
     Cancelled            = cancelled;
     IsPackage            = isPackage;
 }
 public AccommodationBookingDetails(string referenceCode, string agentReference, BookingStatuses status, int numberOfNights,
                                    DateTime checkInDate, DateTime checkOutDate, AccommodationLocation location, ContactInfo contactInfo,
                                    string accommodationId, string accommodationName, DateTime?deadlineDate,
                                    List <BookedRoom> roomDetails, int numberOfPassengers)
 {
     ReferenceCode      = referenceCode;
     AgentReference     = agentReference;
     Status             = status;
     NumberOfNights     = numberOfNights;
     CheckInDate        = checkInDate;
     CheckOutDate       = checkOutDate;
     Location           = location;
     ContactInfo        = contactInfo;
     AccommodationId    = accommodationId;
     AccommodationName  = accommodationName;
     DeadlineDate       = deadlineDate;
     NumberOfPassengers = numberOfPassengers;
     RoomDetails        = roomDetails ?? new List <BookedRoom>(0);
 }
Exemple #9
0
        private BookingModel CreateBooking(BookingStatuses bookingStatus, bool addOrderDocuments)
        {
            var bookingModel = new BookingModel()
            {
                Id = 12345,
                BookingReference       = "RR982-720-1028J",
                BookingStatus          = bookingStatus,
                BookingType            = BookingTypes.StandardOrderVisit,
                AdditionalRequirements = "Hobbit size seat",
                CreatedDate            = DateTime.Now.Date,
                CompleteByDate         = DateTime.Now.Date.AddDays(10),
                VisitStartDate         = DateTime.Now.Date.AddDays(20),
                BookingTypeDescription = "Standard Booking",
                FirstName    = "Bilbo",
                LastName     = "Baggins",
                Email        = "*****@*****.**",
                Phone        = "+44(0)123 567 789",
                ReaderTicket = 9497920,
                SeatNumber   = "14H"
            };

            if (addOrderDocuments)
            {
                bookingModel.OrderDocuments = new List <OrderDocumentModel>();

                bookingModel.OrderDocuments.Add(new OrderDocumentModel {
                    DocumentReference = "BT 51/6/9730", Description = "Pattern of Lace Curtain Design.", IsReserve = false
                });
                bookingModel.OrderDocuments.Add(new OrderDocumentModel {
                    DocumentReference = "AIR 37/1171", Description = "SHAEF (MAIN AND REAR): Air signals, Transport Command.", IsReserve = false
                });
                bookingModel.OrderDocuments.Add(new OrderDocumentModel {
                    DocumentReference = "C 13/953/44", Description = "Plaintiffs: Thomas Jeffries and another. Defendants: James Price Dale and George Dale.", IsReserve = false
                });

                bookingModel.OrderDocuments.Add(new OrderDocumentModel {
                    DocumentReference = "C 13/953/30", Description = "Delincourt v Delincourt.", IsReserve = true
                });
            }

            return(bookingModel);
        }
Exemple #10
0
        public async Task Write(Booking booking, BookingStatuses status, DateTime date, ApiCaller apiCaller, BookingChangeReason reason)
        {
            var bookingStatusHistoryEntry = new BookingStatusHistoryEntry
            {
                BookingId     = booking.Id,
                UserId        = apiCaller.Id,
                ApiCallerType = apiCaller.Type,
                CreatedAt     = date,
                Status        = status,
                Initiator     = GetInitiatorType(apiCaller),
                Source        = reason.Source,
                Event         = reason.Event,
                Reason        = reason.Reason
            };

            if (apiCaller.Type == ApiCallerTypes.Agent)
            {
                bookingStatusHistoryEntry.AgencyId = booking.AgencyId;
            }

            var entry = _context.BookingStatusHistory.Add(bookingStatusHistoryEntry);
            await _context.SaveChangesAsync();

            _context.Detach(entry.Entity);
 private Task <Common.Models.Bookings.BookingOrder> SetStatus(Common.Models.Bookings.BookingOrder bookingOrder, BookingStatuses status)
 {
     bookingOrder.Modified = _dateTimeProvider.UtcNow();
     bookingOrder.Status   = status;
     return(Update(bookingOrder));
 }
 private EdoContracts.Accommodations.Enums.BookingStatusCodes GetStatus(BookingStatuses status) => status switch
 {
Exemple #13
0
        public async Task When_booking_has_allowed_status_generation_invoice_should_succeed(BookingStatuses status)
        {
            var agentContext            = AgentInfoFactory.GetByAgentId(1);
            var bookingDocumentsService = CreateBookingDocumentsService(new Booking
            {
                Id      = 1,
                AgentId = 1,
                Status  = status
            }, true);

            var(isSuccess, _) = await bookingDocumentsService.GetActualInvoice(1, agentContext.AgentId);

            Assert.True(isSuccess);
        }
        public Task <Result> Send(string bookingReferenceCode, BookingStatuses bookingStatus)
        {
            var webhookData = CreateWebhookData(bookingReferenceCode, bookingStatus);

            return(_bookingWebhookClient.Send(webhookData));
        }
Exemple #15
0
        public async Task Discarding_should_discard_from_supplier_and_return_the_money(BookingStatuses status)
        {
            var service = CreateBookingRecordsUpdaterService();

            await service.ChangeStatus(Bookings.First(), status, DateTime.UtcNow, ApiCaller, ChangeReason);

            _supplierOrderServiceMock.Verify(x => x.Discard(It.IsAny <string>()));
            _bookingMoneyReturnServiceMock.Verify(x => x.ReturnMoney(It.IsAny <Booking>(), It.IsAny <DateTime>(), It.IsAny <ApiCaller>()));
        }