File "StoreOrderRequest.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Requests/User/StoreOrderRequest.php
File size: 7.12 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\ValidateDate;
use App\Rules\ValidateImage;
use App\Rules\ValidateRange;
use Illuminate\Foundation\Http\FormRequest;
class StoreOrderRequest extends FormRequest
{
public function rules()
{
$rules = [
'rush_order' => [
'nullable',
'in:'. implode(',', Order::RUSH_ORDER_RADIO),
],
'delivery_date' => [
'required',
'date',
'after:today',
new ValidateDate,
],
'event_date' => [
'required',
'date',
'after:today',
'after_or_equal:delivery_date',
],
'delivery_type' => [
'required',
'in:'. implode(',', Order::DELIVERY_TYPE),
],
'description' => [
'nullable',
'string',
],
'shipping_address_id' => [
'exclude_if:delivery_type,Pickup',
'required_if:delivery_type,Shipping',
'integer',
'exists:address_books,id',
],
'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.*.approve_consent' => [
'required',
'boolean',
],
'products.*.price_id' => [
'required',
'integer',
'exists:product_prices,id',
],
'products.*.item_id' => [
'nullable',
],
'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,
],
'products.*.notes' => [
'nullable',
'string',
],
'payment_type' => [
'required',
'in:Credit Card,Purchase Order',
],
];
if ($this->input('payment_type') == 'Credit Card') {
if ($this->input('vault_id')) {
$rules['vault_id'] = [
'exclude_if:payment_type,Purchase Order',
'gt:0',
];
} else if($this->input('card_number') && $this->input('expiry_year') && $this->input('expiry_month') && $this->input('ccv')) {
$rules['expiry_year'] = [
'exclude_if:payment_type,Purchase Order',
'date_format:Y',
];
$rules['expiry_month'] = [
'exclude_if:payment_type,Purchase Order',
'date_format:m',
];
$rules['ccv'] = [
'exclude_if:payment_type,Purchase Order',
'regex:/^[0-9]+$/',
];
$rules['save_card'] = [
'exclude_if:payment_type,Purchase Order',
'boolean',
'nullable',
];
} else {
$rules['payment_method'] = [
'required',
];
}
} else if ($this->input('payment_type') == 'Purchase Order'){
$rules['purchase_order_number'] = [
'required_if:payment_type,Purchase Order',
'string',
'max:25',
];
$rules['purchase_order_copy'] = [
'required_if:payment_type,Purchase Order',
'mimes:pdf,jpg,jpeg,png,xlsx',
];
}
return $rules;
}
public function messages()
{
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.*.approve_consent.required' => 'Consent for product #:position is required.',
'products.*.approve_consent.boolean' => 'Consent for product #:position can only be 1 or 0.',
'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' => ':attribute can only be '. implode(',', Order::RUSH_ORDER_RADIO),
'payment_method.required' => 'Credit card details or vault id needed when payment type is credit card.',
'ccv.regex' => 'Ccv must be a valid number.',
];
}
}