checkIfCreditInvoiceValid($value); //if it exists, return false! } /** * @return string */ public function message() { return $this->error_message; } /** * @return bool */ private function checkIfCreditInvoiceValid($value): bool { $invoice = Invoice::withTrashed()->find($value); if ($invoice->balance >= $invoice->amount) { $this->error_message = 'Cannot reverse an invoice with no payment applied.'; return false; } $existing_credit_amounts = $invoice->credits()->sum('amount'); if ($this->sumCredit() > ($invoice->amount - $invoice->balance - $existing_credit_amounts)) { $this->error_message = 'Credit cannot exceed the payment / credits already applied to invoice.'; return false; } return true; } private function sumCredit() { $cost = 0; foreach (request()->input('line_items') as $item) { $cost += $item['cost'] * $item['quantity']; } return $cost; } }