From cf09d0f8ae317245091593adf11d20b4b04df7ab Mon Sep 17 00:00:00 2001 From: = Date: Fri, 15 May 2026 12:29:19 +0200 Subject: [PATCH] Feat: Quantity Button and fixes Added functionality for the quantity buttons, and fixed some logic concerning selling/purchasing stocks and synchronizing the view. --- .../idatt2003/g40/mappe/engine/Exchange.java | 4 ++- .../idi/idatt2003/g40/mappe/model/Player.java | 18 +++++++------ .../widgets/dashboard/DashBoardActions.java | 5 +++- .../dashboard/DashBoardController.java | 26 ++++++++++++++++++- .../view/widgets/dashboard/DashBoardView.java | 4 +++ 5 files changed, 46 insertions(+), 11 deletions(-) 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 744bdce..cfa3940 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 @@ -227,7 +227,9 @@ public List sell(final BigDecimal amount, final String stockSymbol, BigDecimal remainingToSell = amount; for (Share share : sharesOfStock) { - if (remainingToSell.compareTo(BigDecimal.ZERO) <= 0) break; + if (remainingToSell.compareTo(BigDecimal.ZERO) <= 0) { + break; + } BigDecimal shareQty = share.getQuantity(); 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 999a316..9cac71e 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 @@ -186,18 +186,20 @@ public PlayerStatus getStatus() { * @param transaction the transaction to handle. * */ public void handleTransaction(final Transaction transaction) { - if (money.floatValue() > transaction.getCalculator().calculateTotal().floatValue()) { - transactionArchive.add(transaction); - if (transaction instanceof Purchase purchase) { + if (transaction instanceof Purchase purchase) { + if (money.floatValue() > transaction.getCalculator().calculateTotal().floatValue()) { withdrawMoney(purchase.getCalculator().calculateTotal()); portfolio.addShare(purchase.getShare()); - } else if (transaction instanceof Sale sale) { - addMoney(sale.getCalculator().calculateTotal()); - portfolio.removeShare(sale.getShare()); + transactionArchive.add(transaction); + transaction.commit(this); } - networthAsFloatProp.setValue(getNetWorth().floatValue()); - moneyAsFloatProp.setValue(money); + } else if (transaction instanceof Sale sale) { + addMoney(sale.getCalculator().calculateTotal()); + portfolio.removeShare(sale.getShare()); + transactionArchive.add(transaction); transaction.commit(this); } + networthAsFloatProp.setValue(getNetWorth().floatValue()); + moneyAsFloatProp.setValue(money); } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardActions.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardActions.java index e6fa822..f3facb4 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardActions.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardActions.java @@ -3,5 +3,8 @@ public enum DashBoardActions { BUY_SHARES, SELL_SHARES, - SELECT_STOCK; + DECREASE_5, + DECREASE_1, + INCREASE_1, + INCREASE_5; } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java index 87801b1..ecf8526 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java @@ -72,7 +72,10 @@ protected void initInteractions() { getViewElement().setOnAction(DashBoardActions.SELL_SHARES, () -> { if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText())) { - List transactions = exchange.sell(new BigDecimal(getViewElement().getQuantityInputField().getText()), getViewElement().getCurrentStock().getSymbol(), player); + List transactions = exchange.sell( + new BigDecimal(getViewElement().getQuantityInputField().getText()), + getViewElement().getCurrentStock().getSymbol(), + player); for (Transaction t : transactions) { if(t.isCommited()) { @@ -82,6 +85,27 @@ protected void initInteractions() { } }); + getViewElement().setOnAction(DashBoardActions.DECREASE_5, () -> { + getViewElement().getQuantityInputField().setText( + new BigDecimal(getViewElement().getQuantityInputField().getText()) + .subtract(new BigDecimal("5")).toString()); + }); + getViewElement().setOnAction(DashBoardActions.DECREASE_1, () -> { + getViewElement().getQuantityInputField().setText( + new BigDecimal(getViewElement().getQuantityInputField().getText()) + .subtract(new BigDecimal("1")).toString()); + }); + getViewElement().setOnAction(DashBoardActions.INCREASE_1, () -> { + getViewElement().getQuantityInputField().setText( + new BigDecimal(getViewElement().getQuantityInputField().getText()) + .add(new BigDecimal("1")).toString()); + }); + getViewElement().setOnAction(DashBoardActions.INCREASE_5, () -> { + getViewElement().getQuantityInputField().setText( + new BigDecimal(getViewElement().getQuantityInputField().getText()) + .add(new BigDecimal("5")).toString()); + }); + exchange.weekProperty().addListener((observable,o,n) -> { getViewElement().updateGraph(); }); diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java index 165f44b..2b612a0 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java @@ -194,6 +194,10 @@ protected void initLayout() { registerButton(DashBoardActions.BUY_SHARES, buyBtn); registerButton(DashBoardActions.SELL_SHARES, sellBtn); + registerButton(DashBoardActions.DECREASE_5, m5QtyBtn); + registerButton(DashBoardActions.DECREASE_1, m1QtyBtn); + registerButton(DashBoardActions.INCREASE_1, p1QtyBtn); + registerButton(DashBoardActions.INCREASE_5, p5QtyBtn); } private ColumnConstraints makeCol(final float w) {