edited pydantic schemas to permit date_livraison and date_expedition gathering
This commit is contained in:
parent
c840cd5035
commit
f0c84c9cb6
2 changed files with 513 additions and 303 deletions
47
main.py
47
main.py
|
|
@ -63,6 +63,8 @@ class ChampLibreRequest(BaseModel):
|
||||||
class DevisRequest(BaseModel):
|
class DevisRequest(BaseModel):
|
||||||
client_id: str
|
client_id: str
|
||||||
date_devis: Optional[date] = None
|
date_devis: Optional[date] = None
|
||||||
|
date_livraison: Optional[date] = None
|
||||||
|
date_expedition: Optional[date] = None
|
||||||
reference: Optional[str] = None
|
reference: Optional[str] = None
|
||||||
lignes: List[Dict]
|
lignes: List[Dict]
|
||||||
|
|
||||||
|
|
@ -145,6 +147,8 @@ class CommandeCreateRequest(BaseModel):
|
||||||
|
|
||||||
client_id: str
|
client_id: str
|
||||||
date_commande: Optional[date] = None
|
date_commande: Optional[date] = None
|
||||||
|
date_livraison: Optional[date] = None
|
||||||
|
date_expedition: Optional[date] = None
|
||||||
reference: Optional[str] = None
|
reference: Optional[str] = None
|
||||||
lignes: List[Dict]
|
lignes: List[Dict]
|
||||||
|
|
||||||
|
|
@ -161,6 +165,8 @@ class LivraisonCreateGatewayRequest(BaseModel):
|
||||||
|
|
||||||
client_id: str
|
client_id: str
|
||||||
date_livraison: Optional[date] = None
|
date_livraison: Optional[date] = None
|
||||||
|
date_livraison_prevue: Optional[date] = None
|
||||||
|
date_expedition: Optional[date] = None
|
||||||
lignes: List[Dict]
|
lignes: List[Dict]
|
||||||
reference: Optional[str] = None
|
reference: Optional[str] = None
|
||||||
|
|
||||||
|
|
@ -177,6 +183,8 @@ class AvoirCreateGatewayRequest(BaseModel):
|
||||||
|
|
||||||
client_id: str
|
client_id: str
|
||||||
date_avoir: Optional[date] = None
|
date_avoir: Optional[date] = None
|
||||||
|
date_livraison: Optional[date] = None
|
||||||
|
date_expedition: Optional[date] = None
|
||||||
lignes: List[Dict]
|
lignes: List[Dict]
|
||||||
reference: Optional[str] = None
|
reference: Optional[str] = None
|
||||||
|
|
||||||
|
|
@ -193,6 +201,8 @@ class FactureCreateGatewayRequest(BaseModel):
|
||||||
|
|
||||||
client_id: str
|
client_id: str
|
||||||
date_facture: Optional[date] = None
|
date_facture: Optional[date] = None
|
||||||
|
date_livraison: Optional[date] = None
|
||||||
|
date_expedition: Optional[date] = None
|
||||||
lignes: List[Dict]
|
lignes: List[Dict]
|
||||||
reference: Optional[str] = None
|
reference: Optional[str] = None
|
||||||
|
|
||||||
|
|
@ -513,6 +523,8 @@ def creer_devis(req: DevisRequest):
|
||||||
devis_data = {
|
devis_data = {
|
||||||
"client": {"code": req.client_id, "intitule": ""},
|
"client": {"code": req.client_id, "intitule": ""},
|
||||||
"date_devis": req.date_devis or date.today(),
|
"date_devis": req.date_devis or date.today(),
|
||||||
|
"date_livraison": req.date_livraison or date.today(),
|
||||||
|
"date_expedition": req.date_expedition or date.today(),
|
||||||
"reference": req.reference,
|
"reference": req.reference,
|
||||||
"lignes": req.lignes,
|
"lignes": req.lignes,
|
||||||
}
|
}
|
||||||
|
|
@ -1041,6 +1053,8 @@ def creer_commande_endpoint(req: CommandeCreateRequest):
|
||||||
commande_data = {
|
commande_data = {
|
||||||
"client": {"code": req.client_id, "intitule": ""},
|
"client": {"code": req.client_id, "intitule": ""},
|
||||||
"date_commande": req.date_commande or date.today(),
|
"date_commande": req.date_commande or date.today(),
|
||||||
|
"date_livraison": req.date_livraison or date.today(),
|
||||||
|
"date_expedition": req.date_expedition or date.today(),
|
||||||
"reference": req.reference,
|
"reference": req.reference,
|
||||||
"lignes": req.lignes,
|
"lignes": req.lignes,
|
||||||
}
|
}
|
||||||
|
|
@ -1082,6 +1096,8 @@ def creer_livraison_endpoint(req: LivraisonCreateGatewayRequest):
|
||||||
livraison_data = {
|
livraison_data = {
|
||||||
"client": {"code": req.client_id, "intitule": ""},
|
"client": {"code": req.client_id, "intitule": ""},
|
||||||
"date_livraison": req.date_livraison or date.today(),
|
"date_livraison": req.date_livraison or date.today(),
|
||||||
|
"date_livraison_prevue": req.date_livraison or date.today(),
|
||||||
|
"date_expedition": req.date_expedition or date.today(),
|
||||||
"reference": req.reference,
|
"reference": req.reference,
|
||||||
"lignes": req.lignes,
|
"lignes": req.lignes,
|
||||||
}
|
}
|
||||||
|
|
@ -1123,6 +1139,8 @@ def creer_avoir_endpoint(req: AvoirCreateGatewayRequest):
|
||||||
avoir_data = {
|
avoir_data = {
|
||||||
"client": {"code": req.client_id, "intitule": ""},
|
"client": {"code": req.client_id, "intitule": ""},
|
||||||
"date_avoir": req.date_avoir or date.today(),
|
"date_avoir": req.date_avoir or date.today(),
|
||||||
|
"date_livraison": req.date_livraison or date.today(),
|
||||||
|
"date_expedition": req.date_expedition or date.today(),
|
||||||
"reference": req.reference,
|
"reference": req.reference,
|
||||||
"lignes": req.lignes,
|
"lignes": req.lignes,
|
||||||
}
|
}
|
||||||
|
|
@ -1167,6 +1185,8 @@ def creer_facture_endpoint(req: FactureCreateGatewayRequest):
|
||||||
facture_data = {
|
facture_data = {
|
||||||
"client": {"code": req.client_id, "intitule": ""},
|
"client": {"code": req.client_id, "intitule": ""},
|
||||||
"date_facture": req.date_facture or date.today(),
|
"date_facture": req.date_facture or date.today(),
|
||||||
|
"date_livraison": req.date_livraison or date.today(),
|
||||||
|
"date_expedition": req.date_expedition or date.today(),
|
||||||
"reference": req.reference,
|
"reference": req.reference,
|
||||||
"lignes": req.lignes,
|
"lignes": req.lignes,
|
||||||
}
|
}
|
||||||
|
|
@ -1615,16 +1635,14 @@ def lire_mouvement_stock(numero: str):
|
||||||
logger.error(f"❌ Erreur lecture mouvement : {e}")
|
logger.error(f"❌ Erreur lecture mouvement : {e}")
|
||||||
raise HTTPException(500, str(e))
|
raise HTTPException(500, str(e))
|
||||||
|
|
||||||
|
|
||||||
@app.get("/sage/modeles/list")
|
@app.get("/sage/modeles/list")
|
||||||
def lister_modeles_disponibles():
|
def lister_modeles_disponibles():
|
||||||
"""Liste tous les modèles .bgc disponibles pour chaque type de document"""
|
"""Liste tous les modèles .bgc disponibles pour chaque type de document"""
|
||||||
try:
|
try:
|
||||||
modeles = sage.lister_modeles_crystal()
|
modeles = sage.lister_modeles_crystal()
|
||||||
|
|
||||||
return {
|
return {"success": True, "data": modeles}
|
||||||
"success": True,
|
|
||||||
"data": modeles
|
|
||||||
}
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"❌ Erreur listage modèles: {e}")
|
logger.error(f"❌ Erreur listage modèles: {e}")
|
||||||
raise HTTPException(500, str(e))
|
raise HTTPException(500, str(e))
|
||||||
|
|
@ -1635,20 +1653,20 @@ def generer_pdf_document(
|
||||||
numero: str,
|
numero: str,
|
||||||
type_doc: int = Query(..., description="Type document (0=devis, 60=facture, etc.)"),
|
type_doc: int = Query(..., description="Type document (0=devis, 60=facture, etc.)"),
|
||||||
modele: str = Query(None, description="Nom du modèle .bgc (optionnel)"),
|
modele: str = Query(None, description="Nom du modèle .bgc (optionnel)"),
|
||||||
base64_encode: bool = Query(True, description="Retourner en base64")
|
base64_encode: bool = Query(True, description="Retourner en base64"),
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
📄 Génère un PDF d'un document Sage avec le modèle spécifié
|
📄 Génère un PDF d'un document Sage avec le modèle spécifié
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# ✅ LOG pour debug
|
# ✅ LOG pour debug
|
||||||
logger.info(f"📄 PDF Request: numero={numero}, type={type_doc}, modele={modele}, base64={base64_encode}")
|
logger.info(
|
||||||
|
f"📄 PDF Request: numero={numero}, type={type_doc}, modele={modele}, base64={base64_encode}"
|
||||||
|
)
|
||||||
|
|
||||||
# Générer le PDF
|
# Générer le PDF
|
||||||
pdf_bytes = sage.generer_pdf_document(
|
pdf_bytes = sage.generer_pdf_document(
|
||||||
numero=numero,
|
numero=numero, type_doc=type_doc, modele=modele
|
||||||
type_doc=type_doc,
|
|
||||||
modele=modele
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if not pdf_bytes:
|
if not pdf_bytes:
|
||||||
|
|
@ -1660,7 +1678,8 @@ def generer_pdf_document(
|
||||||
if base64_encode:
|
if base64_encode:
|
||||||
# Retour en JSON avec base64
|
# Retour en JSON avec base64
|
||||||
import base64
|
import base64
|
||||||
pdf_base64 = base64.b64encode(pdf_bytes).decode('utf-8')
|
|
||||||
|
pdf_base64 = base64.b64encode(pdf_bytes).decode("utf-8")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"success": True,
|
"success": True,
|
||||||
|
|
@ -1670,8 +1689,8 @@ def generer_pdf_document(
|
||||||
"modele": modele or "défaut",
|
"modele": modele or "défaut",
|
||||||
"pdf_base64": pdf_base64,
|
"pdf_base64": pdf_base64,
|
||||||
"size_bytes": len(pdf_bytes),
|
"size_bytes": len(pdf_bytes),
|
||||||
"size_readable": f"{len(pdf_bytes) / 1024:.1f} KB"
|
"size_readable": f"{len(pdf_bytes) / 1024:.1f} KB",
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
# Retour direct du fichier PDF
|
# Retour direct du fichier PDF
|
||||||
|
|
@ -1682,8 +1701,8 @@ def generer_pdf_document(
|
||||||
media_type="application/pdf",
|
media_type="application/pdf",
|
||||||
headers={
|
headers={
|
||||||
"Content-Disposition": f'inline; filename="{numero}.pdf"',
|
"Content-Disposition": f'inline; filename="{numero}.pdf"',
|
||||||
"Content-Length": str(len(pdf_bytes)) # ✅ Taille explicite
|
"Content-Length": str(len(pdf_bytes)), # ✅ Taille explicite
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
except HTTPException:
|
except HTTPException:
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue