public async Task <IActionResult> Reserve(RestaurantInputModel input)
        {
            var remainingCapacity = this.restaurantService.GetRemainingCapacity();

            if (!this.ModelState.IsValid)
            {
                return(this.View(input));
            }

            var userId = await this.usersService.GetUserIdAsync(this.User);

            input.UserId = userId;

            var result = await this.restaurantService.ReserveRestaurant(input);

            if (result == false)
            {
                this.ModelState.AddModelError("EventDate", GlobalConstants.FreeSeatsForRestaurantError + remainingCapacity);
                return(this.View(input));
            }

            this.TempData["InfoMessage"] = GlobalConstants.ReserveRestaurantTempDataSuccess;

            return(this.Redirect("/Restaurant/Reservations"));
        }
示例#2
0
        public async Task <bool> ReserveRestaurant(RestaurantInputModel input)
        {
            var restaurant = this.restaurantRepository.All().FirstOrDefault(x => x.IsDeleted == false);

            if (restaurant != null && input.NumberOfGuests <= restaurant.MaxCapacity && input.EventDate.Day >= DateTime.Now.Day)
            {
                var restaurantReservation = new RestaurantReservation()
                {
                    UserId         = input.UserId,
                    RestaurantId   = restaurant.Id,
                    NumberOfGuests = input.NumberOfGuests,
                    PhoneNumber    = input.PhoneNumber,
                    EventType      = input.EventType,
                    EventDate      = input.EventDate,
                    CheckIn        = input.CheckIn,
                    CheckOut       = input.CheckOut,
                    TotalPrice     = 0,
                    Message        = input.Message,
                };

                var totalHours = (decimal)(restaurantReservation.CheckIn - restaurantReservation.CheckOut).TotalHours;

                var price = Math.Abs(restaurant.Price * totalHours);

                restaurantReservation.TotalPrice = price;

                var allReservationsForDate = this.restaurantReservationRepository.All().Where(x => x.EventDate == input.EventDate);

                var allReservations = this.restaurantReservationRepository.All().Select(x => x.EventDate).ToList();

                if (allReservationsForDate.Count() != 0)
                {
                    foreach (var item in allReservationsForDate)
                    {
                        if (restaurantReservation.NumberOfGuests > restaurant.CurrentCapacity)
                        {
                            return(false);
                        }
                    }
                }

                if (allReservations.Contains(input.EventDate))
                {
                    restaurant.CurrentCapacity -= input.NumberOfGuests;
                }
                else
                {
                    restaurant.CurrentCapacity  = restaurant.MaxCapacity;
                    restaurant.CurrentCapacity -= input.NumberOfGuests;
                }

                await this.restaurantReservationRepository.AddAsync(restaurantReservation);

                await this.restaurantReservationRepository.SaveChangesAsync();

                return(true);
            }

            throw new InvalidOperationException(GlobalConstants.InvalidOperationExceptionForRestaurantReservation);
        }
        public RestaurantDetailViewModel Insert(RestaurantInputModel inputModel)
        {
            var restaurant = new Restaurant(inputModel.Name);

            restaurant = _restaurantService.Insert(restaurant);
            return(GetDetailViewModel(restaurant));
        }
示例#4
0
 public void ConvertFromAddInputModel(RestaurantInputModel r)
 {
     Naam         = r.Naam;
     Omschrijving = r.Omschrijving;
     Telefoon     = r.Telefoon;
     Email        = r.Email;
     Website      = r.Website;
 }
        public async Task <IActionResult> Reserve()
        {
            var inputModel = new RestaurantInputModel
            {
                PhoneNumber = await this.usersService.GetUserPhoneNumberAsync(this.User),
                EventDate   = DateTime.Now,
            };

            return(this.View(inputModel));
        }
示例#6
0
 public IActionResult Put([FromBody] RestaurantInputModel inputModel)
 {
     try
     {
         return(ResponseOk(_restaurantAppService.Update(inputModel)));
     }
     catch (Exception ex)
     {
         return(BadRequest(ex.Message));
     }
 }
示例#7
0
 public IActionResult Post([FromBody] RestaurantInputModel inputModel)
 {
     try
     {
         return(ResponseOk(_restaurantAppService.Insert(inputModel)));
     }
     catch (Exception ex)
     {
         return(BadRequest(new ErrorResponse(ex.Message, HttpStatusCode.BadRequest)));
     }
 }
示例#8
0
 public ActionResult EditRestaurant(RestaurantInputModel restaurant)
 {
     if (ModelState.IsValid)
     {
         Restaurant rstToEdit = db.GetRestaurant(restaurant.RestaurantID);
         rstToEdit.ConvertFromRestaurantInputModel(restaurant); //Make restaurant from input model
         db.UpdateRestaurant(rstToEdit);
     }
     else
     {
         ModelState.AddModelError("edit-error", "The Restaurant you tried to edit had some incorrectly filled fields.");
     }
     return(View(restaurant));
 }
