false, 'ERROR' => 'missing_params', 'MESSAGE' => 'UserID is required.']); } try { $qBusinesses = queryTimed(" SELECT MIN(e.ID) AS EmployeeID, e.BusinessID, MIN(e.StatusID) AS StatusID, MAX(e.IsActive) AS IsActive, MAX(COALESCE(e.RoleID, 1)) AS RoleID, b.Name AS Name, (SELECT COUNT(*) FROM Tasks t WHERE t.BusinessID = e.BusinessID AND t.ClaimedByUserID = 0 AND t.CompletedOn IS NULL) AS PendingTaskCount, (SELECT COUNT(*) FROM Tasks t WHERE t.BusinessID = e.BusinessID AND t.ClaimedByUserID = ? AND t.CompletedOn IS NULL) AS ActiveTaskCount FROM Employees e INNER JOIN Businesses b ON b.ID = e.BusinessID WHERE e.UserID = ? AND e.IsActive = 1 GROUP BY e.BusinessID, b.Name ORDER BY b.Name ASC ", [$userID, $userID]); $businesses = []; foreach ($qBusinesses as $row) { $businesses[] = [ 'EmployeeID' => (int) $row['EmployeeID'], 'BusinessID' => (int) $row['BusinessID'], 'Name' => $row['Name'], 'Address' => '', 'City' => '', 'StatusID' => (int) $row['StatusID'], 'RoleID' => (int) $row['RoleID'], 'PendingTaskCount' => (int) $row['PendingTaskCount'], 'ActiveTaskCount' => (int) $row['ActiveTaskCount'], ]; } jsonResponse([ 'OK' => true, 'ERROR' => '', 'BUSINESSES' => $businesses, 'COUNT' => count($businesses), ]); } catch (Exception $e) { jsonResponse(['OK' => false, 'ERROR' => 'server_error', 'MESSAGE' => 'Error loading businesses', 'DETAIL' => $e->getMessage()]); }