/// <summary> /// Builds a RoomTypesWithRatePlanForAvailableRooms for use in testing /// </summary> /// <param name="businessId">business Id to use</param> /// <param name="numberOfRatePlansPerRoomType">number of rate plans to have per room type</param> /// <param name="maxRoomTypeId">number of room types to use</param> /// <param name="numberOfRoomsPerRoomType">number of rooms to use per room type</param> /// <returns>a RoomTypesWithRatePlanForAvailableRooms object</returns> /// <remarks>Weekly availability not set up yet, prices for more than one night not set up yet</remarks> public static RoomTypesWithRatePlanForAvailableRooms Build(long businessId, int numberOfRatePlansPerRoomType = 1, int maxRoomTypeId = 1, int numberOfRoomsPerRoomType = 1) { // loop through the ids, creating rate plans, room types, prices, for rooms. // Set up some lists to use in loops below List<AvailabilityResultRoomType> roomTypes = new List<AvailabilityResultRoomType>(); int currentRoomId = 1; int currentRatePlanId = 1; Random numberGenerator = new Random(); for (int roomTypeId = 1; roomTypeId <= maxRoomTypeId; roomTypeId++) { // new room type, clear room ids and rate plans List<int> roomIds = new List<int>(); List<AvailabilityResultRatePlan> ratePlans = new List<AvailabilityResultRatePlan>(); // add some rooms for this room type for (int arbitraryId = 1; arbitraryId <= numberOfRoomsPerRoomType; arbitraryId++) { roomIds.Add(currentRoomId); currentRoomId++; } // set up rate plans for (int ratePlanId = 1; ratePlanId <= numberOfRatePlansPerRoomType; ratePlanId++) { // Price might need to be a bit better for dates involved decimal priceforRatePlan = new decimal(numberGenerator.Next(10, 200)); AvailabilityResultPrice additionalRatePlanPrice = new AvailabilityResultPrice() { BusinessId = businessId, RatePlanId = currentRatePlanId, RoomTypeId = roomTypeId, TotalPrice = priceforRatePlan, PriceCalculationBreakdowns = new List<PriceCalculationBreakdown>() { new PriceCalculationBreakdown() { NightNumber = 1, Price = priceforRatePlan, RateType = new Model.Core.EnumEntity(){ Code = RateType.BEST_AVAILABLE_RATE } } } }; int maxAdult = ratePlanId + roomTypeId - 1; // so that it increases as we add more rate plans int minAdult = maxAdult - 1 > 0 ? maxAdult - 1 : 1; int maxChild = minAdult - 1; int maxOccupancy = maxChild + maxAdult; AvailabilityResultRatePlan additionalRatePlan = new AvailabilityResultRatePlan() { RoomTypeId = roomTypeId, RatePlanId = currentRatePlanId, IsBaseRatePlan = false, MaxOccupancy = maxOccupancy, MaxAdult = maxAdult, MinAdult = minAdult, MaxChild = maxChild, PriceCandidates = new List<AvailabilityResultPrice>() { additionalRatePlanPrice } }; // so that each room type has different rate plan ids currentRatePlanId++; ratePlans.Add(additionalRatePlan); } roomTypes.Add(new AvailabilityResultRoomType() { BusinessId = businessId, RoomTypeId = roomTypeId, RatePlans = ratePlans, RoomIds = roomIds }); } return new RoomTypesWithRatePlanForAvailableRooms() { RoomTypesWithRatePlans = roomTypes }; }
/// <summary> /// Convert a AvailabilityResultPrice Model to Dto Object /// </summary> /// <param name="price">Price object to convert</param> /// <returns>AvailabilityResultPriceDto</returns> private static AvailabilityResultPriceDto ConvertAvailabilityResultPriceToDto(AvailabilityResultPrice price) { // Convert the main object var availabilityResultPriceDto = new AvailabilityResultPriceDto { BusinessId = price.BusinessId, RoomTypeId = price.RoomTypeId, TotalPrice = price.TotalPrice }; // Convert the sub objects if (price.PriceCalculationBreakdowns != null) { availabilityResultPriceDto.PriceCalculationBreakdowns = price.PriceCalculationBreakdowns.ConvertAll(ConvertPriceCalculationBreakdownToDto); } return availabilityResultPriceDto; }