['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.', ]; } }