/*
         * 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)));
            }
        }
Esempio n. 5
0
        /*
         * 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)));
            }
        }
Esempio n. 6
0
        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);
        }