input = $input; } public function passes($attribute, $value) { return $this->checkCreditsAreHomogenous(); } private function checkCreditsAreHomogenous() { if (! array_key_exists('client_id', $this->input)) { $this->error_msg = 'Client id is required'; return false; } $unique_array = []; foreach ($this->input['credits'] as $credit) { $unique_array[] = $credit['credit_id']; $cred = Credit::find($this->decodePrimaryKey($credit['credit_id'])); if (! $cred) { $this->error_msg = 'Credit not found '; return false; } if ($cred->client_id != $this->input['client_id']) { $this->error_msg = 'Selected invoices are not from a single client'; return false; } } if (! (array_unique($unique_array) == $unique_array)) { $this->error_msg = 'Duplicate credits submitted.'; return false; } if (count($this->input['credits']) >= 1 && count($this->input['invoices']) == 0) { $this->error_msg = 'You must have an invoice set when using a credit in a payment'; return false; } if (count($this->input['credits']) >= 1) { // $total_payments = $this->input['amount'] + array_sum(array_column($this->input['credits'], 'amount')); // info(print_r($this->input,1)); // info("total payments = {$total_payments}"); // info("total credits available = " . array_sum(array_column($this->input['credits'], 'amount'))); // info("total invoices payable = " . array_sum(array_column($this->input['invoices'], 'amount'))); // if($total_payments > array_sum(array_column($this->input['invoices'], 'amount'))){ // $this->error_msg = "Sum of total payments and credits is greater than the total of invoices"; // return false; // } } return true; } /** * @return string */ public function message() { return $this->error_msg; } }