Files
investbrain/app/Http/Requests/TransactionRequest.php
T

66 lines
2.3 KiB
PHP
Raw Normal View History

2025-01-24 22:45:28 -06:00
<?php
namespace App\Http\Requests;
2025-01-27 20:04:03 -06:00
use App\Models\Portfolio;
use App\Http\Requests\FormRequest;
use App\Rules\SymbolValidationRule;
use App\Rules\QuantityValidationRule;
2025-01-24 22:45:28 -06:00
2025-01-26 22:56:05 -06:00
class TransactionRequest extends FormRequest
2025-01-24 22:45:28 -06:00
{
2025-01-27 20:04:03 -06:00
public ?Portfolio $portfolio;
2025-01-24 22:45:28 -06:00
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
2025-01-27 20:04:03 -06:00
$this->portfolio = Portfolio::findOrFail($this->requestOrModelValue('portfolio_id', 'transaction'));
2025-01-26 22:56:05 -06:00
$rules = [
2025-01-27 20:04:03 -06:00
'portfolio_id' => [], // validated by findOrFail() above
'symbol' => ['required', 'string', new SymbolValidationRule],
'transaction_type' => ['required', 'string', 'in:BUY,SELL'],
'date' => ['required', 'date_format:Y-m-d', 'before_or_equal:' . now()->format('Y-m-d')],
'quantity' => [
'required',
'numeric',
'min:0',
new QuantityValidationRule(
$this->portfolio,
$this->requestOrModelValue('symbol', 'transaction'),
$this->requestOrModelValue('transaction_type', 'transaction'),
$this->requestOrModelValue('date', 'transaction')
)
],
'cost_basis' => ['exclude_if:transaction_type,SELL', 'min:0', 'numeric'],
'sale_price' => ['exclude_if:transaction_type,BUY', 'min:0', 'numeric'],
2025-01-24 22:45:28 -06:00
];
2025-01-26 22:56:05 -06:00
2025-01-27 20:04:03 -06:00
if (!is_null($this->transaction)) {
$rules['symbol'][0] = 'sometimes';
$rules['transaction_type'][0] = 'sometimes';
$rules['date'][0] = 'sometimes';
$rules['quantity'][0] = 'sometimes';
if (
$this->requestOrModelValue('transaction_type', 'transaction') == 'SELL'
&& $this->requestOrModelValue('sale_price', 'transaction') == null
) {
$rules['sale_price'][0] = 'required';
} elseif (
$this->requestOrModelValue('transaction_type', 'transaction') == 'BUY'
&& $this->requestOrModelValue('cost_basis', 'transaction') == null
) {
$rules['cost_basis'][0] = 'required';
}
2025-01-26 22:56:05 -06:00
}
return $rules;
2025-01-24 22:45:28 -06:00
}
}