diff --git a/app/Actions/Reports/GetExportData.php b/app/Actions/Reports/GetExportData.php
new file mode 100644
index 0000000..a549699
--- /dev/null
+++ b/app/Actions/Reports/GetExportData.php
@@ -0,0 +1,63 @@
+getData();
+ }
+
+ public function getData()
+ {
+ // Audition, Rank, Name, School, Score, Flags or Seat
+ $ranker = App::make(RankAuditionEntries::class);
+ $exportRows = [
+ 'Audition,Rank,Student Name,School,Score,Seat or Flag',
+ ];
+ $events = Event::all();
+ foreach ($events as $event) {
+ $auditions = $event->auditions;
+ foreach ($auditions as $audition) {
+ $entries = $ranker->rank('seating', $audition);
+ foreach ($entries as $entry) {
+ $thisRow = $audition->name.',';
+ $thisRow .= $entry->raw_rank ?? '';
+ $thisRow .= ',';
+ $thisRow .= $entry->student->full_name().',';
+ $thisRow .= $entry->student->school->name.',';
+ $thisRow .= $entry->score_totals[0] ?? '';
+ $thisRow .= ',';
+ if ($entry->hasFlag('failed_prelim')) {
+ $thisRow .= 'Failed Prelim';
+ } elseif ($entry->hasFlag('no_show')) {
+ $thisRow .= 'No Show';
+ } elseif ($entry->hasFlag('declined')) {
+ $thisRow .= 'Declined';
+ } else {
+ $seat = Seat::where('entry_id', $entry->id)->first();
+ if ($seat) {
+ $thisRow .= $seat->ensemble->name.' '.$seat->seat;
+ } else {
+ $thisRow .= ' ';
+ }
+ }
+ $exportRows[] = $thisRow;
+ }
+ }
+ }
+
+ //dd($exportRows);
+ return $exportRows;
+ }
+}
diff --git a/app/Http/Controllers/Admin/ExportResultsController.php b/app/Http/Controllers/Admin/ExportResultsController.php
new file mode 100644
index 0000000..b792100
--- /dev/null
+++ b/app/Http/Controllers/Admin/ExportResultsController.php
@@ -0,0 +1,37 @@
+getData();
+ // Create a callback to write the CSV data
+ $callback = function () use ($data) {
+ $file = fopen('php://output', 'w');
+
+ foreach ($data as $line) {
+ // Convert the string into an array
+ $fields = explode(',', $line);
+ // Write the array to the CSV file
+ fputcsv($file, $fields);
+ }
+
+ fclose($file);
+ };
+
+ // Return a response with the CSV content
+ return Response::stream($callback, 200, [
+ 'Content-Type' => 'text/csv',
+ 'Content-Disposition' => 'attachment; filename="audition_export.csv"',
+ ]);
+
+ }
+}
diff --git a/resources/views/components/layout/navbar/menus/admin.blade.php b/resources/views/components/layout/navbar/menus/admin.blade.php
index f70c668..b397127 100644
--- a/resources/views/components/layout/navbar/menus/admin.blade.php
+++ b/resources/views/components/layout/navbar/menus/admin.blade.php
@@ -26,6 +26,7 @@
Students
Entries
View Logs
+ Export Results
diff --git a/routes/admin.php b/routes/admin.php
index fdbd25c..ad0af0a 100644
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -9,6 +9,7 @@ use App\Http\Controllers\Admin\DrawController;
use App\Http\Controllers\Admin\EnsembleController;
use App\Http\Controllers\Admin\EntryController;
use App\Http\Controllers\Admin\EventController;
+use App\Http\Controllers\Admin\ExportResultsController;
use App\Http\Controllers\Admin\PrintCards;
use App\Http\Controllers\Admin\PrintRoomAssignmentsController;
use App\Http\Controllers\Admin\PrintSignInSheetsController;
@@ -23,6 +24,7 @@ use Illuminate\Support\Facades\Route;
Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')->group(function () {
Route::view('/', 'admin.dashboard')->name('admin.dashboard');
Route::get('/logs', App\Http\Controllers\Admin\LogViewer::class)->name('admin.view_logs');
+ Route::get('/export_results', ExportResultsController::class)->name('admin.export_results');
Route::post('/auditions/roomUpdate', [
AuditionController::class, 'roomUpdate',