コード例 #1
0
        // GET: Schedule/Edit/5
        public async Task<ActionResult> Edit(int movieTheaterId, int movieId, DateTime? date)
        {
            var d = date ?? DateTime.Today;

            var showtimes = await unitOfWork.Showtimes.GetAllByDateAsync(d, movieTheaterId, movieId);

            await FillMoviesSelectList(movieId);
            await FillMovieTheatresSelectList(movieTheaterId);

            var model = new ShowtimesEdit
            {
                MovieTheaterId = movieTheaterId,
                MovieId = movieId,
                Date = d,
                SessionTimesStr = string.Join("\n", showtimes.Select(_ => _.SessionTime.TimeOfDay.ToString("hh\\:mm")))
            };

            return View(model);
        }
コード例 #2
0
        // GET: Schedule/Edit/5
        public async Task <ActionResult> Edit(int movieTheaterId, int movieId, DateTime?date)
        {
            var d = date ?? DateTime.Today;

            var showtimes = await unitOfWork.Showtimes.GetAllByDateAsync(d, movieTheaterId, movieId);

            await FillMoviesSelectList(movieId);
            await FillMovieTheatresSelectList(movieTheaterId);

            var model = new ShowtimesEdit
            {
                MovieTheaterId  = movieTheaterId,
                MovieId         = movieId,
                Date            = d,
                SessionTimesStr = string.Join("\n", showtimes.Select(_ => _.SessionTime.TimeOfDay.ToString("hh\\:mm")))
            };

            return(View(model));
        }
コード例 #3
0
        public async Task <ActionResult> Edit([Bind(Include = "MovieTheaterId, MovieId, Date, SessionTimesStr")] ShowtimesEdit model)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(model.SessionTimesStr))
                {
                    TimeSpan ts;

                    var sessionTimesInput = model.SessionTimesStr
                                            .Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                                            .Select(s => s.Trim());

                    var sessionTimesAreInCorrectFormat = sessionTimesInput
                                                         .All(s => TimeSpan.TryParseExact(s, new[] { "h\\:mm", "hh\\:mm" }, null, out ts));

                    if (!sessionTimesAreInCorrectFormat)
                    {
                        ModelState.AddModelError("SessionTimesStr", "Session Times are invalid");
                    }
                    else if (sessionTimesInput.Distinct().Count() != sessionTimesInput.Count())
                    {
                        ModelState.AddModelError("SessionTimesStr", "Duplicate session times");
                    }
                }

                if ((await unitOfWork.MovieTheatres.FindAsync(model.MovieTheaterId)) == null)
                {
                    ModelState.AddModelError("MovieTheaterId", "Movie theater doesn't exist");
                }

                if ((await unitOfWork.Movies.FindAsync(model.MovieId)) == null)
                {
                    ModelState.AddModelError("MovieId", "Movie doesn't exist");
                }

                if (ModelState.IsValid)
                {
                    var sessionTimesInput = model.SessionTimesStr
                                            .Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                                            .Select(s => s.Trim());

                    var sessionTimes = sessionTimesInput
                                       .Select(t => model.Date.Date + TimeSpan.ParseExact(t, new[] { "h\\:mm", "hh\\:mm" }, null))
                                       .ToArray();

                    var service = new ShowtimesSchedulingService(unitOfWork);

                    await service.ScheduleShowtimes(model.MovieTheaterId, model.MovieId, sessionTimes);

                    await unitOfWork.SaveAsync();

                    return(RedirectToAction("Index", new { date = model.Date.ToString(Constants.UrlDateFormat) }));
                }

                await FillMoviesSelectList(model.MovieId);
                await FillMovieTheatresSelectList(model.MovieTheaterId);

                return(View(model));
            }
            catch
            {
                return(View());
            }
        }