Current File : //home/tradevaly/www/app/Http/Controllers/ProductController.php
<?php

namespace App\Http\Controllers;

use App\Models\Banner;
use App\Models\BuyOffer;
use App\Models\Package;
use App\Models\FeaturedProduct;
use App\Models\ViewProduct;
use App\Models\Product;
use App\Models\User;
use App\Models\Tag;
use App\Models\Category;
use App\Models\Country;
use App\Models\Testimonial;
use App\Models\Tradeshows;
use App\Models\WatchHistory;
use App\Models\ProductPrice;
use Illuminate\Http\Request;
use Brian2694\Toastr\Facades\Toastr;
use Carbon\Carbon;
use App\Models\AdminNotification;
class ProductController extends Controller
{
     
     public function country()
    {
       
    }
     public function about_us ()
    {
       
    }
    public function view(Request $request, $slug)
    {
        
        
        $data['product'] = Product::where('slug', $slug)->firstorFail();
        $product = Product::where('slug', $slug)->firstorFail();
        $product_prices= ProductPrice::where('product_id',$product->id)->get();
        
        if(auth()->check() && auth()->user()->id != $data['product']->supplier_id)
        {
            $watchhistroy = new WatchHistory();
            $watchhistroy->user_id = $data['product']->supplier_id;
            $watchhistroy->visitor_id = auth()->user()->id;
            $watchhistroy->product_id = $data['product']->id;
            $watchhistroy->save();
        }
        // return $product->id;
        $notification = AdminNotification::where('data',$product->id)->where('reciver',auth()->id())->first();
        
        if(isset($notification))
        {
            if($notification->seen == '')
            {
                $notification->seen= Carbon::now();
                $notification->save();
            }
        }
        
        Product::where('slug', $slug)->first()->increment('view');

        $all_view = ViewProduct::where('product_id',$data['product']->id)->where('ip_address',$request->getClientIp())->first();
        if ($all_view) {
            $all_view->expire_date =  Carbon::now()->addDays(7);
            $all_view->increment('view');
            $all_view->save();
        }else{
            $ViewProduct = new ViewProduct();
            $ViewProduct->product_id = $data['product']->id;
            $ViewProduct->ip_address = $request->getClientIp();
            $ViewProduct->expire_date =  Carbon::now()->addDays(7);
            $ViewProduct->view =  1;
            $ViewProduct->save();
        }

        $data['related'] = Product::where('supplier_id', $data['product']->supplier_id)->where('slug', '!=', $slug)->take(4)->get();
        return view('frontend.pages.single_product',compact('product_prices'))->with($data);
    }
    
    public function buyers(){
        $data['country'] = Country::all();
        $data['buyoffer'] = BuyOffer::latest()->take(20)->get();
        $data['tags'] = Tag::orderBy('views', 'desc')->take(10)->get();
        $data['tagsbyword'] = Tag::orderBy('views', 'desc')->get();
       return view('frontend.pages.buyers')->with($data); 
    }
    
    public function manufacturers(){
        $data['country'] = Country::all();
        $data['buyoffer'] = BuyOffer::latest()->take(20)->get();
        $data['tags'] = Tag::orderBy('views', 'desc')->take(10)->get();
        $data['tagsbyword'] = Tag::orderBy('views', 'desc')->get();
        $data['category'] = Category::where('parent_id', 0)->get();
       return view('frontend.pages.manufacturers')->with($data); 
    }
    
    public function products(){
        $data['category'] = Category::where('parent_id', 0)->get();
       return view('frontend.pages.products')->with($data); 
    }
    
    public function companies(){
        $data['seller'] = User::where('type', 'seller')->paginate(12);
       return view('frontend.pages.companies')->with($data); 
    }
    
     public function alcompanies(Request $request, $a){
        $data['seller'] = User::where('type', 'seller')->whereHas('company', function($q) use($a){
        $q->where('name', 'like',  $a . '%');
        })->paginate(12);
       return view('frontend.pages.companies')->with($data); 
    }
    
    public function contact()
    {
        $banners= Banner::where('status', 1)->take('3')->get();
        return view('frontend.pages.index')->with(compact('banners'));
    }
    
    public function categories(Request $request,$slug)
    {
        
        $data['cat'] =  Category::where('slug', $slug)->first();
        if($data['cat']->parent_id == 0){
        $data['categories'] = Category::where('parent_id', $data['cat']->id)->get();
        
            $tree = Array();
        if (!empty($parent)) {
            $tree = Category::where('parent_id', $parent)->pluck('id')->toArray();
            foreach ($tree as $key => $val) {
                $ids = self::getChildren($val);
                if(!empty($ids)){
                    if(count($ids)>0) $tree = array_merge($tree, $ids);
                }
            }
        }
       
       $data['tree'] = $tree;
       $data['buyoffer'] = BuyOffer::whereIn('category_id', $tree)->orWhere('category_id', $data['cat']->id)->take(30)->get();
       $data['products'] = Product::whereIn('category_id', $tree)->orWhere('category_id', $data['cat']->id)->take(12)->get();
        $data['tags'] = Tag::whereIn('category_id', $tree)->orWhere('category_id', $data['cat']->id)->orderBy('views', 'desc')->take(20)->get();
        return view('frontend.pages.main_categories')->with($data);
        } else {
           $subcat = Category::where('parent_id', $data['cat']->id)->pluck('id')->toArray();
           $childcat = Category::whereIn('parent_id', $subcat)->pluck('id')->toArray();
           $catid[] = $data['cat']->id;
           $catlist = array_merge($subcat,$childcat,$catid);
           $data['catlist'] = $catlist;
           
           $data['country'] = Product::whereIn('category_id', $catlist)->groupBy('country_id')->pluck('country_id')->toArray();
           $data['port'] = Product::whereIn('category_id', $catlist)->groupBy('port')->pluck('port')->toArray();
           $data['supplier'] = Product::whereIn('category_id', $catlist)->groupBy('supplier_id')->pluck('supplier_id')->toArray();
           $data['unit'] = Product::whereIn('category_id', $catlist)->groupBy('unit')->pluck('unit')->toArray();
           $data['port'] = Product::whereIn('category_id', $catlist)->groupBy('port')->pluck('port')->toArray();
           $data['time'] = Product::whereIn('category_id', $catlist)->groupBy('processing_time')->pluck('processing_time')->toArray();
           $data['supply_ability'] = Product::whereIn('category_id', $catlist)->groupBy('supply_ability')->pluck('supply_ability')->toArray();
           $data['payment_method'] = Product::whereIn('category_id', $catlist)->groupBy('payment_method')->pluck('payment_method')->toArray();
           
           
           
           
           $products = Product::whereIn('category_id', $catlist);
           
           if ($request->filled('supplier_id')) {
                $products = $products->where('supplier_id', $request->supplier_id);
            }
           if ($request->filled('country_id')) {
                $products = $products->where('country_id', $request->country_id);
            }
           if ($request->filled('ptime')) {
                $products = $products->where('processing_time', $request->ptime);
            }
           
           if ($request->filled('port')) {
                $products = $products->where('port', $request->port);
            }
            if ($request->filled('unit')) {
                $products = $products->where('unit', $request->unit);
            }
           $data['products'] = $products->paginate(18);
           
           return view('frontend.pages.list_products')->with($data);
        }
    }
    
}