Example #1
0
        // HttpGet for Create View which initialises and prepares an instance of Play
        // user can add maximum 20 dates for a firstly created performance
        public IActionResult CreatePlay()
        {
            DateTime        newDate = DateTime.Parse(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture));
            PlayForCreation newPlay = new PlayForCreation();
            List <DateTime> dates   = new List <DateTime>();

            for (int i = 0; i < 20; i++)
            {
                dates.Add(newDate);
            }
            newPlay.LiveDates = dates;

            return(View(newPlay));
        }
Example #2
0
        public async Task <IActionResult> CreatePlay(PlayForCreation newPlay, IFormFile file)
        {
            #region check if file uploaded

            var filePath = Path.GetTempFileName();


            if (file != null)
            {
                if (file.Length > 0)
                {
                    // use filestream to get the file from local to the controller
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        await file.CopyToAsync(stream);
                    }
                }
            }

            #endregion

            // proceed only if data input is valid
            if (ModelState.IsValid)
            {
                if (newPlay.PriceEnd < newPlay.PriceStart)
                {
                    ModelState.AddModelError("", "Price start must be less than last price.");
                    return(View(newPlay));
                }

                Play playCreated = new Play
                {
                    // prepare play for database
                    PriceStart     = newPlay.PriceStart,
                    PriceEnd       = newPlay.PriceEnd,
                    Name           = newPlay.Name,
                    Description    = newPlay.Description,
                    AgeRestriction = newPlay.AgeRestriction
                };

                // make use of Dispose functionality to make sure file data is removed
                // once finished with it
                using (var memoryStream = new MemoryStream())
                {
                    await file.CopyToAsync(memoryStream);

                    #region Convert Data from TheatrePerformance to ERD Class Performance

                    playCreated.Picture = memoryStream.ToArray();


                    // for each valid date create an instance of performance
                    foreach (var perfDate in newPlay.LiveDates)
                    {
                        if (!perfDate.Date.Day.Equals(DateTime.Now.Day) && perfDate.Date > DateTime.Now)
                        {
                            Performance performanceDate = new Performance()
                            {
                                Date   = perfDate,
                                PlayId = playCreated.Id
                            };
                            playCreated.Performances.Add(performanceDate);
                        }
                    }

                    // for each created performance create seating plan
                    foreach (var perfDate in playCreated.Performances)
                    {
                        foreach (var seat in _context.Seats)
                        {
                            BookedSeat booked = new BookedSeat()
                            {
                                SeatId = seat.Id,
                                Booked = 0
                            };
                            perfDate.BookedSeats.Add(booked);
                        }
                    }


                    #endregion

                    // save all the changes to the database
                    await _context.AddAsync(playCreated);

                    await _context.SaveChangesAsync();

                    // redirect to main page
                    return(RedirectToAction(nameof(Index)));
                }
            }

            // if program reached here something went wrong so return view to create performance
            return(View(newPlay));
        }