Пример #1
0
        [ValidateAntiForgeryToken] // védelem XSRF támadás ellen
        public IActionResult Index(Int32?apartmentId, RentViewModel rent)
        {
            if (apartmentId == null || rent == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            rent.Apartment = _travelService.GetApartment(apartmentId);

            if (rent.Apartment == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            switch (_travelService.ValidateRent(rent.RentStartDate, rent.RentEndDate, apartmentId.Value))
            {
            case RentDateError.StartInvalid:
                ModelState.AddModelError("RentStartDate", "A kezdés dátuma nem megfelelő (túl korai, vagy nem fordulónapra esik)!");
                break;

            case RentDateError.EndInvalid:
                ModelState.AddModelError("RentEndDate", "A megadott foglalási idő érvénytelen (a foglalás vége korábban van, mint a kezdete)!");
                break;

            case RentDateError.LengthInvalid:
                ModelState.AddModelError("RentEndDate", "A megadott foglalási idő érvénytelen (egész heteket lehet csak foglalni)!");
                break;

            case RentDateError.Conflicting:
                ModelState.AddModelError("RentStartDate", "A megadott időpontban a szállás már foglalt!");
                break;
            }

            if (!ModelState.IsValid)
            {
                return(View("Index", rent));
            }

            String userName;

            // bejelentkezett felhasználó esetén nem kell felvennünk az új felhasználót
            if (HttpContext.Session.GetString("user") != null)
            {
                userName = HttpContext.Session.GetString("user");
            }
            else
            {
                if (!_accountService.Create(rent, out userName))
                {
                    ModelState.AddModelError("", "A foglalás rögzítése sikertelen, kérem próbálja újra!");
                    return(View("Index", rent));
                }
            }

            if (!_travelService.SaveRent(apartmentId, userName, rent))
            {
                ModelState.AddModelError("", "A foglalás rögzítése sikertelen, kérem próbálja újra!");
                return(View("Index", rent));
            }

            // kiszámoljuk a teljes árat
            rent.TotalPrice = _travelService.GetPrice(apartmentId, rent);

            ViewBag.Message = "A foglalását sikeresen rögzítettük!";
            return(View("Result", rent));
        }