product=$product; } public function addToCart(Request $request) { $request->validate([ 'slug' => 'required|string', 'size' => 'required|string', 'quantity' => 'required|integer|min:1' ]); $product = Product::where('slug', $request->slug)->first(); if (!$product) { return back()->with('error', 'Invalid product'); } // Get the stock for the selected size $productSize = $product->sizes()->where('size', $request->size)->first(); if (!$productSize) { return back()->with('error', 'Invalid size selected.'); } $requestedQuantity = $request->quantity; if ($productSize->stock < $requestedQuantity) { return back()->with('error', 'Stock not sufficient for selected size.'); } $unit_price = $product->price - ($product->price * $product->discount) / 100; $already_cart = Cart::where('user_id', auth()->id()) ->where('order_id', null) ->where('product_id', $product->id) ->where('size', $request->size) ->first(); if ($already_cart) { $newQuantity = $already_cart->quantity + $requestedQuantity; if ($productSize->stock < $newQuantity) { return back()->with('error', 'Stock not sufficient for selected size.'); } $already_cart->quantity = $newQuantity; $already_cart->price = $unit_price; $already_cart->amount = $newQuantity * $unit_price; $already_cart->save(); } else { $cart = new Cart; $cart->user_id = auth()->id(); $cart->product_id = $product->id; $cart->size = $request->size; $cart->price = $unit_price; $cart->quantity = $requestedQuantity; $cart->amount = $unit_price * $requestedQuantity; $cart->save(); } return response()->json([ 'status' => 'success', 'message' => 'Product added to cart successfully', 'cartCount' => Cart::where('user_id', auth()->id())->where('order_id', null)->count() ]); if ($request->has('redirect_to_cart') && $request->redirect_to_cart === 'true') { return redirect()->route('cart')->with('success', 'Product successfully added to cart.'); } return response()->json([ 'status' => 'success', 'message' => 'Product added to cart successfully', 'cartCount' => Cart::where('user_id', auth()->id())->where('order_id', null)->count() ]); } public function cartDelete(Request $request){ $cart = Cart::find($request->id); if ($cart) { $cart->delete(); request()->session()->flash('success','Cart successfully removed'); return back(); } request()->session()->flash('error','Error please try again'); return back(); } public function cartUpdate(Request $request){ // dd($request->all()); if($request->quant){ $error = array(); $success = ''; // return $request->quant; foreach ($request->quant as $k=>$quant) { // return $k; $id = $request->qty_id[$k]; // return $id; $cart = Cart::find($id); // return $cart; if($quant > 0 && $cart) { // return $quant; if($cart->product->stock < $quant){ request()->session()->flash('error','Out of stock'); return back(); } $cart->quantity = ($cart->product->stock > $quant) ? $quant : $cart->product->stock; // return $cart; if ($cart->product->stock <=0) continue; $after_price=($cart->product->price-($cart->product->price*$cart->product->discount)/100); $cart->amount = $after_price * $quant; // return $cart->price; $cart->save(); $success = 'Cart successfully updated!'; }else{ $error[] = 'Cart Invalid!'; } } return back()->with($error)->with('success', $success); }else{ return back()->with('Cart Invalid!'); } } public function checkout(Request $request){ return view('frontend.pages.checkout'); } }