first commit

This commit is contained in:
mrtoine 2025-09-20 13:18:04 +02:00
commit e6c52820cd
227 changed files with 16156 additions and 0 deletions

88
modules/devis/app.py Normal file
View file

@ -0,0 +1,88 @@
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.")

0
modules/devis/fields.py Normal file
View file