88 lines
No EOL
3.8 KiB
Python
88 lines
No EOL
3.8 KiB
Python
def main():
|
|
print("=== Générateur de devis ===\n")
|
|
|
|
# Importation des modules nécessaires
|
|
from core.form import Form
|
|
from core.generator import Generator
|
|
from core.data import Data
|
|
import os
|
|
|
|
# On demande d'abord si le client existe déjà
|
|
client_name = input("Entrez le nom du client : ")
|
|
client_name = client_name.replace(" ", "_").lower() # Normaliser le nom du client
|
|
client_data_path = f"Data/clients/{client_name}.json"
|
|
if os.path.exists(client_data_path):
|
|
print(f"Le client {client_name} existe déjà. Chargement des données...")
|
|
data_manager = Data(client_data_path)
|
|
client_data = data_manager.load_data()
|
|
else:
|
|
print(f"Le client {client_name} n'existe pas. Création d'un nouveau client...")
|
|
#On charge le module proposition pour créer un nouveau client
|
|
from modules.proposition.app import main as generate_proposal
|
|
generate_proposal()
|
|
data_manager = Data(client_data_path)
|
|
client_data = data_manager.load_data()
|
|
print(f"Le client {client_name} a été créé avec succès.")
|
|
|
|
# On génère le devis via les données du client en servant du template "devis" du dossier Templates
|
|
if client_data:
|
|
print("\n=== Création du devis ===")
|
|
|
|
# Charger le modèle de devis
|
|
from core.generator import Generator
|
|
template_path = "Templates/devis.json"
|
|
|
|
# Préparer les champs pour le formulaire
|
|
fields = [
|
|
{"name": "numero", "label": "Numéro du devis", "type": "text"},
|
|
]
|
|
|
|
# Collecter les données via le formulaire
|
|
form = Form(fields)
|
|
form.ask()
|
|
form_data = form.get_data()
|
|
|
|
# Préparer les données du client pour le modèle
|
|
client_data_formatted = {
|
|
"client_name": client_data.get("client_name", ""),
|
|
"client_email": client_data.get("email", ""),
|
|
"client_phone": client_data.get("telephone", ""),
|
|
"client_adress": client_data.get("adresse", "")
|
|
}
|
|
|
|
# Récupérer les fonctionnalités du client
|
|
features = client_data.get("features", [])
|
|
if not isinstance(features, list):
|
|
print("Erreur : Les fonctionnalités du client ne sont pas correctement formatées. Elles seront ignorées.")
|
|
features = []
|
|
|
|
# Ajouter les services avec tarifs pour chaque fonctionnalité
|
|
services = []
|
|
for feature in features:
|
|
if isinstance(feature, dict): # Vérifier que 'feature' est un dictionnaire
|
|
description = feature.get("description", "")
|
|
prix_unitaire = float(input(f"Entrez le tarif pour la fonctionnalité '{description}' : "))
|
|
services.append({"description": description, "prix_unitaire": prix_unitaire})
|
|
else:
|
|
print(f"Erreur : La fonctionnalité '{feature}' n'est pas valide et sera ignorée.")
|
|
|
|
# Ajouter les données spécifiques au devis
|
|
devis_content = {
|
|
"numero": form_data["numero"],
|
|
"date": "11/05/2025",
|
|
"client": client_data_formatted, # Transmettre les données formatées du client
|
|
"services": services,
|
|
"total": sum(service["prix_unitaire"] for service in services)
|
|
}
|
|
|
|
# Générer le devis
|
|
output_path = f"devis"
|
|
try:
|
|
generator = Generator(devis_content, template_path)
|
|
generator.generate_facture(output_path)
|
|
print("\n✅ Devis généré avec succès.")
|
|
print(f"Le devis a été enregistré dans le dossier '{output_path}'.")
|
|
except Exception as e:
|
|
print(f"\n❌ Une erreur est survenue lors de la génération du devis : {e}")
|
|
else:
|
|
print("\n❌ Impossible de générer le devis car les données du client n'ont pas été chargées.") |