示例#9
0
 public ActionResult EditRestaurant(int?id)
 {
     //Get Restaurant
     if (id != null)
     {
         Restaurant restaurant = db.GetRestaurant(id.Value);
         if (restaurant != null)
         {
             RestaurantInputModel rst = new RestaurantInputModel();
             rst.ConvertToRestaurantInputModel(restaurant);
             return(View(rst));
         }
     }
     return(RedirectToAction("ManagementWindow"));
 }
示例#10
0
        //public void Edit(Restaurant r)
        //{
        //    Naam = r.Naam;
        //    Omschrijving = r.Omschrijving;
        //    Telefoon = r.Telefoon;
        //    Email = r.Email;
        //    Website = r.Website;
        //    RestaurantAfbeelding.Link = r.RestaurantAfbeelding.Link;
        //    RestaurantLocatie.Straat = r.RestaurantLocatie.Straat;
        //    RestaurantLocatie.Huisnummer = r.RestaurantLocatie.Huisnummer;
        //    RestaurantLocatie.Toevoeging = r.RestaurantLocatie.Toevoeging;
        //    RestaurantLocatie.Postcode = r.RestaurantLocatie.Postcode;
        //}

        public void ConvertFromRestaurantInputModel(RestaurantInputModel r)
        {
            Naam         = r.Naam;
            Omschrijving = r.Omschrijving;
            Telefoon     = r.Telefoon;
            Email        = r.Email;
            Website      = r.Website;
            RestaurantAfbeelding.Link = r.RestaurantAfbeelding.Link;
            OverviewAfbeelding.Link   = r.OverviewAfbeelding.Link;
            RestaurantLocatie         = r.RestaurantLocatie;
            //RestaurantLocatie.Straat = r.RestaurantLocatie.Straat;
            //RestaurantLocatie.Huisnummer = r.RestaurantLocatie.Huisnummer;
            //RestaurantLocatie.Toevoeging = r.RestaurantLocatie.Toevoeging;
            //RestaurantLocatie.Postcode = r.RestaurantLocatie.Postcode;
        }
示例#11
0
        public async Task Reserve_Restaurant_Should_Reserve_For_Choosen_Guests()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;

            this.dbContext = new ApplicationDbContext(options);

            var restaurantRepository            = new EfDeletableEntityRepository <Restaurant>(this.dbContext);
            var restaurantReservationRepository = new EfDeletableEntityRepository <RestaurantReservation>(this.dbContext);

            await restaurantRepository.AddAsync(new Restaurant
            {
                Id = "restaurantid",
                CurrentCapacity = 100,
                MaxCapacity     = 100,
                Description     = "restaurant",
                Price           = 50,
                Title           = "restaurant",
            });

            await restaurantRepository.SaveChangesAsync();

            this.restaurantsService = new RestaurantsService(restaurantRepository, restaurantReservationRepository);

            var reservation = new RestaurantInputModel
            {
                EventDate      = DateTime.Now.AddDays(1),
                CheckIn        = DateTime.Now.AddDays(1).AddHours(10),
                CheckOut       = DateTime.Now.AddDays(1).AddHours(11),
                NumberOfGuests = 50,
                EmailAddress   = "*****@*****.**",
                FirstName      = "Marian",
                LastName       = "Kyuchukov",
                PhoneNumber    = "0888186978",
                EventType      = (RestaurantEventType)Enum.Parse(typeof(RestaurantEventType), "Birthday"),
            };

            var result = await this.restaurantsService.ReserveRestaurant(reservation);

            var parsedEventType = (RestaurantEventType)Enum.Parse(typeof(RestaurantEventType), "Birthday");

            var actualResult = restaurantReservationRepository.All().FirstOrDefault(x => x.EventType == parsedEventType).NumberOfGuests;

            var expected = 50;

            Assert.Equal(expected, actualResult);
        }
示例#12
0
        public ActionResult AddRestaurant(RestaurantInputModel r, string afbLink, string afbLinkOverview)

        {
            if (ModelState.IsValid)
            {
                Restaurant rst = new Restaurant();
                rst.ConvertFromAddInputModel(r); //Maken van een Restaurant van input model
                r.RestaurantLocatie.Naam = r.Naam;
                rst.RestaurantAfbeelding = new Afbeelding(null, null, rst.RestaurantID, afbLink, "restaurantbanner");
                rst.OverviewAfbeelding   = new Afbeelding(null, null, rst.RestaurantID, afbLinkOverview, "restaurantoverview");
                rst.RestaurantLocatie    = r.RestaurantLocatie;
                db.AddRestaurant(rst);
                return(RedirectToAction("ManagementWindow"));
            }
            return(View(r));
        }
        public RestaurantDetailViewModel Update(RestaurantInputModel inputModel)
        {
            if (!inputModel.Id.HasValue)
            {
                throw new Exception("Id não enviado.");
            }

            var restaurant = _restaurantService.GetById((long)inputModel.Id);

            if (restaurant == null)
            {
                throw new Exception("Restaurante não encontrado.");
            }

            restaurant.Update(inputModel.Name);
            restaurant = _restaurantService.Update(restaurant);

            return(GetDetailViewModel(restaurant));
        }
 public IActionResult Save(RestaurantInputModel model)
 {
     this.service.Save(model);
     return(this.Ok());
 }