Validation rules for credits and payments

This commit is contained in:
David Bomba 2020-11-02 12:11:49 +11:00
parent e24e25f9f0
commit 30bfd0b808
2 changed files with 61 additions and 2 deletions

View File

@ -13,6 +13,7 @@ namespace App\Http\Requests\Payment;
use App\Http\Requests\Request;
use App\Http\ValidationRules\Credit\ValidCreditsRules;
use App\Http\ValidationRules\Credit\CreditsSumRule;
use App\Http\ValidationRules\Payment\ValidInvoicesRules;
use App\Http\ValidationRules\PaymentAmountsBalanceRule;
use App\Http\ValidationRules\ValidCreditsPresentRule;
@ -76,7 +77,6 @@ class StorePaymentRequest extends Request
}
if (! isset($input['amount']) || $input['amount'] == 0) {
//$input['amount'] = $invoices_total - $credits_total;
$input['amount'] = $invoices_total - $credits_total; //todo the payment amount is always less the credit amount applied
}
@ -100,7 +100,7 @@ class StorePaymentRequest extends Request
'invoices.*.amount' => 'required',
'credits.*.credit_id' => 'bail|required|exists:credits,id',
'credits.*.credit_id' => new ValidCreditsRules($this->all()),
'credits.*.amount' => 'required',
'credits.*.amount' => ['required', new CreditsSumRule($this->all())],
'invoices' => new ValidPayableInvoicesRule(),
'number' => 'bail|nullable|unique:payments,number,'.$this->id.',id,company_id,'.$this->company_id,
];

View File

@ -0,0 +1,59 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Http\ValidationRules\Credit;
use App\Libraries\MultiDB;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\User;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Validation\Rule;
/**
* Class CreditsSumRule.
*/
class CreditsSumRule implements Rule
{
use MakesHash;
private $input;
public function __construct($input)
{
$this->input = $input;
}
public function passes($attribute, $value)
{
return $this->checkCreditTotals();
}
private function checkCreditTotals()
{
if( array_sum(array_column($this->input['credits'],'amount')) > array_sum(array_column($this->input['invoices'], 'amount')))
return false;
return true;
}
/**
* @return string
*/
public function message()
{
return "Total credits applied cannot be MORE than total of invoices";
}
}