import sys import os import json # Absolute path setup current_dir = os.path.dirname(os.path.abspath(__file__)) connector_dir = os.path.abspath(os.path.join(current_dir, '..')) sys.path.insert(0, connector_dir) from superoffice_client import SuperOfficeClient def inspect_group(): print("šŸ”Ž Inspecting Group 52 (Roboplanet)...") client = SuperOfficeClient() if not client.access_token: print("āŒ Auth failed.") return # 1. Find Users in Group 52 print("\nšŸ‘„ Finding Associates in Group 52...") associates = client._get("MDOList/associate") robo_associates = [] if associates: for assoc in associates: # Note: MDOList returns flat items. # We might need to fetch details or check 'GroupIdx' if present in ExtraInfo # Let's check keys first # print(assoc.keys()) # The 'GroupIdx' is usually in 'ExtraInfo' or needs detail fetch # But earlier discovery showed 'GroupIdx' directly? No, I inferred it. # Let's fetch details for a few to be sure. assoc_id = assoc.get('Id') # Optimization: Only check first 50 to avoid spam, or check by Name if we know one # Better: Use OData to filter associates by group? # "Associate?$filter=groupIdx eq 52" -> Let's try this first! pass # Efficient OData Search for Associates in Group 52 users_in_group = client.search("Associate?$filter=groupIdx eq 52") if users_in_group: print(f"āœ… Found {len(users_in_group)} Associates in Group 52:") for u in users_in_group: uid = u.get('associateId') or u.get('AssociateId') name = u.get('name') or u.get('Name') or u.get('fullName') print(f" - {name} (ID: {uid})") robo_associates.append(uid) else: print("āš ļø No Associates found in Group 52 via OData.") print(" Trying manual scan of MDOList (slower)...") # Fallback loop if associates: count = 0 for assoc in associates: aid = assoc.get('Id') det = client._get(f"Associate/{aid}") if det and det.get('GroupIdx') == 52: print(f" - {det.get('Name')} (ID: {aid}) [via Detail]") robo_associates.append(aid) count += 1 if count > 5: print(" ... (stopping scan)") break if not robo_associates: print("āŒ CRITICAL: Group 52 seems empty! Filter logic will block everything.") return # 2. Check a Contact owned by one of these users test_user_id = robo_associates[0] print(f"\nšŸ¢ Checking a Contact owned by User {test_user_id}...") contacts = client.search(f"Contact?$filter=associateId eq {test_user_id}&$top=1&$select=ContactId,Name,Associate/GroupIdx") if contacts: c = contacts[0] cid = c.get('contactId') or c.get('ContactId') cname = c.get('name') or c.get('Name') # Check nested Associate GroupIdx if returned, or fetch detail print(f" found: {cname} (ID: {cid})") # Double Check with full Get full_c = client.get_contact(cid) assoc_grp = full_c.get('Associate', {}).get('GroupIdx') print(f" šŸ‘‰ Contact Associate GroupIdx: {assoc_grp}") if assoc_grp == 52: print("āœ… VERIFIED: Filter logic 'GroupIdx == 52' will work.") else: print(f"āŒ MISMATCH: Contact GroupIdx is {assoc_grp}, expected 52.") else: print("āš ļø User has no contacts. Cannot verify contact group mapping.") if __name__ == "__main__": inspect_group()