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); } }