turkmentv/app/Http/Controllers/Admin/AdminController.php

124 lines
5.0 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: merdan
* Date: 5/15/2019
* Time: 0:34
*/
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\CategoryMaterial;
use App\Models\Material;
use App\Models\Order;
use App\Models\UserMaterial;
use App\User;
use Illuminate\Support\Facades\DB;
class AdminController extends Controller
{
protected $data = []; // the information we send to the view
/**
* Create a new controller instance.
*/
public function __construct()
{
$this->middleware(backpack_middleware());
}
/**
* Show the admin dashboard.
*
* @return \Illuminate\Http\Response
*/
public function dashboard()
{
$start_date = request('start_date');
$end_date = request('end_date');
$order = Order::where('payed',1);//count with sum
$users = User::select('id');
$userMaterials = UserMaterial::select('id');
//$filter_by_date ="";
if($start_date && $end_date)
{
//$filter_by_date = " and (orders.created_at BETWEEN {$start_date} and {$end_date})";
$order->whereBetween('created_at',[date($start_date),date($end_date)]);
$users->whereBetween('created_at',[date($start_date),date($end_date)]);
$userMaterials->whereBetween('created_at',[date($start_date),date($end_date)]);
$this->data['start_date'] = $start_date;
$this->data['end_date'] = $end_date;
}
$this->data['category_views'] = Category::has('likes')->withCount([
'likes as liked' => function ($query) use ($start_date, $end_date) {
$query->select(DB::raw('SUM(likes.liked)'));
if($start_date && $end_date)
$query->whereBetween('likes.updated_at', [request('start_date'), request('end_date')]);
},
'likes as viewed' => function($query) use ($start_date, $end_date){
$query->select(DB::raw('SUM(likes.viewed)'));
if($start_date && $end_date)
$query->whereBetween('likes.updated_at', [request('start_date'), request('end_date')]);
}
])->get();
//dd($this->data['category_views']);
$this->data['category_orders'] = Category::has('orders')->withCount([
'orders as payed' => function($query){
$query->select(DB::raw('SUM(orders.payed)'));
},
'orders as total' => function($query){
$query->select(DB::raw('SUM(orders.price)'));
}
])->get();
$this->data['orders'] = $order->count();
$this->data['users'] = $users->count();
$this->data['like'] = $userMaterials->where('liked',1)->count();
$this->data['title'] = trans('backpack::base.dashboard'); // set the page title
$this->data['views'] = Material::sum('view');//all views
$this->data['watch'] = $userMaterials->count();//all watches by registered users
$this->data['field']['start_name'] = 'start';
$this->data['field']['end_name'] = 'end';
$this->data['field']['label'] = 'range';
// $query = "Select categories.id, categories.name, Sum(likes.liked) as liked, Sum(likes.viewd) as viewed
// FROM categories, likes, orders
// WHERE likes.material_id IN (SELECT category_material.material_id
// FROM category_material
// WHERE category_material.category_id = categories.id)
// AND likes.updated_at BETWEEN {$start_date} and {$end_date})
// GROUP BY categories.id";
return view('backpack::dashboard', $this->data);
}
public function cat_stats($cat_id){
$start_date = request('start_date');
$end_date = request('end_date');
$filter_orders ="";
$filter_likes ="";
if($start_date && $end_date)
{
$filter_orders = " and (orders.updated_at BETWEEN {$start_date} and {$end_date})";
$filter_likes = " and (likes.updated_at BETWEEN {$start_date} and {$end_date})";
}
$category = Category::findOrfail($cat_id);
$materials= $category->materials()
->select('materials.title',
DB::raw("(Select COUNT(likes.viewed) From likes
Where likes.material_id = materials.id {$filter_likes}) as view"),
DB::raw("(Select SUM(likes.liked) From likes
Where likes.material_id = materials.id {$filter_likes}) as likes"),
DB::raw("(Select COUNT(orders.id) From orders
Where orders.material_id = materials.id and orders.payed = 1{$filter_orders}) as orders"),
DB::raw("(Select SUM(orders.price) From orders
Where orders.material_id = materials.id and orders.payed = 1{$filter_orders}) as total"))
->get();
return view('vendor.backpack.material_stats')
->with(['category' => $category, 'materials' => $materials]);
}
}