diff --git a/sage_connector.py b/sage_connector.py index be452b7..298baa0 100644 --- a/sage_connector.py +++ b/sage_connector.py @@ -7522,36 +7522,64 @@ class SageConnector: logger.error(f"[ERREUR] {e}", exc_info=True) raise RuntimeError(f"Erreur technique: {e}") - + def _contact_to_dict(self, contact) -> Dict: - """Convertit un objet COM Contact en dictionnaire""" + """ + Convertit un objet COM Contact (IBOTiersContact3) en dictionnaire + VERSION REFACTORISÉE + """ try: - civilite_code = getattr(contact, "CT_Civilite", None) + # IBOTiersContact3 utilise Nom/Prenom (sans préfixe CT_) + civilite_code = getattr(contact, "Civilite", None) civilite_map = {0: "M.", 1: "Mme", 2: "Mlle", 3: "Société"} civilite = civilite_map.get(civilite_code) if civilite_code is not None else None + # Coordonnées via Telecom + telephone = None + portable = None + telecopie = None + email = None + + if hasattr(contact, 'Telecom'): + try: + telecom = contact.Telecom + telephone = self._safe_strip(getattr(telecom, "Telephone", None)) + portable = self._safe_strip(getattr(telecom, "Portable", None)) + telecopie = self._safe_strip(getattr(telecom, "Telecopie", None)) + email = self._safe_strip(getattr(telecom, "EMail", None)) + except: + pass + + # Récupérer CT_No et N_Contact via SQL si possible + # Car IBOTiersContact3 du DossierContact ne les a pas + contact_numero = None + n_contact = None + numero = None + + # Ces infos doivent venir de F_CONTACTT + # On les passe plutôt en paramètre ou on les récupère différemment + return { - "numero": self._safe_strip(getattr(contact, "CT_Num", None)), - "contact_numero": getattr(contact, "CT_No", None), - "n_contact": getattr(contact, "N_Contact", None), + "numero": numero, # À passer en paramètre + "contact_numero": contact_numero, # À passer en paramètre + "n_contact": n_contact, # À passer en paramètre "civilite": civilite, - "nom": self._safe_strip(getattr(contact, "CT_Nom", None)), - "prenom": self._safe_strip(getattr(contact, "CT_Prenom", None)), - "fonction": self._safe_strip(getattr(contact, "CT_Fonction", None)), - "service_code": getattr(contact, "N_Service", None), - "telephone": self._safe_strip(getattr(contact, "CT_Telephone", None)), - "portable": self._safe_strip(getattr(contact, "CT_TelPortable", None)), - "telecopie": self._safe_strip(getattr(contact, "CT_Telecopie", None)), - "email": self._safe_strip(getattr(contact, "CT_EMail", None)), - "facebook": self._safe_strip(getattr(contact, "CT_Facebook", None)), - "linkedin": self._safe_strip(getattr(contact, "CT_LinkedIn", None)), - "skype": self._safe_strip(getattr(contact, "CT_Skype", None)), + "nom": self._safe_strip(getattr(contact, "Nom", None)), + "prenom": self._safe_strip(getattr(contact, "Prenom", None)), + "fonction": self._safe_strip(getattr(contact, "Fonction", None)), + "service_code": getattr(contact, "ServiceContact", None), + "telephone": telephone, + "portable": portable, + "telecopie": telecopie, + "email": email, + "facebook": self._safe_strip(getattr(contact, "Facebook", None)), + "linkedin": self._safe_strip(getattr(contact, "LinkedIn", None)), + "skype": self._safe_strip(getattr(contact, "Skype", None)), } except Exception as e: logger.warning(f"Erreur conversion contact: {e}") return {} - def _row_to_contact_dict(self, row) -> Dict: """Convertit une ligne SQL en dictionnaire contact""" civilite_code = row.CT_Civilite