import sys
import os
import re
from [Link] import (
QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton,
QLineEdit, QTextEdit, QFileDialog, QTabWidget, QMessageBox, QGroupBox
)
from [Link] import Qt, QThread, pyqtSignal
from MTM_Extract_Function import extraire_donnees_use_case, generer_tableau_html
class ReportGenerator(QThread):
progress_update = pyqtSignal(str)
report_generated = pyqtSignal(str, str)
error_occurred = pyqtSignal(str)
def __init__(self, data_file, uc_number=None, dat_file=None):
super().__init__()
self.data_file = data_file
self.uc_number = uc_number
self.dat_file = dat_file
def run(self):
try:
if self.uc_number:
self.progress_update.emit(f"Extraction UC {self.uc_number}...")
donnees = extraire_donnees_use_case(self.data_file, self.uc_number)
html = generer_tableau_html(donnees, chemin_test=self.data_file)
path = f"Rapport_MTM_UC{self.uc_number}.html"
with open(path, "w", encoding="utf-8") as f:
[Link](html)
self.report_generated.emit(str(self.uc_number), path)
elif self.dat_file:
match = [Link](r'UC(\d+)', [Link](self.dat_file))
if not match:
self.error_occurred.emit("Numéro UC non détecté dans le nom du
fichier")
return
uc_number = int([Link](1))
self.progress_update.emit(f"UC {uc_number} détecté")
donnees = extraire_donnees_use_case(self.data_file, uc_number)
html = generer_tableau_html(donnees, chemin_test=self.dat_file)
path = f"Rapport_Auto_UC{uc_number}.html"
with open(path, "w", encoding="utf-8") as f:
[Link](html)
self.report_generated.emit(str(uc_number), path)
except Exception as e:
self.error_occurred.emit(str(e))
class MTMUniversalInterface(QWidget):
def __init__(self):
super().__init__()
[Link]("MTM Universal Interface - Générateur de Rapports")
[Link](100, 100, 700, 500)
[Link]("background-color: #f7f9fc;")
self.data_file = None
self.dat_file = None
layout = QVBoxLayout()
tabs = QTabWidget()
[Link]("QTabBar::tab { background: #e0e0e0; padding: 10px; }
QTabBar::tab:selected { background: #005BAC; color: white; }")
manual_tab = QWidget()
manual_layout = QVBoxLayout()
group_data = QGroupBox("Configuration des données")
group_data_layout = QVBoxLayout()
self.excel_label = QLabel("Aucun fichier Excel sélectionné")
self.excel_label.setStyleSheet("color: #333; font-weight: bold;")
excel_btn = QPushButton("Sélectionner CSV/Excel")
excel_btn.setStyleSheet("background-color: #005BAC; color: white; padding:
8px; border-radius: 5px;")
excel_btn.[Link](self.select_excel)
group_data_layout.addWidget(excel_btn)
group_data_layout.addWidget(self.excel_label)
group_data.setLayout(group_data_layout)
manual_layout.addWidget(group_data)
group_gen = QGroupBox("Génération de rapport manuel")
group_gen_layout = QHBoxLayout()
self.uc_input = QLineEdit()
self.uc_input.setPlaceholderText("Use Case")
self.uc_input.setStyleSheet("padding: 6px; border: 1px solid #ccc; border-
radius: 4px;")
manual_btn = QPushButton("Générer rapport")
manual_btn.setStyleSheet("background-color: #007A2F; color: white; padding:
8px; border-radius: 5px;")
manual_btn.[Link](self.generate_manual)
group_gen_layout.addWidget(QLabel("Use Case:"))
group_gen_layout.addWidget(self.uc_input)
group_gen_layout.addWidget(manual_btn)
group_gen.setLayout(group_gen_layout)
manual_layout.addWidget(group_gen)
manual_tab.setLayout(manual_layout)
auto_tab = QWidget()
auto_layout = QVBoxLayout()
group_auto = QGroupBox("Génération automatique depuis fichier DAT")
group_auto_layout = QVBoxLayout()
self.dat_label = QLabel("Aucun fichier DAT sélectionné")
self.dat_label.setStyleSheet("color: #333; font-weight: bold;")
dat_btn = QPushButton("Sélectionner fichier .dat")
dat_btn.setStyleSheet("background-color: #ff9800; color: white; padding:
8px; border-radius: 5px;")
dat_btn.[Link](self.select_dat)
auto_btn = QPushButton("Générer rapport auto")
auto_btn.setStyleSheet("background-color: #9b59b6; color: white; padding:
8px; border-radius: 5px;")
auto_btn.[Link](self.generate_auto)
group_auto_layout.addWidget(dat_btn)
group_auto_layout.addWidget(self.dat_label)
group_auto_layout.addWidget(auto_btn)
group_auto.setLayout(group_auto_layout)
auto_layout.addWidget(group_auto)
auto_tab.setLayout(auto_layout)
[Link](manual_tab, "Mode Manuel")
[Link](auto_tab, "Mode Automatique")
[Link](tabs)
group_status = QGroupBox("Progression et résultats")
group_status_layout = QVBoxLayout()
[Link] = QTextEdit()
[Link](True)
[Link]("background-color: #f5f7fa; border: 1px solid
#ccc; border-radius: 5px;")
group_status_layout.addWidget([Link])
group_status.setLayout(group_status_layout)
[Link](group_status)
[Link](layout)
def select_excel(self):
path, _ = [Link](self, "Excel", "", "Excel Files
(*.xlsx *.xls)")
if path:
self.data_file = path
self.excel_label.setText([Link](path))
[Link](f"Excel sélectionné : {path}")
def select_dat(self):
path, _ = [Link](self, "DAT", "", "DAT Files (*.dat)")
if path:
self.dat_file = path
self.dat_label.setText([Link](path))
[Link](f"Fichier DAT sélectionné : {path}")
def generate_manual(self):
if not self.data_file:
[Link](self, "Erreur", "Veuillez sélectionner un fichier
Excel.")
return
if not self.uc_input.text().isdigit():
[Link](self, "Erreur", "Veuillez entrer un numéro UC
valide.")
return
uc = int(self.uc_input.text())
[Link] = ReportGenerator(self.data_file, uc_number=uc)
self.connect_worker()
def generate_auto(self):
if not self.dat_file:
[Link](self, "Erreur", "Veuillez sélectionner un fichier
DAT.")
return
if not self.data_file:
[Link](self, "Erreur", "Veuillez d'abord sélectionner un
fichier Excel dans l'onglet manuel.")
return
[Link] = ReportGenerator(self.data_file, dat_file=self.dat_file)
self.connect_worker()
def connect_worker(self):
[Link].progress_update.connect([Link])
[Link].report_generated.connect(self.show_report)
[Link].error_occurred.connect(self.show_error)
[Link]()
def show_report(self, uc, path):
[Link](f"Rapport UC {uc} généré : {path}")
try:
[Link](path)
except:
pass
def show_error(self, msg):
[Link](f"Erreur : {msg}")
def main():
app = QApplication([Link])
window = MTMUniversalInterface()
[Link]()
[Link](app.exec_())
if __name__ == "__main__":
main()