Пример #1
0
        public ActionResult Edit(ReservationsInputModel reservation)
        {
            bool isValidReservation = this.reservationManager.ValidateReservation(ModelState, reservation);

            if (ModelState.IsValid && isValidReservation)
            {
                var dbReservation = this.reservations.Find(reservation.ID);
                if (dbReservation != null)
                {
                    dbReservation.FirstName     = reservation.FirstName;
                    dbReservation.LastName      = reservation.LastName;
                    dbReservation.Email         = reservation.Email;
                    dbReservation.Phone         = reservation.Phone;
                    dbReservation.From          = reservation.From;
                    dbReservation.To            = reservation.To;
                    dbReservation.PaymentMethod = reservation.PaymentMethod;
                    dbReservation.Status        = reservation.Status;

                    var updatedPricing = this.reservationManager.GetPricing(dbReservation.From, dbReservation.To);
                    dbReservation.Capparo   = updatedPricing.Capparo;
                    dbReservation.FullPrice = dbReservation.FullPrice;

                    this.reservations.Update(dbReservation);
                    this.reservations.SaveChanges();

                    return(RedirectToAction("Index", "Reservations"));
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }
            }

            return(View(reservation));
        }
Пример #2
0
        public Dictionary <DateTime, int> GetOverlappedDates(ReservationsInputModel inputReservation = null)
        {
            var currentDate      = DateTime.Now.Date;
            var overlappingDates = new Dictionary <DateTime, int>();

            var viableReservations = this.reservations.All()
                                     .Where(x => x.Status == Status.Approved && (x.From >= currentDate || x.To >= currentDate));

            if (inputReservation != null)
            {
                viableReservations = viableReservations.Where(x => x.ID != inputReservation.ID);
            }

            foreach (var reservation in viableReservations)
            {
                foreach (var date in reservation.Dates)
                {
                    if (date != reservation.To)
                    {
                        if (overlappingDates.ContainsKey(date))
                        {
                            overlappingDates[date]++;
                        }
                        else
                        {
                            overlappingDates.Add(date, 1);
                        }
                    }
                }
            }

            return(overlappingDates);
        }
Пример #3
0
        public ActionResult Add(ReservationsInputModel reservation)
        {
            bool isValidReservation = this.reservationManager.ValidateReservation(ModelState, reservation);

            if (ModelState.IsValid && isValidReservation)
            {
                bool isSeenInNewTab = true;
                var  dbResrvation   = this.reservationManager.CreateReservation(reservation, isSeenInNewTab);

                this.reservations.Add(dbResrvation);
                this._reservationsEmailManager.SendConfirmationEmail(dbResrvation);
                this.reservations.SaveChanges();

                return(Json(true));
            }

            List <string> errors = new List <string>();

            foreach (var error in ModelState.Values)
            {
                if (error.Errors.Count > 0)
                {
                    for (int i = 0; i < error.Errors.Count; i++)
                    {
                        errors.Add(error.Errors[i].ErrorMessage);
                    }
                }
            }

            return(Json(errors));
        }
Пример #4
0
        /// <summary>
        /// Creates the database reservation model from the reservation input model.
        /// </summary>
        /// <param name="inputReservation">The reservation input model from the website.</param>
        /// <param name="isSeen">Determines whether the reservation should be visible in the New tab of the Admin panel. By default it is set to "false" for reservations added through the Admin tool and "true" for user reservations.</param>
        /// <returns>The derived database reservation model.</returns>
        public Reservation CreateReservation(ReservationsInputModel inputReservation, bool isSeen)
        {
            string firstName    = inputReservation.FirstName.Trim();
            string lastName     = inputReservation.LastName.Trim();
            string emailTrimmed = inputReservation.Email.Trim();
            string phoneTrimmed = inputReservation.Phone.Trim();

            var reservation = new Reservation()
            {
                FirstName     = firstName,
                LastName      = lastName,
                Email         = emailTrimmed,
                Phone         = phoneTrimmed,
                From          = inputReservation.From,
                To            = inputReservation.To,
                PartySize     = inputReservation.PartySize,
                Status        = inputReservation.Status,
                PaymentMethod = inputReservation.PaymentMethod,
                IsSeen        = isSeen
            };

            var pricing = this.GetPricing(reservation.From, reservation.To);

            reservation.Capparo   = pricing.Capparo;
            reservation.FullPrice = pricing.FullPrice;

            return(reservation);
        }
Пример #5
0
        public bool ValidateReservation(ModelStateDictionary modelState, ReservationsInputModel inputReservation)
        {
            bool isValid = true;

            // Check whether the To date is before the From date
            if (inputReservation.To <= inputReservation.From)
            {
                modelState.AddModelError("Date", FROM_DATE_BEFORE_TO_DATE_ERROR);
                isValid = false;
            }

            // Check for overlapping reservation days for all available rooms
            // Offset the start date so we can account for checkouts on the same From date
            // var offsetStartDate = inputReservation.From.AddDays(1);
            var dates = SetHelpers.BuildDateSet(inputReservation.From, inputReservation.To);

            var allDates = this.datesManager.GetOverlappedDates(inputReservation);

            foreach (var date in dates)
            {
                if (allDates.ContainsKey(date) && allDates[date] >= ROOMS_COUNT)
                {
                    modelState.AddModelError("Date", OVERLAPPING_RESERVATION_DATES);
                    isValid = false;
                    break;
                }
            }

            return(isValid);
        }
Пример #6
0
        public ActionResult Add(ReservationsInputModel input)
        {
            var isValidReservation = this.reservationManager.ValidateReservation(ModelState, input);

            if (ModelState.IsValid && isValidReservation)
            {
                bool isSeenInNewTab = true;
                var  reservation    = this.reservationManager.CreateReservation(input, isSeenInNewTab);

                this.reservations.Add(reservation);
                this.reservations.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(input));
        }