PDLA_24/src/main/java/controller/Validateur.java

150 lines
5.8 KiB
Java

package controller;
import database.DatabaseConnection;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Validateur extends JFrame {
private JTable table;
private DefaultTableModel tableModel;
private JButton validerButton;
private JButton rejeterButton; // Nouveau bouton pour rejeter
private JButton retourButton; // Bouton pour retourner à la connexion
private int utilisateurId;
public Validateur(int utilisateurId) {
this.utilisateurId = utilisateurId;
setTitle("Page de validation des demandes");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// Tableau pour afficher les demandes
tableModel = new DefaultTableModel(new String[]{"ID", "Description", "Statut"}, 0);
table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table);
// Boutons pour valider, rejeter et retourner
validerButton = new JButton("Valider la demande");
rejeterButton = new JButton("Rejeter la demande"); // Ajout du bouton pour rejeter
retourButton = new JButton("Retour à la connexion");
JPanel buttonPanel = new JPanel();
buttonPanel.add(validerButton);
buttonPanel.add(rejeterButton); // Ajouter le bouton de rejet
buttonPanel.add(retourButton);
getContentPane().add(scrollPane, "Center");
getContentPane().add(buttonPanel, "South");
// Charger les demandes en attente
loadDemandesEnAttente();
// ActionListener pour valider une demande
validerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
validerDemande();
}
});
// ActionListener pour rejeter une demande
rejeterButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
rejeterDemande();
}
});
// ActionListener pour retourner à la page de connexion
retourButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LoginPage loginPage = new LoginPage();
loginPage.setVisible(true);
dispose(); // Fermer la page validateur
}
});
}
// Méthode pour charger les demandes en attente
private void loadDemandesEnAttente() {
try (Connection connection = DatabaseConnection.getConnection()) {
String sql = "SELECT id, description, statut FROM demandes_aide WHERE statut = 'soumise'";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
tableModel.setRowCount(0);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String description = resultSet.getString("description");
String statut = resultSet.getString("statut");
tableModel.addRow(new Object[]{id, description, statut});
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// Méthode pour valider une demande
private void validerDemande() {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande à valider.");
return;
}
int demandeId = (int) tableModel.getValueAt(selectedRow, 0);
try (Connection connection = DatabaseConnection.getConnection()) {
String sql = "UPDATE demandes_aide SET statut = 'acceptée' WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, demandeId);
statement.executeUpdate();
JOptionPane.showMessageDialog(this, "Demande validée avec succès.");
loadDemandesEnAttente(); // Recharger les demandes
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Erreur lors de la validation de la demande.");
}
}
// Méthode pour rejeter une demande
void rejeterDemande() {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande à rejeter.");
return;
}
int demandeId = (int) tableModel.getValueAt(selectedRow, 0);
String motif_rejet = JOptionPane.showInputDialog(this, "Veuillez entrer un motif de rejet (500 caractères max):", "Motif de rejet", JOptionPane.PLAIN_MESSAGE);
if (!motif_rejet.isEmpty()) {
try (Connection connection = DatabaseConnection.getConnection()) {
String sql = "UPDATE demandes_aide SET statut = 'rejetée', motif_rejet = ? WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, motif_rejet);
statement.setInt(2, demandeId);
statement.executeUpdate();
JOptionPane.showMessageDialog(this, "Demande rejetée avec succès.");
loadDemandesEnAttente(); // Recharger les demandes
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Erreur lors du rejet de la demande.");
}
} else {
JOptionPane.showMessageDialog(this, "Le motif de rejet ne peut pas être vide.");
}
}
}