diff --git a/app/Actions/YearEndProcedures/YearEndCleanup.php b/app/Actions/YearEndProcedures/YearEndCleanup.php
index ccf4861..8605c03 100644
--- a/app/Actions/YearEndProcedures/YearEndCleanup.php
+++ b/app/Actions/YearEndProcedures/YearEndCleanup.php
@@ -13,6 +13,7 @@ use App\Models\JudgeAdvancementVote;
use App\Models\NominationEnsembleEntry;
use App\Models\ScoreSheet;
use App\Models\Seat;
+use App\Models\Student;
use Illuminate\Support\Facades\DB;
use function auth;
@@ -23,20 +24,20 @@ class YearEndCleanup
{
}
- public function __invoke(): void
+ public function __invoke(array $options = []): void
{
- $this->cleanup();
+ $this->cleanup($options);
}
/**
* @param $options array array of reset options - possible values are deleteRooms
- * removeAuditionsFromRoom unassignJudges
-
+ * removeAuditionsFromRoom unassignJudges
*
* @throws AuditionAdminException
*/
- public function cleanup($options = []): true
+ public function cleanup(array $options = []): true
{
+
if (! auth()->user() or ! auth()->user()->is_admin) {
throw new AuditionAdminException('Only administrators may perform this action');
}
@@ -54,20 +55,22 @@ class YearEndCleanup
DB::table('entries')->delete();
NominationEnsembleEntry::truncate();
+ Student::query()->increment('grade');
+
if (in_array('deleteRooms', $options)) {
DB::table('auditions')->update(['room_id' => null]);
- DB::table('auditions')->update(['order_in_room' => null]);
- DB::table('room_judges')->truncate();
- DB::table('rooms')->truncate();
+ DB::table('auditions')->update(['order_in_room' => '0']);
+ DB::table('room_user')->truncate();
+ DB::table('rooms')->delete();
}
if (in_array('removeAuditionsFromRoom', $options)) {
DB::table('auditions')->update(['room_id' => null]);
- DB::table('auditions')->update(['order_in_room' => null]);
+ DB::table('auditions')->update(['order_in_room' => '0']);
}
if (in_array('unassignJudges', $options)) {
- DB::table('room_judges')->truncate();
+ DB::table('room_user')->truncate();
}
return true;
diff --git a/app/Http/Controllers/Admin/YearEndResetController.php b/app/Http/Controllers/Admin/YearEndResetController.php
new file mode 100644
index 0000000..52d81d2
--- /dev/null
+++ b/app/Http/Controllers/Admin/YearEndResetController.php
@@ -0,0 +1,26 @@
+options;
+ $cleanUpProcedure($options);
+ auditionLog('Executed year end reset.', []);
+
+ return redirect()->route('dashboard')->with('success', 'Year end reset completed');
+ }
+}
diff --git a/resources/views/admin/year_end_reset.blade.php b/resources/views/admin/year_end_reset.blade.php
new file mode 100644
index 0000000..47cf818
--- /dev/null
+++ b/resources/views/admin/year_end_reset.blade.php
@@ -0,0 +1,23 @@
+
+ Year End Reset
+
+ Reset Options
+
+
+
+
+
+
+ Complete Year End Reset
+
+
+ Confirm Year End Reset
+ Confirm you would like to perform a year end reset. This will delete all seats, scores, entries, and log entries,
+ as well as any optional data you chose. It will also increment the grade of all students in the database.
+ This action will result in data loss and cannot be undone.
+ Confirm Reset
+
+
+
+
+
diff --git a/resources/views/components/layout/navbar/menus/admin.blade.php b/resources/views/components/layout/navbar/menus/admin.blade.php
index cfae63a..00abdd5 100644
--- a/resources/views/components/layout/navbar/menus/admin.blade.php
+++ b/resources/views/components/layout/navbar/menus/admin.blade.php
@@ -32,6 +32,7 @@
Export Results
Export Entries
Print Stand Name Tags
+ Year End Reset
diff --git a/routes/admin.php b/routes/admin.php
index 13a4c17..bb55c10 100644
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -21,6 +21,7 @@ use App\Http\Controllers\Admin\SchoolController;
use App\Http\Controllers\Admin\ScoringGuideController;
use App\Http\Controllers\Admin\StudentController;
use App\Http\Controllers\Admin\UserController;
+use App\Http\Controllers\Admin\YearEndResetController;
use App\Http\Middleware\CheckIfAdmin;
use Illuminate\Support\Facades\Route;
@@ -33,6 +34,10 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')->
Route::get('/recap', [RecapController::class, 'selectAudition'])->name('admin.recap.selectAudition');
Route::get('/recap/{audition}', [RecapController::class, 'showRecap'])->name('admin.recap.recap');
+ // Year end prodecures
+ Route::get('/year_end_procedures', [YearEndResetController::class, 'index'])->name('admin.year_end_procedures');
+ Route::post('/year_end_procedures', [YearEndResetController::class, 'execute'])->name('admin.year_end_procedures');
+
Route::post('/auditions/roomUpdate', [
AuditionController::class, 'roomUpdate',
]); // Endpoint for JS assigning auditions to rooms