validate([ 'name' => ['required', 'string', 'max:255'], 'categoryId' => ['required', 'exists:categories,id'], 'amount' => ['required', 'numeric', 'min:0.01'], 'dayOfMonth' => ['required', 'integer', 'min:1', 'max:28'], ]); $household = auth()->user()->currentHousehold; $category = $household->categories()->findOrFail($this->categoryId); $household->recurringTransactions()->create([ 'category_id' => $category->id, 'name' => $this->name, 'amount' => $this->amount, 'day_of_month' => $this->dayOfMonth, ]); $this->reset(['name', 'categoryId', 'amount', 'dayOfMonth']); $this->dayOfMonth = '1'; } public function startEdit(int $recurringId): void { $recurring = RecurringTransaction::findOrFail($recurringId); $this->authorize('update', $recurring); $this->editingId = $recurring->id; $this->editingName = $recurring->name; $this->editingAmount = (string) $recurring->amount; $this->editingDayOfMonth = (string) $recurring->day_of_month; } public function saveEdit(): void { $recurring = RecurringTransaction::findOrFail($this->editingId); $this->authorize('update', $recurring); $this->validate([ 'editingName' => ['required', 'string', 'max:255'], 'editingAmount' => ['required', 'numeric', 'min:0.01'], 'editingDayOfMonth' => ['required', 'integer', 'min:1', 'max:28'], ]); $recurring->update([ 'name' => $this->editingName, 'amount' => $this->editingAmount, 'day_of_month' => $this->editingDayOfMonth, ]); $this->editingId = null; } public function cancelEdit(): void { $this->editingId = null; } public function toggleActive(int $recurringId): void { $recurring = RecurringTransaction::findOrFail($recurringId); $this->authorize('update', $recurring); $recurring->update(['active' => ! $recurring->active]); } public function delete(int $recurringId): void { $recurring = RecurringTransaction::findOrFail($recurringId); $this->authorize('delete', $recurring); $recurring->delete(); } public function render() { $household = auth()->user()->currentHousehold; $recurrences = $household->recurringTransactions() ->with('category') ->orderBy('day_of_month') ->get(); $categories = $household->categories() ->whereIn('type', ['depense', 'epargne']) ->orderBy('type') ->orderBy('position') ->get(); return view('livewire.recurring.index', [ 'recurrences' => $recurrences, 'categories' => $categories, ]); } }