Implement OneFeePerStudentPerEvent option

This commit is contained in:
Matt Young 2025-09-10 21:29:16 -05:00
parent 340fae6747
commit 1953eedb0b
2 changed files with 4 additions and 3 deletions

View File

@ -26,7 +26,7 @@ class AuditionSettings extends Controller
'organizerName' => ['required'],
'organizerEmail' => ['required', 'email'],
'registrationCode' => ['required'],
'fee_structure' => ['required', 'in:oneFeePerEntry,oneFeePerStudent'],
'fee_structure' => ['required', 'in:oneFeePerEntry,oneFeePerStudent,oneFeePerStudentPerEvent'],
// Options should align with the boot method of InvoiceDataServiceProvider
'late_fee' => ['nullable', 'numeric', 'min:0'],
'school_fee' => ['nullable', 'numeric', 'min:0'],

View File

@ -37,9 +37,10 @@ class InvoiceOneFeePerStudentPerEvent implements InvoiceDataService
$entries = $school->entries()->with('audition')->orderBy('created_at', 'desc')->get()->groupBy('student_id');
foreach ($school->students as $student) {
$firstEntryForStudent = true;
$eventsEntered = [];
foreach ($entries[$student->id] ?? [] as $entry) {
if ($firstEntryForStudent) {
if (! in_array($entry->audition->event_id, $eventsEntered)) {
$eventsEntered[] = $entry->audition->event_id;
$entryFee = $entry->audition->entry_fee / 100;
$lateFee = ($this->entryService->isEntryLate($entry) && ! $entry->hasFlag('late_fee_waived'))
? auditionSetting('late_fee') / 100 : 0;