File "UpdateProductRequest.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Requests/Admin/UpdateProductRequest.php
File size: 10.54 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Requests\Admin;
use App\Models\Product;
use App\Rules\SupplierProductNumberBelongsToProductPrice;
use App\Rules\ValidatePriceRangeQuantity;
use Gate;
use Illuminate\Foundation\Http\FormRequest;
class UpdateProductRequest extends FormRequest
{
public function authorize()
{
return Gate::allows('product_edit');
}
public function rules()
{
return [
'category_id' => [
'required',
'numeric',
'exists:categories,id'
],
'vendor_id' => [
'required_if:product_type,standard',
'integer',
'exists:vendors,id',
],
'sku' => [
'string',
'max:50',
'required',
'unique:products,sku,' . request()->route('product')->id,
],
'name' => [
'string',
'max:50',
'required',
],
// 'slug' => [
// 'string',
// 'max:50',
// 'required',
// 'unique:products,slug,' . request()->route('product')->id,
// ],
'description' => [
'string',
'nullable',
],
'featured_image' => [
'nullable',
'mimes:jpg,gif,png',
'max:5120',
],
'gallery_images' => [
'array',
],
'gallery_images.*' => [
'mimes:jpg,gif,png',
],
'engraving' => [
'required',
'integer',
'in:0,1',
],
'color_engraving' => [
'required',
'integer',
'in:0,1',
],
'engraving_fee' => [
'required',
'numeric',
'min:0',
],
'status' => [
'required',
'integer',
'in:'. implode(',', array_keys(Product::STATUS_RADIO)),
],
'is_draft' => [
'required',
'bool',
'in:'. implode(',', array_keys(Product::DRAFT_RADIO)),
],
'product_type' => [
'required',
'in:'. implode(',', array_keys(Product::PRODUCT_TYPE)),
],
'variations' => [
'required',
'array',
],
'variations.*' => [
'required',
'integer',
'exists:variations,id',
],
'combinations' => [
'required',
'array',
],
'combinations.*.variations' => [
'required',
'array',
],
'combinations.*.product_sketch' => [
'mimes:svg',
'max:5120',
],
'combinations.*.variations.*' => [
'required',
'integer',
'exists:variations,id',
'in:'.implode(',', $this->variations ?? []),
],
'combinations.*.vendor_price' => [
'required_if:product_type,standard',
'numeric',
'gt:0',
],
'combinations.*.supplier_prod_number' => [
'required',
'string',
'distinct',
new SupplierProductNumberBelongsToProductPrice,
],
'combinations.*.shipping_weight' => [
'required',
'numeric',
'gt:0',
],
'combinations.*.length' => [
'required',
'numeric',
'gt:0',
],
'combinations.*.width' => [
'required',
'numeric',
'gt:0',
],
'combinations.*.height' => [
'required',
'numeric',
'gt:0',
],
'combinations.*.price_ranges' => [
'required',
'array',
],
'combinations.*.price_ranges.*.qty_from' => [
'required',
'integer',
'min:1',
'max:2147483647',
new ValidatePriceRangeQuantity,
],
'combinations.*.price_ranges.*.qty_to' => [
'required',
'integer',
'min:1',
'max:2147483647',
'gt:combinations.*.price_ranges.*.qty_from',
],
'combinations.*.price_ranges.*.price' => [
'required',
'numeric',
'gt:0',
'max:2147483647',
],
];
}
public function messages()
{
return [
'variations.*.integer' => 'Variation on position #:position must be integer.',
'variations.*.exists' => 'Invalid variation on #:position.',
'combinations.*.variations.array' => 'Variations for combination #:position must be an array.',
'combinations.*.variations.required' => 'Variations for combination #:position are required.',
'combinations.*.product_sketch.required_if' => 'Product sketch for combination #:position field is required when engraving is 1.',
'combinations.*.product_sketch.mimes' => 'Product sketch for combination #:position field must be of type svg.',
'combinations.*.variations.*.integer' => 'Variations for combination #:position must be integer.',
'combinations.*.variations.*.exists' => 'Invalid variations for combination #:position.',
'combinations.*.variations.*.in' => 'Variations for combination #:position can only contain values selected above.',
'combinations.*.vendor_price.required' => 'Vendor price for combination #:position is required.',
'combinations.*.vendor_price.numeric' => 'Vendor price for combination #:position must be numeric.',
'combinations.*.vendor_price.gt' => 'Vendor price for combination #:position should be greater than 0.',
'gallery_images.*.mimes' => 'Invalid image on position #:position. Only image type of jpg,gif,png are supported.',
'combinations.*.supplier_prod_number.required' => 'Supplier production number for combination #:position is required.',
'combinations.*.supplier_prod_number.unique' => 'Supplier production number for combination #:position must be unique.',
'combinations.*.supplier_prod_number.string' => 'Supplier production number for combination #:position must be string.',
'combinations.*.supplier_prod_number.distinct' => 'Supplier production number for combination #:position must be distinct.',
'combinations.*.shipping_weight.required' => 'Shipping weight for combination #:position is required.',
'combinations.*.shipping_weight.numeric' => 'Shipping weight for combination #:position must be numeric.',
'combinations.*.shipping_weight.gt' => 'Shipping weight for combination #:position must be greater than 0.',
'combinations.*.length.required' => 'Length for combination #:position is required.',
'combinations.*.length.numeric' => 'Length for combination #:position must be numeric.',
'combinations.*.length.gt' => 'Length for combination #:position must be greater than 0.',
'combinations.*.width.required' => 'Width for combination #:position is required.',
'combinations.*.width.numeric' => 'Width for combination #:position must be numeric.',
'combinations.*.width.gt' => 'Width for combination #:position must be greater than 0.',
'combinations.*.height.required' => 'Height for combination #:position is required.',
'combinations.*.height.numeric' => 'Height for combination #:position must be numeric.',
'combinations.*.height.gt' => 'Height for combination #:position must be greater than 0.',
'combinations.*.price_ranges.required' => 'Price range for combination #:position is required.',
'combinations.*.price_ranges.array' => 'Price range for combination #:position should be an array.',
'combinations.*.price_ranges.*.qty_from.required' => 'Quantity from for price range of combination #:position is required.',
'combinations.*.price_ranges.*.qty_from.integer' => 'Quantity from for price range of combination #:position must be an integer.',
'combinations.*.price_ranges.*.qty_from.min' => 'Quantity from for price range of combination #:position must be greater than 0.',
'combinations.*.price_ranges.*.qty_from.max' => 'Quantity from for price range of combination #:position must be less than 2147483647.',
'combinations.*.price_ranges.*.qty_to.required' => 'Quantity to for price range of combination #:position is required.',
'combinations.*.price_ranges.*.qty_to.integer' => 'Quantity to for price range of combination #:position must be an integer.',
'combinations.*.price_ranges.*.qty_to.min' => 'Quantity to for price range of combination #:position must be greater than 0.',
'combinations.*.price_ranges.*.qty_to.max' => 'Quantity to for price range of combination #:position must be less than 2147483647.',
'combinations.*.price_ranges.*.qty_to.gt' => 'Quantity to for price range of combination #:position must be greater than quantity from.',
'combinations.*.price_ranges.*.price.required' => 'Price for price range of combination #:position is required.',
'combinations.*.price_ranges.*.price.numeric' => 'Price for price range of combination #:position must be numeric.',
'combinations.*.price_ranges.*.price.gt' => 'Price for price range of combination #:position must be greater than 0.',
'combinations.*.price_ranges.*.price.max' => 'Price for price range of combination #:position must be less than 2147483647.',
'featured_image.uploaded' => "The featured image must not be greater than 5MB.",
'featured_image.max' => "The featured image must not be greater than 5MB.",
'is_draft.required' => "The draft field is required.",
'is_draft.in' => "The draft field can only be true or false.",
'product_type.in' => "The product type field can only be standard or configurable.",
];
}
}