Skip to content
Snippets Groups Projects
Commit b183c13b authored by Harry Linrui XU's avatar Harry Linrui XU
Browse files

Added methods for loading in registers + set progress for

mini progressbars
parent 15119bd5
No related branches found
No related tags found
3 merge requests!43Merging frontend-testing into master,!38"Made progressbar dynamic in accordance to spending. Added balance field....,!37Made the sub progress bars respond to changes in expense
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment