barbershop()->sum('total'); $totalExpense = Expense::query()->barbershop()->sum('amount'); $totalPayroll = Payroll::query()->barbershop()->sum('total'); $totalShaving = Transaction::query()->barbershop()->count(); $topService = Service::query() ->barbershop() ->withCount(['transactions' => function ($query) { $query->when(auth()->user()->role_id === 5, function ($query) { $query->where('user_id', auth()->id()); }); }]) ->when(auth()->user()->role_id === 5, function ($query) { $query->whereHas('transactions', function ($query) { $query->where('user_id', auth()->id()); }); }) ->get(); $paymentMethod = Transaction::query() ->select('payment_method', DB::raw('SUM(total) as total_amount')) ->barbershop() ->when(auth()->user()->role_id === 5, function ($query) { $query->where('user_id', auth()->id()); }) ->groupBy('payment_method') ->get(); $transactionByBarber = User::with('biography')->barbershop()->barber()->withCount('transactions')->get(); $totalAsset = Inventory::query()->barbershop()->sum(DB::raw('quantity * price')); $topBarber = User::with('biography') ->barbershop() ->barber() ->withSum('transactions', 'total') ->orderBy('transactions_sum_total', 'desc') ->first(); $totalUser = User::query()->barbershop()->count(); $totalBarber = User::query()->barbershop()->barber()->count(); $topCustomersByTotal = Transaction::groupBy('customer_id') ->select( 'customer_id', DB::raw('SUM(total) as total_transaction'), DB::raw('COUNT(*) as transaction_count') ) ->orderBy('total_transaction', 'desc') ->when(auth()->user()->role_id === 5, function ($query) { return $query->where('user_id', auth()->id()); }) ->limit(5) ->get(); $incomeByBarber = User::with('biography') ->barbershop() ->barber() ->withSum(['transactions' => function ($query) { $query->when(auth()->user()->role_id === 5, function ($query) { return $query->where('user_id', auth()->id()); }); }], 'total') ->orderBy('transactions_sum_total', 'desc') ->withCount(['transactions' => function ($query) { $query->when(auth()->user()->role_id === 5, function ($query) { return $query->where('user_id', auth()->id()); }); }]); if (in_array(auth()->user()->role_id, [1, 2, 3])) { $incomeByBarber = $incomeByBarber->get(); } elseif (auth()->user()->role_id === 5) { $incomeByBarber = $incomeByBarber->find(auth()->id()); $incomeByBarber = (object) [ 'transactions_sum_total' => formatToRupiah($incomeByBarber->transactions_sum_total), 'transactions_count' => $incomeByBarber->transactions_count, ]; } return view('pages.admin.dashboard.analytic', [ 'pageTitle' => 'Analitik', 'totalIncome' => $totalIncome, 'totalExpense' => $totalExpense + $totalPayroll, 'totalShaving' => $totalShaving, 'topService' => $topService, 'paymentMethod' => $paymentMethod, 'incomeByBarber' => $incomeByBarber, 'transactionByBarber' => $transactionByBarber, 'totalAsset' => $totalAsset, 'topBarber' => $topBarber, 'totalUser' => $totalUser, 'totalBarber' => $totalBarber, 'topCustomersByTotal' => $topCustomersByTotal, ]); } public function filter(Request $request): JsonResponse { $startDate = $request->start_date; $endDate = $request->end_date; $totalIncome = Transaction::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->sum('total'); $totalExpense = Expense::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->sum('amount'); $totalPayroll = Payroll::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->sum('total'); $totalShaving = Transaction::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->count(); $topService = Service::query() ->barbershop() ->withCount(['transactions' => function ($query) use ($startDate, $endDate) { $query->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->when(auth()->user()->role_id === 5, function ($query) { $query->where('user_id', auth()->id()); }); }]) ->when(auth()->user()->role_id === 5, function ($query) { $query->whereHas('transactions', function ($query) { $query->where('user_id', auth()->id()); }); }) ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->get(); $paymentMethod = Transaction::select('payment_method', DB::raw('SUM(total) as total_amount')) ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->when(auth()->user()->role_id === 5, function ($query) { return $query->where('user_id', auth()->id()); }) ->groupBy('payment_method') ->get(); $incomeByBarber = User::with('biography') ->barbershop() ->barber() ->withSum(['transactions' => function ($query) use ($startDate, $endDate) { $query->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]); }], 'total') ->get(); $transactionByBarber = User::with('biography') ->barbershop() ->barber() ->withCount(['transactions' => function ($query) use ($startDate, $endDate) { $query->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]); }]) ->get(); $totalAsset = Inventory::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->sum(DB::raw('quantity * price')); $topBarber = User::with('biography') ->barbershop() ->barber() ->withSum(['transactions' => function ($query) use ($startDate, $endDate) { $query->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]); }], 'total') ->orderBy('transactions_sum_total', 'desc') ->first(); $totalUser = User::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->count(); $totalBarber = User::query() ->barbershop() ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->barber() ->count(); $topCustomersByTotal = Transaction::groupBy('customer_id') ->select( 'customer_id', DB::raw('SUM(total) as total_transaction'), DB::raw('COUNT(*) as transaction_count') ) ->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ]) ->orderBy('total_transaction', 'desc') ->when(auth()->user()->role_id === 5, function ($query) { return $query->where('user_id', auth()->id()); }) ->limit(5) ->get(); $renderCustomerByTotal = view('partials.admin._customer-by-total', compact('topCustomersByTotal'))->render(); $incomeByBarber = User::with('biography') ->barbershop() ->barber() ->withSum(['transactions' => function ($query) use ($startDate, $endDate) { $query->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ])->when(auth()->user()->role_id === 5, function ($query) { $query->where('user_id', auth()->id()); }); }], 'total') ->orderBy('transactions_sum_total', 'desc') ->withCount(['transactions' => function ($query) use ($startDate, $endDate) { $query->whereBetween('created_at', [ Carbon::parse($startDate)->startOfDay(), Carbon::parse($endDate)->endOfDay(), ])->when(auth()->user()->role_id === 5, function ($query) { $query->where('user_id', auth()->id()); }); }]); if (in_array(auth()->user()->role_id, [1, 2, 3])) { $incomeByBarber = $incomeByBarber->get(); } elseif (auth()->user()->role_id === 5) { $incomeByBarber = $incomeByBarber->find(auth()->id()); $incomeByBarber = [ 'transactions_sum_total' => formatToRupiah($incomeByBarber->transactions_sum_total ?? 0), 'transactions_count' => $incomeByBarber->transactions_count, ]; } return response()->json([ 'status' => true, 'message' => 'Data Successfully Retrieved', 'data' => [ 'startDate' => $startDate, 'endDate' => $endDate, 'totalIncome' => $totalIncome, 'totalExpense' => $totalExpense + $totalPayroll, 'totalShaving' => $totalShaving, 'topService' => $topService, 'paymentMethod' => $paymentMethod, 'incomeByBarber' => $incomeByBarber, 'transactionByBarber' => $transactionByBarber, 'totalAsset' => $totalAsset, 'topBarber' => $topBarber, 'totalUser' => $totalUser, 'totalBarber' => $totalBarber, 'renderCustomerByTotal' => $renderCustomerByTotal, ], ], 200); } }