File "OrderTotalsRequest.php"

Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Requests/User/OrderTotalsRequest.php
File size: 4.37 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Requests\User;

use App\Models\Order;
use App\Rules\ValidateCoupon;
use App\Rules\ValidateImage;
use App\Rules\ValidateRange;
use Illuminate\Foundation\Http\FormRequest;

class OrderTotalsRequest extends FormRequest
{
   public function rules(): array
   {
        return [

            'rush_order' => [
                'nullable',
                'in:'. implode(',', Order::RUSH_ORDER_RADIO),
            ],
            'shipping_address_id' => [
                'exclude_if:delivery_type,Pickup',
                'required_if:delivery_type,Shipping',
                'integer',
                'exists:address_books,id',
            ],
            'is_residential' => [
                /*'exclude_if:delivery_type,Pickup',
                'required_if:delivery_type,Shipping',*/
                'nullable',
                'boolean',
            ],
            'career_code' => [
                'exclude_if:delivery_type,Pickup',
                'required_if:delivery_type,Shipping',
                'string',
            ],
            'service_code' => [
                'exclude_if:delivery_type,Pickup',
                'required_if:delivery_type,Shipping',
                'string',
            ],
            'package_type_code' => [
                'exclude_if:delivery_type,Pickup',
                'required_if:delivery_type,Shipping',
                'string',
            ],
            'billing_address_id' => [
                'required',
                'integer',
                'exists:address_books,id',
            ],
            'pickup_location_id' => [
                'exclude_if:delivery_type,Shipping',
                'required_if:delivery_type,Pickup',
                'integer',
                'exists:store_locations,id',
            ],
            'coupon_code' => [
                'nullable',
                'exists:coupons,code',
                new ValidateCoupon,
            ],
            'products' => [
                'required',
                'array',
            ],
            'products.*.product_id' => [
                'required',
                'integer',
                'exists:products,id',
            ],
            'products.*.price_id' => [
                'required',
                'integer',
                'exists:product_prices,id',
            ],
            'products.*.quantity' => [
                'required',
                'integer',
                'min:1',
                new ValidateRange,
            ],
            'products.*.customization' => [
                'nullable',
                'array',
            ],
            'products.*.template' => [
                'nullable',
                'mimes:pdf,application/pdf',
                'max:5120',
            ],
            'products.*.image' => [
                'nullable',
                new ValidateImage,
            ],
        ];
    }

    public function messages(): array
    {
        return [
            'products.*.product_id.required' => 'Product id for product #:position is required.',
            'products.*.product_id.integer' => 'Product id for product #:position must be an integer.',
            'products.*.product_id.exists' => 'Product id for product #:position is invalid.',
            'products.*.price_id.required' => 'Price id for product #:position is required.',
            'products.*.price_id.integer' => 'Price id for product #:position must be an integer.',
            'products.*.price_id.exists' => 'Price id for product #:position is invalid.',
            'products.*.quantity.required' => 'Quantity for product #:position is required.',
            'products.*.quantity.integer' => 'Quantity for product #:position must be an integer.',
            'products.*.quantity.min' => 'Quantity for product #:position must be greater than 0.',
            'products.*.customization.array' => 'Customization for product #:position must be an array.',
            'products.*.template.mimes' => 'Template for product #:position must be of type pdf.',
            'products.*.template.max' => 'Template size for product #:position can not exceed 5MB.',
            'products.*.image.mimes' => 'Image for product #:position must be of type jpg, jpeg, png.',
            'products.*.image.max' => 'Image size for product #:position can not exceed 5MB.',
            'rush_order.in' => 'Rush Order can only be "'. implode('", "', Order::RUSH_ORDER_RADIO).'"',
        ];
    }
}