123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- use App\Models\Product;
- use App\Models\Category;
- use App\Models\Cart;
- use Auth;
- use Session;
- use Cookie;
- class CartController extends Controller
- {
- public function index(Request $request)
- {
- if(auth()->user() != null) {
- $user_id = Auth::user()->id;
- if($request->session()->get('temp_user_id')) {
- Cart::where('temp_user_id', $request->session()->get('temp_user_id'))
- ->update(
- [
- 'user_id' => $user_id,
- 'temp_user_id' => null
- ]
- );
- Session::forget('temp_user_id');
- }
- $carts = Cart::where('user_id', $user_id)->get();
- } else {
- $temp_user_id = $request->session()->get('temp_user_id');
- // $carts = Cart::where('temp_user_id', $temp_user_id)->get();
- $carts = ($temp_user_id != null) ? Cart::where('temp_user_id', $temp_user_id)->get() : [] ;
- }
- return view('frontend.view_cart', compact('carts'));
- }
- public function showCartModal(Request $request)
- {
- $product = Product::find($request->id);
- return view('frontend.partials.addToCart', compact('product'));
- }
- public function showCartModalAuction(Request $request)
- {
- $product = Product::find($request->id);
- return view('auction.frontend.addToCartAuction', compact('product'));
- }
- public function addToCart(Request $request)
- {
-
- $product = Product::find($request->id);
- $carts = array();
- $data = array();
- if(auth()->user() != null) {
- $user_id = Auth::user()->id;
- $data['user_id'] = $user_id;
- $carts = Cart::where('user_id', $user_id)->get();
- } else {
- if($request->session()->get('temp_user_id')) {
- $temp_user_id = $request->session()->get('temp_user_id');
- } else {
- $temp_user_id = bin2hex(random_bytes(10));
- $request->session()->put('temp_user_id', $temp_user_id);
- }
- $data['temp_user_id'] = $temp_user_id;
- $carts = Cart::where('temp_user_id', $temp_user_id)->get();
- }
- $data['product_id'] = $product->id;
- $data['owner_id'] = $product->user_id;
- $str = '';
- $tax = 0;
- if($product->auction_product == 0){
- if($product->digital != 1 && $request->quantity < $product->min_qty) {
- return array(
- 'status' => 0,
- 'cart_count' => count($carts),
- 'modal_view' => view('frontend.partials.minQtyNotSatisfied', [ 'min_qty' => $product->min_qty ])->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- //check the color enabled or disabled for the product
- if($request->has('color')) {
- $str = $request['color'];
- }
- if ($product->digital != 1) {
- //Gets all the choice values of customer choice option and generate a string like Black-S-Cotton
- foreach (json_decode(Product::find($request->id)->choice_options) as $key => $choice) {
- if($str != null){
- $str .= '-'.str_replace(' ', '', $request['attribute_id_'.$choice->attribute_id]);
- }
- else{
- $str .= str_replace(' ', '', $request['attribute_id_'.$choice->attribute_id]);
- }
- }
- }
- $data['variation'] = $str;
- $product_stock = $product->stocks->where('variant', $str)->first();
- $price = $product_stock->price;
- if($product->wholesale_product){
- $wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $request->quantity)->where('max_qty', '>=', $request->quantity)->first();
- if($wholesalePrice){
- $price = $wholesalePrice->price;
- }
- }
- $quantity = $product_stock->qty;
- if($quantity < $request['quantity']){
- return array(
- 'status' => 0,
- 'cart_count' => count($carts),
- 'modal_view' => view('frontend.partials.outOfStockCart')->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- //discount calculation
- $discount_applicable = false;
- if ($product->discount_start_date == null) {
- $discount_applicable = true;
- }
- elseif (strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
- strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date) {
- $discount_applicable = true;
- }
- if ($discount_applicable) {
- if($product->discount_type == 'percent'){
- $price -= ($price*$product->discount)/100;
- }
- elseif($product->discount_type == 'amount'){
- $price -= $product->discount;
- }
- }
- //calculation of taxes
- foreach ($product->taxes as $product_tax) {
- if($product_tax->tax_type == 'percent'){
- $tax += ($price * $product_tax->tax) / 100;
- }
- elseif($product_tax->tax_type == 'amount'){
- $tax += $product_tax->tax;
- }
- }
- $data['quantity'] = $request['quantity'];
- $data['price'] = $price;
- $data['tax'] = $tax;
- //$data['shipping'] = 0;
- $data['shipping_cost'] = 0;
- $data['product_referral_code'] = null;
- $data['cash_on_delivery'] = $product->cash_on_delivery;
- $data['digital'] = $product->digital;
- if ($request['quantity'] == null){
- $data['quantity'] = 1;
- }
- if(Cookie::has('referred_product_id') && Cookie::get('referred_product_id') == $product->id) {
- $data['product_referral_code'] = Cookie::get('product_referral_code');
- }
- if($carts && count($carts) > 0){
- $foundInCart = false;
- foreach ($carts as $key => $cartItem){
- $cart_product = Product::where('id', $cartItem['product_id'])->first();
- if($cart_product->auction_product == 1){
- return array(
- 'status' => 0,
- 'cart_count' => count($carts),
- 'modal_view' => view('frontend.partials.auctionProductAlredayAddedCart')->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- if($cartItem['product_id'] == $request->id) {
- $product_stock = $cart_product->stocks->where('variant', $str)->first();
- $quantity = $product_stock->qty;
- if($quantity < $cartItem['quantity'] + $request['quantity']){
- return array(
- 'status' => 0,
- 'cart_count' => count($carts),
- 'modal_view' => view('frontend.partials.outOfStockCart')->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- if(($str != null && $cartItem['variation'] == $str) || $str == null){
- $foundInCart = true;
- $cartItem['quantity'] += $request['quantity'];
- if($cart_product->wholesale_product){
- $wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $request->quantity)->where('max_qty', '>=', $request->quantity)->first();
- if($wholesalePrice){
- $price = $wholesalePrice->price;
- }
- }
- $cartItem['price'] = $price;
- $cartItem->save();
- }
- }
- }
- if (!$foundInCart) {
- Cart::create($data);
- }
- }
- else{
- Cart::create($data);
- }
- if(auth()->user() != null) {
- $user_id = Auth::user()->id;
- $carts = Cart::where('user_id', $user_id)->get();
- } else {
- $temp_user_id = $request->session()->get('temp_user_id');
- $carts = Cart::where('temp_user_id', $temp_user_id)->get();
- }
-
- return array(
- 'status' => 1,
- 'cart_count' => count($carts),
- 'modal_view' => view('frontend.partials.addedToCart', compact('product', 'data'))->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- else{
- $price = $product->bids->max('amount');
- foreach ($product->taxes as $product_tax) {
- if($product_tax->tax_type == 'percent'){
- $tax += ($price * $product_tax->tax) / 100;
- }
- elseif($product_tax->tax_type == 'amount'){
- $tax += $product_tax->tax;
- }
- }
- $data['quantity'] = 1;
- $data['price'] = $price;
- $data['tax'] = $tax;
- $data['shipping_cost'] = 0;
- $data['product_referral_code'] = null;
- $data['cash_on_delivery'] = $product->cash_on_delivery;
- $data['digital'] = $product->digital;
- if(count($carts) == 0){
- Cart::create($data);
- }
- if(auth()->user() != null) {
- $user_id = Auth::user()->id;
- $carts = Cart::where('user_id', $user_id)->get();
- } else {
- $temp_user_id = $request->session()->get('temp_user_id');
- $carts = Cart::where('temp_user_id', $temp_user_id)->get();
- }
- return array(
- 'status' => 1,
- 'cart_count' => count($carts),
- 'modal_view' => view('frontend.partials.addedToCart', compact('product', 'data'))->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- }
- //removes from Cart
- public function removeFromCart(Request $request)
- {
- Cart::destroy($request->id);
- if(auth()->user() != null) {
- $user_id = Auth::user()->id;
- $carts = Cart::where('user_id', $user_id)->get();
- } else {
- $temp_user_id = $request->session()->get('temp_user_id');
- $carts = Cart::where('temp_user_id', $temp_user_id)->get();
- }
- return array(
- 'cart_count' => count($carts),
- 'cart_view' => view('frontend.partials.cart_details', compact('carts'))->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- //updated the quantity for a cart item
- public function updateQuantity(Request $request)
- {
- $cartItem = Cart::findOrFail($request->id);
- if($cartItem['id'] == $request->id){
- $product = Product::find($cartItem['product_id']);
- $product_stock = $product->stocks->where('variant', $cartItem['variation'])->first();
- $quantity = $product_stock->qty;
- $price = $product_stock->price;
-
- //discount calculation
- $discount_applicable = false;
- if ($product->discount_start_date == null) {
- $discount_applicable = true;
- }
- elseif (strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
- strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date) {
- $discount_applicable = true;
- }
- if ($discount_applicable) {
- if($product->discount_type == 'percent'){
- $price -= ($price*$product->discount)/100;
- }
- elseif($product->discount_type == 'amount'){
- $price -= $product->discount;
- }
- }
- if($quantity >= $request->quantity) {
- if($request->quantity >= $product->min_qty){
- $cartItem['quantity'] = $request->quantity;
- }
- }
- if($product->wholesale_product){
- $wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $request->quantity)->where('max_qty', '>=', $request->quantity)->first();
- if($wholesalePrice){
- $price = $wholesalePrice->price;
- }
- }
- $cartItem['price'] = $price;
- $cartItem->save();
- }
- if(auth()->user() != null) {
- $user_id = Auth::user()->id;
- $carts = Cart::where('user_id', $user_id)->get();
- } else {
- $temp_user_id = $request->session()->get('temp_user_id');
- $carts = Cart::where('temp_user_id', $temp_user_id)->get();
- }
- return array(
- 'cart_count' => count($carts),
- 'cart_view' => view('frontend.partials.cart_details', compact('carts'))->render(),
- 'nav_cart_view' => view('frontend.partials.cart')->render(),
- );
- }
- }
|