public async Task<IActionResult> Create(string id, ReservationInputModel inputModel) { var room = await roomService.GetRoom<RoomViewModel>(id); if (room == null || (room?.IsTaken ?? true)) { return this.NotFound(); } var roomIsEmpty = await reservationService.AreDatesAcceptable(room.Id, inputModel.AccommodationDate, inputModel.ReleaseDate); if (!roomIsEmpty) { this.ModelState.AddModelError(nameof(inputModel.AccommodationDate), "Room is already reserved at that time"); } if (!this.ModelState.IsValid) { return this.View(await FillRoomData(inputModel, room)); } var clients = new List<ClientData>(); foreach (var client in inputModel.Clients) { clients.Add(await this.userService.CreateClient(client.Email, client.FullName, client.IsAdult)); } var user = await userManager.GetUserAsync(User); var reservation = await reservationService.AddReservation( room.Id, inputModel.AccommodationDate, inputModel.ReleaseDate, inputModel.AllInclusive, inputModel.Breakfast, clients, user); return this.RedirectToAction(nameof(Details), new { id = reservation.Id }); }