/* * check if: * 1) selected number of rooms does not exceed max number of rooms of the selected room type available in the hotel * 2) selectd number of guests can be accomodated in the selected number of rooms */ protected override ValidationResult IsValid(object value, ValidationContext validationContext) { ModelReservations m = new ModelReservations(); int numberOfRoomsSelected = Convert.ToInt32(value.ToString()); if (numberOfRoomsSelected < 1) { return(new ValidationResult("At least 1 room should be selected")); } int roomTypeSelected = Convert.ToInt32(validationContext.ObjectType.GetProperty("roomType").GetValue(validationContext.ObjectInstance, null).ToString()); int numberOfGuestsSelected = Convert.ToInt32(validationContext.ObjectType.GetProperty("numberOfGuests").GetValue(validationContext.ObjectInstance, null).ToString()); var roomsCount = m.Rooms.Where(room => room.type == roomTypeSelected).Count(); int maxGuests = numberOfRoomsSelected * m.RoomTypes.Where(rt => rt.rtId == roomTypeSelected).First().maxGuests; string roomType = m.RoomTypes.Where(rt => rt.rtId == roomTypeSelected).First().roomType1; if (numberOfRoomsSelected > roomsCount) { return(new ValidationResult(String.Format("There are only {0} {1} rooms available in our hotel", roomsCount, roomType))); } if (numberOfGuestsSelected > maxGuests) { return(new ValidationResult(String.Format("It's impossible to accomodate {0} guests in {1} {2} rooms. Please select more rooms", numberOfGuestsSelected, numberOfRoomsSelected, roomType))); } return(ValidationResult.Success); }
/* * check if number of guests does not exceed hotel capacity for the selected room type */ protected override ValidationResult IsValid(object value, ValidationContext validationContext) { ModelReservations m = new ModelReservations(); int numberOfGuests = Convert.ToInt32(value.ToString()); if (numberOfGuests < 1) { return(new ValidationResult("At least 1 guest should be selected")); } int roomTypeSelected = Convert.ToInt32(validationContext.ObjectType.GetProperty("roomType").GetValue(validationContext.ObjectInstance, null).ToString()); var rooms = from r in m.Rooms join rt in m.RoomTypes on r.type equals rt.rtId where rt.rtId == roomTypeSelected select new { maxGuests = rt.maxGuests }; int maxGuests = rooms.Sum(r => r.maxGuests); if (numberOfGuests <= maxGuests) { return(ValidationResult.Success); } else { return(new ValidationResult(String.Format("Sorry, our hotel cannot accomodate {0} guests in {1} rooms" + ". We can accomodate only up to {2} guests in the seleted room types", numberOfGuests, m.RoomTypes.Where(rt => rt.rtId == roomTypeSelected).First().roomType1, maxGuests))); } }
public static List <int> GetAvailableRooms(ModelReservations db, DateTime checkin, DateTime checkout, int roomType, int reservationId) { //select rooms that are not available var reservedRooms = from rsv in db.Reservations join rr in db.ReservedRooms on rsv.reservationId equals rr.reservationId where rsv.checkin <= checkout && rsv.checkout >= checkin && rsv.roomType == roomType && rsv.reservationId != reservationId select new { rr.roomId }; //select rooms that are available return(db.Rooms.Where(room => room.type == roomType) .Select(room => room.roomId).Except(reservedRooms.Select(rr => rr.roomId)).ToList()); }
/* * get a Postal Code pattern for selected country from DB and check the zip/postal code against the pattern */ protected override ValidationResult IsValid(object value, ValidationContext validationContext) { ModelReservations m = new ModelReservations(); string zipPostal = value.ToString(); int countryId = Convert.ToInt32(validationContext.ObjectType.GetProperty("country").GetValue(validationContext.ObjectInstance, null).ToString()); var selectedCountry = m.Countries.Where(c => c.countryId == countryId).First(); if (Regex.IsMatch(zipPostal, selectedCountry.postalPattern)) { return(ValidationResult.Success); } else { return(new ValidationResult(String.Format("Postal Code is invalid. Please make sure that you entered a correct zip/postal code for {0}", selectedCountry.country1))); } }
/* * get a Regex pattern for selected credit card type from DB and check the entered credit card number against the pattern */ protected override ValidationResult IsValid(object value, ValidationContext validationContext) { ModelReservations m = new ModelReservations(); string creditCardNumber = value.ToString(); int cctId = Convert.ToInt32(validationContext.ObjectType.GetProperty("CreditCardType").GetValue(validationContext.ObjectInstance, null).ToString()); var selectedCreditCardType = m.CreditCardTypes.Where(cct => cct.cctId == cctId).First(); string cardNumberPattern = selectedCreditCardType.cardNumberPattern; if (Regex.IsMatch(creditCardNumber, cardNumberPattern)) { return(ValidationResult.Success); } else { return(new ValidationResult(String.Format("Credit card number is invalid. Please make sure that you entered a valid {0} card number", selectedCreditCardType.type))); } }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { ModelReservations m = new ModelReservations(); int regionId = Convert.ToInt32(value.ToString()); int countryId = Convert.ToInt32(validationContext.ObjectType.GetProperty("country").GetValue(validationContext.ObjectInstance, null).ToString()); string selectedRegion = m.Regions.Where(r => r.regionId == regionId).First().region1; string selectedCountry = m.Countries.Where(c => c.countryId == countryId).First().country1; if (m.Regions.Where(e => e.regionId == regionId).First().country == countryId) { return(ValidationResult.Success); } else { return(new ValidationResult(String.Format("Region {0} is not in {1}. Please select a valid Country and Region", selectedRegion, selectedCountry))); } }
/* * check if: * 1) checkout date is after checkin date * 2) there are rooms available on that dates */ protected override ValidationResult IsValid(object value, ValidationContext validationContext) { ModelReservations m = new ModelReservations(); int numberOfRoomsSelected = Convert.ToInt32(validationContext.ObjectType.GetProperty("numberOfRooms").GetValue(validationContext.ObjectInstance, null).ToString()); int roomTypeSelected = Convert.ToInt32(validationContext.ObjectType.GetProperty("roomType").GetValue(validationContext.ObjectInstance, null).ToString()); string roomType = m.RoomTypes.Where(rt => rt.rtId == roomTypeSelected).First().roomType1; DateTime checkinSelected = (DateTime)validationContext.ObjectType.GetProperty("checkin").GetValue(validationContext.ObjectInstance, null); DateTime checkoutSelected = (DateTime)validationContext.ObjectType.GetProperty("checkout").GetValue(validationContext.ObjectInstance, null); int reservationId = (int)validationContext.ObjectType.GetProperty("reservationId").GetValue(validationContext.ObjectInstance, null); //if (checkinSelected < DateTime.Now || checkoutSelected < DateTime.Now) //{ // return new ValidationResult("Check in and check out dates cannot be in the past"); //} if (checkinSelected > checkoutSelected) { return(new ValidationResult("Checkout date should be after checkin date")); } int roomsAvailableCount = GetAvailableRooms(m, checkinSelected, checkoutSelected, roomTypeSelected, reservationId).Count; if (roomsAvailableCount == 0) { return(new ValidationResult(String.Format("There are no {0} rooms available for these dates", roomType))); } if (roomsAvailableCount < numberOfRoomsSelected) { return(new ValidationResult(String.Format("There are only {0} {1} rooms available for these dates", roomsAvailableCount, roomType))); } return(ValidationResult.Success); }