Add Team functions

This commit is contained in:
2025-09-22 12:53:46 -04:00
parent 3daa3b81b3
commit dc83a18d76
48 changed files with 2364 additions and 633 deletions
+11 -37
View File
@@ -5,10 +5,15 @@ public class Team
{
public int Id { get; set; }
[Required]
[Required]
[Display(Name = "Team Name")]
public string Name { get; set; }
public EventDefinition Event { get; set; }
public int? Number { get; set; }
public EventDefinition Event
{
get;
set;
}
public List<Student> Students { get; set; } = [];
public Student? Captain { get; set; }
@@ -16,8 +21,6 @@ public class Team
[Display(Name = "Team Id")]
public string? TeamId { get; set; }
//public string? RegionalTimeSlot { get; set; }
// public Tuple<DateTime,DateTime?>? RegionalTimeSlotObj
//{
@@ -51,46 +54,17 @@ public class Team
var studentsToOmitList = studentsToOmit.ToList();
var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList();
if (!omittedStudents.Any())
return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), TeamId = Name};
return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), TeamId = TeamId, Number = Number};
var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList();
return new PartialTeam { Name = Name, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents};
return new PartialTeam { Number = Number, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents};
}
public Team Clone() => CloneWithOmittedStudents([]);
public static int GetStudentTeamOverlapCount(IList<Team>[] timeSlots)
{
return timeSlots.Sum(GetStudentTeamOverlapCount);
}
private static int GetStudentTeamOverlapCount(IList<Team> timeSlot)
{
return GetStudentTeamOverlaps(timeSlot).Count();
}
public static IEnumerable<Tuple<Student, IEnumerable<Team>>> GetStudentTeamOverlaps(IList<Team> timeSlot)
{
return
from s in timeSlot.SelectMany(ts => ts.Students).Distinct()
group s by timeSlot.Where(t => t.Students.Contains(s))
into gs
where gs.Key.Count() > 1
select Tuple.Create(gs.First(), gs.Key);
}
public override string ToString()
{
return Name;
}
public string ToStringWithIndividualAndRegional()
{
var ind = Event.EventFormat is EventFormat.Individual ? " (Ind.)" : string.Empty;
var regional= Event.RegionalEvent ? " (Reg.)" : string.Empty;
//var regional= Event.RegionalEvent ? " (Reg.)" : string.Empty;
var eventAttributes = Event.EventAttributes();
return string.IsNullOrEmpty(eventAttributes) ? Name : Name + " (" + eventAttributes + ")";
return $"{Event.Name} {(Number != null ? $"(#{Number})" : "")}";
}
}