125 lines
5.1 KiB
PHP
125 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Audition;
|
|
use App\Models\Event;
|
|
use App\Models\Room;
|
|
use App\Models\ScoringGuide;
|
|
use App\Services\CsvImportService;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Console\Command;
|
|
|
|
use function auditionSetting;
|
|
use function Laravel\Prompts\select;
|
|
|
|
class importCheckAuditionsCommand extends Command
|
|
{
|
|
protected $signature = 'import:check-auditions';
|
|
|
|
protected $description = 'Check the import file for auditions that do not exist in the database';
|
|
|
|
protected $csvImporter;
|
|
|
|
public function __construct(CsvImportService $csvImporter)
|
|
{
|
|
parent::__construct();
|
|
$this->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,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|