From 11df4ef55c2a1ae1108199898e5d438304ebf116 Mon Sep 17 00:00:00 2001 From: Daan Meijer Date: Wed, 17 Jun 2026 13:30:55 +0200 Subject: [PATCH] further development of the predefinedmutations --- .../PredefinedMutationController.php | 15 +-- app/Models/Ledger.php | 5 + app/Models/PredefinedMutation.php | 7 +- ...5928_create_predefined_mutations_table.php | 3 +- resources/js/pages/Dynamics/Settings.vue | 6 -- .../PredefinedMutations/Index.vue | 32 +++---- resources/js/pages/Ledgers/Show.vue | 32 +++++-- routes/web.php | 2 +- tests/Feature/PredefinedMutationTest.php | 92 +++++++++++++++++++ 9 files changed, 145 insertions(+), 49 deletions(-) rename resources/js/pages/{Dynamics => Ledgers}/PredefinedMutations/Index.vue (88%) create mode 100644 tests/Feature/PredefinedMutationTest.php diff --git a/app/Http/Controllers/PredefinedMutationController.php b/app/Http/Controllers/PredefinedMutationController.php index 83b5929..e669fcd 100644 --- a/app/Http/Controllers/PredefinedMutationController.php +++ b/app/Http/Controllers/PredefinedMutationController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Dynamic; +use App\Models\Ledger; use App\Models\PredefinedMutation; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Http\Request; @@ -15,20 +16,21 @@ class PredefinedMutationController extends Controller /** * Display a listing of the resource. */ - public function index(Dynamic $dynamic) + public function index(Dynamic $dynamic, Ledger $ledger) { $this->authorize('update', $dynamic); - return Inertia::render('Dynamics/PredefinedMutations/Index', [ + return Inertia::render('Ledgers/PredefinedMutations/Index', [ 'dynamic' => $dynamic, - 'predefined_mutations' => $dynamic->predefinedMutations()->latest()->get(), + 'ledger' => $ledger, + 'predefined_mutations' => $ledger->predefinedMutations()->latest()->get(), ]); } /** * Store a newly created resource in storage. */ - public function store(Request $request, Dynamic $dynamic) + public function store(Request $request, Dynamic $dynamic, Ledger $ledger) { $this->authorize('update', $dynamic); @@ -36,11 +38,10 @@ class PredefinedMutationController extends Controller 'name' => ['required', 'string', 'max:255'], 'description' => ['nullable', 'string'], 'amount' => ['required', 'integer'], - 'type' => ['required', 'string', 'in:reward,penalty'], ]); - $dynamic->predefinedMutations()->create($request->all()); + $ledger->predefinedMutations()->create($request->all()); - return redirect()->route('dynamics.predefined-mutations.index', $dynamic); + return redirect()->route('dynamics.ledgers.predefined-mutations.index', [$dynamic, $ledger]); } } diff --git a/app/Models/Ledger.php b/app/Models/Ledger.php index 13a78f1..22ce39b 100644 --- a/app/Models/Ledger.php +++ b/app/Models/Ledger.php @@ -31,6 +31,11 @@ class Ledger extends Model return $this->hasMany(Mutation::class); } + public function predefinedMutations(): HasMany + { + return $this->hasMany(PredefinedMutation::class); + } + public function media(): \Illuminate\Database\Eloquent\Relations\MorphMany { return $this->morphMany(Media::class, 'mediable'); diff --git a/app/Models/PredefinedMutation.php b/app/Models/PredefinedMutation.php index cdd1a0f..a3eb740 100644 --- a/app/Models/PredefinedMutation.php +++ b/app/Models/PredefinedMutation.php @@ -11,15 +11,14 @@ class PredefinedMutation extends Model use HasFactory; protected $fillable = [ - 'dynamic_id', + 'ledger_id', 'name', 'description', 'amount', - 'type', ]; - public function dynamic(): BelongsTo + public function ledger(): BelongsTo { - return $this->belongsTo(Dynamic::class); + return $this->belongsTo(Ledger::class); } } diff --git a/database/migrations/2026_06_16_225928_create_predefined_mutations_table.php b/database/migrations/2026_06_16_225928_create_predefined_mutations_table.php index 1f157e0..787c51d 100644 --- a/database/migrations/2026_06_16_225928_create_predefined_mutations_table.php +++ b/database/migrations/2026_06_16_225928_create_predefined_mutations_table.php @@ -13,11 +13,10 @@ return new class extends Migration { Schema::create('predefined_mutations', function (Blueprint $table) { $table->id(); - $table->foreignId('dynamic_id')->constrained()->cascadeOnDelete(); + $table->foreignId('ledger_id')->constrained()->cascadeOnDelete(); $table->string('name'); $table->text('description')->nullable(); $table->integer('amount'); - $table->string('type')->default('reward'); $table->timestamps(); }); } diff --git a/resources/js/pages/Dynamics/Settings.vue b/resources/js/pages/Dynamics/Settings.vue index 5aaeb8b..2c7cd12 100644 --- a/resources/js/pages/Dynamics/Settings.vue +++ b/resources/js/pages/Dynamics/Settings.vue @@ -70,12 +70,6 @@ function submit() { - -
- - Manage Predefined Mutations - -
diff --git a/resources/js/pages/Dynamics/PredefinedMutations/Index.vue b/resources/js/pages/Ledgers/PredefinedMutations/Index.vue similarity index 88% rename from resources/js/pages/Dynamics/PredefinedMutations/Index.vue rename to resources/js/pages/Ledgers/PredefinedMutations/Index.vue index ae83851..9d87287 100644 --- a/resources/js/pages/Dynamics/PredefinedMutations/Index.vue +++ b/resources/js/pages/Ledgers/PredefinedMutations/Index.vue @@ -9,12 +9,15 @@ const props = defineProps<{ id: number; name: string; }; + ledger: { + id: number; + name: string; + }; predefined_mutations: Array<{ id: number; name: string; description: string; amount: number; - type: string; }>; }>(); @@ -22,7 +25,6 @@ const form = useForm({ name: '', description: '', amount: 0, - type: 'reward', }); const breadcrumbs = [ @@ -34,14 +36,18 @@ const breadcrumbs = [ name: props.dynamic.name, href: route('dynamics.show', props.dynamic.id), }, + { + name: props.ledger.name, + href: route('dynamics.ledgers.show', [props.dynamic.id, props.ledger.id]), + }, { name: 'Predefined Mutations', - href: route('dynamics.predefined-mutations.index', props.dynamic.id), + href: route('dynamics.ledgers.predefined-mutations.index', [props.dynamic.id, props.ledger.id]), }, ]; function submit() { - form.post(route('dynamics.predefined-mutations.store', props.dynamic.id), { + form.post(route('dynamics.ledgers.predefined-mutations.store', [props.dynamic.id, props.ledger.id]), { onSuccess: () => form.reset(), }); } @@ -56,7 +62,7 @@ function submit() {

- Predefined Mutations for {{ dynamic.name }} + Predefined Mutations for {{ ledger.name }}

@@ -133,22 +139,6 @@ function submit() { />
-
- - -
-