invoice = $invoice; $this->client_id = $invoice?->client_id; $this->notes = $invoice?->notes; $this->internal_notes = $invoice?->internal_notes; } public function updateClient(): void { $this->validate([ 'client_id' => 'required|exists:clients,id' ]); $this->invoice->update(['client_id' => $this->client_id]); } public function updateNotes(): void { $this->validate([ 'notes' => 'nullable|string', 'internal_notes' => 'nullable|string' ]); $this->invoice->update([ 'notes' => $this->notes, 'internal_notes' => $this->internal_notes, ]); } public function setStatus($newStatus): void { $updatedValue = match ($newStatus) { 'posted' => InvoiceStatus::POSTED, 'draft' => InvoiceStatus::DRAFT, 'void' => InvoiceStatus::VOID, 'paid' => InvoiceStatus::PAID, default => $this->invoice->status }; $this->invoice->update([ 'status' => $updatedValue, ]); if ($newStatus === 'posted') { $this->invoice->update([ 'invoice_date' => now(), 'due_date' => now()->addDays(30), ]); } } #[Computed] public function clients() { return Client::where('status', 'active')->orderBy('abbreviation')->get(); } }; ?>