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