From b183c13bd1f92b1ed7c610129a2b64f5b8aeb3e3 Mon Sep 17 00:00:00 2001 From: Harry Linrui XU <xulr0820@hotmail.com> Date: Sun, 16 Apr 2023 14:46:15 +0200 Subject: [PATCH] Added methods for loading in registers + set progress for mini progressbars --- .../idatt1002/demo/controller/MainMenu.java | 135 ++++++++++++++---- 1 file changed, 110 insertions(+), 25 deletions(-) diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenu.java b/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenu.java index 14dd1ef7..b8230ee0 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenu.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenu.java @@ -2,13 +2,18 @@ package no.ntnu.idatt1002.demo.controller; import java.io.IOException; import java.time.LocalDate; +import java.util.Arrays; +import java.util.List; import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.DatePicker; import javafx.scene.control.Label; @@ -18,8 +23,11 @@ import javafx.scene.paint.Color; 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.ExpenseCategory; import no.ntnu.idatt1002.demo.data.Economics.ExpenseRegister; +import no.ntnu.idatt1002.demo.data.Economics.FileHandling; import no.ntnu.idatt1002.demo.data.Economics.IncomeRegister; +import no.ntnu.idatt1002.demo.data.Economics.Overview; public class MainMenu { @@ -88,56 +96,132 @@ public class MainMenu { IncomeRegister incomeRegister; + FileHandling fileHandling; + + Overview overview; + @FXML - public void initialize() throws IOException { //TODO NEED TO SET STATUSBAR VALUES - //Initialize all controllers - initializeControllers(); + public void initialize() { + fileHandling = new FileHandling(); + //Initialize all registers + overview + try { + incomeRegister = loadIncomeDataFromFile("Income"); + expenseRegister = loadExpenseDataFromFile("Expense"); + generalBudget = loadBudgetDataFromFile("Budget"); + } catch (IOException ioe) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Could not load register data"); + alert.setHeaderText("Could not load register data"); + alert.setContentText("There was an error loading in the registers"); + + alert.showAndWait(); + } + overview = new Overview(incomeRegister, expenseRegister, generalBudget); mainBar.setStyle("-fx-accent: green;"); - double incomeSum = incomeRegister.getTotalSum(); - double expenseSum = expenseRegister.getTotalSum(); + refreshProgressBars(); + refreshLabels(); + //Set progress when opening scene - //Set progress - mainBar.setProgress(expenseSum/incomeSum); + double maxAmount = generalBudget.getMaxAmount(); + double expenseSum = expenseRegister.getTotalSum(); //Displaying month title.setText("BUDGET " + (LocalDate.now().getMonth())); - double balance = incomeSum - expenseSum; + double balance = maxAmount - expenseSum; //Set balance balanceLbl.setText("Balance: " + (balance)); //Displaying how much of the monthly budget has been spent. - usageLbl.setText("Used " + expenseSum + " out of " + 1000); + usageLbl.setText("Used " + expenseSum + " out of " + generalBudget.getMaxAmount()); if (balance < 0) { balanceLbl.setTextFill(Color.RED); } - //Make calendar uneditable formatDatePicker(); daysLeftLbl.setText("Days left: 31"); //date.restrict } + private void refreshLabels() { + + } + /** - * Method for initializing all controllers in order to load all necessary data for this screen. - * Made this a separate method in order to make initialize() less cluttered. - * @throws IOException If there is an error with reading the files. + * Sets the progress of the progress bars to their most updated data. */ - private void initializeControllers() throws IOException { - //Instantiate income controller and register - IncomeController incomeController = new IncomeController(); - incomeRegister = incomeController.loadIncomeDataFromFile("Income"); - - //Instantiate expense controller and register - ExpensesController expensesController = new ExpensesController(); - expenseRegister = expensesController.loadExpenseDataFromFile("Expense"); - - //Instantiate budget controller and register - BudgetController budgetController = new BudgetController(); - generalBudget = budgetController.loadBudgetDataFromFile("Budget"); + private void refreshProgressBars() { + mainBar.setProgress(expenseRegister.getTotalSum()/generalBudget.getMaxAmount()); + + foodBar.setProgress((generalBudget.getBudgetItem(ExpenseCategory.FOOD).getBudgetAmount() - overview.getBudgetItemMinusExpense(ExpenseCategory.FOOD))/generalBudget.getBudgetItem(ExpenseCategory.FOOD).getBudgetAmount()); + clothesBar.setProgress((generalBudget.getBudgetItem(ExpenseCategory.CLOTHES).getBudgetAmount() - overview.getBudgetItemMinusExpense(ExpenseCategory.CLOTHES))/generalBudget.getBudgetItem(ExpenseCategory.CLOTHES).getBudgetAmount()); + bookBar.setProgress((generalBudget.getBudgetItem(ExpenseCategory.BOOKS).getBudgetAmount() - overview.getBudgetItemMinusExpense(ExpenseCategory.BOOKS))/generalBudget.getBudgetItem(ExpenseCategory.BOOKS).getBudgetAmount()); + otherBar.setProgress((generalBudget.getBudgetItem(ExpenseCategory.OTHER).getBudgetAmount() - overview.getBudgetItemMinusExpense(ExpenseCategory.OTHER))/generalBudget.getBudgetItem(ExpenseCategory.OTHER).getBudgetAmount()); } + /** + * Method that either reads data from a file with which it fills an income register, if older changes exist, or instantiates an income register if the file is empty. + * @param fileName The name of the file that is being read from. + * @return An object of type IncomeRegister. + * @throws IOException If an error occurs while reading from the file. + */ + public IncomeRegister loadIncomeDataFromFile(String fileName) throws IOException { + //Instantiate incomeRegister + if (fileHandling.isEmpty(fileName)) { + incomeRegister = new IncomeRegister(); + } else { //Load previous income register + try { + incomeRegister = fileHandling.readIncomeRegisterFromFile(fileName); + } catch (IOException e) { + e.printStackTrace(); + } + } + return incomeRegister; + } + + /** + * Method that either reads data from a file with which it fills an expense register, if older changes exist, or instantiates an expense register if the file is empty. + * @param fileName The name of the file that is being read from. + * @return An object of type IncomeRegister. + * @throws IOException If an error occurs while reading from the file. + */ + public ExpenseRegister loadExpenseDataFromFile(String fileName) throws IOException { + //Instantiate expense register + if (fileHandling.isEmpty(fileName)) { + expenseRegister = new ExpenseRegister(); + } else { + try { + expenseRegister = fileHandling.readExpenseRegisterFromFile(fileName); + } catch (IOException e) { + e.printStackTrace(); + } + } + return expenseRegister; + } + + /** + * Method that either reads data from a file with which it fills a budget register, if this is an old budget, or instantiates a budget register if this is a new budget. + * @param fileName The name of the file that is being read from. + * @return An object of type GeneralBudget. + * @throws IOException If an error occurs while reading from the file. + */ + public GeneralBudget loadBudgetDataFromFile(String fileName) throws IOException { + FileHandlingBudget fileHandlingBudget = new FileHandlingBudget(); + //Instantiate new budget + if (fileHandlingBudget.isEmpty(fileName)) { + generalBudget = new GeneralBudget(31, 1000); + } else { //Load previous budget + try { + generalBudget = fileHandlingBudget.readGeneralBudgetFromFile(fileName); + } catch (IOException e) { + e.printStackTrace(); + } + } + return generalBudget; + } + + /** * Method for disabling the date picker, yet having its opacity at max. */ @@ -147,6 +231,7 @@ public class MainMenu { date.setStyle("-fx-opacity: 1"); date.getEditor().setStyle("-fx-opacity: 1"); } + @FXML private void switchScene(ActionEvent event) throws IOException { FXMLLoader loader = new FXMLLoader(); -- GitLab