// 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)); }
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)); }