diff --git a/app/services/itop_service.py b/app/services/itop_service.py index 7b41d05..2c3cdef 100644 --- a/app/services/itop_service.py +++ b/app/services/itop_service.py @@ -154,21 +154,38 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): except Exception: db.rollback() - # ─── 5. Contacts ─── + # ─── 5. Contacts + Teams ─── persons = client.get_all("Person", "name,first_name,email,phone,org_name") + + # Get team memberships to determine role + team_members = {} # person_fullname_lower -> team_name + teams = client.get_all("Team", "name,persons_list") + for t in teams: + team_name = t.get("name", "") + for member in t.get("persons_list", []): + pname = member.get("person_id_friendlyname", "").lower() + if pname: + team_members[pname] = team_name + + team_role_map = {"SecOps": "referent_technique", "iPOP": "responsable_applicatif", "Externe": "referent_technique"} + for p in persons: fullname = f"{p.get('first_name','')} {p.get('name','')}".strip() email = p.get("email", "") if not email: continue + # Determine role from team + team = team_members.get(fullname.lower(), "") + role = team_role_map.get(team, "referent_technique") + existing = db.execute(text("SELECT id FROM contacts WHERE LOWER(email)=LOWER(:e)"), {"e": email}).fetchone() if existing: - db.execute(text("UPDATE contacts SET name=:n, updated_at=NOW() WHERE id=:id"), - {"id": existing.id, "n": fullname}) + db.execute(text("UPDATE contacts SET name=:n, role=:r, updated_at=NOW() WHERE id=:id"), + {"id": existing.id, "n": fullname, "r": role}) else: try: - db.execute(text("INSERT INTO contacts (name, email, role) VALUES (:n, :e, 'referent_technique')"), - {"n": fullname, "e": email}) + db.execute(text("INSERT INTO contacts (name, email, role) VALUES (:n, :e, :r)"), + {"n": fullname, "e": email, "r": role}) stats["contacts"] += 1 except Exception: db.rollback()