style: Reformat method calls and remove unnecessary blank lines for improved code consistency.

This commit is contained in:
Fanilo-Nantenaina 2025-12-08 17:57:41 +03:00
parent 61e787bf36
commit e95e550044
2 changed files with 519 additions and 539 deletions

894
api.py

File diff suppressed because it is too large Load diff

View file

@ -278,32 +278,32 @@ class SageGatewayClient:
def creer_fournisseur(self, fournisseur_data: Dict) -> Dict: def creer_fournisseur(self, fournisseur_data: Dict) -> Dict:
""" """
Envoie la requête de création de fournisseur à la gateway Windows. Envoie la requête de création de fournisseur à la gateway Windows.
Args: Args:
fournisseur_data: Dict contenant intitule, compte_collectif, etc. fournisseur_data: Dict contenant intitule, compte_collectif, etc.
Returns: Returns:
Fournisseur créé avec son numéro définitif Fournisseur créé avec son numéro définitif
""" """
return self._post("/sage/fournisseurs/create", fournisseur_data).get("data", {}) return self._post("/sage/fournisseurs/create", fournisseur_data).get("data", {})
def modifier_fournisseur(self, code: str, fournisseur_data: Dict) -> Dict: def modifier_fournisseur(self, code: str, fournisseur_data: Dict) -> Dict:
""" """
Modification d'un fournisseur existant Modification d'un fournisseur existant
Args: Args:
code: Code du fournisseur à modifier code: Code du fournisseur à modifier
fournisseur_data: Dictionnaire contenant les champs à modifier fournisseur_data: Dictionnaire contenant les champs à modifier
(seuls les champs présents seront mis à jour) (seuls les champs présents seront mis à jour)
Returns: Returns:
Fournisseur modifié Fournisseur modifié
""" """
return self._post("/sage/fournisseurs/update", { return self._post(
"code": code, "/sage/fournisseurs/update",
"fournisseur_data": fournisseur_data {"code": code, "fournisseur_data": fournisseur_data},
}).get("data", {}) ).get("data", {})
# ===================================================== # =====================================================
# AVOIRS # AVOIRS
# ===================================================== # =====================================================
@ -357,7 +357,7 @@ class SageGatewayClient:
return r.json() return r.json()
except: except:
return {"status": "down"} return {"status": "down"}
def creer_client(self, client_data: Dict) -> Dict: def creer_client(self, client_data: Dict) -> Dict:
""" """
Envoie la requête de création de client à la gateway Windows. Envoie la requête de création de client à la gateway Windows.
@ -365,48 +365,45 @@ class SageGatewayClient:
""" """
# On appelle la route définie dans main.py # On appelle la route définie dans main.py
return self._post("/sage/clients/create", client_data).get("data", {}) return self._post("/sage/clients/create", client_data).get("data", {})
def modifier_client(self, code: str, client_data: Dict) -> Dict: def modifier_client(self, code: str, client_data: Dict) -> Dict:
""" """
Modification d'un client existant Modification d'un client existant
Args: Args:
code: Code du client à modifier code: Code du client à modifier
client_data: Dictionnaire contenant les champs à modifier client_data: Dictionnaire contenant les champs à modifier
(seuls les champs présents seront mis à jour) (seuls les champs présents seront mis à jour)
Returns: Returns:
Client modifié Client modifié
""" """
return self._post("/sage/clients/update", { return self._post(
"code": code, "/sage/clients/update", {"code": code, "client_data": client_data}
"client_data": client_data ).get("data", {})
}).get("data", {})
def modifier_devis(self, numero: str, devis_data: Dict) -> Dict: def modifier_devis(self, numero: str, devis_data: Dict) -> Dict:
""" """
Modification d'un devis existant Modification d'un devis existant
Args: Args:
numero: Numéro du devis à modifier numero: Numéro du devis à modifier
devis_data: Dictionnaire contenant les champs à modifier: devis_data: Dictionnaire contenant les champs à modifier:
- date_devis (str, optional): Nouvelle date - date_devis (str, optional): Nouvelle date
- lignes (List, optional): Nouvelles lignes - lignes (List, optional): Nouvelles lignes
- statut (int, optional): Nouveau statut - statut (int, optional): Nouveau statut
Returns: Returns:
Devis modifié avec totaux recalculés Devis modifié avec totaux recalculés
""" """
return self._post("/sage/devis/update", { return self._post(
"numero": numero, "/sage/devis/update", {"numero": numero, "devis_data": devis_data}
"devis_data": devis_data ).get("data", {})
}).get("data", {})
def creer_commande(self, commande_data: Dict) -> Dict: def creer_commande(self, commande_data: Dict) -> Dict:
""" """
Création d'une nouvelle commande (Bon de commande) Création d'une nouvelle commande (Bon de commande)
Args: Args:
commande_data: Dictionnaire contenant: commande_data: Dictionnaire contenant:
- client_id (str): Code du client - client_id (str): Code du client
@ -417,17 +414,16 @@ class SageGatewayClient:
- quantite (float) - quantite (float)
- prix_unitaire_ht (float, optional) - prix_unitaire_ht (float, optional)
- remise_pourcentage (float, optional) - remise_pourcentage (float, optional)
Returns: Returns:
Commande créée avec son numéro et ses totaux Commande créée avec son numéro et ses totaux
""" """
return self._post("/sage/commandes/create", commande_data).get("data", {}) return self._post("/sage/commandes/create", commande_data).get("data", {})
def modifier_commande(self, numero: str, commande_data: Dict) -> Dict: def modifier_commande(self, numero: str, commande_data: Dict) -> Dict:
""" """
Modification d'une commande existante Modification d'une commande existante
Args: Args:
numero: Numéro de la commande à modifier numero: Numéro de la commande à modifier
commande_data: Dictionnaire contenant les champs à modifier: commande_data: Dictionnaire contenant les champs à modifier:
@ -435,36 +431,33 @@ class SageGatewayClient:
- lignes (List, optional): Nouvelles lignes - lignes (List, optional): Nouvelles lignes
- statut (int, optional): Nouveau statut - statut (int, optional): Nouveau statut
- reference (str, optional): Nouvelle référence - reference (str, optional): Nouvelle référence
Returns: Returns:
Commande modifiée avec totaux recalculés Commande modifiée avec totaux recalculés
""" """
return self._post("/sage/commandes/update", { return self._post(
"numero": numero, "/sage/commandes/update", {"numero": numero, "commande_data": commande_data}
"commande_data": commande_data ).get("data", {})
}).get("data", {})
def creer_livraison(self, livraison_data: Dict) -> Dict: def creer_livraison(self, livraison_data: Dict) -> Dict:
""" """
Création d'une nouvelle livraison (Bon de livraison) Création d'une nouvelle livraison (Bon de livraison)
""" """
return self._post("/sage/livraisons/create", livraison_data).get("data", {}) return self._post("/sage/livraisons/create", livraison_data).get("data", {})
def modifier_livraison(self, numero: str, livraison_data: Dict) -> Dict: def modifier_livraison(self, numero: str, livraison_data: Dict) -> Dict:
""" """
Modification d'une livraison existante Modification d'une livraison existante
""" """
return self._post("/sage/livraisons/update", { return self._post(
"numero": numero, "/sage/livraisons/update",
"livraison_data": livraison_data {"numero": numero, "livraison_data": livraison_data},
}).get("data", {}) ).get("data", {})
def creer_avoir(self, avoir_data: Dict) -> Dict: def creer_avoir(self, avoir_data: Dict) -> Dict:
""" """
Création d'un avoir (Bon d'avoir) Création d'un avoir (Bon d'avoir)
Args: Args:
avoir_data: Dictionnaire contenant: avoir_data: Dictionnaire contenant:
- client_id (str): Code du client - client_id (str): Code du client
@ -475,17 +468,16 @@ class SageGatewayClient:
- quantite (float) - quantite (float)
- prix_unitaire_ht (float, optional) - prix_unitaire_ht (float, optional)
- remise_pourcentage (float, optional) - remise_pourcentage (float, optional)
Returns: Returns:
Avoir créé avec son numéro et ses totaux Avoir créé avec son numéro et ses totaux
""" """
return self._post("/sage/avoirs/create", avoir_data).get("data", {}) return self._post("/sage/avoirs/create", avoir_data).get("data", {})
def modifier_avoir(self, numero: str, avoir_data: Dict) -> Dict: def modifier_avoir(self, numero: str, avoir_data: Dict) -> Dict:
""" """
Modification d'un avoir existant Modification d'un avoir existant
Args: Args:
numero: Numéro de l'avoir à modifier numero: Numéro de l'avoir à modifier
avoir_data: Dictionnaire contenant les champs à modifier: avoir_data: Dictionnaire contenant les champs à modifier:
@ -493,20 +485,18 @@ class SageGatewayClient:
- lignes (List, optional): Nouvelles lignes - lignes (List, optional): Nouvelles lignes
- statut (int, optional): Nouveau statut - statut (int, optional): Nouveau statut
- reference (str, optional): Nouvelle référence - reference (str, optional): Nouvelle référence
Returns: Returns:
Avoir modifié avec totaux recalculés Avoir modifié avec totaux recalculés
""" """
return self._post("/sage/avoirs/update", { return self._post(
"numero": numero, "/sage/avoirs/update", {"numero": numero, "avoir_data": avoir_data}
"avoir_data": avoir_data ).get("data", {})
}).get("data", {})
def creer_facture(self, facture_data: Dict) -> Dict: def creer_facture(self, facture_data: Dict) -> Dict:
""" """
Création d'une facture Création d'une facture
Args: Args:
facture_data: Dictionnaire contenant: facture_data: Dictionnaire contenant:
- client_id (str): Code du client - client_id (str): Code du client
@ -517,17 +507,16 @@ class SageGatewayClient:
- quantite (float) - quantite (float)
- prix_unitaire_ht (float, optional) - prix_unitaire_ht (float, optional)
- remise_pourcentage (float, optional) - remise_pourcentage (float, optional)
Returns: Returns:
Facture créée avec son numéro et ses totaux Facture créée avec son numéro et ses totaux
""" """
return self._post("/sage/factures/create", facture_data).get("data", {}) return self._post("/sage/factures/create", facture_data).get("data", {})
def modifier_facture(self, numero: str, facture_data: Dict) -> Dict: def modifier_facture(self, numero: str, facture_data: Dict) -> Dict:
""" """
Modification d'une facture existante Modification d'une facture existante
Args: Args:
numero: Numéro de la facture à modifier numero: Numéro de la facture à modifier
facture_data: Dictionnaire contenant les champs à modifier: facture_data: Dictionnaire contenant les champs à modifier:
@ -535,21 +524,20 @@ class SageGatewayClient:
- lignes (List, optional): Nouvelles lignes - lignes (List, optional): Nouvelles lignes
- statut (int, optional): Nouveau statut - statut (int, optional): Nouveau statut
- reference (str, optional): Nouvelle référence - reference (str, optional): Nouvelle référence
Returns: Returns:
Facture modifiée avec totaux recalculés Facture modifiée avec totaux recalculés
""" """
return self._post("/sage/factures/update", { return self._post(
"numero": numero, "/sage/factures/update", {"numero": numero, "facture_data": facture_data}
"facture_data": facture_data ).get("data", {})
}).get("data", {})
def generer_pdf_document(self, doc_id: str, type_doc: int) -> bytes: def generer_pdf_document(self, doc_id: str, type_doc: int) -> bytes:
""" """
🆕 Génère le PDF d'un document via la gateway Windows (route généralisée) 🆕 Génère le PDF d'un document via la gateway Windows (route généralisée)
**Cette méthode remplace les appels spécifiques par type de document** **Cette méthode remplace les appels spécifiques par type de document**
Args: Args:
doc_id: Numéro du document (ex: "DE00001", "FA00001") doc_id: Numéro du document (ex: "DE00001", "FA00001")
type_doc: Type de document Sage: type_doc: Type de document Sage:
@ -558,14 +546,14 @@ class SageGatewayClient:
- 30: Bon de livraison - 30: Bon de livraison
- 60: Facture - 60: Facture
- 50: Bon d'avoir - 50: Bon d'avoir
Returns: Returns:
bytes: Contenu du PDF (binaire) bytes: Contenu du PDF (binaire)
Raises: Raises:
ValueError: Si le PDF retourné est vide ValueError: Si le PDF retourné est vide
RuntimeError: Si erreur de communication avec la gateway RuntimeError: Si erreur de communication avec la gateway
Example: Example:
>>> pdf_bytes = sage_client.generer_pdf_document("DE00001", 0) >>> pdf_bytes = sage_client.generer_pdf_document("DE00001", 0)
>>> with open("devis.pdf", "wb") as f: >>> with open("devis.pdf", "wb") as f:
@ -573,59 +561,55 @@ class SageGatewayClient:
""" """
try: try:
logger.info(f"📄 Demande génération PDF: doc_id={doc_id}, type={type_doc}") logger.info(f"📄 Demande génération PDF: doc_id={doc_id}, type={type_doc}")
# Appel HTTP vers la gateway Windows # Appel HTTP vers la gateway Windows
r = requests.post( r = requests.post(
f"{self.url}/sage/documents/generate-pdf", f"{self.url}/sage/documents/generate-pdf",
json={ json={"doc_id": doc_id, "type_doc": type_doc},
"doc_id": doc_id,
"type_doc": type_doc
},
headers=self.headers, headers=self.headers,
timeout=60 # Timeout élevé pour génération PDF timeout=60, # Timeout élevé pour génération PDF
) )
r.raise_for_status() r.raise_for_status()
import base64 import base64
response_data = r.json() response_data = r.json()
# Vérifier que la réponse contient bien le PDF # Vérifier que la réponse contient bien le PDF
if not response_data.get("success"): if not response_data.get("success"):
error_msg = response_data.get("error", "Erreur inconnue") error_msg = response_data.get("error", "Erreur inconnue")
raise RuntimeError(f"Gateway a retourné une erreur: {error_msg}") raise RuntimeError(f"Gateway a retourné une erreur: {error_msg}")
pdf_base64 = response_data.get("data", {}).get("pdf_base64", "") pdf_base64 = response_data.get("data", {}).get("pdf_base64", "")
if not pdf_base64: if not pdf_base64:
raise ValueError( raise ValueError(
f"PDF vide retourné par la gateway pour {doc_id} (type {type_doc})" f"PDF vide retourné par la gateway pour {doc_id} (type {type_doc})"
) )
# Décoder le base64 # Décoder le base64
pdf_bytes = base64.b64decode(pdf_base64) pdf_bytes = base64.b64decode(pdf_base64)
logger.info(f"✅ PDF décodé: {len(pdf_bytes)} octets") logger.info(f"✅ PDF décodé: {len(pdf_bytes)} octets")
return pdf_bytes return pdf_bytes
except requests.exceptions.Timeout: except requests.exceptions.Timeout:
logger.error(f"⏱️ Timeout génération PDF pour {doc_id}") logger.error(f"⏱️ Timeout génération PDF pour {doc_id}")
raise RuntimeError( raise RuntimeError(
f"Timeout lors de la génération du PDF (>60s). " f"Timeout lors de la génération du PDF (>60s). "
f"Le document {doc_id} est peut-être trop volumineux." f"Le document {doc_id} est peut-être trop volumineux."
) )
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
logger.error(f"❌ Erreur HTTP génération PDF: {e}") logger.error(f"❌ Erreur HTTP génération PDF: {e}")
raise RuntimeError(f"Erreur de communication avec la gateway: {str(e)}") raise RuntimeError(f"Erreur de communication avec la gateway: {str(e)}")
except Exception as e: except Exception as e:
logger.error(f"❌ Erreur génération PDF: {e}", exc_info=True) logger.error(f"❌ Erreur génération PDF: {e}", exc_info=True)
raise raise
# Instance globale # Instance globale
sage_client = SageGatewayClient() sage_client = SageGatewayClient()