diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeExpenseController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeExpenseController.java index 281232de69a5e5809ef1da5e6de0f750e76a91e6..95b78b472b8e85f5bc9215c0f589c4d37ec8818c 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeExpenseController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeExpenseController.java @@ -3,9 +3,17 @@ package no.ntnu.idatt1002.demo.controller; import java.awt.event.ActionEvent; import java.io.IOException; import java.util.Optional; +import javafx.beans.binding.Bindings; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.geometry.Side; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.chart.PieChart; +import javafx.scene.chart.PieChart.Data; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; @@ -16,6 +24,7 @@ import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.text.Text; +import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Budget.FileHandlingBudget; import no.ntnu.idatt1002.demo.data.Budget.GeneralBudget; import no.ntnu.idatt1002.demo.data.Economics.Expense; @@ -108,12 +117,45 @@ public class IncomeExpenseController implements FinanceController { private ObservableList<Expense> expenses; + @FXML + private PieChart expensePieChart; + + @FXML + private PieChart incomePieChart; FileHandling fileHandling; @FXML public void initialize() throws IOException { + fileHandling = new FileHandling(); + //Initialize columns + setColumns(); + + //Initialize registers and tableview + incomeRegister = loadIncomeDataFromFile("Income"); + income = FXCollections.observableArrayList(incomeRegister.getItems()); + incomeTableView.setItems(income); + + expenseRegister = loadExpenseDataFromFile("Expense"); + expenses = FXCollections.observableArrayList(expenseRegister.getItems()); + expenseTableView.setItems(expenses); + + incomePieChart.getData().addAll(createIncomePyChart()); + expensePieChart.getData().addAll(createExpensePyChart()); + + incomePieChart.setLegendSide(Side.LEFT); + expensePieChart.setTitle("Expenses"); + expensePieChart.setLegendSide(Side.LEFT); + expensePieChart.setLabelLineLength(10); + + //Initialize sum field under the tableview + // inSum.setText(String.valueOf(incomeRegister.getTotalSum())); + //expSum.setText(String.valueOf(expenseRegister.getTotalSum())); + + } + + private void setColumns() { inDateCol.setCellValueFactory(new PropertyValueFactory<Income, String>("date")); inAmountCol.setCellValueFactory(new PropertyValueFactory<Income, Double>("amount")); inCategoryCol.setCellValueFactory(new PropertyValueFactory<Income, IncomeCategory>("category")); @@ -125,21 +167,36 @@ public class IncomeExpenseController implements FinanceController { expCategoryCol.setCellValueFactory(new PropertyValueFactory<Expense, ExpenseCategory>("category")); expDescriptionCol.setCellValueFactory(new PropertyValueFactory<Expense, String>("description")); expRecurringCol.setCellValueFactory(new PropertyValueFactory<Expense, Boolean>("recurring")); + } - //Initialize registers and tableview - incomeRegister = loadIncomeDataFromFile("Income"); - income = FXCollections.observableArrayList(incomeRegister.getItems()); - incomeTableView.setItems(income); - - expenseRegister = loadExpenseDataFromFile("Expense"); - expenses = FXCollections.observableArrayList(expenseRegister.getItems()); - expenseTableView.setItems(expenses); - - //Initialize sum field under the tableview - inSum.setText(String.valueOf(incomeRegister.getTotalSum())); - expSum.setText(String.valueOf(expenseRegister.getTotalSum())); + private ObservableList<PieChart.Data> createExpensePyChart() { + ObservableList<PieChart.Data> expensePieChartData = + FXCollections.observableArrayList( + new PieChart.Data("Food", expenseRegister.getExpenseByCategory(ExpenseCategory.FOOD).getTotalSum()), + new PieChart.Data("Books", expenseRegister.getExpenseByCategory(ExpenseCategory.BOOKS).getTotalSum()), + new PieChart.Data("Clothes", expenseRegister.getExpenseByCategory(ExpenseCategory.CLOTHES).getTotalSum()), + new PieChart.Data("Other", expenseRegister.getExpenseByCategory(ExpenseCategory.OTHER).getTotalSum()) + ); + expensePieChartData.forEach(data -> + data.nameProperty().bind( + Bindings.concat( + data.getName() + " " + data.pieValueProperty()) + )); + return expensePieChartData; + } - fileHandling = new FileHandling(); + private ObservableList<PieChart.Data> createIncomePyChart() { + ObservableList<PieChart.Data> incomePieChartData = + FXCollections.observableArrayList( + new PieChart.Data("Food", incomeRegister.getIncomeByCategory(IncomeCategory.GIFT).getTotalSum()), + new PieChart.Data("Books", incomeRegister.getIncomeByCategory(IncomeCategory.SALARY).getTotalSum()) + ); + incomePieChartData.forEach(data -> + data.nameProperty().bind( + Bindings.concat( + data.getName() + " " + data.pieValueProperty()) + )); + return incomePieChartData; } /** @@ -268,7 +325,15 @@ public class IncomeExpenseController implements FinanceController { /** * Switches the scene to the Main Menu scene. */ - private void returnToMainMenu() { - + @FXML + private void returnToMainMenu(javafx.event.ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(getClass().getResource("/view/MainMenuNew.fxml")); + + Parent root = loader.load(); + Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.show(); } }