Server : nginx/1.18.0 System : Linux localhost 6.14.3-x86_64-linode168 #1 SMP PREEMPT_DYNAMIC Mon Apr 21 19:47:55 EDT 2025 x86_64 User : www-data ( 33) PHP Version : 8.0.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/ecommerce/app/Http/Controllers/Shop/ |
<?php
namespace App\Http\Controllers\Shop;
use App\Models\Cart;
use App\Models\Product;
use App\Models\Wishlist;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class CartController extends Controller
{
public function addToCart(Request $request)
{
if (empty($request->slug)) {
request()->session()->flash('error', 'Invalid Products');
return back();
}
$product = Product::where('slug', $request->slug)->first();
if (empty($product)) {
request()->session()->flash('error', 'Invalid Products');
return back();
}
$already_cart = Cart::where('user_id', auth()->id())->where('order_id', null)->where('product_id', $product->id)->first();
if ($already_cart) {
$already_cart->quantity = $already_cart->quantity + 1;
$already_cart->amount = $product->price + $already_cart->amount;
if ($already_cart->product->stock < $already_cart->quantity || $already_cart->product->stock <= 0) {
return back()->with('error', 'Stock not sufficient!.');
}
$already_cart->save();
} else {
$cart = new Cart();
$cart->user_id = auth()->id();
$cart->product_id = $product->id;
$cart->price = ($product->price - ($product->price * $product->discount) / 100);
$cart->quantity = 1;
$cart->amount = $cart->price * $cart->quantity;
if ($cart->product->stock < $cart->quantity || $cart->product->stock <= 0) {
return back()->with('error', 'Stock not sufficient!.');
}
$cart->save();
$wishlist = Wishlist::where('user_id', auth()->id())->where('cart_id', null)->update(['cart_id' => $cart->id]);
}
request()->session()->flash('success', 'Product successfully added to cart');
return back();
}
public function singleAddToCart(Request $request)
{
$request->validate([
'slug' => 'required',
'quant' => 'required',
]);
$product = Product::where('slug', $request->slug)->first();
if ($product->stock < $request->quant[1]) {
return back()->with('error', 'Out of stock, You can add other products.');
}
if (($request->quant[1] < 1) || empty($product)) {
request()->session()->flash('error', 'Invalid Products');
return back();
}
$already_cart = Cart::where('user_id', auth()->id())->where('order_id', null)->where('product_id', $product->id)->first();
if ($already_cart) {
$already_cart->quantity = $already_cart->quantity + $request->quant[1];
$already_cart->amount = ($product->discounted_price * $request->quant[1]) + $already_cart->amount;
if ($already_cart->product->stock < $already_cart->quantity || $already_cart->product->stock <= 0) {
return back()->with('error', 'Stock not sufficient!.');
}
$already_cart->save();
} else {
$cart = new Cart();
$cart->user_id = auth()->id();
$cart->product_id = $product->id;
$cart->price = ($product->price - ($product->price * $product->discount) / 100);
$cart->quantity = $request->quant[1];
$cart->amount = ($product->discounted_price * $request->quant[1]);
if ($cart->product->stock < $cart->quantity || $cart->product->stock <= 0) {
return back()->with('error', 'Stock not sufficient!.');
}
$cart->save();
}
request()->session()->flash('success', 'Product successfully added to cart.');
return back();
}
public function cartDelete(Request $request)
{
$cart = Cart::find($request->id);
if ($cart) {
$cart->delete();
request()->session()->flash('success', 'successfully removed product from cart');
return back();
}
request()->session()->flash('error', 'Error please try again');
return back();
}
public function cartUpdate(Request $request)
{
if ($request->quant) {
$error = [];
$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 addToCart(Request $request){
// // return $request->all();
// if(Auth::check()){
// $qty=$request->quantity;
// $this->product=$this->product->find($request->pro_id);
// if($this->product->stock < $qty){
// return response(['status'=>false,'msg'=>'Out of stock','data'=>null]);
// }
// if(!$this->product){
// return response(['status'=>false,'msg'=>'Product not found','data'=>null]);
// }
// // $session_id=session('cart')['session_id'];
// // if(empty($session_id)){
// // $session_id=Str::random(30);
// // // dd($session_id);
// // session()->put('session_id',$session_id);
// // }
// $current_item=array(
// 'user_id'=>auth()->id(),
// 'id'=>$this->product->id,
// // 'session_id'=>$session_id,
// 'title'=>$this->product->title,
// 'summary'=>$this->product->summary,
// 'link'=>route('product-detail',$this->product->slug),
// 'price'=>$this->product->price,
// 'photo'=>$this->product->photo,
// );
// $price=$this->product->price;
// if($this->product->discount){
// $price=($price-($price*$this->product->discount)/100);
// }
// $current_item['price']=$price;
// $cart=session('cart') ? session('cart') : null;
// if($cart){
// // if anyone alreay order products
// $index=null;
// foreach($cart as $key=>$value){
// if($value['id']==$this->product->id){
// $index=$key;
// break;
// }
// }
// if($index!==null){
// $cart[$index]['quantity']=$qty;
// $cart[$index]['amount']=ceil($qty*$price);
// if($cart[$index]['quantity']<=0){
// unset($cart[$index]);
// }
// }
// else{
// $current_item['quantity']=$qty;
// $current_item['amount']=ceil($qty*$price);
// $cart[]=$current_item;
// }
// }
// else{
// $current_item['quantity']=$qty;
// $current_item['amount']=ceil($qty*$price);
// $cart[]=$current_item;
// }
// session()->put('cart',$cart);
// return response(['status'=>true,'msg'=>'Cart successfully updated','data'=>$cart]);
// }
// else{
// return response(['status'=>false,'msg'=>'You need to login first','data'=>null]);
// }
// }
// public function removeCart(Request $request){
// $index=$request->index;
// // return $index;
// $cart=session('cart');
// unset($cart[$index]);
// session()->put('cart',$cart);
// return redirect()->back()->with('success','Successfully remove item');
// }
public function checkout(Request $request)
{
if (\Helper::cartCount() <= 0) {
request()->session()->flash('info', 'You have no item in cart.');
return redirect()
->route('home');
}
return view('frontend.pages.checkout');
}
public function cart()
{
return view('frontend.pages.cart');
}
}