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