From 51436bda404551b49e27c1785cd515efb63e5023 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Wed, 17 Jul 2024 18:38:03 -0500 Subject: [PATCH] Admin can forgive late fee on entry creation #38 Add ability for admin to forgive late fee on an entry --- app/Actions/Entries/CreateEntry.php | 4 +-- app/Enums/EntryFlags.php | 2 +- .../Controllers/Admin/EntryController.php | 6 +++- app/Models/Entry.php | 1 + .../views/admin/entries/create.blade.php | 12 ++++++-- .../Feature/Pages/Admin/EntiesCreateTest.php | 29 +++++++++++++++++++ 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app/Actions/Entries/CreateEntry.php b/app/Actions/Entries/CreateEntry.php index daa6825..abc95c0 100644 --- a/app/Actions/Entries/CreateEntry.php +++ b/app/Actions/Entries/CreateEntry.php @@ -16,9 +16,9 @@ class CreateEntry /** * @throws ManageEntryException */ - public function __invoke(Student|int $student, Audition|int $audition, string|array|null $entry_for = null): void + public function __invoke(Student|int $student, Audition|int $audition, string|array|null $entry_for = null) { - $this->createEntry($student, $audition, $entry_for); + return $this->createEntry($student, $audition, $entry_for); } /** diff --git a/app/Enums/EntryFlags.php b/app/Enums/EntryFlags.php index 7cb14d4..bb87b0d 100644 --- a/app/Enums/EntryFlags.php +++ b/app/Enums/EntryFlags.php @@ -8,5 +8,5 @@ enum EntryFlags: string case DECLINED = 'declined'; case NO_SHOW = 'no_show'; case FAILED_PRELIM = 'failed_prelim'; + case LATE_FEE_WAIVED = 'late_fee_waived'; } - diff --git a/app/Http/Controllers/Admin/EntryController.php b/app/Http/Controllers/Admin/EntryController.php index 4132e73..d6025a9 100644 --- a/app/Http/Controllers/Admin/EntryController.php +++ b/app/Http/Controllers/Admin/EntryController.php @@ -102,6 +102,7 @@ class EntryController extends Controller $validData['for_seating'] = $request->get('for_seating') ? 1 : 0; $validData['for_advancement'] = $request->get('for_advancement') ? 1 : 0; + $validData['late_fee_waived'] = $request->get('late_fee_waived') ? 1 : 0; $enter_for = []; if ($validData['for_seating']) { $enter_for[] = 'seating'; @@ -111,10 +112,13 @@ class EntryController extends Controller } try { - $creator($validData['student_id'], $validData['audition_id'], $enter_for); + $entry = $creator($validData['student_id'], $validData['audition_id'], $enter_for); } catch (ManageEntryException $ex) { return redirect()->route('admin.entries.index')->with('error', $ex->getMessage()); } + if ($validData['late_fee_waived']) { + $entry->addFlag('late_fee_waived'); + } return redirect(route('admin.entries.index'))->with('success', 'The entry has been added.'); } diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 1b6eaee..1670c02 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -91,6 +91,7 @@ class Entry extends Model 'declined' => EntryFlags::DECLINED, 'no_show' => EntryFlags::NO_SHOW, 'failed_prelim' => EntryFlags::FAILED_PRELIM, + 'late_fee_waived' => EntryFlags::LATE_FEE_WAIVED, }; $this->flags()->create(['flag_name' => $enum]); $this->load('flags'); diff --git a/resources/views/admin/entries/create.blade.php b/resources/views/admin/entries/create.blade.php index d1c4376..1614157 100644 --- a/resources/views/admin/entries/create.blade.php +++ b/resources/views/admin/entries/create.blade.php @@ -1,3 +1,4 @@ + Create Entry @@ -8,7 +9,8 @@ Student @@ -24,16 +26,20 @@
+ checked/>
+ checked/>
@else @endif +
+ +
Create Entry diff --git a/tests/Feature/Pages/Admin/EntiesCreateTest.php b/tests/Feature/Pages/Admin/EntiesCreateTest.php index 3142c0f..5e038d8 100644 --- a/tests/Feature/Pages/Admin/EntiesCreateTest.php +++ b/tests/Feature/Pages/Admin/EntiesCreateTest.php @@ -1,6 +1,7 @@ 0, ]); }); +it('can mark a late fee waived for an entry', function () { + $audition = Audition::factory()->closed()->create(['maximum_grade' => 12, 'minimum_grade' => 7]); + $student = Student::factory()->create(['grade' => 9]); + actAsAdmin(); + $response = $this->post(route('admin.entries.store'), [ + 'student_id' => $student->id, + 'audition_id' => $audition->id, + 'for_seating' => 'on', + 'late_fee_waived' => 'on', + ]); + $response->assertRedirect(route('admin.entries.index')) + ->assertSessionDoesntHaveErrors() + ->assertSessionMissing('error') + ->assertSessionHas('success', 'The entry has been added.'); + assertDatabaseHas('entries', [ + 'student_id' => $student->id, + 'audition_id' => $audition->id, + 'for_seating' => 1, + 'for_advancement' => 0, + ]); + $entry = Entry::where('student_id', $student->id)->where('audition_id', $audition->id)->first(); + + assertDatabaseHas('entry_flags', [ + 'entry_id' => 1, + 'flag_name' => 'late_fee_waived', + ]); + +});