diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java index b2048c1..3058fa5 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java @@ -16,11 +16,9 @@ import edu.ntnu.idi.idatt2003.g40.mappe.view.playgame.PlayGameView; import edu.ntnu.idi.idatt2003.g40.mappe.view.settings.SettingsController; import edu.ntnu.idi.idatt2003.g40.mappe.view.settings.SettingsView; -import java.io.IOException; import java.math.BigDecimal; import java.util.List; import java.util.Objects; - import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.financialsummary.SummaryController; import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.financialsummary.SummaryView; import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.stats.StatsController; diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java index fffe422..88ca0b0 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java @@ -175,7 +175,6 @@ public Transaction buy(final String symbol, TransactionCalculator calculator = new PurchaseCalculator(share); Purchase purchase = new Purchase(share, week.get(), calculator); player.handleTransaction(purchase); - purchase.commit(player); return purchase; } @@ -197,7 +196,6 @@ public Transaction sell(final Share share, final Player player) TransactionCalculator calculator = new SaleCalculator(share); Sale sale = new Sale(share, week.get(), calculator); player.handleTransaction(sale); - sale.commit(player); return sale; } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/model/Player.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/model/Player.java index fc7ff3b..27af458 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/model/Player.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/model/Player.java @@ -172,14 +172,17 @@ public PlayerStatus getStatus() { * @param transaction the transaction to handle. * */ public void handleTransaction(final Transaction transaction) { - transactionArchive.add(transaction); - if (transaction instanceof Purchase purchase) { - withdrawMoney(purchase.getCalculator().calculateTotal()); - portfolio.addShare(purchase.getShare()); - } else if (transaction instanceof Sale sale) { - addMoney(sale.getCalculator().calculateTotal()); - portfolio.removeShare(sale.getShare()); + if (money.floatValue() > transaction.getCalculator().calculateTotal().floatValue()) { + transactionArchive.add(transaction); + if (transaction instanceof Purchase purchase) { + withdrawMoney(purchase.getCalculator().calculateTotal()); + portfolio.addShare(purchase.getShare()); + } else if (transaction instanceof Sale sale) { + addMoney(sale.getCalculator().calculateTotal()); + portfolio.removeShare(sale.getShare()); + } + networthAsFloatProp.setValue(getNetWorth().floatValue()); + transaction.commit(this); } - networthAsFloatProp.setValue(getNetWorth().floatValue()); } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/financialsummary/SummaryView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/financialsummary/SummaryView.java index 6527f0a..83a30e7 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/financialsummary/SummaryView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/financialsummary/SummaryView.java @@ -11,8 +11,6 @@ import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; - -import java.math.BigDecimal; import java.util.List; public class SummaryView extends ViewElement { @@ -55,11 +53,13 @@ protected void initLayout() { xAxis.setMinorTickVisible(false); xAxis.setTickMarkVisible(true); xAxis.setTickLabelsVisible(true); + xAxis.setAutoRanging(false); yAxis = new NumberAxis(); yAxis.setTickLabelsVisible(false); yAxis.setTickMarkVisible(false); yAxis.setMinorTickVisible(false); + yAxis.setAutoRanging(false); chart = new LineChart<>(xAxis, yAxis); chart.setCreateSymbols(false); diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java index c3a4544..20ddb65 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java @@ -2,10 +2,15 @@ import edu.ntnu.idi.idatt2003.g40.mappe.engine.Exchange; import edu.ntnu.idi.idatt2003.g40.mappe.model.Player; +import edu.ntnu.idi.idatt2003.g40.mappe.model.Share; import edu.ntnu.idi.idatt2003.g40.mappe.model.Stock; +import edu.ntnu.idi.idatt2003.g40.mappe.service.SaleCalculator; +import edu.ntnu.idi.idatt2003.g40.mappe.service.TransactionFactory; import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager; +import edu.ntnu.idi.idatt2003.g40.mappe.utils.Validator; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController; import javafx.scene.control.Button; +import javafx.scene.control.TextFormatter; import java.math.BigDecimal; import java.util.List; @@ -54,16 +59,25 @@ protected void initInteractions() { getViewElement().setCurrentStock(stockList.getFirst()); getViewElement().updateGraph(); getViewElement().setOnAction(StatsActions.BUY_SHARES, () -> { - BigDecimal amountToBuy = new BigDecimal("1.0"); - exchange.buy( - getViewElement().getCurrentStock().getSymbol(), - amountToBuy, - player - ); + if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText())) { + BigDecimal amountToBuy = new BigDecimal(getViewElement().getQuantityInputField().getText()); + exchange.buy( + getViewElement().getCurrentStock().getSymbol(), + amountToBuy, + player + ); + } }); exchange.weekProperty().addListener((observable,o,n) -> { getViewElement().updateGraph(); }); + + getViewElement().getQuantityInputField().setTextFormatter(new TextFormatter<>(change -> { + if (change.getControlNewText().matches("([0-9]*(\\.[0-9]*)?)?")) { + return change; + } + return null; + })); } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java index 31fd47a..2e490cc 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java @@ -16,6 +16,7 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; @@ -32,6 +33,7 @@ public class StatsView extends ViewElement { private NumberAxis xAxis; private NumberAxis yAxis; private Label selectedStockPriceLabel; + private TextField shareQuantityInputField; public StatsView() { stockButtons = new ArrayList<>(); @@ -114,9 +116,14 @@ protected void initLayout() { sellBtn.getStyleClass().add("sell-button"); registerButton(StatsActions.SELL_SHARES, sellBtn); + shareQuantityInputField = new TextField("1.0"); + + shareQuantityInputField.setPromptText("Quantity amount"); + + Region spacer = new Region(); HBox.setHgrow(spacer, Priority.ALWAYS); - tradeActions.getChildren().addAll(buyBtn, spacer, sellBtn); + tradeActions.getChildren().addAll(buyBtn, spacer, shareQuantityInputField, sellBtn); VBox.setVgrow(chart, Priority.ALWAYS); @@ -196,4 +203,8 @@ public void setOnStockAction(final Button button, { button.setOnAction(e -> logic.accept(stock)); } + + public TextField getQuantityInputField() { + return shareQuantityInputField; + } }