Removed non-ASCII characters

This commit is contained in:
fanilo 2026-01-18 09:45:49 +01:00
parent 31dec46226
commit 3dd863accf
5 changed files with 137 additions and 137 deletions

12
main.py
View file

@ -86,7 +86,7 @@ sage: Optional[SageConnector] = None
def startup():
global sage
logger.info("🚀 Démarrage Sage Gateway Windows...")
logger.info(" Démarrage Sage Gateway Windows...")
try:
validate_settings()
@ -113,7 +113,7 @@ def startup():
def shutdown():
if sage:
sage.deconnecter()
logger.info("👋 Sage Gateway arrêté")
logger.info(" Sage Gateway arrêté")
@app.get("/health")
@ -323,7 +323,7 @@ def transformer_document(
):
try:
logger.info(
f"🔄 Transformation demandée: {numero_source} "
f" Transformation demandée: {numero_source} "
f"(type {type_source}) → type {type_cible}"
)
@ -796,7 +796,7 @@ def creer_avoir_endpoint(req: AvoirCreate):
@app.post("/sage/avoirs/update", dependencies=[Depends(verify_token)])
def modifier_avoir_endpoint(req: AvoirUpdate):
"""
Modification d'un avoir dans Sage
Modification d'un avoir dans Sage
"""
try:
resultat = sage.modifier_avoir(req.numero, req.avoir_data)
@ -1182,7 +1182,7 @@ def lister_depots():
def creer_entree_stock(req: EntreeStock):
try:
logger.info(
f"📦 [ENTREE STOCK] Création bon d'entrée : {len(req.lignes)} ligne(s)"
f" [ENTREE STOCK] Création bon d'entrée : {len(req.lignes)} ligne(s)"
)
entree_data = {
@ -1212,7 +1212,7 @@ def creer_entree_stock(req: EntreeStock):
def creer_sortie_stock(req: SortieStock):
try:
logger.info(
f"📤 [SORTIE STOCK] Création bon de sortie : {len(req.lignes)} ligne(s)"
f" [SORTIE STOCK] Création bon de sortie : {len(req.lignes)} ligne(s)"
)
sortie_data = {

View file

@ -262,12 +262,12 @@ class SageConnector:
fournisseurs.append(fournisseur)
logger.info(
f" SQL: {len(fournisseurs)} fournisseurs avec {len(fournisseur)} champs"
f" SQL: {len(fournisseurs)} fournisseurs avec {len(fournisseur)} champs"
)
return fournisseurs
except Exception as e:
logger.error(f" Erreur SQL fournisseurs: {e}")
logger.error(f" Erreur SQL fournisseurs: {e}")
raise RuntimeError(f"Erreur lecture fournisseurs: {str(e)}")
def lire_fournisseur(self, code_fournisseur):
@ -293,12 +293,12 @@ class SageConnector:
fournisseur["contacts"] = _get_contacts(row.CT_Num, conn)
logger.info(
f" SQL: Fournisseur {code_fournisseur} avec {len(fournisseur)} champs"
f" SQL: Fournisseur {code_fournisseur} avec {len(fournisseur)} champs"
)
return fournisseur
except Exception as e:
logger.error(f" Erreur SQL fournisseur {code_fournisseur}: {e}")
logger.error(f" Erreur SQL fournisseur {code_fournisseur}: {e}")
return None
def creer_fournisseur(self, fournisseur_data: Dict) -> Dict:
@ -775,11 +775,11 @@ class SageConnector:
client["contacts"] = _get_contacts(row.CT_Num, conn)
clients.append(client)
logger.info(f" SQL: {len(clients)} clients avec {len(client)} champs")
logger.info(f" SQL: {len(clients)} clients avec {len(client)} champs")
return clients
except Exception as e:
logger.error(f" Erreur SQL clients: {e}")
logger.error(f" Erreur SQL clients: {e}")
raise RuntimeError(f"Erreur lecture clients: {str(e)}")
def lire_client(self, code_client):
@ -804,11 +804,11 @@ class SageConnector:
client = tiers_to_dict(row)
client["contacts"] = _get_contacts(row.CT_Num, conn)
logger.info(f" SQL: Client {code_client} avec {len(client)} champs")
logger.info(f" SQL: Client {code_client} avec {len(client)} champs")
return client
except Exception as e:
logger.error(f" Erreur SQL client {code_client}: {e}")
logger.error(f" Erreur SQL client {code_client}: {e}")
return None
def lister_tous_articles(self, filtre=""):
@ -1147,11 +1147,11 @@ class SageConnector:
articles = enrichir_prix_gammes(articles, cursor)
articles = enrichir_conditionnements(articles, cursor)
logger.info(f" Article {reference} lu avec tous les enrichissements")
logger.info(f" Article {reference} lu avec tous les enrichissements")
return articles[0]
except Exception as e:
logger.error(f" Erreur SQL article {reference}: {e}", exc_info=True)
logger.error(f" Erreur SQL article {reference}: {e}", exc_info=True)
return None
def obtenir_contact(self, numero: str, contact_numero: int) -> Optional[Dict]:
@ -1440,7 +1440,7 @@ class SageConnector:
if nb_lignes_source == 0:
raise ValueError(f"Document {numero_source} vide (0 lignes)")
logger.info("[TRANSFORM] 🔧 Création du transformer...")
logger.info("[TRANSFORM] Création du transformer...")
transformation = getattr(self.cial, "Transformation", None)
if not transformation:
@ -1874,7 +1874,7 @@ class SageConnector:
persist_tiers = factory_client.ReadNumero(numero_client)
if persist_tiers:
type_tiers = "Client"
logger.info(" Trouvé comme Client")
logger.info(" Trouvé comme Client")
except Exception as e:
logger.debug(f" Pas trouvé comme Client: {e}")
@ -1884,7 +1884,7 @@ class SageConnector:
persist_tiers = factory_fournisseur.ReadNumero(numero_client)
if persist_tiers:
type_tiers = "Fournisseur"
logger.info(" Trouvé comme Fournisseur")
logger.info(" Trouvé comme Fournisseur")
except Exception as e:
logger.debug(f" Pas trouvé comme Fournisseur: {e}")
@ -2082,7 +2082,7 @@ class SageConnector:
if not contact_no:
logger.info(
" 🔍 CT_No non disponible via COM - Recherche en base..."
" CT_No non disponible via COM - Recherche en base..."
)
import time
@ -2113,7 +2113,7 @@ class SageConnector:
or "already exists" in erreur_com.lower()
):
logger.info(
" 🔍 Erreur 'existe déjà' détectée - Vérification en base..."
" Erreur 'existe déjà' détectée - Vérification en base..."
)
import time
@ -2342,7 +2342,7 @@ class SageConnector:
persist_tiers = factory_client.ReadNumero(numero)
if persist_tiers:
type_tiers = "Client"
logger.info(" Trouvé comme Client")
logger.info(" Trouvé comme Client")
except Exception as e:
logger.debug(f" Pas trouvé comme Client: {e}")
@ -2352,7 +2352,7 @@ class SageConnector:
persist_tiers = factory_fournisseur.ReadNumero(numero)
if persist_tiers:
type_tiers = "Fournisseur"
logger.info(" Trouvé comme Fournisseur")
logger.info(" Trouvé comme Fournisseur")
except Exception as e:
logger.debug(f" Pas trouvé comme Fournisseur: {e}")
@ -4720,7 +4720,7 @@ class SageConnector:
article.AR_PrixVen = float(article_data["prix_vente"])
champs_appliques.append("prix_vente")
logger.info(
f" prix_vente = {article_data['prix_vente']}"
f" prix_vente = {article_data['prix_vente']}"
)
except Exception as e:
champs_echoues.append(f"prix_vente: {e}")
@ -4730,7 +4730,7 @@ class SageConnector:
article.AR_PrixAchat = float(article_data["prix_achat"])
champs_appliques.append("prix_achat")
logger.info(
f" prix_achat = {article_data['prix_achat']}"
f" prix_achat = {article_data['prix_achat']}"
)
except Exception as e:
champs_echoues.append(f"prix_achat: {e}")
@ -4739,7 +4739,7 @@ class SageConnector:
try:
article.AR_Coef = float(article_data["coef"])
champs_appliques.append("coef")
logger.info(f" coef = {article_data['coef']}")
logger.info(f" coef = {article_data['coef']}")
except Exception as e:
champs_echoues.append(f"coef: {e}")
@ -4747,7 +4747,7 @@ class SageConnector:
try:
article.AR_CodeBarre = str(article_data["code_ean"])
champs_appliques.append("code_ean")
logger.info(f" code_ean = {article_data['code_ean']}")
logger.info(f" code_ean = {article_data['code_ean']}")
except Exception as e:
champs_echoues.append(f"code_ean: {e}")
@ -4755,7 +4755,7 @@ class SageConnector:
try:
article.AR_Langue1 = str(article_data["description"])[:255]
champs_appliques.append("description")
logger.info(" description définie (AR_Langue1)")
logger.info(" description définie (AR_Langue1)")
except Exception as e:
champs_echoues.append(f"description: {e}")
@ -4763,7 +4763,7 @@ class SageConnector:
try:
article.AR_Pays = str(article_data["pays"])[:3].upper()
champs_appliques.append("pays")
logger.info(f" pays = {article_data['pays']}")
logger.info(f" pays = {article_data['pays']}")
except Exception as e:
champs_echoues.append(f"pays: {e}")
@ -4771,7 +4771,7 @@ class SageConnector:
try:
article.AR_Garantie = int(article_data["garantie"])
champs_appliques.append("garantie")
logger.info(f" garantie = {article_data['garantie']}")
logger.info(f" garantie = {article_data['garantie']}")
except Exception as e:
champs_echoues.append(f"garantie: {e}")
@ -4779,7 +4779,7 @@ class SageConnector:
try:
article.AR_Delai = int(article_data["delai"])
champs_appliques.append("delai")
logger.info(f" delai = {article_data['delai']}")
logger.info(f" delai = {article_data['delai']}")
except Exception as e:
champs_echoues.append(f"delai: {e}")
@ -4787,7 +4787,7 @@ class SageConnector:
try:
article.AR_PoidsNet = float(article_data["poids_net"])
champs_appliques.append("poids_net")
logger.info(f" poids_net = {article_data['poids_net']}")
logger.info(f" poids_net = {article_data['poids_net']}")
except Exception as e:
champs_echoues.append(f"poids_net: {e}")
@ -4796,7 +4796,7 @@ class SageConnector:
article.AR_PoidsBrut = float(article_data["poids_brut"])
champs_appliques.append("poids_brut")
logger.info(
f" poids_brut = {article_data['poids_brut']}"
f" poids_brut = {article_data['poids_brut']}"
)
except Exception as e:
champs_echoues.append(f"poids_brut: {e}")
@ -4808,7 +4808,7 @@ class SageConnector:
]
champs_appliques.append("code_fiscal")
logger.info(
f" code_fiscal = {article_data['code_fiscal']}"
f" code_fiscal = {article_data['code_fiscal']}"
)
except Exception as e:
champs_echoues.append(f"code_fiscal: {e}")
@ -4820,7 +4820,7 @@ class SageConnector:
)
champs_appliques.append("soumis_escompte")
logger.info(
f" soumis_escompte = {article_data['soumis_escompte']}"
f" soumis_escompte = {article_data['soumis_escompte']}"
)
except Exception as e:
champs_echoues.append(f"soumis_escompte: {e}")
@ -4829,7 +4829,7 @@ class SageConnector:
try:
article.AR_Publie = 1 if article_data["publie"] else 0
champs_appliques.append("publie")
logger.info(f" publie = {article_data['publie']}")
logger.info(f" publie = {article_data['publie']}")
except Exception as e:
champs_echoues.append(f"publie: {e}")
@ -4838,7 +4838,7 @@ class SageConnector:
article.AR_Sommeil = 1 if article_data["en_sommeil"] else 0
champs_appliques.append("en_sommeil")
logger.info(
f" en_sommeil = {article_data['en_sommeil']}"
f" en_sommeil = {article_data['en_sommeil']}"
)
except Exception as e:
champs_echoues.append(f"en_sommeil: {e}")
@ -4880,13 +4880,13 @@ class SageConnector:
try:
for index, value in stats_a_definir:
article.AR_Stat(index, value)
logger.info(f" stat_0{index + 1} = {value}")
logger.info(f" stat_0{index + 1} = {value}")
champs_appliques.append(f"stat_0{index + 1}")
article.Write()
logger.info(" [OK] Statistiques sauvegardées")
except Exception as e:
logger.warning(f" Statistiques : {e}")
logger.warning(f" Statistiques : {e}")
if transaction_active:
try:
@ -5314,7 +5314,7 @@ class SageConnector:
designation = str(article_data["designation"])[:69].strip()
article.AR_Design = designation
champs_modifies.append("designation")
logger.info(f" designation = {designation}")
logger.info(f" designation = {designation}")
except Exception as e:
champs_echoues.append(f"designation: {e}")
@ -5322,7 +5322,7 @@ class SageConnector:
try:
article.AR_PrixVen = float(article_data["prix_vente"])
champs_modifies.append("prix_vente")
logger.info(f" prix_vente = {article_data['prix_vente']}")
logger.info(f" prix_vente = {article_data['prix_vente']}")
except Exception as e:
champs_echoues.append(f"prix_vente: {e}")
@ -5330,7 +5330,7 @@ class SageConnector:
try:
article.AR_PrixAchat = float(article_data["prix_achat"])
champs_modifies.append("prix_achat")
logger.info(f" prix_achat = {article_data['prix_achat']}")
logger.info(f" prix_achat = {article_data['prix_achat']}")
except Exception as e:
champs_echoues.append(f"prix_achat: {e}")
@ -5338,7 +5338,7 @@ class SageConnector:
try:
article.AR_Coef = float(article_data["coef"])
champs_modifies.append("coef")
logger.info(f" coef = {article_data['coef']}")
logger.info(f" coef = {article_data['coef']}")
except Exception as e:
champs_echoues.append(f"coef: {e}")
@ -5348,7 +5348,7 @@ class SageConnector:
:13
].strip()
champs_modifies.append("code_ean")
logger.info(f" code_ean = {article_data['code_ean']}")
logger.info(f" code_ean = {article_data['code_ean']}")
except Exception as e:
champs_echoues.append(f"code_ean: {e}")
@ -5358,7 +5358,7 @@ class SageConnector:
:255
].strip()
champs_modifies.append("description")
logger.info(" description définie (AR_Langue1)")
logger.info(" description définie (AR_Langue1)")
except Exception as e:
champs_echoues.append(f"description: {e}")
@ -5366,7 +5366,7 @@ class SageConnector:
try:
article.AR_Pays = str(article_data["pays"])[:3].upper()
champs_modifies.append("pays")
logger.info(f" pays = {article_data['pays']}")
logger.info(f" pays = {article_data['pays']}")
except Exception as e:
champs_echoues.append(f"pays: {e}")
@ -5374,7 +5374,7 @@ class SageConnector:
try:
article.AR_Garantie = int(article_data["garantie"])
champs_modifies.append("garantie")
logger.info(f" garantie = {article_data['garantie']}")
logger.info(f" garantie = {article_data['garantie']}")
except Exception as e:
champs_echoues.append(f"garantie: {e}")
@ -5382,7 +5382,7 @@ class SageConnector:
try:
article.AR_Delai = int(article_data["delai"])
champs_modifies.append("delai")
logger.info(f" delai = {article_data['delai']}")
logger.info(f" delai = {article_data['delai']}")
except Exception as e:
champs_echoues.append(f"delai: {e}")
@ -5390,7 +5390,7 @@ class SageConnector:
try:
article.AR_PoidsNet = float(article_data["poids_net"])
champs_modifies.append("poids_net")
logger.info(f" poids_net = {article_data['poids_net']}")
logger.info(f" poids_net = {article_data['poids_net']}")
except Exception as e:
champs_echoues.append(f"poids_net: {e}")
@ -5398,7 +5398,7 @@ class SageConnector:
try:
article.AR_PoidsBrut = float(article_data["poids_brut"])
champs_modifies.append("poids_brut")
logger.info(f" poids_brut = {article_data['poids_brut']}")
logger.info(f" poids_brut = {article_data['poids_brut']}")
except Exception as e:
champs_echoues.append(f"poids_brut: {e}")
@ -5406,7 +5406,7 @@ class SageConnector:
try:
article.AR_CodeFiscal = str(article_data["code_fiscal"])[:10]
champs_modifies.append("code_fiscal")
logger.info(f" code_fiscal = {article_data['code_fiscal']}")
logger.info(f" code_fiscal = {article_data['code_fiscal']}")
except Exception as e:
champs_echoues.append(f"code_fiscal: {e}")
@ -5417,7 +5417,7 @@ class SageConnector:
)
champs_modifies.append("soumis_escompte")
logger.info(
f" soumis_escompte = {article_data['soumis_escompte']}"
f" soumis_escompte = {article_data['soumis_escompte']}"
)
except Exception as e:
champs_echoues.append(f"soumis_escompte: {e}")
@ -5426,7 +5426,7 @@ class SageConnector:
try:
article.AR_Publie = 1 if article_data["publie"] else 0
champs_modifies.append("publie")
logger.info(f" publie = {article_data['publie']}")
logger.info(f" publie = {article_data['publie']}")
except Exception as e:
champs_echoues.append(f"publie: {e}")
@ -5434,7 +5434,7 @@ class SageConnector:
try:
article.AR_Sommeil = 1 if article_data["en_sommeil"] else 0
champs_modifies.append("en_sommeil")
logger.info(f" en_sommeil = {article_data['en_sommeil']}")
logger.info(f" en_sommeil = {article_data['en_sommeil']}")
except Exception as e:
champs_echoues.append(f"en_sommeil: {e}")
@ -5484,13 +5484,13 @@ class SageConnector:
try:
for index, value in stats_a_modifier:
article.AR_Stat(index, value)
logger.info(f" stat_0{index + 1} = {value}")
logger.info(f" stat_0{index + 1} = {value}")
champs_modifies.append(f"stat_0{index + 1}")
article.Write()
logger.info(" [OK] Statistiques sauvegardées")
except Exception as e:
logger.warning(f" Statistiques : {e}")
logger.warning(f" Statistiques : {e}")
if "stock_mini" in article_data or "stock_maxi" in article_data:
try:
@ -7357,12 +7357,12 @@ class SageConnector:
tiers_list.append(tiers)
logger.info(
f" SQL: {len(tiers_list)} tiers retournés (type={type_tiers}, filtre={filtre})"
f" SQL: {len(tiers_list)} tiers retournés (type={type_tiers}, filtre={filtre})"
)
return tiers_list
except Exception as e:
logger.error(f" Erreur SQL tiers: {e}")
logger.error(f" Erreur SQL tiers: {e}")
raise RuntimeError(f"Erreur lecture tiers: {str(e)}")
def lire_tiers(self, code: str) -> Optional[Dict]:
@ -7387,11 +7387,11 @@ class SageConnector:
tiers = tiers_to_dict(row)
tiers["contacts"] = _get_contacts(row.CT_Num, conn)
logger.info(f" SQL: Tiers {code} lu avec succès")
logger.info(f" SQL: Tiers {code} lu avec succès")
return tiers
except Exception as e:
logger.error(f" Erreur SQL tiers {code}: {e}")
logger.error(f" Erreur SQL tiers {code}: {e}")
return None
def lister_tous_collaborateurs(self, filtre="", actifs_seulement=True):
@ -7429,11 +7429,11 @@ class SageConnector:
collaborateurs = [collaborators_to_dict(row) for row in rows]
logger.info(f" SQL: {len(collaborateurs)} collaborateurs")
logger.info(f" SQL: {len(collaborateurs)} collaborateurs")
return collaborateurs
except Exception as e:
logger.error(f" Erreur SQL collaborateurs: {e}")
logger.error(f" Erreur SQL collaborateurs: {e}")
raise RuntimeError(f"Erreur lecture collaborateurs: {str(e)}")
def lire_collaborateur(self, numero):
@ -7464,12 +7464,12 @@ class SageConnector:
collaborateur = collaborators_to_dict(row)
logger.info(
f" SQL: Collaborateur {numero} avec {len(collaborateur)} champs"
f" SQL: Collaborateur {numero} avec {len(collaborateur)} champs"
)
return collaborateur
except Exception as e:
logger.error(f" Erreur SQL collaborateur {numero}: {e}")
logger.error(f" Erreur SQL collaborateur {numero}: {e}")
return None
def creer_collaborateur(self, data: dict) -> dict:
@ -7484,12 +7484,12 @@ class SageConnector:
prenom = str(data.get("prenom", "")).strip()[:35] if data.get("prenom") else ""
logger.info(f"\n{'=' * 70}")
logger.info(f"📝 CRÉATION COLLABORATEUR: {nom_upper} {prenom}")
logger.info(f" CRÉATION COLLABORATEUR: {nom_upper} {prenom}")
logger.info(f"{'=' * 70}")
try:
with self._com_context(), self._lock_com:
logger.info("🔍 Vérification doublon...")
logger.info(" Vérification doublon...")
with self._get_sql_connection() as conn:
cursor = conn.cursor()
cursor.execute(
@ -7501,7 +7501,7 @@ class SageConnector:
raise ValueError(
f"Le collaborateur '{nom_upper} {prenom}' existe déjà (N°{existing[0]})"
)
logger.info(" Pas de doublon")
logger.info(" Pas de doublon")
try:
factory = self.cial.FactoryCollaborateur
@ -7518,7 +7518,7 @@ class SageConnector:
]:
try:
collab = win32com.client.CastTo(persist, iface)
logger.info(f" Cast vers {iface}")
logger.info(f" Cast vers {iface}")
break
except Exception:
pass
@ -7527,7 +7527,7 @@ class SageConnector:
try:
collab.SetDefault()
logger.info(" SetDefault()")
logger.info(" SetDefault()")
except Exception as e:
logger.warning(f"SetDefault() ignoré: {e}")
@ -7540,13 +7540,13 @@ class SageConnector:
if max_len:
val = val[:max_len]
setattr(obj, attr, val)
logger.debug(f" {attr} = '{val}'")
logger.debug(f" {attr} = '{val}'")
return True
except Exception as e:
logger.warning(f" {attr}: {e}")
logger.warning(f" {attr}: {e}")
return False
logger.info("📝 Champs directs...")
logger.info(" Champs directs...")
safe_set(collab, "Nom", nom_upper, 35)
@ -7558,7 +7558,7 @@ class SageConnector:
safe_set(collab, "LinkedIn", data.get("linkedin"), 35)
safe_set(collab, "Skype", data.get("skype"), 35)
logger.info("📍 Adresse...")
logger.info(" Adresse...")
try:
adresse_obj = collab.Adresse
safe_set(adresse_obj, "Adresse", data.get("adresse"), 35)
@ -7568,9 +7568,9 @@ class SageConnector:
safe_set(adresse_obj, "CodeRegion", data.get("code_region"), 25)
safe_set(adresse_obj, "Pays", data.get("pays"), 35)
except Exception as e:
logger.warning(f" Erreur Adresse: {e}")
logger.warning(f" Erreur Adresse: {e}")
logger.info("📞 Telecom...")
logger.info(" Telecom...")
try:
telecom_obj = collab.Telecom
safe_set(telecom_obj, "Telephone", data.get("telephone"), 21)
@ -7578,13 +7578,13 @@ class SageConnector:
safe_set(telecom_obj, "EMail", data.get("email"), 69)
safe_set(telecom_obj, "Portable", data.get("tel_portable"), 21)
except Exception as e:
logger.warning(f" Erreur Telecom: {e}")
logger.warning(f" Erreur Telecom: {e}")
logger.info("🔘 Booléens...")
logger.info(" Booléens...")
if data.get("vendeur") is True:
try:
collab.Vendeur = True
logger.debug(" Vendeur = True")
logger.debug(" Vendeur = True")
except Exception:
pass
if data.get("caissier") is True:
@ -7608,7 +7608,7 @@ class SageConnector:
except Exception:
pass
logger.info("💾 Write()...")
logger.info(" Write()...")
try:
collab.Write()
logger.info(" Write() RÉUSSI!")
@ -7657,7 +7657,7 @@ class SageConnector:
return {"nom": nom_upper, "prenom": prenom, "status": "créé"}
except ValueError as e:
logger.warning(f" Validation: {e}")
logger.warning(f" Validation: {e}")
raise
except Exception as e:
logger.error(f" Erreur création collaborateur: {e}", exc_info=True)
@ -7669,7 +7669,7 @@ class SageConnector:
raise RuntimeError("Connexion Sage non établie")
logger.info(f"\n{'=' * 70}")
logger.info(f"📝 MODIFICATION COLLABORATEUR N°{numero}")
logger.info(f" MODIFICATION COLLABORATEUR N°{numero}")
logger.info(f"{'=' * 70}")
try:
@ -7695,7 +7695,7 @@ class SageConnector:
]:
try:
collab = win32com.client.CastTo(persist, iface)
logger.info(f" Cast vers {iface}")
logger.info(f" Cast vers {iface}")
break
except Exception:
pass
@ -7704,7 +7704,7 @@ class SageConnector:
try:
collab.Read()
logger.info(f" Collaborateur {numero} chargé")
logger.info(f" Collaborateur {numero} chargé")
except Exception as e:
logger.warning(f"Read() ignoré: {e}")
@ -7717,15 +7717,15 @@ class SageConnector:
if max_len and isinstance(val, str):
val = val[:max_len]
setattr(obj, attr, val)
logger.debug(f" {attr} = '{val}'")
logger.debug(f" {attr} = '{val}'")
return True
except Exception as e:
logger.warning(f" {attr}: {e}")
logger.warning(f" {attr}: {e}")
return False
champs_modifies = []
logger.info("📝 Champs directs...")
logger.info(" Champs directs...")
champs_directs = {
"nom": ("Nom", 35),
@ -7746,7 +7746,7 @@ class SageConnector:
if safe_set(collab, sage_attr, val, max_len):
champs_modifies.append(sage_attr)
logger.info("📍 Adresse...")
logger.info(" Adresse...")
try:
adresse_obj = collab.Adresse
@ -7767,9 +7767,9 @@ class SageConnector:
champs_modifies.append(f"Adresse.{sage_attr}")
except Exception as e:
logger.warning(f" Erreur accès Adresse: {e}")
logger.warning(f" Erreur accès Adresse: {e}")
logger.info("📞 Telecom...")
logger.info(" Telecom...")
try:
telecom_obj = collab.Telecom
@ -7788,9 +7788,9 @@ class SageConnector:
champs_modifies.append(f"Telecom.{sage_attr}")
except Exception as e:
logger.warning(f" Erreur accès Telecom: {e}")
logger.warning(f" Erreur accès Telecom: {e}")
logger.info("🔘 Booléens...")
logger.info(" Booléens...")
champs_bool = {
"vendeur": "Vendeur",
@ -7806,19 +7806,19 @@ class SageConnector:
val = bool(data[py_field])
setattr(collab, sage_attr, val)
champs_modifies.append(sage_attr)
logger.debug(f" {sage_attr} = {val}")
logger.debug(f" {sage_attr} = {val}")
except Exception as e:
logger.warning(f" {sage_attr}: {e}")
logger.warning(f" {sage_attr}: {e}")
if not champs_modifies:
logger.info(" Aucun champ à modifier")
return self.lire_collaborateur(numero)
logger.info(
f"📋 {len(champs_modifies)} champ(s) à modifier: {champs_modifies}"
f" {len(champs_modifies)} champ(s) à modifier: {champs_modifies}"
)
logger.info("💾 Write()...")
logger.info(" Write()...")
try:
collab.Write()
logger.info(" Write() RÉUSSI!")
@ -7833,7 +7833,7 @@ class SageConnector:
return self.lire_collaborateur(numero)
except ValueError as e:
logger.warning(f" Validation: {e}")
logger.warning(f" Validation: {e}")
raise
except Exception as e:
logger.error(f" Erreur modification collaborateur: {e}", exc_info=True)
@ -7861,12 +7861,12 @@ class SageConnector:
societe.update(logo_com)
logger.info(
f" Informations société '{societe['raison_sociale']}' lues"
f" Informations société '{societe['raison_sociale']}' lues"
)
return societe
except Exception as e:
logger.error(f" Erreur lecture P_DOSSIER: {e}", exc_info=True)
logger.error(f" Erreur lecture P_DOSSIER: {e}", exc_info=True)
raise RuntimeError(f"Erreur lecture informations société: {str(e)}")
def regler_facture(

View file

@ -1185,7 +1185,7 @@ def enrichir_fournisseurs_articles(articles: List[Dict], cursor) -> List[Dict]:
)
if not nums_fournisseurs:
logger.warning(" Aucun numéro de fournisseur trouvé dans les articles")
logger.warning(" Aucun numéro de fournisseur trouvé dans les articles")
for article in articles:
article["fournisseur_nom"] = None
return articles
@ -1211,7 +1211,7 @@ def enrichir_fournisseurs_articles(articles: List[Dict], cursor) -> List[Dict]:
if len(fournisseur_rows) == 0:
logger.warning(
f" Aucun fournisseur trouvé pour CT_Type=1 et CT_Num IN {nums_fournisseurs[:5]}"
f" Aucun fournisseur trouvé pour CT_Type=1 et CT_Num IN {nums_fournisseurs[:5]}"
)
cursor.execute(
f"SELECT CT_Num, CT_Type FROM F_COMPTET WHERE CT_Num IN ({placeholders})",
@ -1273,7 +1273,7 @@ def enrichir_familles_articles(articles: List[Dict], cursor) -> List[Dict]:
)
if not codes_familles:
logger.warning(" Aucun code famille trouvé dans les articles")
logger.warning(" Aucun code famille trouvé dans les articles")
for article in articles:
_init_champs_famille_vides(article)
return articles

View file

@ -357,7 +357,7 @@ def devalider_facture(connector, numero_facture: str) -> Dict:
except ValueError:
raise
except Exception as e:
logger.error(f" Erreur COM dévalidation {numero_facture}: {e}", exc_info=True)
logger.error(f" Erreur COM dévalidation {numero_facture}: {e}", exc_info=True)
raise RuntimeError(f"Échec dévalidation: {str(e)}")
info_apres = _get_facture_info_sql(connector, numero_facture)

View file

@ -19,7 +19,7 @@ def creer_document_vente(
config = ConfigDocument(type_document)
logger.info(
f"📝 Début création {config.nom_document} pour client {doc_data['client']['code']}"
f" Début création {config.nom_document} pour client {doc_data['client']['code']}"
)
try:
@ -30,7 +30,7 @@ def creer_document_vente(
try:
self.cial.CptaApplication.BeginTrans()
transaction_active = True
logger.debug(" Transaction Sage démarrée")
logger.debug(" Transaction Sage démarrée")
except Exception as e:
logger.warning(f"BeginTrans échoué (non critique): {e}")
@ -42,7 +42,7 @@ def creer_document_vente(
except Exception:
pass
logger.info(f" Document {config.nom_document} créé")
logger.info(f" Document {config.nom_document} créé")
date_principale = normaliser_date(
doc_data.get(config.champ_date_principale)
@ -64,7 +64,7 @@ def creer_document_vente(
normaliser_date(doc_data[config.champ_date_secondaire])
)
logger.info(
f" {config.champ_date_secondaire}: {doc_data[config.champ_date_secondaire]}"
f" {config.champ_date_secondaire}: {doc_data[config.champ_date_secondaire]}"
)
factory_client = self.cial.CptaApplication.FactoryClient
@ -79,12 +79,12 @@ def creer_document_vente(
doc.SetDefaultClient(client_obj)
doc.Write()
logger.info(f" Client {doc_data['client']['code']} associé")
logger.info(f" Client {doc_data['client']['code']} associé")
if doc_data.get("reference"):
try:
doc.DO_Ref = doc_data["reference"]
logger.info(f" Référence: {doc_data['reference']}")
logger.info(f" Référence: {doc_data['reference']}")
except Exception as e:
logger.warning(f"Référence non définie: {e}")
@ -98,7 +98,7 @@ def creer_document_vente(
factory_article = self.cial.FactoryArticle
logger.info(f"📦 Ajout de {len(doc_data['lignes'])} lignes...")
logger.info(f" Ajout de {len(doc_data['lignes'])} lignes...")
for idx, ligne_data in enumerate(doc_data["lignes"], 1):
_ajouter_ligne_document(
@ -110,7 +110,7 @@ def creer_document_vente(
doc=doc,
)
logger.info("💾 Validation du document...")
logger.info(" Validation du document...")
if type_document == TypeDocumentVente.FACTURE:
try:
@ -126,18 +126,18 @@ def creer_document_vente(
if type_document != TypeDocumentVente.DEVIS:
process.Process()
logger.info(" Process() appelé")
logger.info(" Process() appelé")
else:
try:
process.Process()
logger.info(" Process() appelé (devis)")
logger.info(" Process() appelé (devis)")
except Exception:
logger.debug(" ↳ Process() ignoré pour devis brouillon")
if transaction_active:
try:
self.cial.CptaApplication.CommitTrans()
logger.info(" Transaction committée")
logger.info(" Transaction committée")
except Exception:
pass
@ -150,7 +150,7 @@ def creer_document_vente(
f"Numéro {config.nom_document} vide après création"
)
logger.info(f"📄 Numéro: {numero_document}")
logger.info(f" Numéro: {numero_document}")
doc_final_data = _relire_document_final(
self,
@ -252,21 +252,21 @@ def _ajouter_ligne_document(
ligne_obj.DL_PrixUnitaire = float(prix_sage)
prix_final = float(getattr(ligne_obj, "DL_PrixUnitaire", 0))
logger.info(f" 💰 Prix: {prix_final}")
logger.info(f" Prix: {prix_final}")
ligne_obj.Write()
remise = ligne_data.get("remise_pourcentage", 0)
if remise and remise > 0:
logger.info(f" 🎯 Application remise {remise}%...")
logger.info(f" Application remise {remise}%...")
_appliquer_remise_ligne(ligne_obj, remise)
logger.info(f" Ligne {idx} terminée")
logger.info(f" Ligne {idx} terminée")
def _configurer_facture(self, doc) -> None:
"""Configuration spécifique pour les factures"""
logger.info(" 🔧 Configuration spécifique facture...")
logger.info(" Configuration spécifique facture...")
try:
if hasattr(doc, "DO_CodeJournal"):
@ -274,24 +274,24 @@ def _configurer_facture(self, doc) -> None:
param_societe = self.cial.CptaApplication.ParametreSociete
journal_defaut = getattr(param_societe, "P_CodeJournalVte", "VTE")
doc.DO_CodeJournal = journal_defaut
logger.debug(f" Code journal: {journal_defaut}")
logger.debug(f" Code journal: {journal_defaut}")
except Exception:
doc.DO_CodeJournal = "VTE"
logger.debug(" Code journal: VTE (défaut)")
logger.debug(" Code journal: VTE (défaut)")
except Exception as e:
logger.debug(f" Code journal: {e}")
try:
if hasattr(doc, "DO_Souche"):
doc.DO_Souche = 0
logger.debug(" Souche: 0")
logger.debug(" Souche: 0")
except Exception:
pass
try:
if hasattr(doc, "DO_Regime"):
doc.DO_Regime = 0
logger.debug(" Régime: 0")
logger.debug(" Régime: 0")
except Exception:
pass
@ -390,11 +390,11 @@ def modifier_document_vente(
raise RuntimeError("Connexion Sage non établie")
config = ConfigDocument(type_document)
logger.info(f"📝 === MODIFICATION {config.nom_document.upper()} {numero} ===")
logger.info(f" === MODIFICATION {config.nom_document.upper()} {numero} ===")
try:
with self._com_context(), self._lock_com:
logger.info("📂 Chargement document...")
logger.info(" Chargement document...")
factory = self.cial.FactoryDocumentVente
persist = None
@ -403,7 +403,7 @@ def modifier_document_vente(
persist_test = factory.ReadPiece(type_test, numero)
if persist_test:
persist = persist_test
logger.info(f" Document trouvé (type={type_test})")
logger.info(f" Document trouvé (type={type_test})")
break
except Exception:
continue
@ -466,7 +466,7 @@ def modifier_document_vente(
modif_ref = "reference" in doc_data
modif_lignes = "lignes" in doc_data and doc_data["lignes"] is not None
logger.info("📋 Modifications demandées:")
logger.info(" Modifications demandées:")
logger.info(f" {config.champ_date_principale}: {modif_date}")
if config.champ_date_secondaire:
logger.info(f" {config.champ_date_secondaire}: {modif_date_sec}")
@ -486,11 +486,11 @@ def modifier_document_vente(
statut_a_modifier = doc_data_temp.pop("statut")
modif_statut = False
logger.info("🔍 Test Write() basique...")
logger.info(" Test Write() basique...")
try:
doc.Write()
doc.Read()
logger.info(" Write() basique OK")
logger.info(" Write() basique OK")
except Exception as e:
logger.error(f" Document verrouillé: {e}")
raise ValueError(f"Document verrouillé: {e}")
@ -498,7 +498,7 @@ def modifier_document_vente(
if not modif_lignes and (
modif_date or modif_date_sec or modif_statut or modif_ref
):
logger.info("📝 Modifications simples...")
logger.info(" Modifications simples...")
if modif_date:
date_principale = normaliser_date(
@ -529,10 +529,10 @@ def modifier_document_vente(
_configurer_facture(self, doc)
doc.Write()
logger.info(" Modifications appliquées")
logger.info(" Modifications appliquées")
elif modif_lignes:
logger.info("🔄 REMPLACEMENT COMPLET DES LIGNES...")
logger.info(" REMPLACEMENT COMPLET DES LIGNES...")
if modif_date:
doc.DO_Date = pywintypes.Time(
@ -562,7 +562,7 @@ def modifier_document_vente(
factory_article = self.cial.FactoryArticle
if nb_lignes_initial > 0:
logger.info(f" 🗑 Suppression {nb_lignes_initial} lignes...")
logger.info(f" Suppression {nb_lignes_initial} lignes...")
for idx in range(nb_lignes_initial, 0, -1):
try:
ligne_p = factory_lignes.List(idx)
@ -574,9 +574,9 @@ def modifier_document_vente(
ligne.Remove()
except Exception as e:
logger.warning(f" Ligne {idx}: {e}")
logger.info(" Lignes supprimées")
logger.info(" Lignes supprimées")
logger.info(f" Ajout {nb_nouvelles} lignes...")
logger.info(f" Ajout {nb_nouvelles} lignes...")
for idx, ligne_data in enumerate(nouvelles_lignes, 1):
_ajouter_ligne_document(
cial=self.cial,
@ -587,7 +587,7 @@ def modifier_document_vente(
doc=doc,
)
logger.info(" Nouvelles lignes ajoutées avec remises")
logger.info(" Nouvelles lignes ajoutées avec remises")
doc.Write()
time.sleep(0.5)
@ -598,7 +598,7 @@ def modifier_document_vente(
if reference_a_modifier is not None:
try:
logger.info(
f" 📝 Modification référence: '{reference_a_modifier}'"
f" Modification référence: '{reference_a_modifier}'"
)
doc.DO_Ref = (
str(reference_a_modifier) if reference_a_modifier else ""
@ -612,7 +612,7 @@ def modifier_document_vente(
if statut_a_modifier is not None:
try:
logger.info(f" 📝 Modification statut: {statut_a_modifier}")
logger.info(f" Modification statut: {statut_a_modifier}")
doc.DO_Statut = int(statut_a_modifier)
doc.Write()
time.sleep(0.5)