/// <summary> /// Map the basic fields for the Room table to the Room model object /// </summary> /// <param name="record">The SqlDataReader with the executed query result</param> /// <param name="prefix">a prefix used to identify fields for the Room model in the resultset if required</param> /// <returns>An instance of Model.Room.Room</returns> internal static Model.Room.Room MapRecord(IDataRecord record, string prefix = "") { var room = new Model.Room.Room { Id = DbHelper.ConvertValue<int>(record[prefix + Parameters.Id]), BusinessId = DbHelper.ConvertValue<long>(record[prefix + Parameters.BusinessId]), Name = DbHelper.ConvertValue<string>(record[prefix + Parameters.Name]), RoomStatus = EnumEntityMapper.MapRecord<RoomStatus>(record, Parameters.RoomStatus.ToString()), IsAvailableOnline = DbHelper.ConvertValue<bool>(record[prefix + Parameters.IsAvailableOnline]), SellingPriority = DbHelper.ConvertValue<int?>(record[prefix + Parameters.SellingPriority]), DisplayOrder = DbHelper.ConvertValue<int?>(record[prefix + Parameters.DisplayOrder]), IsCombined = DbHelper.ConvertValue<bool>(record[prefix + Parameters.IsCombined]), RoomTypeId = DbHelper.ConvertValue<int>(record[prefix + Parameters.RoomTypeId]), RoomStatusCode = DbHelper.ConvertValue<string>(record[prefix + Parameters.RoomStatusCode]) }; return AuditFieldsHelper.MapRecord(room, record, prefix); }
/// <summary> /// Create Room with the name, type id and business id /// </summary> /// <param name="roomName">Room Name</param> /// <param name="roomTypeId">Room Type Id</param> /// <param name="businessId">Business Id</param> /// <returns>Room</returns> public int CreateRoom(string roomName, int roomTypeId, long businessId) { if (string.IsNullOrEmpty(roomName)) { throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30086, "RoomManager.CreateRoom", additionalDescriptionParameters: (new object[] { businessId }))); } Model.Room.Room existingRoom = roomDao.GetByName(roomName, businessId); if (existingRoom != null) { // check status, if in delete status just modify to active state if (existingRoom.RoomStatusCode == RoomStatusCodes.DELETED) { existingRoom.RoomTypeId = roomTypeId; existingRoom.RoomStatusCode = RoomStatusCodes.ACTIVE; Modify(existingRoom); return existingRoom.Id; } // Otherwise throw validation exception throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30085, "RoomManager.CreateRoom", additionalDescriptionParameters: (new object[] { businessId }))); } int displayOrder = roomDao.GetNextDisplayOrder(businessId); int sellingPriority = roomDao.GetNextSellingPriority(businessId); var room = new Model.Room.Room { Name = roomName, BusinessId = businessId, IsAvailableOnline = true, IsCombined = false, RoomStatusCode = RoomStatusCodes.ACTIVE, RoomTypeId = roomTypeId, SellingPriority = sellingPriority, DisplayOrder = displayOrder, }; using (var businessTransaction = new BusinessTransaction()) { roomDao.Create(room); businessTransaction.Commit(); } eventTrackingManager.CreateBusinessEventAsync(businessId, BusinessEventTypesEnum.RoomAdded, room.Id.ToString()); return room.Id; }
public void CreateRoomOfDeletedRoomUpdatesStatusAndRoomType() { // Arrange const string EXISTING_ROOM_NAME = "Room A"; const int BUSINESS_ID = 1003; const int ROOM_TYPE_ID = 234; const int UPDATED_ROOM_TYPE_ID = 345; const int ROOM_ID = 5; var roomManager = new RoomManager(); var mockRoom = new Model.Room.Room { Id = ROOM_ID, BusinessId = BUSINESS_ID, RoomTypeId = ROOM_TYPE_ID, Name = EXISTING_ROOM_NAME, RoomStatusCode = RoomStatusCodes.DELETED }; var roomDao = MockRepository.GenerateStub<IRoomDao>(); roomDao.Stub(r => r.GetByName(EXISTING_ROOM_NAME, BUSINESS_ID)).Return(mockRoom).Repeat.Twice(); roomDao.Stub(r => r.Modify(Arg<Model.Room.Room>.Matches(rm => rm.Id == ROOM_ID && rm.BusinessId == BUSINESS_ID && rm.RoomTypeId == UPDATED_ROOM_TYPE_ID && rm.Name == EXISTING_ROOM_NAME))).Return(true).Repeat.Once(); roomManager.RoomDao = roomDao; var bookingManagerMock = MockRepository.GenerateMock<IBookingManager>(); bookingManagerMock.Expect(bm => bm.GetByRoom(Arg<int>.Is.Equal(ROOM_ID), Arg<string>.Is.Anything)).Return(new List<Booking>()).Repeat.Once(); roomManager.BookingManager = bookingManagerMock; var businessEventDao = MockRepository.GenerateStub<IEventTrackingManager>(); businessEventDao.Expect(b => b.CreateBusinessEventAsync(Arg<long>.Is.Equal(BUSINESS_ID), Arg<BusinessEventTypesEnum>.Is.Equal(BusinessEventTypesEnum.RoomModified), Arg<string>.Is.Anything, Arg<string>.Is.Anything)); roomManager.EventTrackingManager = businessEventDao; // Act int createdRoomId = roomManager.CreateRoom(EXISTING_ROOM_NAME, UPDATED_ROOM_TYPE_ID, BUSINESS_ID); // Assert Assert.AreEqual(ROOM_ID, createdRoomId, "Created room id of deleted room should have been returned"); businessEventDao.VerifyAllExpectations(); roomDao.VerifyAllExpectations(); bookingManagerMock.VerifyAllExpectations(); }