manwidow.
pp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"client.h"
#include<QMessageBox>
#include<QIntValidator>
#include <QtCharts/QChartView>
#include <QtCharts/QPieSeries>
#include <QGraphicsScene>
#include <QSqlQuery>
#include <QFileDialog>
#include <QRegularExpression>
#include <QDate>
#include <QtDebug>
#include <QSqlError>
#include <QSqlQuery>
#include <QtCharts/QValueAxis>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarSeries>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
//m4
#include <QDebug>
#include <QCheckBox>
#include <QRadioButton>
#include <QString>
#include <QToolButton>
#include <QStandardItemModel>
#include <QDate>
#include <QTime>
#include <QDateTime>
#include <QDateEdit>
#include <QMainWindow>
#include <QSqlQueryModel>
#include <QModelIndexList>
#include <QTableView>
#include <QApplication>
#include <QPieSeries>
#include <QChartView>
#include <QGraphicsScene>
#include <QSqlQuery>
#include <QMap>
#include <QVector>
#include <QTableWidgetItem>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow), clientManager(), clientModel(new
QSqlQueryModel()), selectedClient(nullptr) {
ui->setupUi(this);
ui->tableView->setModel([Link]());
MainWindow::~MainWindow() {
delete ui;
delete clientModel;
void MainWindow::on_valider_clicked() {
if (ui->id_client->text().isEmpty() || ui->nom->text().isEmpty() ||
ui->prenom->text().isEmpty() || ui->telephone->text().isEmpty() ||
ui->email->text().isEmpty() || ui->adresse->text().isEmpty()) {
QMessageBox::warning(this, QObject::tr("Champs vides"),
QObject::tr("Veuillez remplir tous les champs."));
return;
}
bool ok;
int id_client = ui->id_client->text().toInt(&ok);
if (!ok || id_client <= 0) {
QMessageBox::warning(this, QObject::tr("Erreur d'ID"), QObject::tr("L'ID
doit être un nombre entier positif."));
return;
}
QString nom = ui->nom->text().trimmed();
QString prenom = ui->prenom->text().trimmed();
QString telephoneStr = ui->telephone->text();
if ([Link]() != 8 ||  || !ok) {
QMessageBox::warning(this, QObject::tr("Erreur de téléphone"),
QObject::tr("Le téléphone doit être composé de 8 chiffres."));
return;
}
int telephone = [Link]();
QString email = ui->email->text();
QRegularExpression emailRegex("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com$");
if (.hasMatch()) {
QMessageBox::warning(this, QObject::tr("Erreur d'email"),
QObject::tr("L'email doit être au format [Link]@[Link]."));
return;
}
QString adresse = ui->adresse->text();
// Vérifications supplémentaires pour l'adresse peuvent être ajoutées ici.
Client newClient(id_client, nom, prenom, telephone, email, adresse);
if ([Link]()) {
QMessageBox::information(this, QObject::tr("Ajout Réussi"),
QObject::tr("L'ajout du client a été effectué avec succès."));
} else {
QMessageBox::critical(this, QObject::tr("Ajout Échoué"),
QObject::tr("L'ajout du client a échoué."));
}
updateTable();
}
void MainWindow::on_annuler_clicked()
{
ui->id_client->clear();
ui->nom->clear();
ui->prenom->clear();
ui->telephone->clear();
ui->email->clear();
ui->adresse->clear();
}
void MainWindow::on_supprimer_clicked() {
QModelIndexList selectedIndexes = ui->tableView->selectionModel()-
>selectedRows();
if ([Link]()) {
QMessageBox::warning(this, QObject::tr("Aucune sélection"),
QObject::tr("Veuillez sélectionner un client dans la table."));
return;
}
int row = [Link]().row();
int id_client = clientModel->data(clientModel->index(row, 0)).toInt();
qDebug() << "ID du client à supprimer:" << id_client; // Ajouté pour débogage
if (QMessageBox::question(this, QObject::tr("Confirmer la suppression"),
QObject::tr("Êtes-vous sûr de vouloir supprimer ce
client ?"),
QMessageBox::Yes | QMessageBox::No) ==
QMessageBox::No) {
return; // Si l'utilisateur annule, sortir de la fonction
}
if ([Link](id_client)) {
QMessageBox::information(this, QObject::tr("Suppression Réussie"),
QObject::tr("La suppression du client a été effectuée avec succès."));
} else {
QMessageBox::critical(this, QObject::tr("Suppression Échouée"),
QObject::tr("La suppression du client a échoué. Vérifiez que l'ID est correct."));
qDebug() << "Erreur de suppression. Vérifiez la méthode 'supprimer'."; //
Ajouté pour débogage
}
updateTable();
}
void MainWindow::on_afficher_clicked() {
updateTable();
}
void MainWindow::updateTable() {
delete clientModel;
clientModel = [Link]();
if (clientModel) {
ui->tableView->setModel(clientModel);
}
}
Client* MainWindow::getSelectedClient() {
QModelIndexList selectedIndexes = ui->tableView->selectionModel()-
>selectedRows();
if (![Link]()) {
int row = [Link]().row();
int id_client = clientModel->data(clientModel->index(row, 0)).toInt();
QString nom = clientModel->data(clientModel->index(row, 1)).toString();
QString prenom = clientModel->data(clientModel->index(row, 2)).toString();
QString adresse = clientModel->data(clientModel->index(row, 5)).toString();
QString email = clientModel->data(clientModel->index(row, 4)).toString();
int telephone = clientModel->data(clientModel->index(row, 3)).toInt();
return new Client(id_client, nom, prenom, telephone, email, adresse);
}
return nullptr;
}
void MainWindow::updateClient(Client* client) {
if (!client) {
QMessageBox::warning(this, QObject::tr("Erreur"), QObject::tr("Client
invalide. Aucune mise à jour effectuée."));
return;
}
// Récupérer les nouvelles informations à partir des champs de saisie
QString nom = ui->nom->text();
QString prenom = ui->prenom->text();
int telephone = ui->telephone->text().toInt();
QString email = ui->email->text();
QString adresse = ui->adresse->text();
// Mettre à jour le client existant
QSqlQuery updateQuery;
[Link]("UPDATE client SET nom = :nom, prenom = :prenom, telephone
= :telephone, email = :email, adresse = :adresse WHERE id_client = :id_client");
[Link](":nom", nom);
[Link](":prenom", prenom);
[Link](":telephone", telephone);
[Link](":email", email);
[Link](":adresse", adresse);
[Link](":id_client", client->getIdClient());
if (![Link]()) {
qDebug() << "Erreur lors de la mise à jour du client:" <<
[Link]().text();
QMessageBox::critical(this, QObject::tr("Erreur de mise à jour"),
QObject::tr("La mise à jour du client a échoué."));
return; // Sortir si la mise à jour échoue
}
void MainWindow::on_modifier_clicked()
{
selectedClient = getSelectedClient();
if (!selectedClient) {
QMessageBox::warning(this, QObject::tr("Aucun client sélectionné"),
QObject::tr("Veuillez sélectionner un client dans la table."));
return;
}
displayClientDetails(selectedClient);
updateClient(selectedClient);
int idClientToDelete = selectedClient->getIdClient();
QSqlQuery deleteQuery;
[Link]("DELETE FROM client WHERE id_client = :id_client");
[Link](":id_client", idClientToDelete);
if (![Link]()) {
qDebug() << "Erreur lors de la suppression du client:" <<
[Link]().text();
QMessageBox::critical(this, QObject::tr("Erreur de suppression"),
QObject::tr("La suppression du client a échoué."));
}
updateTable();
}
void MainWindow::displayClientDetails(Client *client) {
if (client) {
ui->id_client->setText(QString::number(client->getIdClient()));
ui->nom->setText(client->getNom());
ui->prenom->setText(client->getPrenom());
ui->adresse->setText(client->getAdresse()); // Adresse ici
ui->email->setText(client->getEmail()); // Email ici
ui->telephone->setText(QString::number(client->getTelephone())); //
Téléphone ici
}
}
//
m5/////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////
void MainWindow::checkClientsInDatabase() {
if (!QSqlDatabase::database().isOpen()) {
qDebug() << "Erreur : La connexion à la base de données est fermée.";
return;
} else {
qDebug() << "Connexion à la base de données est active.";
}
QSqlQuery query("SELECT id_client, nom FROM client");
if (![Link]()) {
qDebug() << "Erreur lors de l'exécution de la requête : " <<
[Link]();
qDebug() << "Erreur SQL : " << [Link]().text();
return;
}
QStandardItemModel *model = new QStandardItemModel(this);
model->setHorizontalHeaderLabels({"ID Client", "Nom"});
while ([Link]()) {
int id_client = [Link](0).toInt();
QString nom = [Link](1).toString();
QList<QStandardItem *> rowItems;
[Link](new QStandardItem(QString::number(id_client)));
[Link](new QStandardItem(nom));
model->appendRow(rowItems);
}
ui->tableView4->setModel(model);
if (model->rowCount() > 0) {
qDebug() << "Données des clients affichées avec succès.";
} else {
qDebug() << "Aucune donnée à afficher dans checkClientsInDatabase.";
}
}
void MainWindow::afficherFideliteClients() {
// Créer le modèle pour afficher les données
QStandardItemModel *model = new QStandardItemModel(this);
model->setHorizontalHeaderLabels({"ID Client", "Nom", "Total Commandes",
"Nombre Commandes", "Points de Fidélité"});
// Requête pour récupérer les clients et leurs commandes
QSqlQuery query("SELECT c.id_client, [Link], "
"COALESCE(SUM(co.prix_commande), 0) AS total_commandes, "
"COALESCE(COUNT(co.id_commande), 0) AS nombre_commandes "
"FROM client c "
"LEFT JOIN commandes co ON c.id_client = co.id_client "
"GROUP BY c.id_client, [Link]");
while ([Link]()) {
int id_client = [Link](0).toInt();
QString nom = [Link](1).toString();
double total_commandes = [Link](2).toDouble();
int nombre_commandes = [Link](3).toInt();
// Calculer les points de fidélité
const int points_par_euro = 1;
const int bonus_par_commande = 5;
int points_commande = static_cast<int>(total_commandes * points_par_euro);
int bonus_fidelite = (nombre_commandes - 1) * bonus_par_commande;
int points_fidelite = points_commande + bonus_fidelite;
// Ajouter les données au modèle
QList<QStandardItem *> rowItems;
[Link](new QStandardItem(QString::number(id_client)));
[Link](new QStandardItem(nom));
[Link](new QStandardItem(QString::number(total_commandes, 'f',
2)));
[Link](new QStandardItem(QString::number(nombre_commandes)));
[Link](new QStandardItem(QString::number(points_fidelite)));
model->appendRow(rowItems);
}
// Vérifier si le modèle contient des données
if (model->rowCount() > 0) {
ui->tableView4->setModel(model);
} else {
// Si aucune donnée n'est renvoyée, afficher tous les clients
checkClientsInDatabase();
}
}
void MainWindow::on_fideliter_clicked() {
afficherFideliteClients();
}