Current File : /home/getxxhzo/app.genicards.com/app/Http/Controllers/CouponCodeController.php
<?php

namespace App\Http\Controllers;

use App\Http\Requests\AddCouponCodeRequest;
use App\Http\Requests\UpdateCouponCodeRequest;
use App\Models\CouponCode;
use App\Models\Setting;
use App\Repositories\CouponCodeRepository;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\View\View;

class CouponCodeController extends AppBaseController
{
    public function index(): View
    {
        return view('sadmin.couponCodes.index');
    }

    public function store(AddCouponCodeRequest $request)
    {

        $input = $request->all();
        $couponLimit = $input['coupon_limit'];
        $input['coupon_limit_left'] = $couponLimit;
        // $endDate =  $input['expire_at'];
        // $format = getSuperAdminSettingValue('datetime_method');
        // $formattedDate = ($format == 1)
        //     ? Carbon::createFromFormat('d M, Y', $endDate)->format('Y-m-d H:i:s')
        //     : (($format == 2)
        //         ? Carbon::createFromFormat('M d, Y', $endDate)->format('Y-m-d H:i:s')
        //         : (($format == 3)
        //             ? Carbon::createFromFormat('d/m/Y', $endDate)->format('Y-m-d H:i:s')
        //             : (($format == 4)
        //                 ? Carbon::createFromFormat('Y/m/d', $endDate)->format('Y-m-d H:i:s')
        //                 : (($format == 5)
        //                     ? Carbon::createFromFormat('m/d/Y', $endDate)->format('Y-m-d H:i:s')
        //                     : (($format == 6)
        //                         ? Carbon::createFromFormat('Y-m-d', $endDate)->format('Y-m-d H:i:s')
        //                         : Carbon::parse($endDate)->format('Y-m-d H:i:s')
        //                         )
        //                     )
        //                 )
        //             )
        //         );
        // $input['expire_at'] =  $formattedDate;
        $input['status'] = isset($input['status']);
        CouponCode::create($input);

        return $this->sendSuccess(__('messages.coupon_code.coupon_code_created'));
    }

    public function edit($couponCodeId)
    {
        $couponCode = CouponCode::findOrFail($couponCodeId);

        return $this->sendResponse($couponCode, 'Coupon Code Retrieved Successfully.');
    }

    public function update(UpdateCouponCodeRequest $request, $id)
    {

        $input = $request->all();
        $couponCode = CouponCode::findOrFail($id);
        $couponCodeLimit = $couponCode->coupon_limit_left;
        $input['coupon_limit'] = isset($input['coupon_limit'])? $input['coupon_limit']: null;

        if($input['coupon_limit'] ==  $couponCodeLimit ){
            $input['coupon_limit_left'] = $input['coupon_limit'];
        }else{
            $input['coupon_limit_left'] = $couponCodeLimit - ($input['coupon_limit'] ) ;
        }
        if($input['coupon_limit'] > $couponCodeLimit ){
            $input['coupon_limit_left'] = $input['coupon_limit'];
        }
        if($input['coupon_limit'] < $couponCodeLimit ){
            $input['coupon_limit_left'] = $input['coupon_limit'];
        }
        if($input['coupon_limit'] == null){
            $input['coupon_limit_left'] = null;
        }

        // $endDate =  $input['expire_at'];
        // $format = getSuperAdminSettingValue('datetime_method');
        // $formattedDate = ($format == 1)
        //     ? Carbon::createFromFormat('d M, Y', $endDate)->format('Y-m-d H:i:s')
        //     : (($format == 2)
        //         ? Carbon::createFromFormat('M d, Y', $endDate)->format('Y-m-d H:i:s')
        //         : (($format == 3)
        //             ? Carbon::createFromFormat('d/m/Y', $endDate)->format('Y-m-d H:i:s')
        //             : (($format == 4)
        //                 ? Carbon::createFromFormat('Y/m/d', $endDate)->format('Y-m-d H:i:s')
        //                 : (($format == 5)
        //                     ? Carbon::createFromFormat('m/d/Y', $endDate)->format('Y-m-d H:i:s')
        //                     : (($format == 6)
        //                         ? Carbon::createFromFormat('Y-m-d', $endDate)->format('Y-m-d H:i:s')
        //                         : Carbon::parse($endDate)->format('Y-m-d H:i:s')
        //                         )
        //                     )
        //                 )
        //             )
        //         );
        // $input['expire_at'] = $formattedDate;
        $input['status'] = isset($input['status']);
        $couponCode->update($input);

        return $this->sendSuccess(__('messages.coupon_code.coupon_code_updated'));
    }

    public function destroy($couponCodeId)
    {
        $couponCode = CouponCode::findOrFail($couponCodeId);
        $couponCode->delete();

        return $this->sendSuccess('Coupon Code deleted Successfully.');
    }

    public function changeCouponCodeStatus(Request $request, $couponCodeId)
    {
        $couponCode = CouponCode::findOrFail($couponCodeId);
        $couponCode->status = $request->get('status') == 'true' ? 1 : 0;
        $couponCode->update();

        return $this->sendSuccess(__('messages.coupon_code.coupon_code_status_updated'));
    }

    public function applyCouponCode(Request $request, $couponCode = null)
    {
        $input = $request->all();
        $input['couponCode'] = $couponCode;
        $couponCodeRepo = App(CouponCodeRepository::class);
        $newPlan = $couponCodeRepo->getAfterDiscountData($input);

        if (isset($newPlan['afterDiscount'])) {
            $couponId = $newPlan['afterDiscount']['couponId'];
            $coupon = CouponCode::find($couponId);

            if ($coupon) {
                if ($coupon->coupon_limit != null) {
                    if ($coupon->coupon_limit_left <= 0) {
                        return $this->sendError(__('messages.coupon_code.coupon_limit_reached'));
                    }
                }
            }
        }
        return $this->sendResponse($newPlan, __('messages.coupon_code.coupon_code_applied'));
    }
}