From 1ea096469bf1981d696d6038c03b74a5cce725be Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Fri, 26 Sep 2025 10:13:00 -0400 Subject: [PATCH 1/2] Roll back data migration issue with "TimeSlots" replacing "Teams" --- Data/Migrations/20250825173042_InitialCreate.cs | 8 ++++---- Data/Migrations/20250827183503_StudentCleanup.cs | 4 ++-- .../20250903121202_StudentAddEmailPhone.cs | 16 ++++++++-------- Data/Migrations/20250915175030_AddTeamNumber.cs | 8 ++++---- .../20250917165027_NullableTeamNumber.cs | 4 ++-- Data/Migrations/AppDbContextModelSnapshot.cs | 10 +++++----- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Data/Migrations/20250825173042_InitialCreate.cs b/Data/Migrations/20250825173042_InitialCreate.cs index 862c99f..6f20f30 100644 --- a/Data/Migrations/20250825173042_InitialCreate.cs +++ b/Data/Migrations/20250825173042_InitialCreate.cs @@ -54,7 +54,7 @@ namespace Data.Migrations }); migrationBuilder.CreateTable( - name: "TimeSlots", + name: "Teams", columns: table => new { Id = table.Column(type: "INTEGER", nullable: false) @@ -91,7 +91,7 @@ namespace Data.Migrations table.ForeignKey( name: "FK_StudentTeam_Teams_TeamsId", column: x => x.TeamsId, - principalTable: "TimeSlots", + principalTable: "Teams", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); @@ -108,7 +108,7 @@ namespace Data.Migrations migrationBuilder.CreateIndex( name: "IX_Teams_CaptainId", - table: "TimeSlots", + table: "Teams", column: "CaptainId"); } @@ -122,7 +122,7 @@ namespace Data.Migrations name: "StudentTeam"); migrationBuilder.DropTable( - name: "TimeSlots"); + name: "Teams"); migrationBuilder.DropTable( name: "Students"); diff --git a/Data/Migrations/20250827183503_StudentCleanup.cs b/Data/Migrations/20250827183503_StudentCleanup.cs index a112a89..f30f9e9 100644 --- a/Data/Migrations/20250827183503_StudentCleanup.cs +++ b/Data/Migrations/20250827183503_StudentCleanup.cs @@ -12,7 +12,7 @@ namespace Data.Migrations { migrationBuilder.RenameColumn( name: "TeamNumber", - table: "TimeSlots", + table: "Teams", newName: "TeamId"); migrationBuilder.RenameColumn( @@ -36,7 +36,7 @@ namespace Data.Migrations { migrationBuilder.RenameColumn( name: "TeamId", - table: "TimeSlots", + table: "Teams", newName: "TeamNumber"); migrationBuilder.RenameColumn( diff --git a/Data/Migrations/20250903121202_StudentAddEmailPhone.cs b/Data/Migrations/20250903121202_StudentAddEmailPhone.cs index 400b8fd..b354b2d 100644 --- a/Data/Migrations/20250903121202_StudentAddEmailPhone.cs +++ b/Data/Migrations/20250903121202_StudentAddEmailPhone.cs @@ -12,14 +12,14 @@ namespace Data.Migrations { migrationBuilder.AddColumn( name: "EventId", - table: "TimeSlots", + table: "Teams", type: "INTEGER", nullable: false, defaultValue: 0); migrationBuilder.AddColumn( name: "Name", - table: "TimeSlots", + table: "Teams", type: "TEXT", nullable: false, defaultValue: ""); @@ -47,12 +47,12 @@ namespace Data.Migrations migrationBuilder.CreateIndex( name: "IX_Teams_EventId", - table: "TimeSlots", + table: "Teams", column: "EventId"); migrationBuilder.AddForeignKey( name: "FK_Teams_Events_EventId", - table: "TimeSlots", + table: "Teams", column: "EventId", principalTable: "Events", principalColumn: "Id", @@ -64,19 +64,19 @@ namespace Data.Migrations { migrationBuilder.DropForeignKey( name: "FK_Teams_Events_EventId", - table: "TimeSlots"); + table: "Teams"); migrationBuilder.DropIndex( name: "IX_Teams_EventId", - table: "TimeSlots"); + table: "Teams"); migrationBuilder.DropColumn( name: "EventId", - table: "TimeSlots"); + table: "Teams"); migrationBuilder.DropColumn( name: "Name", - table: "TimeSlots"); + table: "Teams"); migrationBuilder.DropColumn( name: "Email", diff --git a/Data/Migrations/20250915175030_AddTeamNumber.cs b/Data/Migrations/20250915175030_AddTeamNumber.cs index 8aa8ebc..3fa3f49 100644 --- a/Data/Migrations/20250915175030_AddTeamNumber.cs +++ b/Data/Migrations/20250915175030_AddTeamNumber.cs @@ -12,11 +12,11 @@ namespace Data.Migrations { migrationBuilder.DropColumn( name: "Name", - table: "TimeSlots"); + table: "Teams"); migrationBuilder.AddColumn( name: "Number", - table: "TimeSlots", + table: "Teams", type: "INTEGER", nullable: false, defaultValue: 0); @@ -27,11 +27,11 @@ namespace Data.Migrations { migrationBuilder.DropColumn( name: "Number", - table: "TimeSlots"); + table: "Teams"); migrationBuilder.AddColumn( name: "Name", - table: "TimeSlots", + table: "Teams", type: "TEXT", nullable: false, defaultValue: ""); diff --git a/Data/Migrations/20250917165027_NullableTeamNumber.cs b/Data/Migrations/20250917165027_NullableTeamNumber.cs index ba40250..fa6189d 100644 --- a/Data/Migrations/20250917165027_NullableTeamNumber.cs +++ b/Data/Migrations/20250917165027_NullableTeamNumber.cs @@ -12,7 +12,7 @@ namespace Data.Migrations { migrationBuilder.AlterColumn( name: "Number", - table: "TimeSlots", + table: "Teams", type: "INTEGER", nullable: true, oldClrType: typeof(int), @@ -24,7 +24,7 @@ namespace Data.Migrations { migrationBuilder.AlterColumn( name: "Number", - table: "TimeSlots", + table: "Teams", type: "INTEGER", nullable: false, defaultValue: 0, diff --git a/Data/Migrations/AppDbContextModelSnapshot.cs b/Data/Migrations/AppDbContextModelSnapshot.cs index f303890..1c45505 100644 --- a/Data/Migrations/AppDbContextModelSnapshot.cs +++ b/Data/Migrations/AppDbContextModelSnapshot.cs @@ -83,7 +83,7 @@ namespace Data.Migrations b.HasIndex("Name"); - b.ToTable("Events"); + b.ToTable("Events", (string)null); }); modelBuilder.Entity("Core.Entities.Student", b => @@ -128,7 +128,7 @@ namespace Data.Migrations b.HasKey("Id"); - b.ToTable("Students"); + b.ToTable("Students", (string)null); }); modelBuilder.Entity("Core.Entities.StudentEventRanking", b => @@ -146,7 +146,7 @@ namespace Data.Migrations b.HasIndex("StudentId"); - b.ToTable("StudentEventRanking"); + b.ToTable("StudentEventRanking", (string)null); }); modelBuilder.Entity("Core.Entities.Team", b => @@ -173,7 +173,7 @@ namespace Data.Migrations b.HasIndex("EventId"); - b.ToTable("TimeSlots"); + b.ToTable("Teams", (string)null); }); modelBuilder.Entity("StudentTeam", b => @@ -188,7 +188,7 @@ namespace Data.Migrations b.HasIndex("TeamsId"); - b.ToTable("StudentTeam"); + b.ToTable("StudentTeam", (string)null); }); modelBuilder.Entity("Core.Entities.StudentEventRanking", b => From 688ca60511793e6cc11c4f44f104d183c0eab73d Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Fri, 26 Sep 2025 11:33:25 -0400 Subject: [PATCH 2/2] Event definiteion updates --- Core/Calculation/EventAssignment.cs | 4 +- Core/Entities/EventDefinition.cs | 73 +++-- Core/Parsers/EventDefinitionParser.cs | 12 +- ...6142634_EventDefinition_Update.Designer.cs | 257 ++++++++++++++++++ .../20250926142634_EventDefinition_Update.cs | 100 +++++++ Data/Migrations/AppDbContextModelSnapshot.cs | 40 +-- DataBackup/ChapterOrganizer.db | Bin 114688 -> 135168 bytes Tests/Parsers/EventDefinitionParser_Tests.cs | 2 +- Tests/Parsers/TeamParser_Tests.cs | 2 +- .../Pages/EventDefinitionPages/Create.razor | 17 +- .../Pages/EventDefinitionPages/Delete.razor | 120 -------- .../Pages/EventDefinitionPages/Details.razor | 14 +- .../Pages/EventDefinitionPages/Edit.razor | 168 +++--------- .../Pages/EventDefinitionPages/Index.razor | 20 +- .../Components/Pages/StudentPages/Index.razor | 35 ++- .../Components/Pages/TeamPages/Printout.razor | 4 +- WebApp/Models/AppIcons.cs | 6 + 17 files changed, 537 insertions(+), 337 deletions(-) create mode 100644 Data/Migrations/20250926142634_EventDefinition_Update.Designer.cs create mode 100644 Data/Migrations/20250926142634_EventDefinition_Update.cs delete mode 100644 WebApp/Components/Pages/EventDefinitionPages/Delete.razor diff --git a/Core/Calculation/EventAssignment.cs b/Core/Calculation/EventAssignment.cs index fb24012..ba6bc68 100644 --- a/Core/Calculation/EventAssignment.cs +++ b/Core/Calculation/EventAssignment.cs @@ -311,8 +311,8 @@ namespace Core.Calculation //var teamsCount = (int)Math.Ceiling(teamDivs); var teamCount = (int)Math.Round(teamDivs); - if (teamCount > evt.MaxTeamCountState) - teamCount = evt.MaxTeamCountState; + if (teamCount > evt.ChapterEligibilityCountState) + teamCount = evt.ChapterEligibilityCountState; // limit to one team for group events if (_parameters.LimitTeamsToOne diff --git a/Core/Entities/EventDefinition.cs b/Core/Entities/EventDefinition.cs index 01ff23e..1a91735 100644 --- a/Core/Entities/EventDefinition.cs +++ b/Core/Entities/EventDefinition.cs @@ -9,8 +9,7 @@ public class EventDefinition [Required] [StringLength(100, MinimumLength = 2)] [Display(Name = "Event Name")] - - public string Name { get; set; } + public string Name { get; set; } [Required] [StringLength(40, MinimumLength = 2)] @@ -31,45 +30,53 @@ public class EventDefinition ? MinTeamSize.ToString() : $"{MinTeamSize.ToString()}-{MaxTeamSize.ToString()}"; + [StringLength(100, MinimumLength = 3)] public string? SemifinalistActivity { get; set; } public bool InterviewOrPresentation => SemifinalistActivity != null && (SemifinalistActivity.Contains("Interview") || SemifinalistActivity.Contains("Presentation")); - public bool OnSiteActivity - => SemifinalistActivity != null - && (SemifinalistActivity.Contains("Challenge") - || SemifinalistActivity.Contains("Race") - || SemifinalistActivity.Contains("Speech") - || SemifinalistActivity.Contains("Test") - || SemifinalistActivity.Contains("Flight") - || Name.Contains("Leadership") - || Name.Contains("Forensic") - || Name.Contains("Flight") - || Name.Contains("Coding") - || SemifinalistActivity.Contains("Debate") - || SemifinalistActivity.Contains("Photography") - || SemifinalistActivity.Contains("Build") - || Name.Contains("Chapter") - || Name.Contains("Podcast")); + public bool OnSiteActivity { get; set; } + //=> SemifinalistActivity != null + // && (SemifinalistActivity.Contains("Challenge") + // || SemifinalistActivity.Contains("Race") + // || SemifinalistActivity.Contains("Speech") + // || SemifinalistActivity.Contains("Test") + // || SemifinalistActivity.Contains("Flight") + // || Name.Contains("Leadership") + // || Name.Contains("Forensic") + // || Name.Contains("Flight") + // || Name.Contains("Coding") + // || SemifinalistActivity.Contains("Debate") + // || SemifinalistActivity.Contains("Photography") + // || SemifinalistActivity.Contains("Build") + // || Name.Contains("Chapter") + // || Name.Contains("Podcast")); + [StringLength(1024, MinimumLength = 3)] public string? Notes { get; set; } + [Range(0, 3)] + public int ChapterEligibilityCountRegionals { get; set; } + [Range(1, 3)] - public int MaxTeamCountState { get; set; } - public bool RegionalEvent { get; set; } + public int ChapterEligibilityCountState { get; set; } - public bool RegionalPresubmit { get; set; } - public bool StatePresubmission { get; set; } - public bool StatePretesting { get; set; } - public bool StatePreliminaryRound { get; set; } + public bool RegionalEvent => ChapterEligibilityCountRegionals > 0; - public string? Documentation { get; set; } + public bool Presubmission { get; set; } + + + [StringLength(64)] + public string? Documentation { get; set; } [Required] - public string Eligibility { get; set; } + [StringLength(256)] + public string Eligibility { get; set; } + [StringLength(4096)] public string? Theme { get; set; } - public string? Description { get; set; } + [StringLength(1024)] + public string? Description { get; set; } public int? LevelOfEffort { get; set; } public override string ToString() @@ -80,16 +87,4 @@ public class EventDefinition public static readonly EventDefinition GeneralSchedule = new(){Name = "General Schedule"}; public static readonly EventDefinition VotingDelegates = new(){Name = "Voting Delegates"}; - - public string EventAttributes () - { - var st = new List(); - - if (EventFormat is EventFormat.Individual) - st.Add( "Ind."); - if (RegionalEvent) - st.Add( "Reg."); - - return string.Join(", ", st); - } } \ No newline at end of file diff --git a/Core/Parsers/EventDefinitionParser.cs b/Core/Parsers/EventDefinitionParser.cs index a26e576..5c22992 100644 --- a/Core/Parsers/EventDefinitionParser.cs +++ b/Core/Parsers/EventDefinitionParser.cs @@ -56,17 +56,17 @@ public class EventDefinitionParser : CsvParserBase Name = name.Trim(), ShortName = shortName.Trim(), EventFormat = format, - MaxTeamCountState = stateTeams, + ChapterEligibilityCountState = stateTeams, MinTeamSize = min, MaxTeamSize = max, SemifinalistActivity = semifinalistActivity, - RegionalEvent = !string.IsNullOrEmpty(regionalCount), - RegionalPresubmit = regionalPresubmit.Trim() == "TRUE", + //RegionalEvent = !string.IsNullOrEmpty(regionalCount), + //RegionalPresubmit = regionalPresubmit.Trim() == "TRUE", Notes = regionalNotes, Documentation= documentation, - StatePresubmission = statePresubmission.Trim() == "TRUE", - StatePretesting = statePretesting.Trim() == "TRUE", - StatePreliminaryRound = statePreliminary.Trim() == "TRUE", + Presubmission = statePresubmission.Trim() == "TRUE", + //StatePretesting = statePretesting.Trim() == "TRUE", + //StatePreliminaryRound = statePreliminary.Trim() == "TRUE", Eligibility = eligibility, Theme = theme, Description = description, diff --git a/Data/Migrations/20250926142634_EventDefinition_Update.Designer.cs b/Data/Migrations/20250926142634_EventDefinition_Update.Designer.cs new file mode 100644 index 0000000..06b18cd --- /dev/null +++ b/Data/Migrations/20250926142634_EventDefinition_Update.Designer.cs @@ -0,0 +1,257 @@ +// +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("20250926142634_EventDefinition_Update")] + partial class EventDefinition_Update + { + /// + 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("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChapterEligibilityCountRegionals") + .HasColumnType("INTEGER"); + + b.Property("ChapterEligibilityCountState") + .HasColumnType("INTEGER"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("TEXT"); + + b.Property("Documentation") + .HasMaxLength(64) + .HasColumnType("TEXT"); + + b.Property("Eligibility") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("EventFormat") + .HasColumnType("INTEGER"); + + b.Property("LevelOfEffort") + .HasColumnType("INTEGER"); + + b.Property("MaxTeamSize") + .HasColumnType("INTEGER"); + + b.Property("MinTeamSize") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("TEXT"); + + b.Property("Notes") + .HasMaxLength(1024) + .HasColumnType("TEXT"); + + b.Property("OnSiteActivity") + .HasColumnType("INTEGER"); + + b.Property("Presubmission") + .HasColumnType("INTEGER"); + + b.Property("SemifinalistActivity") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("ShortName") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("TEXT"); + + b.Property("Theme") + .HasMaxLength(4096) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("Core.Entities.Student", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Email") + .HasColumnType("TEXT"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Grade") + .HasColumnType("INTEGER"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("NationalId") + .HasColumnType("TEXT"); + + b.Property("OfficerRole") + .HasColumnType("INTEGER"); + + b.Property("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property("RegionalId") + .HasColumnType("TEXT"); + + b.Property("StateId") + .HasColumnType("TEXT"); + + b.Property("TsaYear") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Students"); + }); + + modelBuilder.Entity("Core.Entities.StudentEventRanking", b => + { + b.Property("EventDefinitionId") + .HasColumnType("INTEGER"); + + b.Property("StudentId") + .HasColumnType("INTEGER"); + + b.Property("Rank") + .HasColumnType("INTEGER"); + + b.HasKey("EventDefinitionId", "StudentId"); + + b.HasIndex("StudentId"); + + b.ToTable("StudentEventRanking"); + }); + + modelBuilder.Entity("Core.Entities.Team", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CaptainId") + .HasColumnType("INTEGER"); + + b.Property("EventId") + .HasColumnType("INTEGER"); + + b.Property("Number") + .HasColumnType("INTEGER"); + + b.Property("TeamId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CaptainId"); + + b.HasIndex("EventId"); + + b.ToTable("Teams"); + }); + + modelBuilder.Entity("StudentTeam", b => + { + b.Property("StudentsId") + .HasColumnType("INTEGER"); + + b.Property("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 + } + } +} diff --git a/Data/Migrations/20250926142634_EventDefinition_Update.cs b/Data/Migrations/20250926142634_EventDefinition_Update.cs new file mode 100644 index 0000000..92740b8 --- /dev/null +++ b/Data/Migrations/20250926142634_EventDefinition_Update.cs @@ -0,0 +1,100 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Data.Migrations +{ + /// + public partial class EventDefinition_Update : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "MaxTeamCountState", + table: "Events"); + + migrationBuilder.DropColumn( + name: "RegionalEvent", + table: "Events"); + + migrationBuilder.RenameColumn( + name: "StatePretesting", + table: "Events", + newName: "Presubmission"); + + migrationBuilder.RenameColumn( + name: "StatePresubmission", + table: "Events", + newName: "OnSiteActivity"); + + migrationBuilder.RenameColumn( + name: "StatePreliminaryRound", + table: "Events", + newName: "ChapterEligibilityCountState"); + + migrationBuilder.RenameColumn( + name: "RegionalPresubmit", + table: "Events", + newName: "ChapterEligibilityCountRegionals"); + + migrationBuilder.AlterColumn( + name: "ShortName", + table: "Events", + type: "TEXT", + maxLength: 40, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "TEXT", + oldNullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "Presubmission", + table: "Events", + newName: "StatePretesting"); + + migrationBuilder.RenameColumn( + name: "OnSiteActivity", + table: "Events", + newName: "StatePresubmission"); + + migrationBuilder.RenameColumn( + name: "ChapterEligibilityCountState", + table: "Events", + newName: "StatePreliminaryRound"); + + migrationBuilder.RenameColumn( + name: "ChapterEligibilityCountRegionals", + table: "Events", + newName: "RegionalPresubmit"); + + migrationBuilder.AlterColumn( + name: "ShortName", + table: "Events", + type: "TEXT", + nullable: true, + oldClrType: typeof(string), + oldType: "TEXT", + oldMaxLength: 40); + + migrationBuilder.AddColumn( + name: "MaxTeamCountState", + table: "Events", + type: "INTEGER", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "RegionalEvent", + table: "Events", + type: "INTEGER", + nullable: false, + defaultValue: false); + } + } +} diff --git a/Data/Migrations/AppDbContextModelSnapshot.cs b/Data/Migrations/AppDbContextModelSnapshot.cs index 1c45505..c188c0c 100644 --- a/Data/Migrations/AppDbContextModelSnapshot.cs +++ b/Data/Migrations/AppDbContextModelSnapshot.cs @@ -22,14 +22,23 @@ namespace Data.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("ChapterEligibilityCountRegionals") + .HasColumnType("INTEGER"); + + b.Property("ChapterEligibilityCountState") + .HasColumnType("INTEGER"); + b.Property("Description") + .HasMaxLength(1024) .HasColumnType("TEXT"); b.Property("Documentation") + .HasMaxLength(64) .HasColumnType("TEXT"); b.Property("Eligibility") .IsRequired() + .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("EventFormat") @@ -38,9 +47,6 @@ namespace Data.Migrations b.Property("LevelOfEffort") .HasColumnType("INTEGER"); - b.Property("MaxTeamCountState") - .HasColumnType("INTEGER"); - b.Property("MaxTeamSize") .HasColumnType("INTEGER"); @@ -53,37 +59,33 @@ namespace Data.Migrations .HasColumnType("TEXT"); b.Property("Notes") + .HasMaxLength(1024) .HasColumnType("TEXT"); - b.Property("RegionalEvent") + b.Property("OnSiteActivity") .HasColumnType("INTEGER"); - b.Property("RegionalPresubmit") + b.Property("Presubmission") .HasColumnType("INTEGER"); b.Property("SemifinalistActivity") + .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("ShortName") + .IsRequired() + .HasMaxLength(40) .HasColumnType("TEXT"); - b.Property("StatePreliminaryRound") - .HasColumnType("INTEGER"); - - b.Property("StatePresubmission") - .HasColumnType("INTEGER"); - - b.Property("StatePretesting") - .HasColumnType("INTEGER"); - b.Property("Theme") + .HasMaxLength(4096) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("Name"); - b.ToTable("Events", (string)null); + b.ToTable("Events"); }); modelBuilder.Entity("Core.Entities.Student", b => @@ -128,7 +130,7 @@ namespace Data.Migrations b.HasKey("Id"); - b.ToTable("Students", (string)null); + b.ToTable("Students"); }); modelBuilder.Entity("Core.Entities.StudentEventRanking", b => @@ -146,7 +148,7 @@ namespace Data.Migrations b.HasIndex("StudentId"); - b.ToTable("StudentEventRanking", (string)null); + b.ToTable("StudentEventRanking"); }); modelBuilder.Entity("Core.Entities.Team", b => @@ -173,7 +175,7 @@ namespace Data.Migrations b.HasIndex("EventId"); - b.ToTable("Teams", (string)null); + b.ToTable("Teams"); }); modelBuilder.Entity("StudentTeam", b => @@ -188,7 +190,7 @@ namespace Data.Migrations b.HasIndex("TeamsId"); - b.ToTable("StudentTeam", (string)null); + b.ToTable("StudentTeam"); }); modelBuilder.Entity("Core.Entities.StudentEventRanking", b => diff --git a/DataBackup/ChapterOrganizer.db b/DataBackup/ChapterOrganizer.db index ab25e681c97b467e79fe110cc41c6c1100fe2268..5e640ccac65781aa579cb9148fc548710976729e 100644 GIT binary patch delta 11618 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

q3?&~+ zc@ABy+*gFa%b<}(NyPdSf|FGk84*#6%ubV}7 z3%m?|Rb8R_seI+;G-Omh{t%@o%j?jE%9%RUF|&IkI)bX1Xxs91sw@{e0mea{KUIMJ zrbP5PLTgSC>qsVaR7mE@7h5?}M%024I8>5qE;25UV=C#m#T zEIDtc&`RG5v~31JX(sBVC+m4Dl|xi(ZHk}MN^I0_RNp1k*=&Mg2vmWi!^(1gRYL#{ zEJfZ~&U;~(f+Ic8IH=&xe3)-4+STNvJ8aSM94l2jrn4@K(x9D`L63Ga9p=ZVBh;hR z5ilfyiOHHW;z*EV+W7FzITG`Dt_6-n2M{)rpWk0byp2O#NBUO>N7gS#M^)R?2G7PUWs@^l=G&sH4C} zQ1$#8?1%AWaF$X_P-`&va1B!Ibkfh!TZ`H@e<_db=*&+xphIW| z9Q$sxje&WkC*}p#Xu`Z)_IIoc{rAj^l@0Be_*E70b8O|o<;Z67isZ~PcBl<|J-J+= znjHnqPEN+*%I#zlkLBER4Q|Bpeovu33X-bY19E#3)IuqTh;&lr>w?$(i47MfoO~Pfnjg!~>qHqgt7= zz(t?^JlwxPMtgFM#0NYG_YFabY=VXW$s0tXBwvTD8pu7a)Lw_O$rZJ`RJj1TysJsl zsr~%%1Qb(8tCb;Fmo9?rW>Pedo=4t;u#yOi42$R`c#ugRl;kZwmmt8EH=m>6cG{Ep z0ifeAg#*0}O4>n`n{qRIfZYw}o#kx0`7`tT=5sLjkDGI?8_8s)7EF5m9#uvq=`Yk# z%7@n=hi;cDQ5;9ngeJ95N6nl(if%@RW>s8cBque>uImu*us5orr8>Q$LAmxCpsgOb z4qZkkk#pB?nP#523FR?%^+LkBwN)i+D%X`%R8%Hz5|q!FZb9#()vVz`N~b$d;R`s9 zdxPBh)SV~4CGUK`^?&2e=LPdFQ~on|J_`*GYU<>3`Ww`XpE|>X$lG5D_aJlRI}FRe z@D8X3uR$Nnk0(|B|G5bI`(I_6^k*ozgc-(+d7n8i=_=y^{Tc4IB&YUCm|aJ;o1+6( zy$xu(D;V|e>VoT1iA?mO47JSR%f7gbd{C1%d)aFG; t.Event.RegionalEvent)) { - Console.WriteLine($"{team.Event.Name} {team.Event.RegionalPresubmit} team.RegionalTimeSlot"); + Console.WriteLine($"{team.Event.Name} {team.Event.RegionalEvent} team.RegionalTimeSlot"); var join = string.Join(", ", team.Students.OrderByDescending(s => team.Captain == s).ThenByDescending(s => s.Grade + s.TsaYear).Select(s => $"{s.FirstNameLastName}{(team.Captain == s ? " *" + "(Cpt.)" : "")}")); Console.WriteLine($"\t{join}"); diff --git a/WebApp/Components/Pages/EventDefinitionPages/Create.razor b/WebApp/Components/Pages/EventDefinitionPages/Create.razor index 992ef45..0c33741 100644 --- a/WebApp/Components/Pages/EventDefinitionPages/Create.razor +++ b/WebApp/Components/Pages/EventDefinitionPages/Create.razor @@ -27,21 +27,20 @@ } - + - + + - - + + + - - - - - + + diff --git a/WebApp/Components/Pages/EventDefinitionPages/Delete.razor b/WebApp/Components/Pages/EventDefinitionPages/Delete.razor deleted file mode 100644 index d0936be..0000000 --- a/WebApp/Components/Pages/EventDefinitionPages/Delete.razor +++ /dev/null @@ -1,120 +0,0 @@ -@page "/events/delete" -@using Microsoft.EntityFrameworkCore -@inject AppDbContext context -@inject NavigationManager NavigationManager - -Delete - -

Delete

- -

Are you sure you want to delete this?

-
-

EventDefinition

-
- @if (eventdefinition is null) - { -

Loading...

- } - else { -
-
Name
-
@eventdefinition.Name
-
-
-
Short Name
-
@eventdefinition.ShortName
-
-
-
Event Format
-
@eventdefinition.EventFormat
-
-
-
Min Team Size
-
@eventdefinition.MinTeamSize
-
-
-
Max Team Size
-
@eventdefinition.MaxTeamSize
-
-
-
SemifinalistActivity
-
@eventdefinition.SemifinalistActivity
-
-
-
Notes
-
@eventdefinition.Notes
-
-
-
MaxTeamCountState
-
@eventdefinition.MaxTeamCountState
-
-
-
RegionalEvent
-
@eventdefinition.RegionalEvent
-
-
-
RegionalPresubmit
-
@eventdefinition.RegionalPresubmit
-
-
-
StatePresubmission
-
@eventdefinition.StatePresubmission
-
-
-
StatePretesting
-
@eventdefinition.StatePretesting
-
-
-
StatePreliminaryRound
-
@eventdefinition.StatePreliminaryRound
-
-
-
Documentation
-
@eventdefinition.Documentation
-
-
-
Eligibility
-
@eventdefinition.Eligibility
-
-
-
Theme
-
@eventdefinition.Theme
-
-
-
Description
-
@eventdefinition.Description
-
-
-
LevelOfEffort
-
@eventdefinition.LevelOfEffort
-
- - | - Back to List - - } -
- -@code { - private EventDefinition? eventdefinition; - - [SupplyParameterFromQuery] - private int Id { get; set; } - - protected override async Task OnInitializedAsync() - { - eventdefinition = await context.Events.FirstOrDefaultAsync(m => m.Id == Id); - - if (eventdefinition is null) - { - NavigationManager.NavigateTo("notfound"); - } - } - - private async Task DeleteEventDefinition() - { - context.Events.Remove(eventdefinition!); - await context.SaveChangesAsync(); - NavigationManager.NavigateTo("/events"); - } -} diff --git a/WebApp/Components/Pages/EventDefinitionPages/Details.razor b/WebApp/Components/Pages/EventDefinitionPages/Details.razor index ce62a3c..fab61e5 100644 --- a/WebApp/Components/Pages/EventDefinitionPages/Details.razor +++ b/WebApp/Components/Pages/EventDefinitionPages/Details.razor @@ -30,18 +30,18 @@
@eventdefinition.SemifinalistActivity
Notes
@eventdefinition.Notes
-
MaxTeamCountState
-
@eventdefinition.MaxTeamCountState
+
ChapterEligibilityCountState
+
@eventdefinition.ChapterEligibilityCountState
RegionalEvent
@eventdefinition.RegionalEvent
RegionalPresubmit
-
@eventdefinition.RegionalPresubmit
-
StatePresubmission
-
@eventdefinition.StatePresubmission
+ @*
@eventdefinition.RegionalPresubmit
*@ +
Presubmission
+
@eventdefinition.Presubmission
StatePretesting
-
@eventdefinition.StatePretesting
+ @*
@eventdefinition.StatePretesting
*@
StatePreliminaryRound
-
@eventdefinition.StatePreliminaryRound
+ @*
@eventdefinition.StatePreliminaryRound
*@
Documentation
@eventdefinition.Documentation
Eligibility
diff --git a/WebApp/Components/Pages/EventDefinitionPages/Edit.razor b/WebApp/Components/Pages/EventDefinitionPages/Edit.razor index 23f4f2f..eb9278f 100644 --- a/WebApp/Components/Pages/EventDefinitionPages/Edit.razor +++ b/WebApp/Components/Pages/EventDefinitionPages/Edit.razor @@ -1,132 +1,54 @@ @page "/events/edit" @using Microsoft.EntityFrameworkCore -@using Core.Entities -@using Data @inject AppDbContext context @inject NavigationManager NavigationManager -Edit +Edit Event - TSA Chapter Organizer -

Edit

+Edit +Event + -

EventDefinition

-
-@if (EventDefinition is null) -{ -

Loading...

-} -else -{ -
-
- - - - -
- - - -
-
- - - -
-
- - - @foreach (var format in Enum.GetValues(typeof(EventFormat))) - { - - } - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
- -
-
-
-} - + + + + + + + + + + + @* Team + Individual *@ + @foreach (EventFormat format in Enum.GetValues(typeof(EventFormat))) + { + @(format.ToString()) + } + + + + + + + + + + + + + + + + + + + + Back + Save + + @code { [SupplyParameterFromQuery] @@ -147,13 +69,13 @@ else // To protect from overposting attacks, enable the specific properties you want to bind to. // For more information, see https://learn.microsoft.com/aspnet/core/blazor/forms/#mitigate-overposting-attacks. - private async Task UpdateEventDefinition() + private void OnValidSubmit() { context.Attach(EventDefinition!).State = EntityState.Modified; try { - await context.SaveChangesAsync(); + context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { diff --git a/WebApp/Components/Pages/EventDefinitionPages/Index.razor b/WebApp/Components/Pages/EventDefinitionPages/Index.razor index 01af8b4..893bdef 100644 --- a/WebApp/Components/Pages/EventDefinitionPages/Index.razor +++ b/WebApp/Components/Pages/EventDefinitionPages/Index.razor @@ -1,5 +1,6 @@ @page "/events" @using Microsoft.EntityFrameworkCore +@using WebApp.Models @inject AppDbContext Context Events - TSA Chapter Organizer @@ -13,18 +14,27 @@ - - + + [@context.Item.MinTeamSize - @context.Item.MaxTeamSize] + - + + - @context.Item.MaxTeamCountState + @if (context.Item.RegionalEvent) { @AppIcons.RegionalEvent } + + + @if (context.Item.Presubmission) { @AppIcons.PresubmissionEvent } + + + + @@ -54,7 +64,7 @@ private async Task> ServerReload(GridState state) { - var query = Context.Events.Where(state.FilterDefinitions).OrderBy(state.SortDefinitions); + var query = Context.Events.OrderBy(e => e.Name).Where(state.FilterDefinitions).OrderBy(state.SortDefinitions); var totalItems = await query.CountAsync(); var pagedData = await query.Skip(state.Page * state.PageSize).Take(state.PageSize).ToArrayAsync(); diff --git a/WebApp/Components/Pages/StudentPages/Index.razor b/WebApp/Components/Pages/StudentPages/Index.razor index 3752f42..4dfdf4a 100644 --- a/WebApp/Components/Pages/StudentPages/Index.razor +++ b/WebApp/Components/Pages/StudentPages/Index.razor @@ -2,6 +2,7 @@ @using Microsoft.EntityFrameworkCore @using WebApp.Models @inject AppDbContext Context +@inject IDialogService DialogService Students - TSA Chapter Organizer @@ -32,13 +33,16 @@ - Details + - Edit + - Delete + @@ -69,4 +73,29 @@ Items = pagedData }; } + + private async Task DeleteElement(object obj) + { + //_isRowBlocked = true; + + if (obj is Student student) + { + var result = await DialogService + .ShowMessageBox("Delete student", + (MarkupString)$"Are you sure want to delete {student.Name}?", + yesText:"Yes", + noText:"Cancel"); + + if (result == true) + { + Context.Students.Remove(student!); + await Context.SaveChangesAsync(); + //Snackbar.Add($"Delete event: Delete of Element {element.Name}", Severity.Info); + } + } + + //_isRowBlocked = false; + StateHasChanged(); + _dataGrid.ReloadServerData(); + } } diff --git a/WebApp/Components/Pages/TeamPages/Printout.razor b/WebApp/Components/Pages/TeamPages/Printout.razor index 6b3f39a..d7b23b4 100644 --- a/WebApp/Components/Pages/TeamPages/Printout.razor +++ b/WebApp/Components/Pages/TeamPages/Printout.razor @@ -76,9 +76,9 @@ else } } else if (context.Event.EventFormat == EventFormat.Individual - && context.Students.Count > context.Event.MaxTeamCountState) + && context.Students.Count > context.Event.ChapterEligibilityCountState) { - Max Team Count State: @context.Event.MaxTeamCountState + Max Team Count State: @context.Event.ChapterEligibilityCountState } diff --git a/WebApp/Models/AppIcons.cs b/WebApp/Models/AppIcons.cs index 9a0ffe9..91740dc 100644 --- a/WebApp/Models/AppIcons.cs +++ b/WebApp/Models/AppIcons.cs @@ -25,6 +25,8 @@ namespace WebApp.Models public static string OnSiteActivity = "ⓐ"; public static string RegionalEvent = "ⓡ"; public static string IndividualEvent = "ⓘ"; + public static string PresubmissionEvent = "🕑"; + public static string PresentationEvent = "ⓟ"; public static string QuestionMark = "❔"; public static string EventEffort(EventDefinition eventDefinition) @@ -38,8 +40,12 @@ namespace WebApp.Models if (eventDefinition.EventFormat == EventFormat.Individual) v.Add(IndividualEvent); + if (eventDefinition.InterviewOrPresentation) + v.Add(PresentationEvent); if (eventDefinition.OnSiteActivity) v.Add(OnSiteActivity); + if (eventDefinition.Presubmission) + v.Add(PresubmissionEvent); if (eventDefinition.RegionalEvent) v.Add(RegionalEvent);