From a1a76652abe306a880647d9718900f46741bc365 Mon Sep 17 00:00:00 2001
From: Harry Linrui XU <xulr0820@hotmail.com>
Date: Sun, 26 Mar 2023 12:42:52 +0200
Subject: [PATCH] "Implemented a sum field for all tableviews"

---
 .../demo/controller/BudgetController.java     | 15 ++++------
 .../demo/controller/ExpensesController.java   | 29 +++++++++----------
 .../demo/controller/IncomeController.java     | 13 ++++++---
 .../demo/controller/MainMenuController.java   | 11 ++++---
 src/main/resources/Economics/Expense.register |  5 ++++
 src/main/resources/view/BudgetNew.fxml        | 23 +++++++++++++--
 src/main/resources/view/Expenses.fxml         | 24 ++++++++++++++-
 src/main/resources/view/Income.fxml           | 21 +++++++++++++-
 src/main/resources/view/MainMenu.fxml         | 10 +++++--
 9 files changed, 112 insertions(+), 39 deletions(-)

diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java
index b2be85cb..76955931 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java
@@ -11,6 +11,7 @@ import javafx.scene.Scene;
 import javafx.scene.control.*;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.text.Text;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 import no.ntnu.idatt1002.demo.data.Budget.BudgetItem;
@@ -29,7 +30,6 @@ import no.ntnu.idatt1002.demo.data.Economics.IncomeRegister;
 
 public class BudgetController {
 
-    private DialogMode dialogMode;
     private GeneralBudget general;
 
     @FXML
@@ -59,20 +59,14 @@ public class BudgetController {
     @FXML
     private TableColumn<BudgetItem, ExpenseCategory> categoryColumn;
 
-    @FXML
-    private TextArea daysVariable;
-
     @FXML
     private TableColumn<BudgetItem, String> descriptionColumn;
 
     @FXML
-    private TextArea monthVariable;
+    private Text sum;
 
     @FXML
-    private TableColumn<?, ?> percentageColumn;
-
-    @FXML
-    private TextArea totalBudgetAmount;
+    private TableColumn<BudgetItem, Double> percentageColumn;
 
     @FXML
     private ObservableList<BudgetItem> budgetList;
@@ -87,6 +81,8 @@ public class BudgetController {
         general = loadIncomeDataFromFile("Budget");
         budgetList = FXCollections.observableArrayList(general.getBudgetItems());
         budgetTableView.setItems(budgetList);
+
+        sum.setText(String.valueOf(general.totalSum()));
     }
     @FXML
     public void switchAddBudget(javafx.event.ActionEvent event) throws IOException {
@@ -104,6 +100,7 @@ public class BudgetController {
 
         AddBudgetController budgetController = loader.getController();
 
+        DialogMode dialogMode;
         if(event.getSource().equals(addBudget)){
             dialogMode = DialogMode.ADD;
             dialogTitle = "New Budget";
diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java
index feb0ab94..4ef9cc43 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java
@@ -20,6 +20,7 @@ import javafx.scene.control.Dialog;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
 import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.text.Text;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 import no.ntnu.idatt1002.demo.data.Economics.Expense;
@@ -37,10 +38,6 @@ enum DialogMode {
 
 public class ExpensesController {
 
-  /**
-   * The mode of the dialog. NEW if new contact, EDIT if edit existing contact.
-   */
-  private DialogMode dialogMode;
   @FXML
   private Button addBtn;
   @FXML
@@ -56,13 +53,15 @@ public class ExpensesController {
   private Button incomeBtn;
 
   @FXML
-  private Button overviewBtn;
+  private Text sum;
 
   @FXML
   private Button budgetBtn;
 
   @FXML
   private Button returnBtn;
+
+
   @FXML
   private TableColumn<Expense, Double> amountColumn;
 
@@ -82,31 +81,29 @@ public class ExpensesController {
   private TableView<Expense> expenseTableView;
 
   @FXML
-  private TableView<Income> incomeTableView;
-
   ExpenseRegister expenseRegister;
   ObservableList<Expense> expenses;
 
   ObservableList<String> filter;
 
   @FXML
-  public void initialize()
-      throws IOException { //TODO SAME REGISTER FOR BOTH, BUT LOAD DIFFERENT DATA DEPENDING ON WHICH IT IS
+  public void initialize() throws IOException {
     dateColumn.setCellValueFactory(new PropertyValueFactory<Expense, String>("date"));
     amountColumn.setCellValueFactory(new PropertyValueFactory<Expense, Double>("amount"));
-    categoryColumn.setCellValueFactory(
-        new PropertyValueFactory<Expense, ExpenseCategory>("category"));
+    categoryColumn.setCellValueFactory(new PropertyValueFactory<Expense, ExpenseCategory>("category"));
     descriptionColumn.setCellValueFactory(new PropertyValueFactory<Expense, String>("description"));
     recurringColumn.setCellValueFactory(new PropertyValueFactory<Expense, Boolean>("recurring"));
 
     filter = FXCollections.observableArrayList("All", "Food", "Clothes", "Books", "Other",
         "Fixed expense");
+    show.setItems(filter);
+    show.setValue("All");
+
     expenseRegister = loadExpenseDataFromFile("Expense");
     expenses = FXCollections.observableArrayList(expenseRegister.getItems());
     expenseTableView.setItems(expenses);
 
-    show.setItems(filter);
-    show.setValue("All");
+    sum.setText(String.valueOf(expenseRegister.getTotalSum()));
   }
 
   @FXML
@@ -134,6 +131,10 @@ public class ExpensesController {
     // Get the controller for the loaded FXML file
     AddExpenseController dialogController = loader.getController();
 
+    /**
+     * The mode of the dialog. NEW if new contact, EDIT if edit existing contact.
+     */
+    DialogMode dialogMode;
     if (event.getSource().equals(addBtn)) {
       dialogMode = DialogMode.ADD;
       dialogTitle = "Add expense";
@@ -214,8 +215,6 @@ public class ExpensesController {
     FXMLLoader loader = new FXMLLoader();
     if (event.getSource() == incomeBtn) {
       loader.setLocation(SceneController.class.getResource("/view/Income.fxml"));
-    } else if (event.getSource() == overviewBtn) {
-      loader.setLocation(SceneController.class.getResource("/view/Overview.fxml"));
     } else if (event.getSource() == returnBtn) {
       loader.setLocation(SceneController.class.getResource("/view/FirstMenu.fxml"));
     } else if (event.getSource() == budgetBtn) {
diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java
index 457da80f..fea1cb48 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java
@@ -20,6 +20,7 @@ import javafx.scene.control.Dialog;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
 import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.text.Text;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 import no.ntnu.idatt1002.demo.data.Economics.Income;
@@ -58,6 +59,9 @@ public class IncomeController {
   private Button budgetBtn;
   @FXML
   private Button returnBtn;
+
+  @FXML
+  private Text sum;
   @FXML
   private TableColumn<Income, Double> amountColumn;
 
@@ -82,7 +86,7 @@ public class IncomeController {
   ObservableList<String> filter;
 
   @FXML
-  public void initialize() throws IOException { //TODO SAME REGISTER FOR BOTH, BUT LOAD DIFFERENT DATA DEPENDING ON WHICH IT IS
+  public void initialize() throws IOException {
     dateColumn.setCellValueFactory(new PropertyValueFactory<Income, String>("date"));
     amountColumn.setCellValueFactory(new PropertyValueFactory<Income, Double>("amount"));
     categoryColumn.setCellValueFactory(new PropertyValueFactory<Income, IncomeCategory>("category"));
@@ -90,13 +94,14 @@ public class IncomeController {
     recurringColumn.setCellValueFactory(new PropertyValueFactory<Income, Boolean>("recurring"));
 
     filter = FXCollections.observableArrayList("All", "Gift", "Salary", "Student loan", "Fixed income");
+    show.setItems(filter);
+    show.setValue("All");
+
     incomeRegister = loadIncomeDataFromFile("Income");
     income = FXCollections.observableArrayList(incomeRegister.getItems());
     incomeTableView.setItems(income);
 
-    show.setItems(filter);
-    show.setValue("All");
-
+    sum.setText(String.valueOf(incomeRegister.getTotalSum()));
     //if budget.register isEmpty -> disable expense
   }
 
diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java
index eadb9b4b..f59aedc7 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java
@@ -48,6 +48,7 @@ public class MainMenuController {
     @FXML
     private Label balanceLbl;
 
+
     @FXML
     public void initialize() throws IOException {
         IncomeController incomeController = new IncomeController();
@@ -56,16 +57,18 @@ public class MainMenuController {
         ExpensesController expensesController = new ExpensesController();
         ExpenseRegister expenseRegister = expensesController.loadExpenseDataFromFile("Expense");
 
-        System.out.println(expenseRegister.getTotalSum() + ",  " + incomeRegister.getTotalSum());
+        double incomeSum = incomeRegister.getTotalSum();
+        double expenseSum = expenseRegister.getTotalSum();
 
-        progressbar.setProgress(expenseRegister.getTotalSum()/incomeRegister.getTotalSum());
+        progressbar.setProgress(expenseSum/incomeSum);
         progressMarker.setTranslateX(-275 + progressbar.getProgress());
-        today.setTranslateX(-275 + progressbar.getProgress());
 
         budgetMonth.setText("BUDGET " + (LocalDate.EPOCH.getMonth()));
-        double balance = incomeRegister.getTotalSum() - expenseRegister.getTotalSum();
+        double balance = incomeSum - expenseSum;
         balanceLbl.setText("Balance: " + (balance));
 
+        today.setText("Used " + expenseSum + " out of " + incomeSum + " this month");
+
         if (balance < 0) {
             balanceLbl.setTextFill(Color.RED);
         }
diff --git a/src/main/resources/Economics/Expense.register b/src/main/resources/Economics/Expense.register
index 92c0b798..d05c78c3 100644
--- a/src/main/resources/Economics/Expense.register
+++ b/src/main/resources/Economics/Expense.register
@@ -10,3 +10,8 @@ amount=121.0
 isRecurring=Not recurring
 category=OTHER
 
+date=2023-03-26
+amount=4000.0
+isRecurring=Not recurring
+category=FOOD
+
diff --git a/src/main/resources/view/BudgetNew.fxml b/src/main/resources/view/BudgetNew.fxml
index a6912ef3..9cda09ce 100644
--- a/src/main/resources/view/BudgetNew.fxml
+++ b/src/main/resources/view/BudgetNew.fxml
@@ -15,7 +15,9 @@
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.Region?>
 <?import javafx.scene.layout.RowConstraints?>
+<?import javafx.scene.layout.StackPane?>
 <?import javafx.scene.layout.VBox?>
+<?import javafx.scene.shape.Rectangle?>
 <?import javafx.scene.text.Font?>
 <?import javafx.scene.text.Text?>
 
@@ -69,6 +71,7 @@
                   <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" />
                   <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" />
                   <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" />
+                  <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                </rowConstraints>
                <children>
                   <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0">
@@ -120,7 +123,7 @@
                         </ComboBox>
                      </children>
                   </VBox>
-                  <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2">
+                  <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="3">
                      <children>
                         <Button fx:id="incomeBtn" mnemonicParsing="false" onAction="#switchScene" text="Income" />
                         <Button fx:id="budgetBtn" disable="true" mnemonicParsing="false" onAction="#switchScene" text="Budget" />
@@ -138,14 +141,30 @@
                   <TableView fx:id="budgetTableView" prefHeight="260.0" prefWidth="485.0" GridPane.columnSpan="2" GridPane.rowIndex="1">
                      <columns>
                         <TableColumn fx:id="categoryColumn" prefWidth="75.0" text="Category/Title" />
-                        <TableColumn fx:id="percentageColumn" prefWidth="75.0" text="Percentage" />
                         <TableColumn fx:id="amountColumn" prefWidth="75.0" text="Amount" />
+                        <TableColumn fx:id="percentageColumn" prefWidth="75.0" text="Percentage" />
                         <TableColumn fx:id="descriptionColumn" prefWidth="75.0" text="Description" />
                      </columns>
                      <columnResizePolicy>
                         <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                      </columnResizePolicy>
                   </TableView>
+                  <StackPane GridPane.rowIndex="2">
+                     <children>
+                        <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#f8f8f8" height="18.0" stroke="#d9cccc" strokeType="INSIDE" width="209.0" StackPane.alignment="CENTER_LEFT" />
+                        <HBox prefHeight="18.0" prefWidth="517.0">
+                           <children>
+                              <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Sum: ">
+                                 <HBox.margin>
+                                    <Insets left="2.0" />
+                                 </HBox.margin>
+                              </Text>
+                              <Region prefHeight="18.0" prefWidth="101.0" />
+                              <Text fx:id="sum" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" />
+                           </children>
+                        </HBox>
+                     </children>
+                  </StackPane>
                </children>
             </GridPane>
          </center>
diff --git a/src/main/resources/view/Expenses.fxml b/src/main/resources/view/Expenses.fxml
index 31669e18..0311ce16 100644
--- a/src/main/resources/view/Expenses.fxml
+++ b/src/main/resources/view/Expenses.fxml
@@ -15,7 +15,9 @@
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.Region?>
 <?import javafx.scene.layout.RowConstraints?>
+<?import javafx.scene.layout.StackPane?>
 <?import javafx.scene.layout.VBox?>
+<?import javafx.scene.shape.Rectangle?>
 <?import javafx.scene.text.Font?>
 <?import javafx.scene.text.Text?>
 
@@ -69,6 +71,7 @@
                   <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" />
                   <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" />
                   <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" />
+                  <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                </rowConstraints>
                <children>
                   <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0">
@@ -117,7 +120,7 @@
                         </ComboBox>
                      </children>
                   </VBox>
-                  <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2">
+                  <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="3">
                      <children>
                       <Button fx:id="incomeBtn" mnemonicParsing="false" onAction="#switchScene" text="Income" />
                         <Button fx:id="budgetBtn" mnemonicParsing="false" onAction="#switchScene" text="Budget" />
@@ -130,6 +133,9 @@
                      <padding>
                         <Insets top="10.0" />
                      </padding>
+                     <GridPane.margin>
+                        <Insets top="5.0" />
+                     </GridPane.margin>
                   </HBox>
                   <TableView fx:id="expenseTableView" prefHeight="260.0" prefWidth="485.0" GridPane.columnSpan="2" GridPane.rowIndex="1">
                     <columns>
@@ -143,6 +149,22 @@
                         <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                      </columnResizePolicy>
                   </TableView>
+                  <StackPane GridPane.rowIndex="2">
+                     <children>
+                        <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#f8f8f8" height="18.0" stroke="#d9cccc" strokeType="INSIDE" width="209.0" StackPane.alignment="CENTER_LEFT" />
+                        <HBox prefHeight="18.0" prefWidth="517.0">
+                           <children>
+                              <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Sum: ">
+                                 <HBox.margin>
+                                    <Insets left="2.0" />
+                                 </HBox.margin>
+                              </Text>
+                              <Region prefHeight="18.0" prefWidth="74.0" />
+                              <Text fx:id="sum" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" />
+                           </children>
+                        </HBox>
+                     </children>
+                  </StackPane>
                </children>
             </GridPane>
          </center>
diff --git a/src/main/resources/view/Income.fxml b/src/main/resources/view/Income.fxml
index 3414dfcc..f9f1e586 100644
--- a/src/main/resources/view/Income.fxml
+++ b/src/main/resources/view/Income.fxml
@@ -15,7 +15,9 @@
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.Region?>
 <?import javafx.scene.layout.RowConstraints?>
+<?import javafx.scene.layout.StackPane?>
 <?import javafx.scene.layout.VBox?>
+<?import javafx.scene.shape.Rectangle?>
 <?import javafx.scene.text.Font?>
 <?import javafx.scene.text.Text?>
 
@@ -69,6 +71,7 @@
                   <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" />
                   <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" />
                   <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" />
+                  <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                </rowConstraints>
                <children>
                   <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0">
@@ -120,7 +123,7 @@
                         </ComboBox>
                      </children>
                   </VBox>
-                  <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2">
+                  <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="3">
                      <children>
                         <Button disable="true" mnemonicParsing="false" text="Income" />
                         <Button fx:id="budgetBtn" mnemonicParsing="false" onAction="#switchScene" text="Budget" />
@@ -147,6 +150,22 @@
                         <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                      </columnResizePolicy>
                   </TableView>
+                  <StackPane GridPane.rowIndex="2">
+                     <children>
+                        <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#f8f8f8" height="18.0" stroke="#d9cccc" strokeType="INSIDE" width="209.0" StackPane.alignment="CENTER_LEFT" />
+                        <HBox prefHeight="18.0" prefWidth="517.0">
+                           <children>
+                              <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Sum: ">
+                                 <HBox.margin>
+                                    <Insets left="2.0" />
+                                 </HBox.margin>
+                              </Text>
+                              <Region prefHeight="18.0" prefWidth="74.0" />
+                              <Text fx:id="sum" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" />
+                           </children>
+                        </HBox>
+                     </children>
+                  </StackPane>
                </children>
             </GridPane>
          </center>
diff --git a/src/main/resources/view/MainMenu.fxml b/src/main/resources/view/MainMenu.fxml
index 57af8262..5bc13db1 100644
--- a/src/main/resources/view/MainMenu.fxml
+++ b/src/main/resources/view/MainMenu.fxml
@@ -46,14 +46,18 @@
                   <VBox alignment="BOTTOM_RIGHT" GridPane.columnSpan="2">
                      <children>
                         <DatePicker fx:id="date" />
-                        <HBox alignment="BOTTOM_CENTER" prefHeight="28.0" prefWidth="574.0">
+                        <VBox alignment="BOTTOM_CENTER" prefHeight="67.0" prefWidth="574.0">
                            <children>
                               <Label fx:id="balanceLbl" text="Balance:" textAlignment="CENTER">
                                  <font>
                                     <Font name="System Bold" size="24.0" />
-                                 </font></Label>
+                                 </font>
+                              </Label>
                            </children>
-                        </HBox>
+                           <padding>
+                              <Insets bottom="-20.0" />
+                           </padding>
+                        </VBox>
                      </children>
                   </VBox>
                   <StackPane GridPane.columnSpan="2" GridPane.rowIndex="1">
-- 
GitLab