Uname: Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
Software: LiteSpeed
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.213.251.212
Your Ip: 13.58.50.163
User: allssztx (535) | Group: allssztx (533)
Safe Mode: OFF
Disable Function:
NONE

name : CartController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Response;
use Illuminate\Support\Str;
use App\Models\Product;
use App\Models\Cart;
use App\Models\Coupon;
use Carbon\Carbon;
use Auth;

class CartController extends Controller
{
    public function index(Request $req)
    {
        $sessId = session()->getId();
        $req->session()->put('session_id',$sessId);
        
        if(Auth::check())
        {
            $data['cartItem'] = Cart::where('user_id',Auth::id())->get();
            // $data['cartItem'] = Cart::all();
            return view('cart',$data);
        }
        else
        {
            $data['cartItem'] = Cart::where('session_id',session('session_id'))->get();
            // $data['cartItem'] = Cart::all();
            return view('cart',$data);
            // return back()->with('error','Please Login First');
        }
    }
    
public function cartCount()
{
    if (auth()->check()) {
        $cartCount = Cart::where('user_id', auth()->id())->count();
    } else {
        $cartCount = session()->has('cart') ? count(session('cart')) : 0;
    }
    return response()->json(['count' => $cartCount]);
}

public function insert(Request $req)
{
    try {
        $sessId = session()->getId();
        $req->session()->put('session_id', $sessId);

        $pro_id = $req->id;
        $pro_quantity = $req->qty;
        $pro_color = $req->color;
        $pro_size = $req->size;
        $varient = $req->varient;

        $product = Product::where('product_id', $pro_id)->first();
        
        if (!$product) {
            return response()->json(['error' => 'Product not found']);
        }

        $product_category_id = $product->product_category_id;

        if (Auth::user()) {
            if (auth()->check()) {
                $cartQuery = Cart::where('user_id', Auth::id())
                                ->where('product_id', $pro_id)
                                ->where('color_id', $pro_color)
                                ->where('size_id', $pro_size)
                                ->where('varient_id', $varient);

                if ($cartQuery->exists()) {
                    $cart = $cartQuery->first();
                    $cart->product_quantity += $pro_quantity;
                    $cart->save();
                } else {
                    $newCartItem = new Cart;
                    $newCartItem->user_id = Auth::user()->id;
                    $newCartItem->product_id = $pro_id;
                    $newCartItem->product_quantity = $pro_quantity;
                    $newCartItem->color_id = $pro_color;
                    $newCartItem->size_id = $pro_size;
                    $newCartItem->varient_id = $varient;
                    $newCartItem->save();
                }

                $this->applyCategoryDiscount(Auth::id(), $product_category_id);

                $updatedCartItem = Cart::where('user_id', Auth::id())->where('product_id', $pro_id)->first();
                return response()->json([
                    'success' => 'Cart Updated Successfully',
                    'discount' => $updatedCartItem->discount ?? 0,
                    'final_price' => $updatedCartItem->final_price ?? $product->product_origional_price,
                ]);
            } else {
                return response()->json(['loginerror' => 'Please Login First']);
            }
        } else {
            $cartQuery = Cart::where('session_id', session('session_id'))
                            ->where('product_id', $pro_id)
                            ->where('color_id', $pro_color)
                            ->where('size_id', $pro_size)
                            ->where('varient_id', $varient);

            if ($cartQuery->exists()) {
                $cart = $cartQuery->first();
                $cart->product_quantity += $pro_quantity;
                $cart->save();
            } else {
                $newCartItem = new Cart;
                $newCartItem->session_id = session('session_id');
                $newCartItem->product_id = $pro_id;
                $newCartItem->product_quantity = $pro_quantity;
                $newCartItem->color_id = $pro_color;
                $newCartItem->size_id = $pro_size;
                $newCartItem->varient_id = $varient;
                $newCartItem->save();
            }

            $this->applyCategoryDiscount(session('session_id'), $product_category_id, false);

            $updatedCartItem = Cart::where('session_id', session('session_id'))->where('product_id', $pro_id)->first();
            return response()->json([
                'success' => 'Cart Updated Successfully',
                'discount' => $updatedCartItem->discount ?? 0,
                'final_price' => $updatedCartItem->final_price ?? $product->product_origional_price,
            ]);
        }
    } catch (\Exception $e) {
        return response()->json(['error' => 'An error occurred: ' . $e->getMessage()]);
    }
}

public function showProductDetail($id)
{
    $product = Product::find($id);

    if (!$product) {
        abort(404, 'Product not found');
    }

    // Fetch cart details if needed
    $cartItem = Cart::where('product_id', $id)
                    ->where('user_id', Auth::id())
                    ->orWhere('session_id', session('session_id'))
                    ->first();

    $discount = $cartItem->discount ?? 0;
    $finalPrice = $cartItem->final_price ?? $product->product_origional_price;

    return view('product_detail', [
        'product' => $product,
        'discount' => $discount,
        'final_price' => $finalPrice
    ]);
}


private function applyCategoryDiscount($identifier, $product_category_id, $isAuth = true)
{
    $discountPercentage = 10;

    if ($isAuth) {
        $cartItems = Cart::where('user_id', $identifier)
                         ->whereHas('product', function ($query) use ($product_category_id) {
                             $query->where('product_category_id', $product_category_id);
                         })->get();
    } else {
        $cartItems = Cart::where('session_id', $identifier)
                         ->whereHas('product', function ($query) use ($product_category_id) {
                             $query->where('product_category_id', $product_category_id);
                         })->get();
    }

    foreach ($cartItems as $cartItem) {
        $product = Product::find($cartItem->product_id);
        $totalPrice = $product->product_origional_price * $cartItem->product_quantity;
        $discountAmount = ($totalPrice * $discountPercentage) / 100;
        $cartItem->discount = $discountAmount;
        $cartItem->final_price = $totalPrice - $discountAmount;
        $cartItem->save();
    }
}





    
    public function update(Request $req)
    {
        $id = $req->id;
        $pro_id = $req->pro_id;
        $pro_quantity = $req->qty;
        
        if(Auth::user())
        {
            if (auth()->check()) 
            {
                $prod_check = Product::where('product_id',$pro_id)->first();
    
                if($prod_check)
                {
                        $UpdateCart = Cart::find($id);
                        $UpdateCart->product_quantity = $pro_quantity;
                        $UpdateCart->save();
                        return response()->json(['success'=>'Cart Updated Successfully']);
                }
            }
            else
            {
                return response()->json(['loginerror'=>'Please Login First']);
            }
        }
        else
        {
            $prod_check = Product::where('product_id',$pro_id)->first();
    
                if($prod_check)
                {
                        $UpdateCart = Cart::find($id);
                        $UpdateCart->product_quantity = $pro_quantity;
                        $UpdateCart->save();
                        return response()->json(['success'=>'Cart Updated Successfully']);
                }
        }
    }

