219 lines
7.7 KiB
C#
219 lines
7.7 KiB
C#
using MVCUI.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.SqlTypes;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using System.Web.Services.Description;
|
|
using TrackerLibrary;
|
|
using TrackerLibrary.Models;
|
|
|
|
namespace MVCUI.Controllers
|
|
{
|
|
public class TournamentsController : Controller
|
|
{
|
|
// GET: Tournaments
|
|
public ActionResult Index()
|
|
{
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken()]
|
|
public ActionResult EditTournamentMatchup(MatchupMVCModel model)
|
|
{
|
|
try
|
|
{
|
|
if (ModelState.IsValid)
|
|
{
|
|
List<TournamentModel> tournaments = GlobalConfig.Connection.GetTournament_All();
|
|
TournamentModel t = tournaments.Where(x => x.Id == model.TournamentId).First();
|
|
|
|
MatchupModel foundMatchup = new MatchupModel();
|
|
foreach (var round in t.Rounds)
|
|
{
|
|
foreach (var matchup in round)
|
|
{
|
|
if (matchup.Id == model.MatchupId)
|
|
{
|
|
foundMatchup = matchup;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < foundMatchup.Entries.Count; i++)
|
|
{
|
|
if (i == 0)
|
|
{
|
|
foundMatchup.Entries[i].Score = model.FirstTeamScore;
|
|
}
|
|
else if (i == 1)
|
|
{
|
|
foundMatchup.Entries[i].Score = model.SecondTeamScore;
|
|
}
|
|
}
|
|
|
|
TournamentLogic.UpdateTournamentResults(t);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
|
|
return RedirectToAction("Details", "Tournaments", new { id = model.TournamentId, roundId = model.RoundNumber });
|
|
|
|
}
|
|
|
|
public ActionResult Details(int id, int roundId = 0)
|
|
{
|
|
List<TournamentModel> tournaments = GlobalConfig.Connection.GetTournament_All();
|
|
try
|
|
{
|
|
TournamentMVCDetailsModel input = new TournamentMVCDetailsModel();
|
|
TournamentModel t = tournaments.Where(x => x.Id == id).First();
|
|
input.TournamentName = t.TournamentName;
|
|
|
|
var orderedRounds = t.Rounds.OrderBy(x => x.First().MatchupRound).ToList();
|
|
bool activeFound = false;
|
|
|
|
for (int i = 0; i < orderedRounds.Count; i++)
|
|
{
|
|
RoundStatus status = RoundStatus.Locked;
|
|
|
|
if (!activeFound)
|
|
{
|
|
if (orderedRounds[i].TrueForAll(x => x.Winner != null))
|
|
{
|
|
status = RoundStatus.Complete;
|
|
}
|
|
else
|
|
{
|
|
status = RoundStatus.Active;
|
|
activeFound = true;
|
|
if (roundId == 0)
|
|
{
|
|
roundId = i + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
input.Rounds.Add(new RoundMVCModel { RoundName = $"Round {i + 1}", Status = status, RoundNumber = i + 1 });
|
|
}
|
|
|
|
input.Matchups = GetMatchups(orderedRounds[roundId - 1], id, roundId);
|
|
|
|
return View(input);
|
|
|
|
}
|
|
catch
|
|
{
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
}
|
|
|
|
private List<MatchupMVCModel> GetMatchups(List<MatchupModel> input, int tournamentId, int roundId = 0)
|
|
{
|
|
List<MatchupMVCModel> output = new List<MatchupMVCModel>();
|
|
|
|
foreach (var item in input)
|
|
{
|
|
int teamTwoId = 0;
|
|
string teamOneName = "";
|
|
string teamTwoName = "Bye";
|
|
double teamTwoScore = 0;
|
|
|
|
if (item.Entries.Count == null)
|
|
{
|
|
teamOneName = "To Be Determined";
|
|
}
|
|
else
|
|
{
|
|
teamOneName = item.Entries[0].TeamCompeting.TeamName;
|
|
}
|
|
|
|
if (item.Entries.Count > 1)
|
|
{
|
|
teamTwoId = item.Entries[1].Id;
|
|
if (item.Entries[1].TeamCompeting == null)
|
|
{
|
|
teamTwoName = "To Be Determined";
|
|
}
|
|
else
|
|
{
|
|
teamTwoName = item.Entries[1].TeamCompeting.TeamName;
|
|
}
|
|
teamTwoScore = item.Entries[1].Score;
|
|
}
|
|
|
|
output.Add(new MatchupMVCModel
|
|
{
|
|
MatchupId = item.Id,
|
|
TournamentId = tournamentId,
|
|
RoundNumber = roundId,
|
|
FirstTeamMatchupEntryId = item.Entries[0].Id,
|
|
FirstTeamName = teamOneName,
|
|
FirstTeamScore = item.Entries[0].Score,
|
|
SecondTeamMatchupEntryId = teamTwoId,
|
|
SecondTeamName = teamTwoName,
|
|
SecondTeamScore = teamTwoScore
|
|
});
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
public ActionResult Create()
|
|
{
|
|
TournamentMVCCreateModel input = new TournamentMVCCreateModel();
|
|
List<TeamModel> allTeams = GlobalConfig.Connection.GetTeam_All();
|
|
List<PrizeModel> allPrizes = GlobalConfig.Connection.GetPrizes_All();
|
|
|
|
input.EnteredTeams = allTeams.Select(x => new SelectListItem { Text = x.TeamName, Value = x.Id.ToString() }).ToList();
|
|
input.Prizes = allPrizes.Select(x => new SelectListItem { Text = x.PlaceName, Value = x.Id.ToString() }).ToList();
|
|
|
|
return View(input);
|
|
}
|
|
|
|
// POST: Tournament/Create
|
|
[ValidateAntiForgeryToken()]
|
|
[HttpPost]
|
|
public ActionResult Create(TournamentMVCCreateModel model)
|
|
{
|
|
try
|
|
{
|
|
if (ModelState.IsValid && model.SelectedEnteredTeams.Count > 0)
|
|
{
|
|
List<PrizeModel> allPrizes = GlobalConfig.Connection.GetPrizes_All();
|
|
List<TeamModel> allTeams = GlobalConfig.Connection.GetTeam_All();
|
|
|
|
TournamentModel t = new TournamentModel();
|
|
t.TournamentName = model.TournamentName;
|
|
t.EntryFee = model.EntryFee;
|
|
t.EnteredTeams = model.SelectedEnteredTeams.Select(x => allTeams.Where(y => y.Id == int.Parse(x)).First()).ToList();
|
|
t.Prizes = model.SelectedPrizes.Select(x => allPrizes.Where(y => y.Id == int.Parse(x)).First()).ToList();
|
|
//t.EnteredTeams = model.SelectedEnteredTeams.Select(x => new TeamModel { Id = int.Parse(x) }).ToList();
|
|
//t.Prizes = model.SelectedPrizes.Select(x => new PrizeModel { Id = int.Parse(x) }).ToList();
|
|
|
|
TournamentLogic.CreateRounds(t);
|
|
|
|
GlobalConfig.Connection.CreateTournament(t);
|
|
|
|
t.AlertUsersToNewRound();
|
|
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
else
|
|
{
|
|
return RedirectToAction("Create");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
var fel = ex;
|
|
return View();
|
|
}
|
|
}
|
|
}
|
|
} |