New-Thanasoft/thanasoft-back/app/Http/Requests/StoreProductRequest.php
2025-11-05 17:09:12 +03:00

90 lines
5.0 KiB
PHP

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreProductRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'nom' => 'required|string|max:255',
'reference' => 'required|string|max:100|unique:products,reference',
'categorie_id' => 'required|exists:product_categories,id',
'fabricant' => 'nullable|string|max:191',
'stock_actuel' => 'required|numeric|min:0',
'stock_minimum' => 'required|numeric|min:0',
'unite' => 'required|string|max:50',
'prix_unitaire' => 'required|numeric|min:0',
'date_expiration' => 'nullable|date|after:today',
'numero_lot' => 'nullable|string|max:100',
'conditionnement_nom' => 'nullable|string|max:191',
'conditionnement_quantite' => 'nullable|numeric|min:0',
'conditionnement_unite' => 'nullable|string|max:50',
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'remove_image' => 'nullable|boolean',
'fiche_technique_url' => 'nullable|url|max:500',
'fournisseur_id' => 'nullable|exists:fournisseurs,id',
];
}
public function messages(): array
{
return [
'nom.required' => 'Le nom du produit est obligatoire.',
'nom.string' => 'Le nom du produit doit être une chaîne de caractères.',
'nom.max' => 'Le nom du produit ne peut pas dépasser 255 caractères.',
'reference.required' => 'La référence du produit est obligatoire.',
'reference.string' => 'La référence du produit doit être une chaîne de caractères.',
'reference.max' => 'La référence du produit ne peut pas dépasser 100 caractères.',
'reference.unique' => 'Cette référence de produit existe déjà.',
'categorie_id.required' => 'La catégorie est obligatoire.',
'categorie_id.exists' => 'La catégorie sélectionnée n\'existe pas.',
'fabricant.string' => 'Le fabricant doit être une chaîne de caractères.',
'fabricant.max' => 'Le fabricant ne peut pas dépasser 191 caractères.',
'stock_actuel.required' => 'Le stock actuel est obligatoire.',
'stock_actuel.numeric' => 'Le stock actuel doit être un nombre.',
'stock_actuel.min' => 'Le stock actuel doit être supérieur ou égal à 0.',
'stock_minimum.required' => 'Le stock minimum est obligatoire.',
'stock_minimum.numeric' => 'Le stock minimum doit être un nombre.',
'stock_minimum.min' => 'Le stock minimum doit être supérieur ou égal à 0.',
'unite.required' => 'L\'unité est obligatoire.',
'unite.string' => 'L\'unité doit être une chaîne de caractères.',
'unite.max' => 'L\'unité ne peut pas dépasser 50 caractères.',
'prix_unitaire.required' => 'Le prix unitaire est obligatoire.',
'prix_unitaire.numeric' => 'Le prix unitaire doit être un nombre.',
'prix_unitaire.min' => 'Le prix unitaire doit être supérieur ou égal à 0.',
'date_expiration.date' => 'La date d\'expiration doit être une date valide.',
'date_expiration.after' => 'La date d\'expiration doit être postérieure à aujourd\'hui.',
'numero_lot.string' => 'Le numéro de lot doit être une chaîne de caractères.',
'numero_lot.max' => 'Le numéro de lot ne peut pas dépasser 100 caractères.',
'conditionnement_nom.string' => 'Le nom du conditionnement doit être une chaîne de caractères.',
'conditionnement_nom.max' => 'Le nom du conditionnement ne peut pas dépasser 191 caractères.',
'conditionnement_quantite.numeric' => 'La quantité du conditionnement doit être un nombre.',
'conditionnement_quantite.min' => 'La quantité du conditionnement doit être supérieure ou égal à 0.',
'conditionnement_unite.string' => 'L\'unité du conditionnement doit être une chaîne de caractères.',
'conditionnement_unite.max' => 'L\'unité du conditionnement ne peut pas dépasser 50 caractères.',
'image.image' => 'Le fichier doit être une image valide.',
'image.mimes' => 'L\'image doit être de type: jpeg, png, jpg, gif ou svg.',
'image.max' => 'L\'image ne peut pas dépasser 2MB.',
'fiche_technique_url.url' => 'L\'URL de la fiche technique doit être une URL valide.',
'fiche_technique_url.max' => 'L\'URL de la fiche technique ne peut pas dépasser 500 caractères.',
'fournisseur_id.exists' => 'Le fournisseur sélectionné n\'existe pas.',
];
}
}