Skip to content
Snippets Groups Projects
AddExpenseController.java 3.31 KiB
package no.ntnu.idatt1002.demo.controller;

import java.text.NumberFormat;
import java.time.LocalDate;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import no.ntnu.idatt1002.demo.data.Economics.Expense;
import no.ntnu.idatt1002.demo.data.Economics.ExpenseCategory;
public class AddExpenseController {
  Expense newExpense = null; //the expense that is chosen when editing or the expense that is created when adding

  Expense chosenExpense = null; //an expense that is meant to track the old state of an expense before editing, in case cancel bugtton is clicked
  @FXML
  private Button cancelBtn;

  @FXML
  private Button okBtn;

  @FXML
  private TextField dateField;

  @FXML
  private DatePicker datePicker;

  @FXML
  private TextField descriptionField;

  @FXML
  private TextField amountField;

  @FXML
  private ComboBox<ExpenseCategory> categoryBox;

  @FXML
  private ComboBox<Boolean> recurringBox;

  @FXML
  public void initialize() {
    ObservableList<ExpenseCategory> expenseCategories = FXCollections.observableArrayList(
        ExpenseCategory.values());
    categoryBox.setItems(expenseCategories);
    categoryBox.setValue(ExpenseCategory.FOOD);

    ObservableList<Boolean> recurring = FXCollections.observableArrayList(true, false);
    recurringBox.setItems(recurring);
    recurringBox.setValue(false);

    System.out.print("This is in initialize");
    System.out.println(descriptionField);
  }

  public ExpenseCategory getCategory() {
    return categoryBox.getValue();
  }

  public boolean isRecurring() {
    return recurringBox.getValue();//.equals("Yes");
  }

  public void setExpense(Expense expense) { //TODO NEED CANCEL BUTTON TO REMOVE THE CHANGES IF CANCEL IS PRESSED
    dateField.textProperty().bindBidirectional(expense.dateProperty());
    amountField.textProperty().bindBidirectional(expense.amountProperty(), NumberFormat.getNumberInstance()); //TODO AMOUNT IS STORED WITH COMMA, WHICH IS NOT ALLOWED
    descriptionField.textProperty().bindBidirectional(expense.descriptionProperty());
    //categoryBox.valueProperty().bindBidirectional(expense.getCategory());
    recurringBox.valueProperty().bindBidirectional(expense.recurringProperty());
  }

  @FXML
  public void pressOkBtn(ActionEvent event) {
    if (newExpense == null) {
      String date = dateField.getText();
      double amount = Double.parseDouble(amountField.getText());
      String description = descriptionField.getText();
      ExpenseCategory category = getCategory();
      boolean recurring = isRecurring();
      newExpense = new Expense(description, amount, recurring, category, date);
      System.out.println(date + " " + amount + " " + description + " " + category + " " + recurring);
    }


    final Node source = (Node) event.getSource();
    ((Stage) source.getScene().getWindow()).close();
  }

  @FXML
  public void pressCancelBtn(ActionEvent event) {
    final Node source = (Node) event.getSource();
    final Stage stage = (Stage) source.getScene().getWindow();

    stage.close();
  }

  public Expense getNewExpense() {
    return this.newExpense;
  }
}