From a5fdf8519e830f9884250c0c4c2cd5036b462543 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 21 Apr 2026 07:27:54 +0200 Subject: [PATCH] Feat: Getting donations from doners ad charityUser working --- .../controller/DonationPageController.java | 6 +- .../components/OrgDonationCardController.java | 28 +++ .../profileOrgPaymentsController.java | 105 ++++++++++ .../team6/database/DAO/DonationDAO.java | 15 +- .../database/Readers/DonationSelect.java | 59 ++++++ .../fxml/components/profileDonationCard.fxml | 24 +-- .../components/profileOrgDonationCard.fxml | 35 ++++ .../resources/fxml/profile_org_Payments.fxml | 190 ++---------------- .../resources/fxml/profile_org_Settings.fxml | 2 +- .../main/resources/fxml/profile_org_edit.fxml | 2 +- 10 files changed, 265 insertions(+), 201 deletions(-) create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrgDonationCardController.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileCharity/profileOrgPaymentsController.java create mode 100644 helpmehelpapplication/src/main/resources/fxml/components/profileOrgDonationCard.fxml diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java index 6e361b72..2e8b09c8 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java @@ -1,5 +1,7 @@ package ntnu.systemutvikling.team6.controller; +import java.sql.Date; +import java.time.LocalDate; import java.util.Optional; import javafx.application.Platform; @@ -15,6 +17,7 @@ import ntnu.systemutvikling.team6.database.DAO.FavouritesDAO; import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.models.Charity; +import ntnu.systemutvikling.team6.models.Donation; import ntnu.systemutvikling.team6.models.user.User; /** @@ -154,7 +157,8 @@ public void Donate(ActionEvent event) { Optional result = confirm.showAndWait(); if (result.isPresent() && result.get() == ButtonType.OK) { - donationSender.addDonation(charity, authToken.getCurrentUser(), amount); + Donation donation = new Donation(amount, LocalDate.now(), charity, authToken.getCurrentUser()); + donationSender.addDonation(donation); showAlert( Alert.AlertType.INFORMATION, "Thank you!", diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrgDonationCardController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrgDonationCardController.java new file mode 100644 index 00000000..5fcbe69e --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrgDonationCardController.java @@ -0,0 +1,28 @@ +package ntnu.systemutvikling.team6.controller.components; + +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import ntnu.systemutvikling.team6.models.Donation; + +public class OrgDonationCardController extends BaseController{ + @FXML private Label donerNameLabel; + @FXML private Label purchaseIDLabel; + @FXML private Label dateLabel; + @FXML private Label totalLabel; + + private Donation donation; + + @Override + protected void authTokenisSet() { + + } + + public void setDonation(Donation donation) { + this.donation = donation; + + donerNameLabel.setText(donation.isAnonymous() ? "Anonymous Doner" : donation.getCharity().getName()); + purchaseIDLabel.setText(donation.getDonationID().toString()); + dateLabel.setText(donation.getDate().toString()); + totalLabel.setText(String.valueOf(donation.getAmount())); + } +} diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileCharity/profileOrgPaymentsController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileCharity/profileOrgPaymentsController.java new file mode 100644 index 00000000..de651070 --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileCharity/profileOrgPaymentsController.java @@ -0,0 +1,105 @@ +package ntnu.systemutvikling.team6.controller.profileCharity; + +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.Alert; +import javafx.scene.control.Label; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; +import ntnu.systemutvikling.team6.controller.components.*; +import ntnu.systemutvikling.team6.database.DatabaseConnection; +import ntnu.systemutvikling.team6.database.Readers.DonationSelect; +import ntnu.systemutvikling.team6.models.Charity; +import ntnu.systemutvikling.team6.models.Donation; +import ntnu.systemutvikling.team6.models.registry.DonationRegistry; +import ntnu.systemutvikling.team6.models.user.User; + +import java.io.IOException; +import java.util.List; + +public class profileOrgPaymentsController extends BaseController { + @FXML + private NavbarController navbarController; + @FXML private VBox cardsContainer; + @FXML private Label charityNameLabel; + + + @Override + protected void authTokenisSet() { + if (!isLoggedin() || authToken.isCharityUser() == null){ + showAlert(Alert.AlertType.ERROR, "Not logged inn", "You need to be logged inn to donate."); + Platform.runLater(() -> { + Stage stage = (Stage) Stage.getWindows().stream() + .filter(w -> w.isShowing()) + .findFirst() + .orElse(null); + if (stage != null) { + LoaderScene.LoadScene("loginSite", stage, null, null, authToken); + } + }); + } + navbarController.setAuthToken(authToken); + populateFields(); + } + + public void populateFields() { + Charity usersCharity = authToken.isCharityUser(); + charityNameLabel.setText(usersCharity.getName()); + + // DonationHistory + DatabaseConnection conn = new DatabaseConnection(); + DonationSelect donationSelect = new DonationSelect(conn); + DonationRegistry donationRegistry = donationSelect.getDonationForCharity(authToken.isCharityUser().getUUID().toString()); + displayDonations(donationRegistry); + } + + private void displayDonations(DonationRegistry donationRegistry) { + cardsContainer.getChildren().clear(); + List donations = donationRegistry.getAllDonations(); + if(donations.isEmpty()){ + Label empty = new Label("You have no Donations"); + empty.setStyle("-fx-text-fill: #777777; -fx-font-size: 14;"); + cardsContainer.getChildren().add(empty); + } + + for (Donation donation : donations) { + try { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/components/profileOrgDonationCard.fxml")); + Parent card = loader.load(); + OrgDonationCardController cardController = loader.getController(); + cardController.setDonation(donation); + cardController.setAuthToken(authToken); + cardsContainer.getChildren().add(card); + } catch (IOException e) { + throw new RuntimeException("Could not load organization card.", e); + } + } + } + + // Sidebar Methods + @FXML + private void switchToEditPage(ActionEvent event){ + LoaderScene.LoadScene("profile_org_edit", event, null, null, authToken); + } + + @FXML + private void switchToFeedbackPage(ActionEvent event){ + LoaderScene.LoadScene("profile_org_Inbox", event, null, null, authToken); + } + + @FXML + private void switchToSettingsPage(ActionEvent event){ + LoaderScene.LoadScene("profile_user_Settings", event, null, null, authToken); + } + + + @FXML + private void handleLogout(ActionEvent event){ + authToken.logout(); + showAlert(Alert.AlertType.INFORMATION, "Logging out", "Logging out..."); + LoaderScene.LoadScene("FrontPage", event, null, null, authToken); + } +} diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/DonationDAO.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/DonationDAO.java index dd4b2525..e40641ae 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/DonationDAO.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/DonationDAO.java @@ -4,6 +4,7 @@ import java.util.UUID; import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.models.Charity; +import ntnu.systemutvikling.team6.models.Donation; import ntnu.systemutvikling.team6.models.user.User; /** @@ -24,7 +25,7 @@ public DonationDAO(DatabaseConnection connection) { * @param charity * @param amount */ - public void addDonation(Charity charity, User user, double amount) { + public void addDonation(Donation donation) { String sql_query = """ INSERT INTO Donations (UUID_Donations, amount, isAnonymous, date, charity_id, user_id) @@ -34,12 +35,12 @@ INSERT INTO Donations (UUID_Donations, amount, isAnonymous, date, charity_id, us PreparedStatement ps = conn.prepareStatement(sql_query)) { conn.setAutoCommit(false); - ps.setString(1, user.getId().toString()); - ps.setDouble(2, amount); - ps.setBoolean(3, user.getSettings().isAnonymous()); - ps.setDate(4, new Date(System.currentTimeMillis())); - ps.setString(5, charity.getUUID().toString()); - ps.setString(6, user.getId().toString()); + ps.setString(1, donation.getDonationID().toString()); + ps.setDouble(2, donation.getAmount()); + ps.setBoolean(3, donation.getDonor().getSettings().isAnonymous()); + ps.setDate(4, Date.valueOf(donation.getDate())); + ps.setString(5, donation.getCharity().getUUID().toString()); + ps.setString(6, donation.getDonor().getId().toString()); ps.executeUpdate(); diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java index 5792f5c6..a577880d 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java @@ -156,4 +156,63 @@ public DonationRegistry getDonationForUser(String uuid) { } return registry; } + public DonationRegistry getDonationForCharity(String uuid) { + DonationRegistry registry = null; + Connection conn = null; + try { + conn = connection.getMySqlConnection(); + String sql_query = + """ + SELECT + d.UUID_Donations, d.amount, d.isAnonymous, d.date, d.charity_id, d.user_id, + c.UUID_charities, c.org_number, c.pre_approved, c.status, + cv.charity_name, cv.charity_link, cv.description, cv.logoURL, cv.key_values, cv.logoBLOB, + u.UUID_User, u.user_name, u.user_email, u.user_password, u.role + FROM Donations d + INNER JOIN Charities c ON d.charity_id = c.UUID_charities + INNER JOIN CharityVanity cv ON cv.UUID_charity = c.UUID_charities + INNER JOIN User u ON d.user_id = u.UUID_user + WHERE c.UUID_charities = ? + """; + PreparedStatement stmt = conn.prepareStatement(sql_query); + stmt.setString(1, uuid); + ResultSet rs = stmt.executeQuery(); + + registry = new DonationRegistry(); + while (rs.next()) { + Charity charity = + new Charity( + rs.getString("UUID_charities"), + rs.getString("org_number"), + rs.getString("charity_name"), + rs.getString("charity_link"), + rs.getString("status"), + rs.getBoolean("pre_approved"), + rs.getString("description"), + rs.getString("logoURL"), + rs.getString("key_values"), + rs.getBytes("logoBLOB")); + User user = + new User( + rs.getString("UUID_User"), + rs.getString("user_name"), + rs.getString("user_email"), + rs.getString("user_password"), + rs.getString("role")); + Donation donation = + new Donation( + rs.getString("UUID_Donations"), + rs.getDouble("amount"), + rs.getDate("date").toLocalDate(), + charity, + user, + rs.getBoolean("isAnonymous")); + registry.addDonation(donation); + } + } catch (SQLException e) { + e.printStackTrace(); + throw new RuntimeException("ERROR: Something went wrong during updating charities table."); + } + return registry; + } } diff --git a/helpmehelpapplication/src/main/resources/fxml/components/profileDonationCard.fxml b/helpmehelpapplication/src/main/resources/fxml/components/profileDonationCard.fxml index 04de9952..7eb9f7e8 100644 --- a/helpmehelpapplication/src/main/resources/fxml/components/profileDonationCard.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/components/profileDonationCard.fxml @@ -1,29 +1,25 @@ - - - + + + - + - - \ No newline at end of file + diff --git a/helpmehelpapplication/src/main/resources/fxml/components/profileOrgDonationCard.fxml b/helpmehelpapplication/src/main/resources/fxml/components/profileOrgDonationCard.fxml new file mode 100644 index 00000000..948a86d9 --- /dev/null +++ b/helpmehelpapplication/src/main/resources/fxml/components/profileOrgDonationCard.fxml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_org_Payments.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_org_Payments.fxml index 197ad2cb..e63aa4d2 100644 --- a/helpmehelpapplication/src/main/resources/fxml/profile_org_Payments.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/profile_org_Payments.fxml @@ -17,7 +17,8 @@ - + + @@ -31,82 +32,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -127,7 +54,7 @@ -