public async Task <IActionResult> Create(BattleReportViewModel viewModel) { viewModel.StatusMessage = string.Empty; if (!ModelState.IsValid) { viewModel.Factions = await _db.Factions.OrderBy(f => f.Name).ToListAsync(); int firstFactionId = viewModel.Factions.FirstOrDefault().Id; viewModel.FirstFactionThemes = await _db.Themes.Where(t => t.FactionId == firstFactionId).OrderBy(t => t.Name).ToListAsync(); viewModel.FirstFactionCasters = await _db.Casters.Where(c => c.FactionId == firstFactionId).OrderBy(c => c.Name).ToListAsync(); return(View(viewModel)); } if (!await _db.ApplicationUsers.AnyAsync(au => au.UserName == viewModel.BattleReport.OpponentsUsername)) { viewModel.Factions = await _db.Factions.OrderBy(f => f.Name).ToListAsync(); int firstFactionId = viewModel.Factions.FirstOrDefault().Id; viewModel.FirstFactionThemes = await _db.Themes.Where(t => t.FactionId == firstFactionId).OrderBy(t => t.Name).ToListAsync(); viewModel.FirstFactionCasters = await _db.Casters.Where(c => c.FactionId == firstFactionId).OrderBy(c => c.Name).ToListAsync(); viewModel.StatusMessage = "Error: There are no users in the database with the username specified for your opponent."; return(View(viewModel)); } viewModel.BattleReport.ConfirmationKey = (new Random().Next(1000, 10000)); viewModel.BattleReport.ConfirmedByOpponent = false; viewModel.BattleReport.LosersUsername = viewModel.PosterWon ? viewModel.BattleReport.OpponentsUsername : viewModel.BattleReport.PostersUsername; viewModel.BattleReport.LosingFaction = viewModel.PosterWon ? viewModel.BattleReport.OpponentsFaction : viewModel.BattleReport.PostersFaction; viewModel.BattleReport.LosingTheme = viewModel.PosterWon ? viewModel.BattleReport.OpponentsTheme : viewModel.BattleReport.PostersTheme; viewModel.BattleReport.LosingCaster = viewModel.PosterWon ? viewModel.BattleReport.OpponentsCaster : viewModel.BattleReport.PostersCaster; viewModel.BattleReport.WinnersUsername = viewModel.PosterWon ? viewModel.BattleReport.PostersUsername : viewModel.BattleReport.OpponentsUsername; viewModel.BattleReport.WinningFaction = viewModel.PosterWon ? viewModel.BattleReport.PostersFaction : viewModel.BattleReport.OpponentsFaction; viewModel.BattleReport.WinningTheme = viewModel.PosterWon ? viewModel.BattleReport.PostersTheme : viewModel.BattleReport.OpponentsTheme; viewModel.BattleReport.WinningCaster = viewModel.PosterWon ? viewModel.BattleReport.PostersCaster : viewModel.BattleReport.OpponentsCaster; _db.BattleReports.Add(viewModel.BattleReport); ApplicationUser opponent = await _db.ApplicationUsers.FirstAsync(au => au.UserName == viewModel.BattleReport.OpponentsUsername); string opponentsEmail = opponent.Email; await _emailSender.SendEmailAsync(opponentsEmail, "Battle Report Posted", "The user " + viewModel.BattleReport.PostersUsername + " has added a battle report with you as their opponent. Please log in and confirm the battle report when able."); await _db.SaveChangesAsync(); return(RedirectToAction("Index", "Home", new { Area = "Home" })); }
public async Task <IActionResult> Create() { BattleReportViewModel viewModel = new BattleReportViewModel() { Factions = await _db.Factions.OrderBy(f => f.Name).ToListAsync(), BattleReport = new BattleReport(), StatusMessage = string.Empty }; int firstFactionId = viewModel.Factions.FirstOrDefault().Id; viewModel.FirstFactionThemes = await _db.Themes.Where(t => t.FactionId == firstFactionId).OrderBy(t => t.Name).ToListAsync(); viewModel.FirstFactionCasters = await _db.Casters.Where(c => c.FactionId == firstFactionId).OrderBy(c => c.Name).ToListAsync(); viewModel.BattleReport.PostersUsername = User.Identity.Name; return(View(viewModel)); }