Skip to content

Commit

Permalink
Feat: Getting donations from doners ad charityUser working
Browse files Browse the repository at this point in the history
  • Loading branch information
AdrianBalunan committed Apr 21, 2026
1 parent 020742f commit a5fdf85
Show file tree
Hide file tree
Showing 10 changed files with 265 additions and 201 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

/**
Expand Down Expand Up @@ -154,7 +157,8 @@ public void Donate(ActionEvent event) {
Optional<ButtonType> 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!",
Expand Down
Original file line number Diff line number Diff line change
@@ -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()));
}
}
Original file line number Diff line number Diff line change
@@ -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<Donation> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -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)
Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.text.Font?>

<HBox spacing="20.0"
style="-fx-background-color: #FFFFFF; -fx-border-color: transparent transparent #EEEEEE transparent; -fx-border-width: 1; -fx-padding: 0 20 0 20;"
xmlns="http://javafx.com/javafx/25"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ntnu.systemutvikling.team6.controller.components.DonationCardController">
<HBox spacing="20.0" style="-fx-background-color: #FFFFFF; -fx-border-color: transparent transparent #EEEEEE transparent; -fx-border-width: 1; -fx-padding: 0 20 0 20;" xmlns="http://javafx.com/javafx/25" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ntnu.systemutvikling.team6.controller.components.DonationCardController">
<children>
<Label fx:id="charityNameLabel" prefWidth="265.0" style="-fx-text-fill: #111111; -fx-padding: 10 0 14 0;">
<Label fx:id="charityNameLabel" prefWidth="265.0" style="-fx-text-fill: #111111; -fx-padding: 10 0 14 0;" text="Name">
<font><Font name="System Bold" size="12.0" /></font>
</Label>
<Label fx:id="purchaseIDLabel" prefWidth="210.0" style="-fx-text-fill: #777777; -fx-padding: 10 0 14 0;">
<Label fx:id="purchaseIDLabel" prefWidth="210.0" style="-fx-text-fill: #777777; -fx-padding: 10 0 14 0;" text="#id">
<font><Font size="12.0" /></font>
</Label>
<Label fx:id="dateLabel" prefWidth="160.0" style="-fx-text-fill: #777777; -fx-padding: 10 0 14 0;">
<Label fx:id="dateLabel" prefWidth="160.0" style="-fx-text-fill: #777777; -fx-padding: 10 0 14 0;" text="00-12-2026">
<font><Font size="12.0" /></font>
</Label>
<Label fx:id="AnonymousLabel" prefWidth="120.0" style="-fx-text-fill: #777777; -fx-padding: 10 0 14 0;">
<Label fx:id="AnonymousLabel" prefWidth="120.0" style="-fx-text-fill: #777777; -fx-padding: 10 0 14 0;" text="Anoynomous">
<font><Font size="12.0" /></font>
</Label>
<Label fx:id="totalLabel" prefWidth="100.0" style="-fx-text-fill: #2f8f8b; -fx-padding: 10 0 14 0;">
<Label fx:id="totalLabel" prefWidth="100.0" style="-fx-text-fill: #2f8f8b; -fx-padding: 10 0 14 0;" text="1000kr">
<font><Font name="System Bold" size="12.0" /></font>
</Label>
</children>
</HBox>
</HBox>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<GridPane
style="-fx-background-color: #FFFFFF; -fx-border-color: transparent transparent #EEEEEE transparent; -fx-border-width: 1; -fx-padding: 10 20 14 20;"
xmlns="http://javafx.com/javafx/25"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ntnu.systemutvikling.team6.controller.components.OrgDonationCardController">
<columnConstraints>
<ColumnConstraints percentWidth="25" />
<ColumnConstraints percentWidth="20" />
<ColumnConstraints percentWidth="20" />
<ColumnConstraints percentWidth="35" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
</rowConstraints>
<children>
<Label fx:id="purchaseIDLabel" style="-fx-text-fill: #777777;" GridPane.columnIndex="0" GridPane.halignment="CENTER">
<font><Font size="12.0" /></font>
</Label>
<Label fx:id="donerNameLabel" style="-fx-text-fill: #2f8f8b;" GridPane.columnIndex="1" GridPane.halignment="CENTER">
<font><Font name="System Bold" size="12.0" /></font>
</Label>
<Label fx:id="totalLabel" style="-fx-text-fill: #111111;" GridPane.columnIndex="2" GridPane.halignment="CENTER">
<font><Font name="System Bold" size="12.0" /></font>
</Label>
<Label fx:id="dateLabel" style="-fx-text-fill: #777777;" GridPane.columnIndex="3" GridPane.halignment="CENTER">
<font><Font size="12.0" /></font>
</Label>
</children>
</GridPane>
Loading

0 comments on commit a5fdf85

Please sign in to comment.