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

83 lines
3.6 KiB
PHP

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateQuoteRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$quoteId = $this->route('quote');
return [
'client_id' => 'sometimes|nullable|exists:clients,id',
'sous_traitant_id' => 'sometimes|nullable|exists:sous_traitants,id',
'group_id' => 'nullable|exists:client_groups,id',
'reference' => 'sometimes|string|max:191|unique:quotes,reference,' . $quoteId,
'status' => 'sometimes|in:brouillon,envoye,accepte,refuse,expire,annule',
'quote_date' => 'sometimes|date',
'valid_until' => 'nullable|date|after_or_equal:quote_date',
'currency' => 'sometimes|string|size:3',
'total_ht' => 'sometimes|numeric|min:0',
'total_tva' => 'sometimes|numeric|min:0',
'total_ttc' => 'sometimes|numeric|min:0',
];
}
public function withValidator($validator): void
{
$validator->after(function ($validator) {
if (! $this->hasAny(['client_id', 'sous_traitant_id', 'group_id'])) {
return;
}
$hasClient = filled($this->input('client_id'));
$hasSousTraitant = filled($this->input('sous_traitant_id'));
$hasGroup = filled($this->input('group_id'));
if (! $hasClient && ! $hasSousTraitant && ! $hasGroup) {
$message = 'Un client, un sous-traitant ou un groupe de clients est obligatoire.';
$validator->errors()->add('client_id', $message);
$validator->errors()->add('sous_traitant_id', $message);
$validator->errors()->add('group_id', $message);
}
if ((int) $hasClient + (int) $hasSousTraitant + (int) $hasGroup > 1) {
$message = 'Selectionnez soit un client, soit un sous-traitant, soit un groupe de clients.';
$validator->errors()->add('client_id', $message);
$validator->errors()->add('sous_traitant_id', $message);
$validator->errors()->add('group_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.',
'group_id.exists' => 'Le groupe selectionne est invalide.',
'reference.string' => 'Le numero de devis doit etre une chaine de caracteres.',
'reference.max' => 'Le numero de devis ne doit pas depasser 191 caracteres.',
'reference.unique' => 'Ce numero de devis existe deja.',
'status.in' => 'Le statut selectionne est invalide.',
'quote_date.date' => 'La date du devis n est pas valide.',
'valid_until.date' => 'La date de validite n est pas valide.',
'valid_until.after_or_equal' => 'La date de validite doit etre posterieure ou egale a la date du devis.',
'currency.size' => 'La devise doit comporter 3 caracteres.',
'total_ht.numeric' => 'Le total HT doit etre un nombre.',
'total_ht.min' => 'Le total HT ne peut pas etre negatif.',
'total_tva.numeric' => 'Le total TVA doit etre un nombre.',
'total_tva.min' => 'Le total TVA ne peut pas etre negatif.',
'total_ttc.numeric' => 'Le total TTC doit etre un nombre.',
'total_ttc.min' => 'Le total TTC ne peut pas etre negatif.',
];
}
}