'required|date', 'due_date' => 'required|date|after_or_equal:invoice_date', 'customer_id' => 'required|integer|exists:users,id', 'warehouse_id' => 'nullable|integer|exists:warehouses,id', 'payment_terms' => 'nullable|string|max:255', 'notes' => 'nullable|string', 'items' => 'required|array|min:1', 'items.*.product_id' => 'required|integer|min:1', 'items.*.quantity' => 'required|integer|min:1', 'items.*.unit_price' => 'required|numeric|min:0', 'items.*.discount_percentage' => 'nullable|numeric|min:0|max:100', 'items.*.tax_percentage' => 'nullable|numeric|min:0|max:100' ]; } public function messages(): array { return [ 'customer_id.exists' => __('Selected customer does not exist.'), 'items.required' => __('At least one item is required.'), 'items.*.product_id.min' => __('Please select a product for each item.'), 'items.*.quantity.min' => __('Quantity must be at least 1.'), 'items.*.unit_price.min' => __('Unit price must be 0 or greater.') ]; } }