unapplied_amount ?? $this->amount; $filteredInvoices = $invoices->whereIn('status', [ InvoiceStatus::UNPAID, InvoiceStatus::PARTIALLY_PAID, ]); foreach ($filteredInvoices as $invoice) { $balance = $invoice->remainingBalance(); if ($remaining <= 0) { break; } $applied = min($remaining, $balance); $invoice->payments()->attach($this->id, ['applied_amount' => $applied]); $remaining -= $applied; if ($invoice->remainingBalance() == 0) { $invoice->setStatus(InvoiceStatus::PAID); } elseif ($applied > 0) { $invoice->setStatus(InvoiceStatus::PARTIALLY_PAID); } } $this->unapplied_amount = $remaining; $this->saveQuietly(); } public function customer(): BelongsTo { return $this->belongsTo(Customer::class); } public function invoices(): BelongsToMany { return $this->belongsToMany(Invoice::class) ->withPivot('applied_amount') ->withTimestamps(); } }