88 lines
3.7 KiB
PHP
88 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class StoreInterventionRequest extends FormRequest
|
|
{
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function rules(): array
|
|
{
|
|
return [
|
|
'client_id' => ['nullable', 'exists:clients,id'],
|
|
'sous_traitant_id' => ['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' => ['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) {
|
|
$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.',
|
|
];
|
|
}
|
|
}
|