Untitled
unknown
php
a month ago
7.0 kB
5
Indexable
Never
<?php namespace App\Http\Controllers; use App\Models\Order; use App\Models\Setting; use App\Models\User; use App\Models\Passanger; use App\Models\Route; use App\Models\Pool; use App\Models\Car; use App\Models\Driver; use App\Models\CarsType; use DateTime; use App\Models\Schedules; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class DashboardController extends Controller { public function index(Request $request) { $totalUser = User::count(); $totalOrder = Order::count(); $totalPool = Pool::count(); $totalRoute = Route::count(); $totalCars = Car::count(); $totalDriver = Driver::count(); $totalCarsType = CarsType::count(); $totalSchedules = Schedules::count(); $view = User::all(); $tittle = Setting::findOrFail(1); $topCustomers = User::withCount('order') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereHas('order', function($subQuery) use ($request) { $subQuery->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }); }) ->where('role', 'customer') ->limit(5) ->get(); $topPassangers = Passanger::select('name') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereHas('orderDetails', function($subQuery) use ($request) { $subQuery->whereHas('order', function($subQuery) use ($request) { $subQuery->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }); }); }) ->withCount('orderDetails as order_count') ->orderByDesc('order_count') ->limit(5) ->get(); $topRoutes = Schedules::query() ->withCount('order as order_count') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereHas('order', function($subQuery) use ($request) { $subQuery->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }); }) ->orderByDesc('order_count') ->limit(5) ->get(); $topSchedules = Schedules::query() ->withCount('order as order_count') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereHas('order', function($subQuery) use ($request) { $subQuery->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }); }) ->orderByDesc('order_count') ->limit(5) ->get(); $topDates = Order::query() ->selectRaw('DATE(order_date) as order_date') ->selectRaw('COUNT(id) as order_count') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }) ->groupBy('order_date') ->orderByDesc('order_count') ->limit(5) ->get(); $genderCounts = User::selectRaw('CASE WHEN jenis_kelamin IS NULL THEN "Belum Dipilih" ELSE jenis_kelamin END AS jenis_kelamin') ->selectRaw('count(*) as total') ->leftJoin('orders', 'users.id', '=', 'orders.user_id') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->where('orders.order_date', '>=', $request->input('start')) ->where('orders.order_date', '<=', $request->input('end')); }) ->where('role', 'customer') ->groupBy('jenis_kelamin') ->get(); $usersWithAge = User::selectRaw('CASE WHEN tanggal_lahir IS NULL THEN "Belum Dipilih" ELSE tanggal_lahir END AS tanggal_lahir') ->selectRaw('count(*) as total') ->selectRaw('YEAR(CURRENT_DATE()) - YEAR(tanggal_lahir) - (DATE_FORMAT(CURRENT_DATE(), "%m%d") < DATE_FORMAT(tanggal_lahir, "%m%d")) as umur') ->leftJoin('orders', 'users.id', '=', 'orders.user_id') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->where('orders.order_date', '>=', $request->input('start')) ->where('orders.order_date', '<=', $request->input('end')); }) ->where('role', 'customer') ->groupBy('tanggal_lahir') ->get(); $topStartPools = Schedules::query() ->with(['route.startPool']) ->withCount('order as order_count') ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereHas('order', function($subQuery) use ($request) { $subQuery->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }); }) ->orderByDesc('order_count') ->limit(5) ->get() ->groupBy('route.startPool.id') ->map(function ($group) { return [ 'name' => $group->first()->route->startPool->name, 'order_count' => $group->sum('order_count'), ]; }) ->sortByDesc('order_count') ->take(5); $orderQuery = Order::query() ->when($request->input('start') && $request->input('end'), function ($query) use ($request) { $query->whereDate('order_date', '>=', $request->input('start')) ->whereDate('order_date', '<=', $request->input('end')); }); $order = $orderQuery->get(); return view('dashboard', compact('totalUser', 'usersWithAge', 'topStartPools', 'genderCounts', 'totalSchedules', 'totalOrder', 'totalDriver', 'totalCars', 'totalCarsType', 'totalPool', 'totalRoute', 'topRoutes', 'topSchedules', 'topCustomers', 'topDates', 'topPassangers', 'view', 'tittle')); } }