Scobda nomination ensembles #106

Merged
okorpheus merged 25 commits from scobda_first_year into master 2025-02-12 21:51:10 +00:00
1 changed files with 76 additions and 0 deletions
Showing only changes of commit 2e4e38bb15 - Show all commits

View File

@ -0,0 +1,76 @@
<?php
namespace Database\Seeders;
use App\Models\NominationEnsemble;
use App\Models\NominationEnsembleEntry;
use App\Models\School;
use App\Models\Student;
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ScobdaNominationEnsembleAndEntrySeeder extends Seeder
{
public function run(): void
{
// Clear existing nomination ensembles and nominations
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('nomination_ensemble_entries')->truncate();
DB::table('nomination_ensembles')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
// Create First Year Ensemble
$ensemble = new NominationEnsemble();
$ensemble->name = 'First Year Band';
$ensemble->entry_deadline = '2028-01-01';
$ensemble->minimum_grade = 5;
$ensemble->maximum_grade = 8;
$instruments = [
'Flute',
'Oboe',
'Bassoon',
'Clarinet',
'Bass Clarinet',
'Contra Clarinet',
'Alto Sax',
'Tenor Sax',
'Bari Sax',
'Trumpet',
'Horn',
'Trombone',
'Euphonium',
'Tuba',
'String Bass',
'Percussion',
];
$data = [
'instruments' => $instruments,
'target_size' => 100,
'max_nominations' => 10,
'rounding_direction' => 'up',
];
$ensemble->data = $data;
$ensemble->save();
// Fill the nominations table
$faker = Faker::create();
$schools = School::all();
foreach ($schools as $school) {
$students = Student::factory()->count(10)->create(['school_id' => $school->id, 'grade' => 5]);
$n = 1;
foreach ($students as $student) {
$nomData = [
'rank' => $n,
'instrument' => $faker->randomElement($instruments),
];
NominationEnsembleEntry::create([
'student_id' => $student->id,
'nomination_ensemble_id' => $ensemble->id,
'data' => $nomData,
]);
$n++;
}
}
}
}