Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
551688f6fe | ||
|
|
7c2ba9044a | ||
|
|
df27cbc298 | ||
|
|
6407dfca71 | ||
|
|
05e5e69d0b |
@@ -132,7 +132,7 @@ namespace Core.Calculation
|
|||||||
where students.Any()
|
where students.Any()
|
||||||
select new Team
|
select new Team
|
||||||
{
|
{
|
||||||
TeamId = _events[e].Name,
|
Identifier = _events[e].Name,
|
||||||
Event = _events[e],
|
Event = _events[e],
|
||||||
Students = students.ToList()
|
Students = students.ToList()
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_BiggestGroup(
|
private IEnumerable<Team> GetAvailableTeams_BiggestGroup(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.TeamId != t.TeamId))
|
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
||||||
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
||||||
@@ -78,7 +78,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_Individual(
|
private IEnumerable<Team> GetAvailableTeams_Individual(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.TeamId != t.TeamId))
|
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
||||||
.Where(t => t.Event.EventFormat == EventFormat.Individual || t.Students.Count == 1)
|
.Where(t => t.Event.EventFormat == EventFormat.Individual || t.Students.Count == 1)
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 0);
|
.Where(t => t.Students.Count > 0);
|
||||||
@@ -87,7 +87,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_AnyNotMeetingAlready(
|
private IEnumerable<Team> GetAvailableTeams_AnyNotMeetingAlready(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.TeamId != t.TeamId))
|
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 0);
|
.Where(t => t.Students.Count > 0);
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_LevelOfEffort(
|
private IEnumerable<Team> GetAvailableTeams_LevelOfEffort(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.TeamId != t.TeamId))
|
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
||||||
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
||||||
@@ -114,7 +114,7 @@ public class UnassignedStudentScheduler
|
|||||||
// sort by how many teammembers are already in that timeslot, descending
|
// sort by how many teammembers are already in that timeslot, descending
|
||||||
foreach (var timeslot in _timeSlots.OrderBy(ts => ts.SelectMany(t => t.Students).Count(team.Students.Contains)))
|
foreach (var timeslot in _timeSlots.OrderBy(ts => ts.SelectMany(t => t.Students).Count(team.Students.Contains)))
|
||||||
{
|
{
|
||||||
if (timeslot.Any(t => t.TeamId == team.TeamId))
|
if (timeslot.Any(t => t.Identifier == team.Identifier))
|
||||||
continue;
|
continue;
|
||||||
timeslot.Add(team);
|
timeslot.Add(team);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ public class PartialTeam : Team
|
|||||||
{
|
{
|
||||||
var remainingStudents = Students.Where(s => !studentsToOmit.Contains(s)).ToList();
|
var remainingStudents = Students.Where(s => !studentsToOmit.Contains(s)).ToList();
|
||||||
var omittedStudents = OmittedStudents.Union(Students.Where(studentsToOmit.Contains)).Distinct().ToList();
|
var omittedStudents = OmittedStudents.Union(Students.Where(studentsToOmit.Contains)).Distinct().ToList();
|
||||||
return new PartialTeam{TeamId = TeamId, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents };
|
return new PartialTeam{Identifier = Identifier, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+8
-14
@@ -4,22 +4,16 @@ namespace Core.Entities;
|
|||||||
public class Team
|
public class Team
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Required]
|
public EventDefinition Event { get; set; }
|
||||||
[Display(Name = "Team Name")]
|
|
||||||
public int? Number { get; set; }
|
|
||||||
public EventDefinition Event
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Student> Students { get; set; } = [];
|
public List<Student> Students { get; set; } = [];
|
||||||
|
|
||||||
public Student? Captain { get; set; }
|
public Student? Captain { get; set; }
|
||||||
|
|
||||||
[Display(Name = "Team Id")]
|
[Display(Name = "Team Identifier")]
|
||||||
public string? TeamId { get; set; }
|
[StringLength(32)]
|
||||||
|
public string? Identifier { get; set; }
|
||||||
|
|
||||||
|
|
||||||
// public Tuple<DateTime,DateTime?>? RegionalTimeSlotObj
|
// public Tuple<DateTime,DateTime?>? RegionalTimeSlotObj
|
||||||
@@ -54,10 +48,10 @@ public class Team
|
|||||||
var studentsToOmitList = studentsToOmit.ToList();
|
var studentsToOmitList = studentsToOmit.ToList();
|
||||||
var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList();
|
var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList();
|
||||||
if (!omittedStudents.Any())
|
if (!omittedStudents.Any())
|
||||||
return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), TeamId = TeamId, Number = Number};
|
return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), Identifier = Identifier};
|
||||||
|
|
||||||
var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList();
|
var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList();
|
||||||
return new PartialTeam { Number = Number, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents};
|
return new PartialTeam { Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Team Clone() => CloneWithOmittedStudents([]);
|
public Team Clone() => CloneWithOmittedStudents([]);
|
||||||
@@ -65,6 +59,6 @@ public class Team
|
|||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return $"{Event.Name} {(Number != null ? $"(#{Number})" : "")}";
|
return $"{Event.Name} {(Identifier != null ? $"({Identifier})" : "")}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ namespace Core.Parsers
|
|||||||
|
|
||||||
foreach (var team in _teams)
|
foreach (var team in _teams)
|
||||||
{
|
{
|
||||||
csv.WriteField(team.TeamId);
|
csv.WriteField(team.Identifier);
|
||||||
csv.WriteField(team.Event.Name);
|
csv.WriteField(team.Event.Name);
|
||||||
foreach (var teamStudent in team.Students)
|
foreach (var teamStudent in team.Students)
|
||||||
{
|
{
|
||||||
@@ -146,14 +146,14 @@ namespace Core.Parsers
|
|||||||
{
|
{
|
||||||
if (@event.EventFormat is EventFormat.Team)
|
if (@event.EventFormat is EventFormat.Team)
|
||||||
{
|
{
|
||||||
teams.Add(new Team { Event = @event, Students = teamStudents, Captain = captain, TeamId = teamNumber});
|
teams.Add(new Team { Event = @event, Students = teamStudents, Captain = captain, Identifier = teamNumber});
|
||||||
}
|
}
|
||||||
else if (@event.EventFormat is EventFormat.Individual)
|
else if (@event.EventFormat is EventFormat.Individual)
|
||||||
{
|
{
|
||||||
foreach (var student in teamStudents)
|
foreach (var student in teamStudents)
|
||||||
{
|
{
|
||||||
teams.Add(new Team{Event = @event,
|
teams.Add(new Team{Event = @event,
|
||||||
Students = [student], Captain = student, TeamId = teamNumber});
|
Students = [student], Captain = student, Identifier = teamNumber});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,8 +74,6 @@ namespace Data
|
|||||||
|
|
||||||
builder.HasOne(e => e.Captain);
|
builder.HasOne(e => e.Captain);
|
||||||
|
|
||||||
builder.Property(e => e.Number).IsRequired(false);
|
|
||||||
//builder.i
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class StudentEventRankingConfiguration : IEntityTypeConfiguration<StudentEventRanking>
|
public class StudentEventRankingConfiguration : IEntityTypeConfiguration<StudentEventRanking>
|
||||||
|
|||||||
@@ -0,0 +1,255 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using Data;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(AppDbContext))]
|
||||||
|
[Migration("20251003164320_TeamIdentifier")]
|
||||||
|
partial class TeamIdentifier
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.EventDefinition", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ChapterEligibilityCountRegionals")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ChapterEligibilityCountState")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.HasMaxLength(1024)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Documentation")
|
||||||
|
.HasMaxLength(64)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Eligibility")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("EventFormat")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("LevelOfEffort")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("MaxTeamSize")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("MinTeamSize")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(128)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Notes")
|
||||||
|
.HasMaxLength(1024)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<bool>("OnSiteActivity")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("Presubmission")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("SemifinalistActivity")
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("ShortName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(40)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Theme")
|
||||||
|
.HasMaxLength(4096)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Name");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.Student", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Grade")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("NationalId")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("OfficerRole")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("PhoneNumber")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("RegionalId")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("StateId")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("TsaYear")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Students");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.StudentEventRanking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("EventDefinitionId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("StudentId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("Rank")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("EventDefinitionId", "StudentId");
|
||||||
|
|
||||||
|
b.HasIndex("StudentId");
|
||||||
|
|
||||||
|
b.ToTable("StudentEventRanking");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.Team", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("CaptainId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("EventId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Identifier")
|
||||||
|
.HasMaxLength(32)
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CaptainId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Teams");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("StudentTeam", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("StudentsId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("TeamsId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("StudentsId", "TeamsId");
|
||||||
|
|
||||||
|
b.HasIndex("TeamsId");
|
||||||
|
|
||||||
|
b.ToTable("StudentTeam");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.StudentEventRanking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Core.Entities.EventDefinition", "EventDefinition")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("EventDefinitionId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Core.Entities.Student", "Student")
|
||||||
|
.WithMany("EventRankings")
|
||||||
|
.HasForeignKey("StudentId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("EventDefinition");
|
||||||
|
|
||||||
|
b.Navigation("Student");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.Team", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Core.Entities.Student", "Captain")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CaptainId");
|
||||||
|
|
||||||
|
b.HasOne("Core.Entities.EventDefinition", "Event")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Captain");
|
||||||
|
|
||||||
|
b.Navigation("Event");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("StudentTeam", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Core.Entities.Student", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("StudentsId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Core.Entities.Team", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("TeamsId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Core.Entities.Student", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("EventRankings");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Data.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class TeamIdentifier : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "Identifier",
|
||||||
|
table: "Teams",
|
||||||
|
type: "TEXT",
|
||||||
|
maxLength: 32,
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.Sql("UPDATE Teams SET Identifier = Number");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Number",
|
||||||
|
table: "Teams");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "TeamId",
|
||||||
|
table: "Teams");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Identifier",
|
||||||
|
table: "Teams");
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "Number",
|
||||||
|
table: "Teams",
|
||||||
|
type: "INTEGER",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "TeamId",
|
||||||
|
table: "Teams",
|
||||||
|
type: "TEXT",
|
||||||
|
nullable: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -163,10 +163,8 @@ namespace Data.Migrations
|
|||||||
b.Property<int>("EventId")
|
b.Property<int>("EventId")
|
||||||
.HasColumnType("INTEGER");
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
b.Property<int?>("Number")
|
b.Property<string>("Identifier")
|
||||||
.HasColumnType("INTEGER");
|
.HasMaxLength(32)
|
||||||
|
|
||||||
b.Property<string>("TeamId")
|
|
||||||
.HasColumnType("TEXT");
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<MudButtonGroup Size="Size.Small">
|
||||||
|
@if (DetailsHref != null)
|
||||||
|
{
|
||||||
|
<MudTooltip Text="Details">
|
||||||
|
<MudIconButton Href="@DetailsHref" Icon="@Icons.Material.Filled.Description">Details</MudIconButton>
|
||||||
|
</MudTooltip>
|
||||||
|
}
|
||||||
|
@if (EditHref != null)
|
||||||
|
{
|
||||||
|
<MudTooltip Text="Edit">
|
||||||
|
<MudIconButton Href="@EditHref" Icon="@Icons.Material.Filled.Edit">Edit</MudIconButton>
|
||||||
|
</MudTooltip>
|
||||||
|
}
|
||||||
|
@if (DeleteOnClick != null)
|
||||||
|
{
|
||||||
|
<MudTooltip Text="Delete">
|
||||||
|
<MudIconButton Icon="@Icons.Material.Outlined.Delete"
|
||||||
|
Color="Color.Error"
|
||||||
|
OnClick="() => DeleteOnClick()"/>
|
||||||
|
</MudTooltip>
|
||||||
|
}
|
||||||
|
</MudButtonGroup>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
[Parameter] public string? DetailsHref { get; set; }
|
||||||
|
[Parameter] public string? EditHref { get; set; }
|
||||||
|
[Parameter] public Action? DeleteOnClick { get; set; }
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<MudNavLink Href="/students" Icon="@Icons.Material.Filled.People">Students</MudNavLink>
|
<MudNavLink Href="/students" Icon="@Icons.Material.Filled.People">Students</MudNavLink>
|
||||||
|
|
||||||
<MudNavGroup Title="Teams" Icon="@Icons.Material.Outlined.Groups" Expanded="true">
|
<MudNavGroup Title="Teams" Icon="@Icons.Material.Outlined.Groups" Expanded="true">
|
||||||
<MudNavLink Href="/teams" Icon="@AppIcons.Teams">Teams</MudNavLink>
|
<MudNavLink Href="/teams" Match="NavLinkMatch.All" Icon="@AppIcons.Teams">Teams</MudNavLink>
|
||||||
<MudNavLink Href="/teams/printout" Icon="@Icons.Material.Filled.Print">Print out</MudNavLink>
|
<MudNavLink Href="/teams/printout" Icon="@Icons.Material.Filled.Print">Print out</MudNavLink>
|
||||||
<MudNavLink Href="/teams/handout" Icon="@Icons.Material.Filled.Print">Handout</MudNavLink>
|
<MudNavLink Href="/teams/handout" Icon="@Icons.Material.Filled.Print">Handout</MudNavLink>
|
||||||
</MudNavGroup>
|
</MudNavGroup>
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
@using WebApp.Models
|
||||||
|
|
||||||
|
<MudTooltip Text="Level of Effort">@AppIcons.LevelOfEffortIcon(EventDefinition.LevelOfEffort)</MudTooltip>
|
||||||
|
|
||||||
|
@if(EventDefinition.EventFormat == EventFormat.Individual) {
|
||||||
|
<MudTooltip Text="Individual">@AppIcons.IndividualEvent</MudTooltip>
|
||||||
|
}
|
||||||
|
@if (EventDefinition.OnSiteActivity)
|
||||||
|
{
|
||||||
|
<MudTooltip Text="On-site Activity">@AppIcons.OnSiteActivity</MudTooltip>
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (EventDefinition.RegionalEvent)
|
||||||
|
{
|
||||||
|
<MudTooltip Text="Regional Event">@AppIcons.RegionalEvent</MudTooltip>
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (EventDefinition.Presubmission)
|
||||||
|
{
|
||||||
|
<MudTooltip Text="Presubmission Event">@AppIcons.PresubmissionEvent</MudTooltip>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public EventDefinition EventDefinition { get; set; }
|
||||||
|
}
|
||||||
@@ -25,35 +25,19 @@
|
|||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
<PropertyColumn Property="@(e => e.ChapterEligibilityCountState)" Title="State#" />
|
<PropertyColumn Property="@(e => e.ChapterEligibilityCountState)" Title="State#" />
|
||||||
<TemplateColumn Title="Regionals" Sortable="true" SortBy="e => e.ChapterEligibilityCountRegionals">
|
<TemplateColumn Title="Attributes" Sortable="false">
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
@if (context.Item.RegionalEvent) { @AppIcons.RegionalEvent }
|
<EventAttributes EventDefinition="context.Item"></EventAttributes>
|
||||||
</CellTemplate>
|
|
||||||
</TemplateColumn>
|
|
||||||
<TemplateColumn Title="Pre-submission" Sortable="true" SortBy="e => e.Presubmission">
|
|
||||||
<CellTemplate>
|
|
||||||
@if (context.Item.Presubmission) { @AppIcons.PresubmissionEvent }
|
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
|
|
||||||
<PropertyColumn Property="@(e => e.LevelOfEffort)" Title="Level of Effort" />
|
<PropertyColumn Property="@(e => e.LevelOfEffort)" Title="Level of Effort" />
|
||||||
<TemplateColumn>
|
<TemplateColumn>
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
<MudStack Row>
|
<CrudActions DetailsHref="@($"/events/details?id={context.Item!.Id}")"
|
||||||
<MudButtonGroup Size="Size.Small">
|
EditHref="@($"/events/edit?id={context.Item!.Id}")"
|
||||||
<MudTooltip Text="Details">
|
DeleteOnClick="() => DeleteEventDefinition(context.Item!)">
|
||||||
<MudIconButton Href="@($"/events/details?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Description">Details</MudIconButton>
|
</CrudActions>
|
||||||
</MudTooltip>
|
|
||||||
<MudTooltip Text="Edit">
|
|
||||||
<MudIconButton Href="@($"/events/edit?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Edit">Edit</MudIconButton>
|
|
||||||
</MudTooltip>
|
|
||||||
<MudTooltip Text="Delete">
|
|
||||||
<MudIconButton Icon="@Icons.Material.Outlined.Delete"
|
|
||||||
Color="Color.Error"
|
|
||||||
OnClick="() => DeleteEventDefinition(context.Item)" />
|
|
||||||
</MudTooltip>
|
|
||||||
</MudButtonGroup>
|
|
||||||
</MudStack>
|
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
</Columns>
|
</Columns>
|
||||||
|
|||||||
@@ -236,7 +236,7 @@
|
|||||||
.Include(e => e.Event)
|
.Include(e => e.Event)
|
||||||
.Include(e => e.Students)
|
.Include(e => e.Students)
|
||||||
.OrderBy(e => e.Event.Name)
|
.OrderBy(e => e.Event.Name)
|
||||||
.ThenBy(e => e.Number)
|
.ThenBy(e => e.Identifier)
|
||||||
.ToArrayAsync();
|
.ToArrayAsync();
|
||||||
|
|
||||||
_students =
|
_students =
|
||||||
|
|||||||
@@ -31,21 +31,10 @@
|
|||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
<TemplateColumn>
|
<TemplateColumn>
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
<MudStack Row>
|
<CrudActions DetailsHref="@($"/students/details?id={context.Item!.Id}")"
|
||||||
<MudButtonGroup Size="Size.Small">
|
EditHref="@($"/students/edit?id={context.Item!.Id}")"
|
||||||
<MudTooltip Text="Details">
|
DeleteOnClick="() => DeleteStudent(context.Item!)">
|
||||||
<MudIconButton Href="@($"/students/details?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Description" />
|
</CrudActions>
|
||||||
</MudTooltip>
|
|
||||||
<MudTooltip Text="Edit">
|
|
||||||
<MudIconButton Href="@($"/students/edit?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Edit" />
|
|
||||||
</MudTooltip>
|
|
||||||
<MudTooltip Text="Delete">
|
|
||||||
<MudIconButton Icon="@Icons.Material.Outlined.Delete"
|
|
||||||
Color="Color.Error"
|
|
||||||
OnClick="() => DeleteStudent(context.Item)" />
|
|
||||||
</MudTooltip>
|
|
||||||
</MudButtonGroup>
|
|
||||||
</MudStack>
|
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
</Columns>
|
</Columns>
|
||||||
|
|||||||
@@ -280,23 +280,8 @@
|
|||||||
<ChildRowContent>
|
<ChildRowContent>
|
||||||
<MudTr>
|
<MudTr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
@foreach (var student in
|
<TeamStudents Team="@context"></TeamStudents>
|
||||||
context.Students
|
<MudDivider Style="border-width:3px"/>
|
||||||
.OrderBy(e =>
|
|
||||||
e.EventRankings
|
|
||||||
.Find(er => er.EventDefinition == context.Event)?.Rank ?? 10)
|
|
||||||
.ThenBy(s => s.Grade + s.TsaYear))
|
|
||||||
{
|
|
||||||
var eventRank =
|
|
||||||
student.EventRankings
|
|
||||||
.Find(e => e.EventDefinition == context.Event)?.Rank;
|
|
||||||
var color = AppIcons.RankedEventColor(eventRank ?? 0);
|
|
||||||
|
|
||||||
<MudPaper Class="d-inline-flex pa-2 mx-3 my-1" Style="@($"background:{color};")">
|
|
||||||
@student.FirstName
|
|
||||||
</MudPaper>
|
|
||||||
}
|
|
||||||
<MudDivider Style="border-width:3px" />
|
|
||||||
</td>
|
</td>
|
||||||
</MudTr>
|
</MudTr>
|
||||||
</ChildRowContent>
|
</ChildRowContent>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<MudSelectItem T="EventDefinition" Value="@(evt)"></MudSelectItem>
|
<MudSelectItem T="EventDefinition" Value="@(evt)"></MudSelectItem>
|
||||||
}
|
}
|
||||||
</MudSelect>
|
</MudSelect>
|
||||||
<MudTextField T="int?" Label="Number" @bind-Value="Team.Number" For="@(() => Team.Number)"></MudTextField>
|
<MudTextField T="string?" Label="Number" @bind-Value="Team.Identifier" For="@(() => Team.Identifier)"></MudTextField>
|
||||||
|
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
private async Task AddTeam()
|
private async Task AddTeam()
|
||||||
{
|
{
|
||||||
Team.TeamId = Team.Event.Name;
|
Team.Identifier = Team.Event.Name;
|
||||||
Context.Teams.Add(Team);
|
Context.Teams.Add(Team);
|
||||||
|
|
||||||
await Context.SaveChangesAsync();
|
await Context.SaveChangesAsync();
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<PageTitle>Edit Team - TSA Chapter Organizer</PageTitle>
|
<PageTitle>Edit Team - TSA Chapter Organizer</PageTitle>
|
||||||
|
|
||||||
<MudText Typo="Typo.h3">Edit</MudText>
|
<MudText Typo="Typo.h3">Edit</MudText>
|
||||||
<MudText Typo="Typo.h4">Team@(Team == null ? "" : $" ({Team.Event.Name} #{Team.Number})")</MudText>
|
<MudText Typo="Typo.h4">Team @(Team.ToString())</MudText>
|
||||||
|
|
||||||
@if (Team is null)
|
@if (Team is null)
|
||||||
{
|
{
|
||||||
@@ -31,12 +31,13 @@ else
|
|||||||
<MudSelectItem T="Student" Value="@student">@student.Name</MudSelectItem>
|
<MudSelectItem T="Student" Value="@student">@student.Name</MudSelectItem>
|
||||||
}
|
}
|
||||||
</MudSelect>
|
</MudSelect>
|
||||||
<MudTextField T="int?" Label="Number" @bind-Value="Team.Number" For="@(() => Team.Number)" Required="false" Clearable="true"></MudTextField>
|
<MudTextField T="Student" Label="Captain" @bind-Value="Team.Captain" For="@(() => Team.Captain)" Required="false" Clearable="true"></MudTextField>
|
||||||
|
<MudTextField T="string?" Label="Identifier" @bind-Value="Team.Identifier" For="@(() => Team.Identifier)" Required="false" Clearable="true"></MudTextField>
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
</MudGrid>
|
</MudGrid>
|
||||||
<MudButton StartIcon="@Icons.Material.Filled.ArrowBack" Href="teams">Back</MudButton>
|
<MudButton StartIcon="@Icons.Material.Filled.ArrowBack" Href="teams">Back</MudButton>
|
||||||
<MudButton StartIcon="@Icons.Material.Filled.Save" OnClick="UpdateTeam">Save</MudButton>
|
<MudButton StartIcon="@Icons.Material.Filled.Save" OnClick="UpdateTeam">Save</MudButton>
|
||||||
</EditForm>
|
</EditForm>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,6 +67,14 @@ else
|
|||||||
{
|
{
|
||||||
NavigationManager.NavigateTo("notfound");
|
NavigationManager.NavigateTo("notfound");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (Team!.Event.EventFormat)
|
||||||
|
{
|
||||||
|
case EventFormat.Individual when Team.Students.Count == 1:
|
||||||
|
Team.Captain ??= Team.Students[0];
|
||||||
|
Team.Identifier ??= Team.Captain.FirstName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// To protect from overposting attacks, enable the specific properties you want to bind to.
|
// To protect from overposting attacks, enable the specific properties you want to bind to.
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ else
|
|||||||
.Include(e => e.Event)
|
.Include(e => e.Event)
|
||||||
.Include(e => e.Students)
|
.Include(e => e.Students)
|
||||||
.OrderBy(e => e.Event.Name)
|
.OrderBy(e => e.Event.Name)
|
||||||
.ThenBy(e => e.Number)
|
.ThenBy(e => e.Identifier)
|
||||||
.ToArrayAsync();
|
.ToArrayAsync();
|
||||||
|
|
||||||
_maxTeamSize = _teams.Max(t => t.Students.Count);
|
_maxTeamSize = _teams.Max(t => t.Students.Count);
|
||||||
|
|||||||
@@ -16,28 +16,21 @@
|
|||||||
|
|
||||||
<MudDataGrid T="Team" ServerData="ServerReload" @ref="_dataGrid" Filterable="true" RowsPerPage="35">
|
<MudDataGrid T="Team" ServerData="ServerReload" @ref="_dataGrid" Filterable="true" RowsPerPage="35">
|
||||||
<Columns>
|
<Columns>
|
||||||
<PropertyColumn Property="@(e => e.ToString())" Title="Event" />
|
<TemplateColumn Title="Event">
|
||||||
|
<CellTemplate>
|
||||||
|
@context.Item.ToString()
|
||||||
|
</CellTemplate>
|
||||||
|
</TemplateColumn>
|
||||||
|
<TemplateColumn Title="Attributes">
|
||||||
|
<CellTemplate>
|
||||||
|
<EventAttributes EventDefinition="@context.Item.Event"></EventAttributes>
|
||||||
|
</CellTemplate>
|
||||||
|
</TemplateColumn>
|
||||||
<TemplateColumn Title="Students">
|
<TemplateColumn Title="Students">
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
@foreach (var student in
|
<TeamStudents Team="@context.Item"></TeamStudents>
|
||||||
context.Item.Students
|
|
||||||
.OrderBy(e =>
|
|
||||||
e.EventRankings
|
|
||||||
.Find(er => er.EventDefinition == context.Item.Event)?.Rank ?? 10)
|
|
||||||
.ThenBy(s => s.Grade + s.TsaYear))
|
|
||||||
{
|
|
||||||
var eventRank =
|
|
||||||
student.EventRankings
|
|
||||||
.Find(e => e.EventDefinition == context.Item.Event)?.Rank;
|
|
||||||
var color = AppIcons.RankedEventColor(eventRank ?? 0);
|
|
||||||
|
|
||||||
<MudPaper Class="d-inline-flex pa-2 mx-2 my-1" Style="@($"background:{color};")">
|
|
||||||
@student.FirstName
|
|
||||||
</MudPaper>
|
|
||||||
}
|
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
@* <TemplateColumn Title="Grade (TSA Year)" SortBy="e => e.Grade" Sortable="true">
|
@* <TemplateColumn Title="Grade (TSA Year)" SortBy="e => e.Grade" Sortable="true">
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
@context.Item.Grade (@context.Item.TsaYear)
|
@context.Item.Grade (@context.Item.TsaYear)
|
||||||
@@ -45,21 +38,11 @@
|
|||||||
</TemplateColumn> *@
|
</TemplateColumn> *@
|
||||||
<TemplateColumn>
|
<TemplateColumn>
|
||||||
<CellTemplate>
|
<CellTemplate>
|
||||||
<MudStack Row>
|
<CrudActions
|
||||||
<MudButtonGroup Size="Size.Small">
|
DetailsHref="@($"/teams/details?id={context.Item!.Id}")"
|
||||||
<MudTooltip Text="Details">
|
EditHref="@($"/teams/edit?id={context.Item!.Id}")"
|
||||||
<MudIconButton Href="@($"/teams/details?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Description">Details</MudIconButton>
|
DeleteOnClick="() => DeleteTeam(context.Item!)">
|
||||||
</MudTooltip>
|
</CrudActions>
|
||||||
<MudTooltip Text="Edit">
|
|
||||||
<MudIconButton Href="@($"/teams/edit?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Edit">Edit</MudIconButton>
|
|
||||||
</MudTooltip>
|
|
||||||
<MudTooltip Text="Delete">
|
|
||||||
<MudIconButton Icon="@Icons.Material.Outlined.Delete"
|
|
||||||
Color="Color.Error"
|
|
||||||
OnClick="() => DeleteTeam(context.Item)" />
|
|
||||||
</MudTooltip>
|
|
||||||
</MudButtonGroup>
|
|
||||||
</MudStack>
|
|
||||||
</CellTemplate>
|
</CellTemplate>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
</Columns>
|
</Columns>
|
||||||
@@ -79,7 +62,7 @@
|
|||||||
.Include(e => e.Students)
|
.Include(e => e.Students)
|
||||||
.ThenInclude(e => e.EventRankings)
|
.ThenInclude(e => e.EventRankings)
|
||||||
.OrderBy(e => e.Event.Name)
|
.OrderBy(e => e.Event.Name)
|
||||||
.ThenBy(e => e.Number)
|
.ThenBy(e => e.Identifier)
|
||||||
.Where(state.FilterDefinitions)
|
.Where(state.FilterDefinitions)
|
||||||
.OrderBy(state.SortDefinitions);
|
.OrderBy(state.SortDefinitions);
|
||||||
|
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ else
|
|||||||
.Include(e => e.Event)
|
.Include(e => e.Event)
|
||||||
.Include(e => e.Students)
|
.Include(e => e.Students)
|
||||||
.OrderBy(e => e.Event.Name)
|
.OrderBy(e => e.Event.Name)
|
||||||
.ThenBy(e => e.Number)
|
.ThenBy(e => e.Identifier)
|
||||||
.ToArrayAsync();
|
.ToArrayAsync();
|
||||||
|
|
||||||
_maxTeamSize = _teams.Max(t => t.Students.Count);
|
_maxTeamSize = _teams.Max(t => t.Students.Count);
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
@using WebApp.Models
|
||||||
|
@foreach (var student in
|
||||||
|
Team.Students
|
||||||
|
.OrderBy(e =>
|
||||||
|
e.EventRankings
|
||||||
|
.Find(er => er.EventDefinition == Team.Event)?.Rank ?? 10)
|
||||||
|
.ThenBy(s => s.Grade + s.TsaYear))
|
||||||
|
{
|
||||||
|
var eventRank =
|
||||||
|
student.EventRankings
|
||||||
|
.Find(e => e.EventDefinition == Team.Event)?.Rank;
|
||||||
|
var color = AppIcons.RankedEventColor(eventRank ?? 0);
|
||||||
|
var captain = Team.Captain != null && Team.Captain.Equals(student);
|
||||||
|
|
||||||
|
<MudPaper Class="d-inline-flex pa-2 mx-3 my-1" Style="@($"background:{color};")">
|
||||||
|
@student.FirstName
|
||||||
|
@if (captain)
|
||||||
|
{
|
||||||
|
<span> *</span>
|
||||||
|
}
|
||||||
|
</MudPaper>
|
||||||
|
}
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public Team Team { get; set; }
|
||||||
|
}
|
||||||
@@ -24,11 +24,11 @@ namespace WebApp.Models
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*https://unicodeplus.com/search*/
|
/*https://unicodeplus.com/search*/
|
||||||
public static string OnSiteActivity = "𝔸";
|
public static string OnSiteActivity = "ⓐ";
|
||||||
public static string RegionalEvent = "ℝ";
|
public static string RegionalEvent = "ⓡ";
|
||||||
public static string IndividualEvent = "ⅈ";
|
public static string IndividualEvent = "ⓘ";
|
||||||
public static string PresubmissionEvent = "↩";
|
public static string PresubmissionEvent = "ⓟ";
|
||||||
public static string PresentationEvent = "ⓟ";
|
public static string PresentationEvent = "";
|
||||||
public static string QuestionMark = "❔";
|
public static string QuestionMark = "❔";
|
||||||
|
|
||||||
public static string EventEffort(EventDefinition eventDefinition)
|
public static string EventEffort(EventDefinition eventDefinition)
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
|
||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<WebPublishMethod>Custom</WebPublishMethod>
|
||||||
|
<DockerPublish>true</DockerPublish>
|
||||||
|
<RegistryUrl>https://docker-registry.kolpacksoftware.com</RegistryUrl>
|
||||||
|
<UserName>busy</UserName>
|
||||||
|
<PublishImageTag>latest</PublishImageTag>
|
||||||
|
<PublishProvider>ContainerRegistry</PublishProvider>
|
||||||
|
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||||
|
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||||
|
<ProjectGuid>039e1539-eda8-4f4e-acc0-b8292827a3a9</ProjectGuid>
|
||||||
|
<_TargetId>DockerCustomContainerRegistry</_TargetId>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -6,6 +6,8 @@
|
|||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<UserSecretsId>73972335-ec46-4ad6-a959-8ebe0b06147d</UserSecretsId>
|
<UserSecretsId>73972335-ec46-4ad6-a959-8ebe0b06147d</UserSecretsId>
|
||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
|
<PackageId>tsa-chapter-organizer</PackageId>
|
||||||
|
<Title>TSA Chapter Organizer</Title>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Reference in New Issue
Block a user