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; } }