Sync contacts: role depuis Teams iTop (SecOps→referent_technique, iPOP→responsable_applicatif)

This commit is contained in:
Pierre & Lumière 2026-04-11 14:33:12 +02:00
parent 3707308063
commit 32d602975b

View File

@ -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()