diff --git a/src/main/java/controller/BenevoleDemandesEncoursPage.java b/src/main/java/controller/BenevoleDemandesEncoursPage.java index 561b3e9..1ca084b 100644 --- a/src/main/java/controller/BenevoleDemandesEncoursPage.java +++ b/src/main/java/controller/BenevoleDemandesEncoursPage.java @@ -68,8 +68,9 @@ public class BenevoleDemandesEncoursPage extends JFrame { // Méthode pour charger les demandes acceptées private void loadDemandesEnCours() { try (Connection connection = DatabaseConnection.getConnection()) { - String sql = "SELECT id, description, statut FROM demandes_aide WHERE statut = 'en cours'"; + String sql = "SELECT id, description, statut FROM demandes_aide WHERE statut = 'en cours' AND benevole_id = ?"; PreparedStatement statement = connection.prepareStatement(sql); + statement.setInt(1, utilisateurId); ResultSet resultSet = statement.executeQuery(); tableModel.setRowCount(0); // Réinitialiser le tableau @@ -105,9 +106,8 @@ public class BenevoleDemandesEncoursPage extends JFrame { if (resultSet.next()) { String currentStatus = resultSet.getString("statut"); - Integer benevole_id = resultSet.getInt("benevole_id"); - if ("en cours".equals(currentStatus) && benevole_id.equals(utilisateurId)) { + if ("en cours".equals(currentStatus)) { // Mise à jour seulement si le statut est 'en cours' String updateSql = "UPDATE demandes_aide SET statut = 'finalisée' WHERE id = ?"; PreparedStatement updateStatement = connection.prepareStatement(updateSql); diff --git a/src/main/java/controller/BenevoleDemandesFinaliseesPage.java b/src/main/java/controller/BenevoleDemandesFinaliseesPage.java new file mode 100644 index 0000000..a3bff54 --- /dev/null +++ b/src/main/java/controller/BenevoleDemandesFinaliseesPage.java @@ -0,0 +1,193 @@ +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 BenevoleDemandesFinaliseesPage extends JFrame { + private JTable table; + private DefaultTableModel tableModel; + private JButton voirAvisButton; // Bouton pour voir les avis + private JButton modifierAvisButton; // Bouton pour modifer l'avis (benevole) + private JButton retourBenevoleButton; + private int utilisateurId; // Ajout de l'ID du bénévole + + public BenevoleDemandesFinaliseesPage(int utilisateurId) { // Ajout du paramètre utilisateurId + this.utilisateurId = utilisateurId; // Stockage de l'ID du bénévole + setTitle("Demandes finalisées"); + 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); + + // Bouton pour prendre et finaliser des demandes + voirAvisButton = new JButton("Voir les avis"); + modifierAvisButton = new JButton("Modifier l'avis"); + retourBenevoleButton = new JButton("Retour au menu bénévole"); + + // Panel des boutons + JPanel buttonPanel = new JPanel(); + buttonPanel.add(voirAvisButton); + buttonPanel.add(modifierAvisButton); + buttonPanel.add(retourBenevoleButton); + + getContentPane().add(scrollPane, "Center"); + getContentPane().add(buttonPanel, "South"); + + // ActionListener pour finaliser une demande + voirAvisButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + afficherAvis(); + } + }); + + modifierAvisButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + modifierAvis(); + } + }); + + // Bouton de retour à la page d'accueil + // ActionListener pour retourner à la page de connexion + retourBenevoleButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + MenuBenevole menu = new MenuBenevole(utilisateurId); + menu.setVisible(true); + dispose(); + } + }); + + // Charger les demandes acceptées + loadDemandesFinalisees(); + } + + private void afficherAvis() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande dont vous voulez afficher les avis."); + return; + } + + int demandeId = (int) tableModel.getValueAt(selectedRow, 0); + + try (Connection connection = DatabaseConnection.getConnection()) { + // Verifier si la demande est bien 'finalisée' d'abord + String checkSql = "SELECT description, statut, avis_besoin, avis_benevole 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 ("finalisée".equals(currentStatus)) { + // Affichage seulement si le statut est 'finalisée' + String desc = resultSet.getString("description"); + String avis_besoin = resultSet.getString("avis_besoin"); + String avis_benevole = resultSet.getString("avis_benevole"); + + String texte_avis = + "Description de la demande:\n" + + desc + + "\n___________________________________________________\n" + + "Avis de la personne dans le besoin :\n" + + avis_besoin + + "\n___________________________________________________\n" + + "Avis du benevole en charge de la demande :\n" + + avis_benevole; + + JOptionPane.showMessageDialog(this, texte_avis); + } else { + // Statut n'est pas 'finalisée' + JOptionPane.showMessageDialog(this, "Avis non affichés car la demande n'est pas 'finalisée'. (Statut actuel : " + currentStatus + ")"); + } + loadDemandesFinalisees(); // Recharger les demandes après tentative/réssuite de l'affichage des avis + } + } catch (SQLException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, "Erreur lors de l'affichage des avis."); + } + } + + // Méthode pour rejeter une demande + private void modifierAvis() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande dont vous voulez modifier l'avis."); + return; + } + + int demandeId = (int) tableModel.getValueAt(selectedRow, 0); + + try (Connection connection = DatabaseConnection.getConnection()) { + // Verifier si la demande est bien 'finalisée' d'abord + String checkSql = "SELECT 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 ("finalisée".equals(currentStatus)) { + String avis = JOptionPane.showInputDialog(this, "Veuillez entrer votre avis (500 caractères max):", "Modification de l'avis", JOptionPane.PLAIN_MESSAGE); + + if (!avis.isEmpty()) { + String sql = "UPDATE demandes_aide SET avis_benevole = ? WHERE id = ?"; + PreparedStatement statement = connection.prepareStatement(sql); + statement.setString(1, avis); + statement.setInt(2, demandeId); + statement.executeUpdate(); + + JOptionPane.showMessageDialog(this, "Avis modifié avec succès."); + } else { + JOptionPane.showMessageDialog(this, "Votre avis ne peut pas être vide."); + } + } else { + // Statut n'est pas 'finalisée' + JOptionPane.showMessageDialog(this, "Vous ne pouvez pas modifier l'avis car la demande n'est pas 'finalisée'. (Statut actuel : " + currentStatus + ")"); + } + loadDemandesFinalisees(); // Recharger les demandes après tentative/réssuite de modification de l'avis + } + } catch (SQLException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, "Erreur lors de la modification de l'avis."); + } + } + + // Méthode pour charger les demandes acceptées + private void loadDemandesFinalisees() { + try (Connection connection = DatabaseConnection.getConnection()) { + String sql = "SELECT id, description, statut FROM demandes_aide WHERE statut = 'finalisée' AND benevole_id = ?"; + 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"); + + tableModel.addRow(new Object[]{id, description, statut}); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } +} + diff --git a/src/main/java/controller/BenevoleDemandesPage.java b/src/main/java/controller/BenevoleDemandesPage.java index d6dc3d0..9423f28 100644 --- a/src/main/java/controller/BenevoleDemandesPage.java +++ b/src/main/java/controller/BenevoleDemandesPage.java @@ -15,7 +15,6 @@ public class BenevoleDemandesPage extends JFrame { private JTable table; private DefaultTableModel tableModel; private JButton prendreDemandeButton; - private JButton finaliserDemandeButton; private JButton retourBenevoleButton; private int utilisateurId; // Ajout de l'ID du bénévole @@ -33,13 +32,11 @@ public class BenevoleDemandesPage extends JFrame { // Bouton pour prendre et finaliser des demandes prendreDemandeButton = new JButton("Prendre la demande"); - finaliserDemandeButton = new JButton("Finaliser la demande"); retourBenevoleButton = new JButton("Retour au menu bénévole"); // Panel des boutons JPanel buttonPanel = new JPanel(); buttonPanel.add(prendreDemandeButton); - buttonPanel.add(finaliserDemandeButton); buttonPanel.add(retourBenevoleButton); getContentPane().add(scrollPane, "Center"); @@ -52,14 +49,6 @@ public class BenevoleDemandesPage extends JFrame { prendreDemande(); } }); - - // ActionListener pour finaliser une demande - finaliserDemandeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - finaliserDemande(); - } - }); // Bouton de retour à la page d'accueil // ActionListener pour retourner à la page de connexion @@ -120,44 +109,4 @@ public class BenevoleDemandesPage extends JFrame { JOptionPane.showMessageDialog(this, "Erreur lors de la prise de la demande."); } } - - // Méthode pour finaliser une demande - private void finaliserDemande() { - int selectedRow = table.getSelectedRow(); - if (selectedRow == -1) { - JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande à finaliser."); - return; - } - - int demandeId = (int) tableModel.getValueAt(selectedRow, 0); - - try (Connection connection = DatabaseConnection.getConnection()) { - // Verifier si la demande est bien 'en cours' d'abord - String checkSql = "SELECT 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 ("en cours".equals(currentStatus)) { - // Mise à jour seulement si le statut est 'en cours' - String updateSql = "UPDATE demandes_aide SET statut = 'finalisée' WHERE id = ?"; - PreparedStatement updateStatement = connection.prepareStatement(updateSql); - updateStatement.setInt(1, demandeId); - updateStatement.executeUpdate(); - - JOptionPane.showMessageDialog(this, "Demande finalisée avec succès."); - } else { - // Statut n'est pas 'en cours' - JOptionPane.showMessageDialog(this, "Demande non finalisée car le statut n'est pas 'en cours'. (Statut actuel : " + currentStatus + ")"); - } - loadDemandesAcceptees(); // Recharger les demandes après tentative/réssuite de finalisation - } - } catch (SQLException e) { - e.printStackTrace(); - JOptionPane.showMessageDialog(this, "Erreur lors de la finalisation de la demande."); - } - } } diff --git a/src/main/java/controller/MenuBenevole.java b/src/main/java/controller/MenuBenevole.java index 1413d6d..e2f0e80 100644 --- a/src/main/java/controller/MenuBenevole.java +++ b/src/main/java/controller/MenuBenevole.java @@ -8,6 +8,7 @@ import java.awt.event.ActionListener; public class MenuBenevole extends JFrame{ private JButton voirDemandesAcceptesButton; private JButton voirDemandesEnCoursButton; + private JButton voirDemandesFinaliseesButton; private JButton retourButton; private int utilisateurId; // Ajout de l'ID du bénévole @@ -33,9 +34,14 @@ public class MenuBenevole extends JFrame{ gbc.gridy = 1; add(voirDemandesEnCoursButton, gbc); - retourButton = new JButton("Retour à l'acceuil"); + voirDemandesFinaliseesButton = new JButton("Voir demandes personelles finalisées"); gbc.gridx = 0; gbc.gridy = 2; + add(voirDemandesFinaliseesButton, gbc); + + retourButton = new JButton("Retour à l'acceuil"); + gbc.gridx = 0; + gbc.gridy = 3; add(retourButton, gbc); voirDemandesAcceptesButton.addActionListener(new ActionListener() { @@ -56,6 +62,15 @@ public class MenuBenevole extends JFrame{ } }); + voirDemandesFinaliseesButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + BenevoleDemandesFinaliseesPage benevoleDemandesFinaliseesPage = new BenevoleDemandesFinaliseesPage(utilisateurId); + benevoleDemandesFinaliseesPage.setVisible(true); + dispose(); + } + }); + // Bouton de retour à la page d'accueil // ActionListener pour retourner à la page de connexion retourButton.addActionListener(new ActionListener() { diff --git a/src/main/java/controller/SoumettreDemande.java b/src/main/java/controller/SoumettreDemande.java index 2a003c1..ef9a8a1 100644 --- a/src/main/java/controller/SoumettreDemande.java +++ b/src/main/java/controller/SoumettreDemande.java @@ -17,6 +17,8 @@ public class SoumettreDemande extends JFrame { private JButton soumettreButton; private JButton retourButton; // Bouton retour private JButton voirMotifButton; // Bouton pour voir motif de rejet + private JButton voirAvisButton; // Bouton pour voir les avis + private JButton modifierAvisButton; // Bouton pour modifer l'avis (personne dans le besoin) private JTable demandesTable; private DefaultTableModel tableModel; private int utilisateurId; @@ -37,6 +39,8 @@ public class SoumettreDemande extends JFrame { soumettreButton = new JButton("Soumettre"); retourButton = new JButton("Retour à l'accueil"); // Création du bouton retour voirMotifButton = new JButton("Voir motif de refus"); + voirAvisButton = new JButton("Voir les avis"); + modifierAvisButton = new JButton("Modifier l'avis"); // Tableau pour afficher les anciennes demandes tableModel = new DefaultTableModel(new String[]{"ID", "Description", "Statut", "Bénévole en charge"}, 0); @@ -59,6 +63,10 @@ public class SoumettreDemande extends JFrame { add(bottomPanel, BorderLayout.SOUTH); // Ajouter le panel du bouton retour en bas bottomPanel.add(voirMotifButton); add(bottomPanel, BorderLayout.SOUTH); + bottomPanel.add(voirAvisButton); + add(bottomPanel, BorderLayout.SOUTH); + bottomPanel.add(modifierAvisButton); + add(bottomPanel, BorderLayout.SOUTH); // Charger les anciennes demandes loadAnciennesDemandes(); @@ -82,13 +90,27 @@ public class SoumettreDemande extends JFrame { } }); - // ActionListener pour soumettre une demande + // ActionListener pour afficher le motif de refus voirMotifButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { afficherMotifRefus(); } }); + + // ActionListener pour afficher les avis + voirAvisButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + afficherAvis(); + } + }); + + // ActionListener pour modifier l'avis + modifierAvisButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) {modifierAvis(); } + }); } // Méthode pour soumettre une demande @@ -140,14 +162,14 @@ public class SoumettreDemande extends JFrame { String desc = resultSet.getString("description"); String motif = resultSet.getString("motif_rejet"); - String message = + String texte_motif_refus = "Description de la demande:\n" + desc + "\n___________________________________________________\n" + "Motif de rejet :\n" + motif; - JOptionPane.showMessageDialog(this, message); + JOptionPane.showMessageDialog(this, texte_motif_refus); } else { // Statut n'est pas 'rejetée' JOptionPane.showMessageDialog(this, "Motif non affiché car la demande n'est pas 'rejetée'. (Statut actuel : " + currentStatus + ")"); @@ -160,6 +182,100 @@ public class SoumettreDemande extends JFrame { } } + private void afficherAvis() { + int selectedRow = demandesTable.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande dont vous voulez afficher les avis."); + return; + } + + int demandeId = (int) tableModel.getValueAt(selectedRow, 0); + + try (Connection connection = DatabaseConnection.getConnection()) { + // Verifier si la demande est bien 'finalisée' d'abord + String checkSql = "SELECT description, statut, avis_besoin, avis_benevole 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 ("finalisée".equals(currentStatus)) { + // Affichage seulement si le statut est 'finalisée' + String desc = resultSet.getString("description"); + String avis_besoin = resultSet.getString("avis_besoin"); + String avis_benevole = resultSet.getString("avis_benevole"); + + String texte_avis = + "Description de la demande:\n" + + desc + + "\n___________________________________________________\n" + + "Avis de la personne dans le besoin :\n" + + avis_besoin + + "\n___________________________________________________\n" + + "Avis du benevole en charge de la demande :\n" + + avis_benevole; + + JOptionPane.showMessageDialog(this, texte_avis); + } else { + // Statut n'est pas 'finalisée' + JOptionPane.showMessageDialog(this, "Avis non affichés car la demande n'est pas 'finalisée'. (Statut actuel : " + currentStatus + ")"); + } + loadAnciennesDemandes(); // Recharger les demandes après tentative/réssuite de l'affichage des avis + } + } catch (SQLException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, "Erreur lors de l'affichage des avis."); + } + } + + // Méthode pour rejeter une demande + private void modifierAvis() { + int selectedRow = demandesTable.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande dont vous voulez modifier l'avis."); + return; + } + + int demandeId = (int) tableModel.getValueAt(selectedRow, 0); + + try (Connection connection = DatabaseConnection.getConnection()) { + // Verifier si la demande est bien 'finalisée' d'abord + String checkSql = "SELECT 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 ("finalisée".equals(currentStatus)) { + String avis = JOptionPane.showInputDialog(this, "Veuillez entrer votre avis (500 caractères max):", "Modification de l'avis", JOptionPane.PLAIN_MESSAGE); + + if (!avis.isEmpty()) { + String sql = "UPDATE demandes_aide SET avis_besoin = ? WHERE id = ?"; + PreparedStatement statement = connection.prepareStatement(sql); + statement.setString(1, avis); + statement.setInt(2, demandeId); + statement.executeUpdate(); + + JOptionPane.showMessageDialog(this, "Avis modifié avec succès."); + } else { + JOptionPane.showMessageDialog(this, "Votre avis ne peut pas être vide."); + } + } else { + // Statut n'est pas 'finalisée' + JOptionPane.showMessageDialog(this, "Vous ne pouvez pas modifier l'avis car la demande n'est pas 'finalisée'. (Statut actuel : " + currentStatus + ")"); + } + loadAnciennesDemandes(); // Recharger les demandes après tentative/réssuite de modification de l'avis + } + } catch (SQLException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, "Erreur lors de la modification de l'avis."); + } + } + // Méthode pour charger les anciennes demandes private void loadAnciennesDemandes() { try (Connection connection = DatabaseConnection.getConnection()) { diff --git a/src/main/java/controller/Validateur.java b/src/main/java/controller/Validateur.java index fde1a24..14bc825 100644 --- a/src/main/java/controller/Validateur.java +++ b/src/main/java/controller/Validateur.java @@ -127,7 +127,7 @@ public class Validateur extends JFrame { } int demandeId = (int) tableModel.getValueAt(selectedRow, 0); - String motif_rejet = JOptionPane.showInputDialog(this, "Veuillez entrer un motif de rejet (500 caractères max):"); + 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()) {