Exemplo n.º 1
0
        /// <summary>
        /// Creates a new Booking object (containing a new Guest object) using the data supplied in a CreateBookingDto object.
        /// </summary>
        /// <param name="saveMobileBookingDto">CreateBookingDto</param>
        /// <param name="business">Business</param>
        /// <returns>Booking</returns>
        private Booking CreateBookingFromCreateBookingDto(SaveMobileBookingDto saveMobileBookingDto, Model.Business.Business business)
        {
            var booking = Mapper.Map<Booking>(saveMobileBookingDto);
            var room = roomManager.GetByKey(saveMobileBookingDto.RoomId, business.Id);
            if (room == null)
            {
                throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30016, GetMethodName(), additionalDescriptionParameters: new object[] { saveMobileBookingDto.RoomId }));
            }

            booking.BusinessId = business.Id;
            booking.Guest.BusinessId = business.Id;
            booking.Guest.DefaultCultureCode = business.DefaultCultureCode;
            booking.RoomTypeId = room.RoomTypeId;

            return booking;
        }
Exemplo n.º 2
0
        public CreateBookingResponseDto CreateBooking(long propertyId, SaveMobileBookingDto saveMobileBookingDto)
        {
            Log.LogDebug("CreateBooking" + Environment.NewLine + "propertyId: " + propertyId, saveMobileBookingDto);

            var loggedInBusiness = GetBusinessId();

            CheckAndGetBusiness(propertyId.ToString(CultureInfo.InvariantCulture), GetMethodName());

            if (propertyId != loggedInBusiness)
            {
                throw new AccessDeniedException(ErrorFactory.CreateAndLogError(Errors.SRVEX30000, GetMethodName(),
                                                             additionalDescriptionParameters:
                                                                 new object[] { propertyId, loggedInBusiness },
                                                                 arguments: new object[] { propertyId, loggedInBusiness }));
            }

            var business = businessManager.GetBusiness(loggedInBusiness);

            var booking = CreateBookingFromCreateBookingDto(saveMobileBookingDto, business);

            if (saveMobileBookingDto.Guest.PhoneNumber != null)
            {
                booking.Guest.GuestPhones.Add(new GuestPhone { Number = saveMobileBookingDto.Guest.PhoneNumber, PhoneTypeCode = PhoneTypeEnum.Contact1 });
            }

            var order = new Order
                            {
                                CustomerCurrencyCode = business.WorkingCurrencyCode,
                                IntegrationType = null,
                                OfflineSourceEnum = OfflineSourceEnum.Mobile,
                                OrderSourceCode = SourceType.Pms.GetCode(),
                                CustomerCultureCode = business.DefaultCultureCode,
                                Bookings = new List<Booking>
                                  {
                                      booking
                                  }                                
                            };

            orderManager.CreateOrder(business.Id, order);

            return new CreateBookingResponseDto
            {
                BookingReference = booking.BookingReferenceNumber
            };
        }
Exemplo n.º 3
0
        /// <summary>
        /// Copies updated values from a ModifyBookingDto into a Booking (and attached Guest)
        /// </summary>
        /// <param name="modifyBookingDto">ModifyBookingDto (source)</param>
        /// <param name="booking">Booking (target)</param>
        private void UpdateBookingFromModifyBookingDto(SaveMobileBookingDto modifyBookingDto, Booking booking)
        {
            var room = roomManager.GetByKey(modifyBookingDto.RoomId, booking.BusinessId);
            if (room == null)
            {
                throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30016, GetMethodName(), additionalDescriptionParameters: new object[]{ modifyBookingDto.RoomId}));
            }

            //Necessary Guest fields
            booking.Guest.Surname = modifyBookingDto.Guest.Surname;
            booking.Guest.IsConfirmationEmailToBeSent = modifyBookingDto.Guest.SendConfirmation;

            //Optional Guest Fields
            booking.Guest.TitleId = modifyBookingDto.Guest.Title; //Null is an acceptable Title Id value
            if (modifyBookingDto.Guest.Forename != null)
            {
                booking.Guest.Forename = modifyBookingDto.Guest.Forename;
            }
            if (modifyBookingDto.Guest.PhoneNumber != null)
            {
                booking.Guest.GuestPhones.RemoveAll(x => x.PhoneTypeCode == PhoneTypeEnum.Contact1);
                booking.Guest.GuestPhones.Add(new GuestPhone
                {
                    Number = modifyBookingDto.Guest.PhoneNumber,
                    PhoneTypeCode = PhoneTypeEnum.Contact1
                });
            }
            if (modifyBookingDto.Guest.Email != null)
            {
                booking.Guest.Email = modifyBookingDto.Guest.Email;
            }

            //If cost has been manually overriden from the UI (non OTA) or booking is OTA and RoomType or RatePlan is different (which uses previous booking price)
            if (modifyBookingDto.IsCostOverridden || booking.Order.IsOTA && (booking.RatePlanId != modifyBookingDto.RatePlanId || booking.RoomTypeId != room.RoomTypeId))
            {
                booking.RateType.Code = Model.Pricing.RateType.MANUAL;
            }
            booking.StartDate = modifyBookingDto.StartDate.Date;
            booking.EndDate = modifyBookingDto.EndDate.Date;
            booking.RoomId = modifyBookingDto.RoomId;
            booking.RatePlanId = modifyBookingDto.RatePlanId;
            booking.Cost = modifyBookingDto.Cost;
            booking.NumberOfAdults = modifyBookingDto.NumberOfAdults;
            booking.NumberOfChildren = modifyBookingDto.NumberOfChildren;
            booking.RoomTypeId = room.RoomTypeId;
            booking.EstimatedTimeOfArrival = booking.StartDate.Add(modifyBookingDto.EstimatedTimeOfArrival);
        }
Exemplo n.º 4
0
        public void ModifyBooking(string bookingId, SaveMobileBookingDto saveMobileBookingDto)
        {
            Log.LogDebug("ModifyBooking" + Environment.NewLine + "bookingId: " + bookingId, saveMobileBookingDto);

            var booking = PrepareBookingToModify(bookingId);

            if (saveMobileBookingDto.StartDate < DateTime.Today && saveMobileBookingDto.StartDate < booking.StartDate.Date)
            {
                throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30119, GetMethodName(),
                                                                             additionalDescriptionParameters:
                                                                                 new object[]
                                                                                 {
                                                                                     saveMobileBookingDto.StartDate.ToShortDateString(),
                                                                                     booking.StartDate.ToShortDateString()
                                                                                 }));
            }

            UpdateBookingFromModifyBookingDto(saveMobileBookingDto, booking);

            //Save the updated booking
            var result = bookingManager.ModifyBookingAndGuest(false, booking);

            if (result == null)
            {
                throw new BusinessException(ErrorFactory.CreateAndLogError(Errors.SRVEX30117, GetMethodName(),
                                                                           additionalDescriptionParameters:
                                                                               new object[] { bookingId },
                                                                           descriptionParameters: new object[] { bookingId }));
            }
        }