PDLA_24/src/main/java/controller/SoumettreDemande.java
2024-10-16 18:51:57 +02:00

197 lines
8.3 KiB
Java

package controller;
import database.DatabaseConnection;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
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 SoumettreDemande extends JFrame {
private JTextField descriptionField;
private JButton soumettreButton;
private JButton retourButton; // Bouton retour
private JButton voirMotifButton; // Bouton pour voir motif de rejet
private JTable demandesTable;
private DefaultTableModel tableModel;
private int utilisateurId;
public SoumettreDemande(int utilisateurId) {
this.utilisateurId = utilisateurId;
setTitle("Soumettre une demande d'aide");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// Layout principal en BorderLayout pour mieux organiser les composants
setLayout(new BorderLayout());
// Création des champs et boutons
JLabel descriptionLabel = new JLabel("Description de la demande :");
descriptionField = new JTextField(20);
soumettreButton = new JButton("Soumettre");
retourButton = new JButton("Retour à l'accueil"); // Création du bouton retour
voirMotifButton = new JButton("Voir motif de refus");
// Tableau pour afficher les anciennes demandes
tableModel = new DefaultTableModel(new String[]{"ID", "Description", "Statut", "Bénévole en charge"}, 0);
demandesTable = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(demandesTable);
// Panel pour les champs de saisie et boutons (haut de la fenêtre)
JPanel inputPanel = new JPanel(new GridLayout(3, 2));
inputPanel.add(descriptionLabel);
inputPanel.add(descriptionField);
inputPanel.add(soumettreButton);
// Ajouter les composants à la fenêtre
add(inputPanel, BorderLayout.NORTH); // Panel de saisie en haut
add(scrollPane, BorderLayout.CENTER); // Tableau au centre
// Panel pour le bouton retour en bas
JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
bottomPanel.add(retourButton);
add(bottomPanel, BorderLayout.SOUTH); // Ajouter le panel du bouton retour en bas
bottomPanel.add(voirMotifButton);
add(bottomPanel, BorderLayout.SOUTH);
// Charger les anciennes demandes
loadAnciennesDemandes();
// ActionListener pour soumettre une demande
soumettreButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
soumettreDemande();
}
});
// ActionListener pour retourner à l'accueil
retourButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Retour à la page de connexion
LoginPage loginPage = new LoginPage();
loginPage.setVisible(true);
dispose(); // Fermer la page actuelle
}
});
// ActionListener pour soumettre une demande
voirMotifButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
afficherMotifRefus();
}
});
}
// Méthode pour soumettre une demande
private void soumettreDemande() {
String description = descriptionField.getText();
if (description.isEmpty()) {
JOptionPane.showMessageDialog(this, "Veuillez entrer une description.");
return;
}
try (Connection connection = DatabaseConnection.getConnection()) {
String sql = "INSERT INTO demandes_aide (description, statut, utilisateur_id) VALUES (?, 'soumise', ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, description);
statement.setInt(2, utilisateurId);
statement.executeUpdate();
JOptionPane.showMessageDialog(this, "Demande soumise avec succès.");
descriptionField.setText(""); // Réinitialiser le champ après soumission
loadAnciennesDemandes(); // Recharger la liste des demandes
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Erreur lors de la soumission de la demande.");
}
}
// Méthode pour charger les anciennes demandes
private void afficherMotifRefus() {
int selectedRow = demandesTable.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande dont vous voulez afficher le motif de rejet.");
return;
}
int demandeId = (int) tableModel.getValueAt(selectedRow, 0);
try (Connection connection = DatabaseConnection.getConnection()) {
// Verifier si la demande est bien 'rejetée' d'abord
String checkSql = "SELECT description, motif_rejet, statut FROM demandes_aide WHERE id = ? ";
PreparedStatement checkStatement = connection.prepareStatement(checkSql);
checkStatement.setInt(1, demandeId);
ResultSet resultSet = checkStatement.executeQuery();
if (resultSet.next()) {
String currentStatus = resultSet.getString("statut");
if ("rejetée".equals(currentStatus)) {
// Affichage seulement si le statut est 'rejetée'
String desc = resultSet.getString("description");
String motif = resultSet.getString("motif_rejet");
String message =
"Description de la demande:\n" +
desc +
"\n___________________________________________________\n" +
"Motif de rejet :\n" +
motif;
JOptionPane.showMessageDialog(this, message);
} else {
// Statut n'est pas 'rejetée'
JOptionPane.showMessageDialog(this, "Motif non affiché car la demande n'est pas 'rejetée'. (Statut actuel : " + currentStatus + ")");
}
loadAnciennesDemandes(); // Recharger les demandes après tentative/réssuite de l'affichage du motif
}
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Erreur lors de l'affichage du motif.");
}
}
// Méthode pour charger les anciennes demandes
private void loadAnciennesDemandes() {
try (Connection connection = DatabaseConnection.getConnection()) {
String sql =
"SELECT demandes_aide.id, demandes_aide.description, demandes_aide.statut, utilisateur.nom " +
"FROM demandes_aide " +
"LEFT JOIN utilisateur " +
"ON demandes_aide.benevole_id = utilisateur.id " +
"AND utilisateur.role = 'benevole' " +
"WHERE demandes_aide.utilisateur_id = ? " +
"ORDER BY demandes_aide.statut ;";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, utilisateurId);
ResultSet resultSet = statement.executeQuery();
tableModel.setRowCount(0); // Réinitialiser le tableau
while (resultSet.next()) {
int id = resultSet.getInt("id");
String description = resultSet.getString("description");
String statut = resultSet.getString("statut");
String nom = resultSet.getString("nom");
tableModel.addRow(new Object[]{id, description, statut, nom});
}
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Erreur lors du chargement des demandes.");
}
}
public static void main(String[] args) {
SoumettreDemande soumettreDemande = new SoumettreDemande(1); // Test avec un utilisateur par défaut
soumettreDemande.setVisible(true);
}
}