Functional form to create nomination ensemble under scobda rules.

This commit is contained in:
Matt Young 2025-02-02 01:07:20 -06:00
parent ff8f9afee0
commit f7bb1547cc
5 changed files with 71 additions and 2 deletions

View File

@ -5,6 +5,8 @@ namespace App\Http\Controllers\NominationEnsembles;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\NominationEnsemble; use App\Models\NominationEnsemble;
use function redirect;
class ScobdaNominationEnsembleController extends Controller implements NominationEnsembleController class ScobdaNominationEnsembleController extends Controller implements NominationEnsembleController
{ {
public function index() public function index()
@ -24,7 +26,36 @@ class ScobdaNominationEnsembleController extends Controller implements Nominatio
public function store() public function store()
{ {
// TODO: Implement store() method. //dd(request()->all());
$validated = request()->validate([
'ensemble_name' => 'required',
'entry_deadline' => 'required|date',
'min_grade' => 'required|numeric|min:0',
'max_grade' => 'required|numeric|gte:min_grade',
'max_nominations' => 'required|numeric|min:1',
'target_size' => 'required|numeric|min:1',
'rounding_direction' => 'required|in:up,down',
'instrument_list' => 'required|string',
], [
'maximum_grade.gte' => 'The maximum grade must be greater than the minimum grade.',
'rounding_direction.in' => 'The rounding direction must be either "up" or "down".',
]);
$instrument_list = preg_replace('/\s*,\s*/', ',', $validated['instrument_list']);
$instrument_array = explode(',', $instrument_list);
$ensemble = new NominationEnsemble();
$ensemble->name = $validated['ensemble_name'];
$ensemble->entry_deadline = $validated['entry_deadline'];
$ensemble->minimum_grade = $validated['min_grade'];
$ensemble->maximum_grade = $validated['max_grade'];
$data = [];
$data['max_nominations'] = $validated['max_nominations'];
$data['target_size'] = $validated['target_size'];
$data['instruments'] = $instrument_array;
$ensemble->data = $data;
$ensemble->save();
return redirect()->route('nomination.admin.ensemble.index')->with('success', 'Nomination Ensemble has been created.');
} }
public function edit(NominationEnsemble $ensemble) public function edit(NominationEnsemble $ensemble)

View File

@ -63,7 +63,7 @@ class AppServiceProvider extends ServiceProvider
$this->app->singleton(CreateEntry::class, CreateEntry::class); $this->app->singleton(CreateEntry::class, CreateEntry::class);
$this->app->singleton(UpdateEntry::class, UpdateEntry::class); $this->app->singleton(UpdateEntry::class, UpdateEntry::class);
$this->app->singleton(SetHeadDirector::class, SetHeadDirector::class); $this->app->singleton(SetHeadDirector::class, SetHeadDirector::class);
$this->app->singleton(NominationEnsembleController::class, ScobdaNominationEnsembleController::class); $this->app->bind(NominationEnsembleController::class, ScobdaNominationEnsembleController::class);
} }
/** /**

View File

@ -1,4 +1,29 @@
<x-layout.app> <x-layout.app>
<x-slot:page_title>Nomination Ensembles</x-slot:page_title> <x-slot:page_title>Nomination Ensembles</x-slot:page_title>
<x-layout.page-section-container>
<x-layout.page-section>
<x-slot:section_name>Add Nomination Ensemble</x-slot:section_name>
<x-form.form method="POST" action="{{ route('nomination.admin.ensemble.store') }}" class="mb-6 mt-3">
<x-form.body-grid columns="9" class="max-w-full">
<x-form.field name="ensemble_name" label_text="Ensemble Name" colspan="3" autofocus />
<x-form.field name="entry_deadline" label_text="Entry Deadline" type="date" colspan="2"/>
<x-form.field name="min_grade" label_text="Minimum Grade" type="number" colspan="2"/>
<x-form.field name="max_grade" label_text="Maximum Grade" type="number" colspan="2"/>
<x-form.field name="max_nominations" label_text="Maximum Nominations per School" type="number" colspan="3"/>
<x-form.field name="target_size" label_text="Target Ensemble Size" type="number" colspan="3"/>
<x-form.select name="rounding_direction" colspan="3">
<x-slot:label>Round</x-slot:label>
<option value="up">Up</option>
<option value="down">Down</option>
</x-form.select>
<x-form.textarea name="instrument_list" colspan="9">
<x-slot:label>Instrument List (comma separated)</x-slot:label>
</x-form.textarea>
</x-form.body-grid>
<x-form.footer submit-button-text="Create Ensemble"/>
</x-form.form>
</x-layout.page-section>
</x-layout.page-section-container>
</x-layout.app> </x-layout.app>

View File

@ -0,0 +1,12 @@
<?php
use App\Http\Controllers\NominationEnsembles\NominationEnsembleController;
use App\Http\Middleware\CheckIfAdmin;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('nomination/admin/')->group(function () {
Route::prefix('ensemble/')->controller(NominationEnsembleController::class)->group(function () {
Route::get('/', 'index')->name('nomination.admin.ensemble.index');
Route::post('/', 'store')->name('nomination.admin.ensemble.store');
});
});

View File

@ -10,6 +10,7 @@ require __DIR__.'/admin.php';
require __DIR__.'/judging.php'; require __DIR__.'/judging.php';
require __DIR__.'/tabulation.php'; require __DIR__.'/tabulation.php';
require __DIR__.'/user.php'; require __DIR__.'/user.php';
require __DIR__.'/nominationEnsemble.php';
Route::get('/test', [TestController::class, 'flashTest'])->middleware('auth', 'verified'); Route::get('/test', [TestController::class, 'flashTest'])->middleware('auth', 'verified');