    public function delete(Request $req)
    {
        $id = $req->id;
        $DeleteCart = Cart::find($id);
        $DeleteCart->delete();
    }



    public function decrease(Request $req)
    {
        $id = $req->id;
        $DecQty = Cart::find($id);
        $DecQty->product_quantity = $DecQty->product_quantity - 1;
        $DecQty->save();
        return response()->json(['success'=>'decreased']);
    }

    public function increase(Request $req)
    {
        $id = $req->id;
        $DecQty = Cart::find($id);
        $DecQty->product_quantity = $DecQty->product_quantity + 1;
        $DecQty->save();
        return response()->json(['success'=>'increase']);
    }
    
    public function delete_all()
    {
        if(Auth::check())
        {
            Cart::where('user_id', Auth::id())->delete();
            return redirect('cart');
        }
        else
        {
            Cart::where('session_id', session('session_id'))->delete();
            return redirect('cart');
        }
        
        // Cart::truncate();
        // return redirect('cart');
    }
    
    public function check_coupon(Request $req)
    {
        $coupon = $req->coupan;
        $data = Coupon::where('coupon_code', $coupon)->where('coupon_status', 1)->first();
        $current_date = Carbon::now();
        
        if(!$data)
        {
            return response()->json(['notfound'=>'Invalid Coupon Please Enter Valid Coupon Code!']);
        }
        else
        {
            $dbase_date = $data->coupon_end_date;
            
            if($dbase_date < $current_date)
            {
                return response()->json(['expire'=>'Coupon Code You Entered Is Expired!']);
            }
            else
            {
                $req->session()->put('coupon',[
                    'id' => $data->coupon_id,
                    'code' => $data->coupon_code,
                    'percent' => $data->coupon_percent,
                    'sdate' => $data->coupon_start_date,
                    'edate' => $data->coupon_end_date,
                    'status' => $data->coupon_status,
                    ]);
                    
                    return response()->json(['success'=>'Coupon Added Successfully!']);
            }
        }
    }
    
    // public function xyzz()
    // {
    //     session()->forget('coupon');
    // }
}
© 2025 GrazzMean-Shell