csvImporter = $csvImporter; } public function handle(): void { $lowestPossibleGrade = 1; $highestPossibleGrade = 12; $events = Event::all(); $rows = $this->csvImporter->readCsv(storage_path('app/import/import.csv')); $checkedAuditions = collect(); foreach ($rows as $row) { if ($checkedAuditions->contains($row['Instrument'])) { continue; } $checkedAuditions->push($row['Instrument']); if (Audition::where('name', $row['Instrument'])->count() > 0) { $this->info('Audition '.$row['Instrument'].' already exists'); } else { $this->newLine(); $this->alert('Audition '.$row['Instrument'].' does not exist'); if ($events->count() === 1) { $newEventId = $events->first()->id; } else { $newEventId = select( label: 'Which event does this audition belong to?', options: $events->pluck('name', 'id')->toArray(), ); } $newEventName = $row['Instrument']; $newEventScoreOrder = Audition::max('score_order') + 1; $newEventEntryDeadline = Carbon::yesterday('America/Chicago')->format('Y-m-d'); $newEventEntryFee = Audition::max('entry_fee'); $newEventMinimumGrade = select( label: 'What is the minimum grade for this audition?', options: range($lowestPossibleGrade, $highestPossibleGrade) ); $newEventMaximumGrade = select( label: 'What is the maximum grade for this audition?', options: range($newEventMinimumGrade, $highestPossibleGrade) ); $newEventRoomId = select( label: 'Which room does this audition belong to?', options: Room::pluck('name', 'id')->toArray(), ); $newEventScoringGuideId = select( label: 'Which scoring guide should this audition use', options: ScoringGuide::pluck('name', 'id')->toArray(), ); if (auditionSetting('advanceTo')) { $newEventForSeating = select( label: 'Is this audition for seating?', options: [ 1 => 'Yes', 0 => 'No', ] ); $newEventForAdvance = select( label: 'Is this audition for '.auditionSetting('advanceTo').'?', options: [ 1 => 'Yes', 0 => 'No', ] ); } else { $newEventForSeating = 1; $newEventForAdvance = 0; } $this->info('New event ID: '.$newEventId); $this->info('New event name: '.$newEventName); $this->info('New event score order: '.$newEventScoreOrder); $this->info('New event entry deadline: '.$newEventEntryDeadline); $this->info('New event entry fee: '.$newEventEntryFee); $this->info('New event minimum grade: '.$newEventMinimumGrade); $this->info('New event maximum grade: '.$newEventMaximumGrade); $this->info('New event room ID: '.$newEventRoomId); $this->info('New event scoring guide ID: '.$newEventScoringGuideId); $this->info('New event for seating: '.$newEventForSeating); $this->info('New event for advance: '.$newEventForAdvance); Audition::create([ 'event_id' => $newEventId, 'name' => $newEventName, 'score_order' => $newEventScoreOrder, 'entry_deadline' => $newEventEntryDeadline, 'entry_fee' => $newEventEntryFee, 'minimum_grade' => $newEventMinimumGrade, 'maximum_grade' => $newEventMaximumGrade, 'room_id' => $newEventRoomId, 'scoring_guide_id' => $newEventScoringGuideId, 'for_seating' => $newEventForSeating, 'for_advancement' => $newEventForAdvance, ]); } } } }