close #2291 Fixed: Quantity validation issue

This commit is contained in:
Cüneyt Şentürk 2021-11-08 13:41:15 +03:00
parent 9ddbeddd2b
commit a40db8195d
2 changed files with 41 additions and 15 deletions

View File

@ -9,6 +9,8 @@ use Illuminate\Support\Str;
class Document extends FormRequest
{
protected $items_quantity_size = [];
/**
* Get the validation rules that apply to the request.
*
@ -43,13 +45,7 @@ class Document extends FormRequest
// Get company id
$company_id = (int) $this->request->get('company_id');
$quantity_size = 5;
if ((Str::substrCount($this->request->get('quantity'), '.') > 1) || (Str::substrCount($this->request->get('quantity'), ',') > 1)) {
$quantity_size = 7;
}
return [
$rules = [
'type' => 'required|string',
'document_number' => 'required|string|unique:documents,NULL,' . $id . ',id,type,' . $type . ',company_id,' . $company_id . ',deleted_at,NULL',
'status' => 'required|string',
@ -57,7 +53,6 @@ class Document extends FormRequest
'due_at' => 'required|date_format:Y-m-d H:i:s|after_or_equal:issued_at',
'amount' => 'required',
'items.*.name' => 'required|string',
'items.*.quantity' => 'required|max:' . $quantity_size,
'items.*.price' => 'required|amount',
'currency_code' => 'required|string|currency',
'currency_rate' => 'required|gt:0',
@ -67,6 +62,23 @@ class Document extends FormRequest
'company_logo' => $company_logo,
'attachment.*' => $attachment,
];
$items = $this->request->get('items');
if ($items) {
foreach ($items as $key => $item) {
$size = 5;
if (Str::contains($item['quantity'], ['.', ','])) {
$size = 7;
}
$rules['items.' . $key . '.quantity'] = 'required|max:' . $size;
$this->items_quantity_size[$key] = $size;
}
}
return $rules;
}
public function withValidator($validator)
@ -83,13 +95,20 @@ class Document extends FormRequest
public function messages()
{
return [
$messages = [
'items.*.name.required' => trans('validation.required', ['attribute' => Str::lower(trans('general.name'))]),
'items.*.quantity.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.quantity'))]),
'items.*.quantity.size' => trans('validation.size', ['attribute' => Str::lower(trans('invoices.quantity'))]),
'items.*.price.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.price'))]),
'items.*.currency.required' => trans('validation.custom.invalid_currency'),
'items.*.currency.string' => trans('validation.custom.invalid_currency'),
];
if ($this->items_quantity_size) {
foreach ($this->items_quantity_size as $key => $quantity_size) {
$messages['items.' . $key . '.quantity.max'] = trans('validation.size', ['attribute' => Str::lower(trans('invoices.quantity')), 'size' => $quantity_size]);
}
}
return $messages;
}
}

View File

@ -7,6 +7,8 @@ use Illuminate\Support\Str;
class DocumentItem extends FormRequest
{
protected $quantity_size = 5;
/**
* Get the validation rules that apply to the request.
*
@ -14,21 +16,26 @@ class DocumentItem extends FormRequest
*/
public function rules()
{
$quantity_size = 5;
if ((Str::substrCount($this->request->get('quantity'), '.') > 1) || (Str::substrCount($this->request->get('quantity'), ',') > 1)) {
$quantity_size = 7;
if (Str::contains($item['quantity'], ['.', ','])) {
$this->quantity_size = 7;
}
return [
'type' => 'required|string',
'document_id' => 'required|integer',
'name' => 'required|string',
'quantity' => 'required|max:' . $quantity_size,
'quantity' => 'required|max:' . $this->quantity_size,
'price' => 'required|amount',
'total' => 'required',
'tax' => 'required',
'tax_id' => 'required',
];
}
public function messages()
{
return [
'quantity.max' => trans('validation.size', ['attribute' => Str::lower(trans('invoices.quantity')), 'size' => $this->quantity_size]),
];
}
}