New-Thanasoft/thanasoft-back/app/Http/Requests/UpdateInterventionRequest.php
2026-05-22 15:57:50 +03:00

92 lines
3.9 KiB
PHP

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateInterventionRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'client_id' => ['sometimes', 'nullable', 'exists:clients,id'],
'sous_traitant_id' => ['sometimes', 'nullable', 'exists:sous_traitants,id'],
'deceased_id' => ['nullable', 'exists:deceased,id'],
'order_giver' => ['nullable', 'string', 'max:255'],
'location_id' => ['nullable', 'exists:client_locations,id'],
'product_id' => ['nullable', 'exists:products,id'],
'type' => ['sometimes', 'required', Rule::in([
'thanatopraxie',
'toilette_mortuaire',
'exhumation',
'retrait_pacemaker',
'retrait_bijoux',
'autre',
])],
'scheduled_at' => ['nullable', 'date_format:Y-m-d H:i:s'],
'duration_min' => ['nullable', 'integer', 'min:0'],
'status' => ['sometimes', Rule::in([
'demande',
'planifie',
'en_cours',
'termine',
'annule',
])],
'practitioners' => ['nullable', 'array'],
'practitioners.*' => ['exists:thanatopractitioners,id'],
'principal_practitioner_id' => ['nullable', 'exists:thanatopractitioners,id'],
'assistant_practitioner_ids' => ['nullable', 'array'],
'assistant_practitioner_ids.*' => ['exists:thanatopractitioners,id'],
'notes' => ['nullable', 'string'],
'created_by' => ['nullable', 'exists:users,id'],
];
}
public function withValidator($validator): void
{
$validator->after(function ($validator) {
if (! $this->hasAny(['client_id', 'sous_traitant_id'])) {
return;
}
$hasClient = filled($this->input('client_id'));
$hasSousTraitant = filled($this->input('sous_traitant_id'));
if (! $hasClient && ! $hasSousTraitant) {
$message = 'Un client ou un sous-traitant est obligatoire.';
$validator->errors()->add('client_id', $message);
$validator->errors()->add('sous_traitant_id', $message);
}
});
}
public function messages(): array
{
return [
'client_id.exists' => 'Le client selectionne est invalide.',
'sous_traitant_id.exists' => 'Le sous-traitant selectionne est invalide.',
'deceased_id.exists' => 'Le defunt selectionne est invalide.',
'order_giver.max' => 'Le donneur d ordre ne peut pas depasser 255 caracteres.',
'location_id.exists' => 'Le lieu selectionne est invalide.',
'type.required' => 'Le type d intervention est obligatoire.',
'type.in' => 'Le type d intervention est invalide.',
'scheduled_at.date_format' => 'Le format de la date programmee est invalide.',
'duration_min.integer' => 'La duree doit etre un nombre entier.',
'duration_min.min' => 'La duree ne peut pas etre negative.',
'status.in' => 'Le statut de l intervention est invalide.',
'practitioners.array' => 'Les praticiens doivent etre un tableau.',
'practitioners.*.exists' => 'Un des praticiens selectionnes est invalide.',
'principal_practitioner_id.exists' => 'Le praticien principal selectionne est invalide.',
'assistant_practitioner_ids.array' => 'Les praticiens assistants doivent etre un tableau.',
'assistant_practitioner_ids.*.exists' => 'Un des praticiens assistants est invalide.',
'created_by.exists' => 'L utilisateur createur est invalide.',
];
}
}