383 lines
No EOL
14 KiB
Python
383 lines
No EOL
14 KiB
Python
|
|
import win32com.client
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def _extraire_fournisseur_enrichi(fourn_obj):
|
|
try:
|
|
numero = getattr(fourn_obj, "CT_Num", "").strip()
|
|
if not numero:
|
|
return None
|
|
|
|
intitule = getattr(fourn_obj, "CT_Intitule", "").strip()
|
|
|
|
data = {
|
|
"numero": numero,
|
|
"intitule": intitule,
|
|
"type": 1, # Fournisseur
|
|
"est_fournisseur": True,
|
|
}
|
|
|
|
try:
|
|
sommeil = getattr(fourn_obj, "CT_Sommeil", 0)
|
|
data["est_actif"] = sommeil == 0
|
|
data["en_sommeil"] = sommeil == 1
|
|
except:
|
|
data["est_actif"] = True
|
|
data["en_sommeil"] = False
|
|
|
|
try:
|
|
adresse_obj = getattr(fourn_obj, "Adresse", None)
|
|
if adresse_obj:
|
|
data["adresse"] = getattr(adresse_obj, "Adresse", "").strip()
|
|
data["complement"] = getattr(adresse_obj, "Complement", "").strip()
|
|
data["code_postal"] = getattr(adresse_obj, "CodePostal", "").strip()
|
|
data["ville"] = getattr(adresse_obj, "Ville", "").strip()
|
|
data["region"] = getattr(adresse_obj, "Region", "").strip()
|
|
data["pays"] = getattr(adresse_obj, "Pays", "").strip()
|
|
|
|
parties_adresse = []
|
|
if data["adresse"]:
|
|
parties_adresse.append(data["adresse"])
|
|
if data["complement"]:
|
|
parties_adresse.append(data["complement"])
|
|
if data["code_postal"] or data["ville"]:
|
|
ville_cp = f"{data['code_postal']} {data['ville']}".strip()
|
|
if ville_cp:
|
|
parties_adresse.append(ville_cp)
|
|
if data["pays"]:
|
|
parties_adresse.append(data["pays"])
|
|
|
|
data["adresse_complete"] = ", ".join(parties_adresse)
|
|
else:
|
|
data["adresse"] = ""
|
|
data["complement"] = ""
|
|
data["code_postal"] = ""
|
|
data["ville"] = ""
|
|
data["region"] = ""
|
|
data["pays"] = ""
|
|
data["adresse_complete"] = ""
|
|
except Exception as e:
|
|
logger.debug(f"Erreur adresse fournisseur {numero}: {e}")
|
|
data["adresse"] = ""
|
|
data["complement"] = ""
|
|
data["code_postal"] = ""
|
|
data["ville"] = ""
|
|
data["region"] = ""
|
|
data["pays"] = ""
|
|
data["adresse_complete"] = ""
|
|
|
|
try:
|
|
telecom_obj = getattr(fourn_obj, "Telecom", None)
|
|
if telecom_obj:
|
|
data["telephone"] = getattr(telecom_obj, "Telephone", "").strip()
|
|
data["portable"] = getattr(telecom_obj, "Portable", "").strip()
|
|
data["telecopie"] = getattr(telecom_obj, "Telecopie", "").strip()
|
|
data["email"] = getattr(telecom_obj, "EMail", "").strip()
|
|
|
|
try:
|
|
site = (
|
|
getattr(telecom_obj, "Site", None)
|
|
or getattr(telecom_obj, "Web", None)
|
|
or getattr(telecom_obj, "SiteWeb", "")
|
|
)
|
|
data["site_web"] = str(site).strip() if site else ""
|
|
except:
|
|
data["site_web"] = ""
|
|
else:
|
|
data["telephone"] = ""
|
|
data["portable"] = ""
|
|
data["telecopie"] = ""
|
|
data["email"] = ""
|
|
data["site_web"] = ""
|
|
except Exception as e:
|
|
logger.debug(f"Erreur telecom fournisseur {numero}: {e}")
|
|
data["telephone"] = ""
|
|
data["portable"] = ""
|
|
data["telecopie"] = ""
|
|
data["email"] = ""
|
|
data["site_web"] = ""
|
|
|
|
try:
|
|
data["siret"] = getattr(fourn_obj, "CT_Siret", "").strip()
|
|
except:
|
|
data["siret"] = ""
|
|
|
|
try:
|
|
if data["siret"] and len(data["siret"]) >= 9:
|
|
data["siren"] = data["siret"][:9]
|
|
else:
|
|
data["siren"] = getattr(fourn_obj, "CT_Siren", "").strip()
|
|
except:
|
|
data["siren"] = ""
|
|
|
|
try:
|
|
data["tva_intra"] = getattr(fourn_obj, "CT_Identifiant", "").strip()
|
|
except:
|
|
data["tva_intra"] = ""
|
|
|
|
try:
|
|
data["code_naf"] = (
|
|
getattr(fourn_obj, "CT_CodeNAF", "").strip()
|
|
or getattr(fourn_obj, "CT_APE", "").strip()
|
|
)
|
|
except:
|
|
data["code_naf"] = ""
|
|
|
|
try:
|
|
data["forme_juridique"] = getattr(
|
|
fourn_obj, "CT_FormeJuridique", ""
|
|
).strip()
|
|
except:
|
|
data["forme_juridique"] = ""
|
|
|
|
try:
|
|
cat_tarif = getattr(fourn_obj, "N_CatTarif", None)
|
|
data["categorie_tarifaire"] = (
|
|
int(cat_tarif) if cat_tarif is not None else None
|
|
)
|
|
except:
|
|
data["categorie_tarifaire"] = None
|
|
|
|
try:
|
|
cat_compta = getattr(fourn_obj, "N_CatCompta", None)
|
|
data["categorie_comptable"] = (
|
|
int(cat_compta) if cat_compta is not None else None
|
|
)
|
|
except:
|
|
data["categorie_comptable"] = None
|
|
|
|
try:
|
|
cond_regl = getattr(fourn_obj, "CT_CondRegl", "").strip()
|
|
data["conditions_reglement_code"] = cond_regl
|
|
|
|
if cond_regl:
|
|
try:
|
|
cond_obj = getattr(fourn_obj, "ConditionReglement", None)
|
|
if cond_obj:
|
|
cond_obj.Read()
|
|
data["conditions_reglement_libelle"] = getattr(
|
|
cond_obj, "C_Intitule", ""
|
|
).strip()
|
|
else:
|
|
data["conditions_reglement_libelle"] = ""
|
|
except:
|
|
data["conditions_reglement_libelle"] = ""
|
|
else:
|
|
data["conditions_reglement_libelle"] = ""
|
|
except:
|
|
data["conditions_reglement_code"] = ""
|
|
data["conditions_reglement_libelle"] = ""
|
|
|
|
try:
|
|
mode_regl = getattr(fourn_obj, "CT_ModeRegl", "").strip()
|
|
data["mode_reglement_code"] = mode_regl
|
|
|
|
if mode_regl:
|
|
try:
|
|
mode_obj = getattr(fourn_obj, "ModeReglement", None)
|
|
if mode_obj:
|
|
mode_obj.Read()
|
|
data["mode_reglement_libelle"] = getattr(
|
|
mode_obj, "M_Intitule", ""
|
|
).strip()
|
|
else:
|
|
data["mode_reglement_libelle"] = ""
|
|
except:
|
|
data["mode_reglement_libelle"] = ""
|
|
else:
|
|
data["mode_reglement_libelle"] = ""
|
|
except:
|
|
data["mode_reglement_code"] = ""
|
|
data["mode_reglement_libelle"] = ""
|
|
|
|
data["coordonnees_bancaires"] = []
|
|
|
|
try:
|
|
factory_banque = getattr(fourn_obj, "FactoryBanque", None)
|
|
|
|
if factory_banque:
|
|
index = 1
|
|
while index <= 5: # Max 5 comptes bancaires
|
|
try:
|
|
banque_persist = factory_banque.List(index)
|
|
if banque_persist is None:
|
|
break
|
|
|
|
banque = win32com.client.CastTo(
|
|
banque_persist, "IBOBanque3"
|
|
)
|
|
banque.Read()
|
|
|
|
compte_bancaire = {
|
|
"banque_nom": getattr(
|
|
banque, "BI_Intitule", ""
|
|
).strip(),
|
|
"iban": getattr(banque, "RIB_Iban", "").strip(),
|
|
"bic": getattr(banque, "RIB_Bic", "").strip(),
|
|
"code_banque": getattr(
|
|
banque, "RIB_Banque", ""
|
|
).strip(),
|
|
"code_guichet": getattr(
|
|
banque, "RIB_Guichet", ""
|
|
).strip(),
|
|
"numero_compte": getattr(
|
|
banque, "RIB_Compte", ""
|
|
).strip(),
|
|
"cle_rib": getattr(banque, "RIB_Cle", "").strip(),
|
|
}
|
|
|
|
if (
|
|
compte_bancaire["iban"]
|
|
or compte_bancaire["numero_compte"]
|
|
):
|
|
data["coordonnees_bancaires"].append(compte_bancaire)
|
|
|
|
index += 1
|
|
except:
|
|
break
|
|
except Exception as e:
|
|
logger.debug(
|
|
f"Erreur coordonnées bancaires fournisseur {numero}: {e}"
|
|
)
|
|
|
|
if data["coordonnees_bancaires"]:
|
|
data["iban_principal"] = data["coordonnees_bancaires"][0].get(
|
|
"iban", ""
|
|
)
|
|
data["bic_principal"] = data["coordonnees_bancaires"][0].get("bic", "")
|
|
else:
|
|
data["iban_principal"] = ""
|
|
data["bic_principal"] = ""
|
|
|
|
data["contacts"] = []
|
|
|
|
try:
|
|
factory_contact = getattr(fourn_obj, "FactoryContact", None)
|
|
|
|
if factory_contact:
|
|
index = 1
|
|
while index <= 20: # Max 20 contacts
|
|
try:
|
|
contact_persist = factory_contact.List(index)
|
|
if contact_persist is None:
|
|
break
|
|
|
|
contact = win32com.client.CastTo(
|
|
contact_persist, "IBOContact3"
|
|
)
|
|
contact.Read()
|
|
|
|
contact_data = {
|
|
"nom": getattr(contact, "CO_Nom", "").strip(),
|
|
"prenom": getattr(contact, "CO_Prenom", "").strip(),
|
|
"fonction": getattr(contact, "CO_Fonction", "").strip(),
|
|
"service": getattr(contact, "CO_Service", "").strip(),
|
|
"telephone": getattr(
|
|
contact, "CO_Telephone", ""
|
|
).strip(),
|
|
"portable": getattr(contact, "CO_Portable", "").strip(),
|
|
"email": getattr(contact, "CO_EMail", "").strip(),
|
|
}
|
|
|
|
nom_complet = f"{contact_data['prenom']} {contact_data['nom']}".strip()
|
|
if nom_complet:
|
|
contact_data["nom_complet"] = nom_complet
|
|
else:
|
|
contact_data["nom_complet"] = contact_data["nom"]
|
|
|
|
if contact_data["nom"]:
|
|
data["contacts"].append(contact_data)
|
|
|
|
index += 1
|
|
except:
|
|
break
|
|
except Exception as e:
|
|
logger.debug(f"Erreur contacts fournisseur {numero}: {e}")
|
|
|
|
data["nb_contacts"] = len(data["contacts"])
|
|
|
|
if data["contacts"]:
|
|
data["contact_principal"] = data["contacts"][0]
|
|
else:
|
|
data["contact_principal"] = None
|
|
|
|
try:
|
|
data["encours_autorise"] = float(getattr(fourn_obj, "CT_Encours", 0.0))
|
|
except:
|
|
data["encours_autorise"] = 0.0
|
|
|
|
try:
|
|
data["ca_annuel"] = float(getattr(fourn_obj, "CT_ChiffreAffaire", 0.0))
|
|
except:
|
|
data["ca_annuel"] = 0.0
|
|
|
|
try:
|
|
data["compte_general"] = getattr(fourn_obj, "CG_Num", "").strip()
|
|
except:
|
|
data["compte_general"] = ""
|
|
|
|
try:
|
|
date_creation = getattr(fourn_obj, "CT_DateCreate", None)
|
|
data["date_creation"] = str(date_creation) if date_creation else ""
|
|
except:
|
|
data["date_creation"] = ""
|
|
|
|
try:
|
|
date_modif = getattr(fourn_obj, "CT_DateModif", None)
|
|
data["date_modification"] = str(date_modif) if date_modif else ""
|
|
except:
|
|
data["date_modification"] = ""
|
|
|
|
return data
|
|
|
|
except Exception as e:
|
|
logger.error(f" Erreur extraction fournisseur: {e}", exc_info=True)
|
|
return {
|
|
"numero": getattr(fourn_obj, "CT_Num", "").strip(),
|
|
"intitule": getattr(fourn_obj, "CT_Intitule", "").strip(),
|
|
"type": 1,
|
|
"est_fournisseur": True,
|
|
"est_actif": True,
|
|
"en_sommeil": False,
|
|
"adresse": "",
|
|
"complement": "",
|
|
"code_postal": "",
|
|
"ville": "",
|
|
"region": "",
|
|
"pays": "",
|
|
"adresse_complete": "",
|
|
"telephone": "",
|
|
"portable": "",
|
|
"telecopie": "",
|
|
"email": "",
|
|
"site_web": "",
|
|
"siret": "",
|
|
"siren": "",
|
|
"tva_intra": "",
|
|
"code_naf": "",
|
|
"forme_juridique": "",
|
|
"categorie_tarifaire": None,
|
|
"categorie_comptable": None,
|
|
"conditions_reglement_code": "",
|
|
"conditions_reglement_libelle": "",
|
|
"mode_reglement_code": "",
|
|
"mode_reglement_libelle": "",
|
|
"iban_principal": "",
|
|
"bic_principal": "",
|
|
"coordonnees_bancaires": [],
|
|
"contacts": [],
|
|
"nb_contacts": 0,
|
|
"contact_principal": None,
|
|
"encours_autorise": 0.0,
|
|
"ca_annuel": 0.0,
|
|
"compte_general": "",
|
|
"date_creation": "",
|
|
"date_modification": "",
|
|
}
|
|
|
|
|
|
__all__ = [
|
|
"_extraire_fournisseur_enrichi"
|
|
] |