HOME


Mini Shell 1.0
La Pieza.DO | Todo lo que buscas!

Bienvenido de nuevo!

Acceso Cuenta Delivery
DIR: /var/www/devs.lapieza.net/app/Http/Requests/
Upload File :
Current File : /var/www/devs.lapieza.net/app/Http/Requests/CouponRequest.php
<?php



namespace App\Http\Requests;



use Illuminate\Foundation\Http\FormRequest;

use Illuminate\Validation\Rule;

use Illuminate\Contracts\Validation\Validator;

use Illuminate\Http\Exceptions\HttpResponseException;

use Illuminate\Validation\ValidationException;



class CouponRequest extends FormRequest

{

    /**

     * Determine if the user is authorized to make this request.

     *

     * @return bool

     */

    public function authorize()

    {

        return true;

    }



    /**

     * Get the validation rules that apply to the request.

     *

     * @return array

     */

    public function rules()

    {

        $productsRule           = 'sometimes';

        $minBuyRule             = 'sometimes';

        $maxDiscountRule        = 'sometimes';

        if ($this->request->get('type') == 'product_base') {

            $productsRule       = 'required';

        }

        if ($this->request->get('type') == 'cart_base') {

            $minBuyRule         = ['required', 'numeric', 'min:1'];

            $maxDiscountRule    = ['required', 'numeric', 'min:1'];

        }

        return [

            'type'          => ['required'],

            'code'          => ['required', Rule::unique('coupons')->ignore($this->coupon), 'max:255',],

            'discount'      => ['required', 'numeric', 'min:1'],

            'discount_type' => ['required'],

            'product_ids'   => $productsRule,

            'min_buy'       => $minBuyRule,

            'max_discount'  => $maxDiscountRule,

            'date_range'    => ['required'],

            'start_date'    => ['required'],

            'end_date'      => ['required'],

            'details'       => ['required'],

        ];

    }



    /**

     * Get the error messages for the defined validation rules.

     *

     * @return array

     */

    public function messages()

    {

        return [

            'type.required'         => translate('Coupon type is required'),

            'code.required'         => translate('Coupon code is required'),

            'code.unique'           => translate('Coupon already exist for this coupon code'),

            'code.max'              => translate('Max 255 characters'),

            'product_ids.required'  => translate('Product is required'),

            'discount.required'     => translate('Discount is required'),

            'discount.numeric'      => translate('Discount should be numeric type'),

            'discount.min'          => translate('Discount should be l or greater'),

            'discount_type.required' => translate('Discount type is required'),

            'min_buy.required'      => translate('Minimum shopping amount is required'),

            'min_buy.numeric'       => translate('Minimum shopping amount should be numeric type'),

            'min_buy.min'           => translate('Minimum shopping amount should be l or greater'),

            'max_discount.required' => translate('Max discount amount is required'),

            'max_discount.numeric'  => translate('Max discount amount should be numeric type'),

            'max_discount.min'      => translate('Max discount amount should be l or greater'),

            'date_range.required'   => translate('Date Range is required'),

        ];

    }





    protected function prepareForValidation()

    {

        $date_range = explode(" - ", $this->date_range);

        $start_date = '';

        $end_date = '';

        // dd($date_range);

        if($date_range[0]) {

            $start_date = strtotime($date_range[0]);

            $end_date = strtotime($date_range[1]);

        }

        $coupon_details = null;

        if ($this->type == "product_base") {

            $coupon_details = array();

            if($this->product_ids) {

                foreach ($this->product_ids as $product_id) {

                    $data['product_id'] = $product_id;

                    array_push($coupon_details, $data);

                }

            }

            $coupon_details = json_encode($coupon_details);

        } elseif ($this->type == "cart_base") {

            $data                     = array();

            $data['min_buy']          = $this->min_buy;

            $data['max_discount']     = $this->max_discount;

            $coupon_details           = json_encode($data);

        }



        $this->merge([

            'start_date'    => $start_date,

            'end_date'      => $end_date,

            'details'       => $coupon_details

        ]);

    }



    /**

     * Get the error messages for the defined validation rules.*

     * @return array

     */

    public function failedValidation(Validator $validator)

    {

        // dd($this->expectsJson());

        if ($this->expectsJson()) {

            throw new HttpResponseException(response()->json([

                'message' => $validator->errors()->all(),

                'result' => false

            ], 422));

        } else {

            throw (new ValidationException($validator))

                    ->errorBag($this->errorBag)

                    ->redirectTo($this->getRedirectUrl());

        }

    }

}