Allow to use the dependent validation rules in import.

This commit is contained in:
Pavel Mironchik 2021-06-29 20:06:49 +06:00
parent 2d6a09850c
commit cece63e897
3 changed files with 38 additions and 6 deletions

View File

@ -10,6 +10,7 @@ use Illuminate\Contracts\Translation\HasLocalePreference;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Maatwebsite\Excel\Concerns\Importable; use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows; use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\ToModel;
@ -102,4 +103,39 @@ abstract class Import implements HasLocalePreference, ShouldQueue, SkipsEmptyRow
{ {
return $this->user->locale; return $this->user->locale;
} }
protected function replaceForBatchRules(array $rules): array
{
$dependent_rules = [
'after',
'after_or_equal',
'before',
'before_or_equal',
'different',
'exclude_if',
'exclude_unless',
'gt',
'gte',
'in_array',
'lt',
'lte',
'prohibited_if',
'prohibited_unless',
'required_if',
'required_unless',
'required_with',
'required_with_all',
'required_without',
'required_without_all',
'same',
];
foreach ($rules as $field => $rule) {
foreach ($dependent_rules as $dependent_rule) {
$rules[$field] = Str::replaceFirst($dependent_rule . ':', $dependent_rule . ':*.', $rules[$field]);
}
}
return $rules;
}
} }

View File

@ -36,12 +36,10 @@ class Bills extends Import
$rules = (new Request())->rules(); $rules = (new Request())->rules();
$rules['bill_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']); $rules['bill_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']);
$rules['issued_at'] = Str::replaceFirst('|before_or_equal:due_at', '', $rules['issued_at']);
$rules['due_at'] = Str::replaceFirst('|after_or_equal:issued_at', '', $rules['due_at']);
$rules['billed_at'] = $rules['issued_at']; $rules['billed_at'] = $rules['issued_at'];
unset($rules['document_number'], $rules['issued_at'], $rules['type']); unset($rules['document_number'], $rules['issued_at'], $rules['type']);
return $rules; return $this->replaceForBatchRules($rules);
} }
} }

View File

@ -36,12 +36,10 @@ class Invoices extends Import
$rules = (new Request())->rules(); $rules = (new Request())->rules();
$rules['invoice_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']); $rules['invoice_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']);
$rules['issued_at'] = Str::replaceFirst('|before_or_equal:due_at', '', $rules['issued_at']);
$rules['due_at'] = Str::replaceFirst('|after_or_equal:issued_at', '', $rules['due_at']);
$rules['invoiced_at'] = $rules['issued_at']; $rules['invoiced_at'] = $rules['issued_at'];
unset($rules['document_number'], $rules['issued_at'], $rules['type']); unset($rules['document_number'], $rules['issued_at'], $rules['type']);
return $rules; return $this->replaceForBatchRules($rules);
} }
} }