Files
compras/app/Http/Requests/SaveSupplierRequest.php
nala 63d20b10fc
tests / ci (push) Canceled after 0s
commit de armazens
2026-11-04 09:40:26 +02:00

45 lines
1.9 KiB
PHP

<?php
namespace App\Http\Requests;
use App\Models\Supplier;
use App\Models\User;
use App\Services\AdministrativeGeography;
use App\Services\SupplierParticipation;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class SaveSupplierRequest extends FormRequest
{
public function authorize(): bool
{
$actor = $this->user('web');
return $actor instanceof User && app(SupplierParticipation::class)->canPrepare($actor);
}
/** @return array<string, mixed> */
public function rules(): array
{
$supplier = $this->route('supplier');
$uniqueNuit = Rule::unique('suppliers')->where('tenant_id', $this->user()?->tenant_id);
if ($supplier instanceof Supplier) {
$uniqueNuit->ignore($supplier->id);
}
return [
'geography_reference' => app(AdministrativeGeography::class)->enabled() ? 'sometimes|nullable|array:country,catalogue,record_id' : 'prohibited',
'geography_reference.catalogue' => 'required_with:geography_reference|string|size:64',
'geography_reference.record_id' => 'required_with:geography_reference|string|regex:/^[0-9]+$/D|max:20',
'name' => 'required|string|max:200',
'nuit' => ['required', 'regex:/^\d{9}$/', $uniqueNuit],
'contact' => 'required|string|max:200', 'email' => 'required|email|max:200',
'phone' => 'required|string|max:50', 'address' => 'required|string|max:500',
'category' => 'required|string|max:200', 'beneficiaries' => 'required|string|min:3|max:2000',
'document_references' => 'required|string|min:5|max:3000', 'diligence_notes' => 'required|string|min:10|max:3000',
'blocked' => 'required|boolean', 'next_review' => 'required|date_format:Y-m-d|after_or_equal:today',
'version' => $supplier instanceof Supplier ? 'required|integer|min:1' : 'prohibited',
];
}
}