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