message = ctrans('texts.insufficient_applied_amount_remaining'); return $this->calculateAmounts(); } /** * @return string */ public function message() { return $this->message; } private function calculateAmounts() :bool { $payment = Payment::withTrashed()->whereId($this->decodePrimaryKey(request()->segment(4)))->company()->first(); $inv_collection = Invoice::withTrashed()->whereIn('id', array_column(request()->input('invoices'), 'invoice_id'))->get(); if (! $payment) { return false; } $payment_amounts = 0; $invoice_amounts = 0; $payment_amounts = $payment->amount - $payment->refunded - $payment->applied; if (request()->has('credits') && is_array(request()->input('credits')) && count(request()->input('credits')) == 0 && request()->has('invoices') && is_array(request()->input('invoices')) && count(request()->input('invoices')) == 0) { return true; } if (request()->input('credits') && is_array(request()->input('credits'))) { foreach (request()->input('credits') as $credit) { $payment_amounts += $credit['amount']; } } if (request()->input('invoices') && is_array(request()->input('invoices'))) { foreach (request()->input('invoices') as $invoice) { $invoice_amounts += $invoice['amount']; $inv = $inv_collection->firstWhere('id', $invoice['invoice_id']); if($inv->balance < $invoice['amount']) { // $this->message = ctrans('texts.insufficient_applied_amount_remaining'); $this->message = 'Amount cannot be greater than invoice balance'; return false; } } } if(round($payment_amounts, 3) >= round($invoice_amounts, 3)) { return true; } return false; } }