getDashboardData($request); return view('sales.dashboard.index', $data); } /** * HTMX 부분 새로고침용 데이터 반환 */ public function refresh(Request $request): View { $data = $this->getDashboardData($request); return view('sales.dashboard.partials.data-container', $data); } /** * 대시보드 데이터 조회 */ private function getDashboardData(Request $request): array { // 기간 설정 $period = $request->input('period', 'month'); // month or custom $year = $request->input('year', now()->year); $month = $request->input('month', now()->month); // 기간 설정 모드일 경우 if ($period === 'custom') { $startDate = $request->input('start_date', now()->startOfMonth()->format('Y-m-d')); $endDate = $request->input('end_date', now()->format('Y-m-d')); } else { $startDate = now()->startOfMonth()->format('Y-m-d'); $endDate = now()->endOfMonth()->format('Y-m-d'); } // 통계 데이터 (임시 데이터 - 추후 실제 데이터로 교체) $stats = [ 'total_membership_fee' => 0, // 총 가입비 'total_commission' => 0, // 총 수당 'commission_rate' => 0, // 지급 승인 완료 비율 'total_contracts' => 0, // 전체 건수 'pending_membership_approval' => 0, // 가입 승인 대기 'pending_payment_approval' => 0, // 지급 승인 대기 ]; // 역할별 수당 상세 $commissionByRole = [ [ 'name' => '판매자', 'rate' => 20, 'amount' => 0, 'color' => 'green', ], [ 'name' => '관리자', 'rate' => 5, 'amount' => 0, 'color' => 'blue', ], [ 'name' => '매뉴제작 협업수당', 'rate' => null, // 별도 'amount' => null, // 운영팀 산정 'color' => 'red', ], ]; // 총 가입비 대비 수당 $totalCommissionRatio = 0; // 수익 및 테넌트 관리 통계 (임시 데이터 - 추후 실제 데이터로 교체) $tenantStats = [ 'total_tenants' => 0, // 관리 테넌트 'total_membership_revenue' => 0, // 총 가입비 실적 'total_commission_accumulated' => 0, // 누적 가입비 수당 'confirmed_commission' => 0, // 확정 가입비 수당 ]; // 테넌트 목록 (현재 로그인한 사용자가 속한 테넌트만, HQ 제외) $currentUser = auth()->user(); $tenants = $currentUser->tenants() ->where('tenant_type', '!=', 'HQ') ->orderBy('created_at', 'desc') ->get(); return compact( 'stats', 'commissionByRole', 'totalCommissionRatio', 'tenantStats', 'tenants', 'period', 'year', 'month', 'startDate', 'endDate' ); } /** * 매니저 지정 변경 */ public function assignManager(int $tenantId, Request $request): JsonResponse { $request->validate([ 'manager_id' => 'required|integer', ]); $tenant = Tenant::findOrFail($tenantId); $managerId = $request->input('manager_id'); // 캐시 키 $cacheKey = "tenant_manager:{$tenantId}"; if ($managerId === 0) { // 본인으로 설정 (현재 로그인 사용자) $manager = auth()->user(); cache()->put($cacheKey, [ 'id' => $manager->id, 'name' => $manager->name, 'is_self' => true, ], now()->addDays(365)); } else { // 특정 매니저 지정 $manager = User::find($managerId); if (!$manager) { return response()->json([ 'success' => false, 'message' => '매니저를 찾을 수 없습니다.', ], 404); } cache()->put($cacheKey, [ 'id' => $manager->id, 'name' => $manager->name, 'is_self' => $manager->id === auth()->id(), ], now()->addDays(365)); } return response()->json([ 'success' => true, 'manager' => [ 'id' => $manager->id, 'name' => $manager->name, ], ]); } /** * 매니저 목록 조회 (드롭다운용) */ public function getManagers(Request $request): JsonResponse { // HQ 테넌트의 사용자 중 매니저 역할이 있는 사용자 조회 $managers = User::whereHas('tenants', function ($query) { $query->where('tenant_type', 'HQ'); })->get(['id', 'name', 'email']); return response()->json([ 'success' => true, 'managers' => $managers, ]); } }