tenantId; $role = $request->user->role ?? 'viewer'; $assignedCompanyId = $request->user->assigned_company_id ?? null; $db = Database::getInstance(); $where = "WHERE tenant_id = ?"; $params = [$tenantId]; // Fix: Only accountants should be restricted to a single company if assigned. // Admins and Super Admins should see all companies in their tenant. if ($role === 'accountant' && $assignedCompanyId) { $where .= " AND company_id = ?"; $params[] = $assignedCompanyId; } // 1. Total Invoices this month $stmt = $db->prepare("SELECT COUNT(*) as count FROM invoices {$where} AND MONTH(created_at) = MONTH(CURRENT_DATE)"); $stmt->execute($params); $thisMonth = (int) $stmt->fetch()['count']; // 2. Approved vs Rejected $stmt = $db->prepare("SELECT status, COUNT(*) as count FROM invoices {$where} GROUP BY status"); $stmt->execute($params); $statusCounts = $stmt->fetchAll(); // 3. Recent Activity - Fixed ambiguity $stmt = $db->prepare("SELECT i.*, c.name as company_name FROM invoices i JOIN companies c ON i.company_id = c.id WHERE i.tenant_id = ? " . ($role === 'accountant' && $assignedCompanyId ? " AND i.company_id = ?" : "") . " ORDER BY i.created_at DESC LIMIT 5"); $stmt->execute($params); $recent = $stmt->fetchAll(); // 4. Calculate Subscription Usage $stmt = $db->prepare("SELECT max_invoices_per_month FROM subscriptions WHERE tenant_id = ?"); $stmt->execute([$tenantId]); $sub = $stmt->fetch(); $maxInvoices = (int) ($sub['max_invoices_per_month'] ?? 100); $usage = $maxInvoices > 0 ? round(($thisMonth / $maxInvoices) * 100, 1) : 0; Response::json([ 'success' => true, 'data' => [ 'total_this_month' => $thisMonth, 'status_distribution' => $statusCounts, 'recent_invoices' => $recent, 'subscription_usage' => $usage ] ]); } }