Files
chapter-organizer/Core/Entities/Team.cs
T
2025-09-22 12:53:46 -04:00

70 lines
1.9 KiB
C#

using System.ComponentModel.DataAnnotations;
namespace Core.Entities;
public class Team
{
public int Id { get; set; }
[Required]
[Display(Name = "Team Name")]
public int? Number { get; set; }
public EventDefinition Event
{
get;
set;
}
public List<Student> Students { get; set; } = [];
public Student? Captain { get; set; }
[Display(Name = "Team Id")]
public string? TeamId { get; set; }
// public Tuple<DateTime,DateTime?>? RegionalTimeSlotObj
//{
// get
// {
// if (string.IsNullOrEmpty(RegionalTimeSlot))
// return null;
// var times = Regex.Matches(RegionalTimeSlot, @"(.*)\s*-\s*(.*)");
// if (times.Count == 0)
// return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null);
// var match = times[0];
// if (!match.Success)
// return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null);
// return Tuple.Create(P(match.Groups[1].Value), (DateTime?)P(match.Groups[2].Value));
// return null;
// }
//}
private DateTime P(string s)
{
var dt = DateTime.Parse(s);
if (dt.TimeOfDay < TimeSpan.FromHours(7))
return dt + TimeSpan.FromHours(12);
return dt;
}
public virtual Team CloneWithOmittedStudents(IEnumerable<Student> studentsToOmit)
{
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 = TeamId, Number = Number};
var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList();
return new PartialTeam { Number = Number, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents};
}
public Team Clone() => CloneWithOmittedStudents([]);
public override string ToString()
{
return $"{Event.Name} {(Number != null ? $"(#{Number})" : "")}";
}
}