Skip to content

Commit

Permalink
Merge pull request #24 from solvena/19-selling-a-selected-amount-of-s…
Browse files Browse the repository at this point in the history
…hares

19 selling a selected amount of shares
  • Loading branch information
elisab3 authored May 24, 2026
2 parents 5c9dfe7 + 71c1575 commit 2e7f3b8
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 7 deletions.
50 changes: 49 additions & 1 deletion src/main/java/Model/Exchange.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,20 @@ public Transaction buy(String symbol, BigDecimal quantity, Player player) {
}

public Transaction sell(Share share, Player player) {

return sell(share, share.getQuantity(), player);
}

public Transaction sell(Share originalShare, BigDecimal sellQuantity, Player player) {
if (originalShare == null || sellQuantity == null) {
return null;
}

// Kan ikke selge mer enn man eier
if (sellQuantity.compareTo(originalShare.getQuantity()) > 0) {
return null;
}

if (share == null) {
throw new IllegalArgumentException("Share cannot be null");
}
Expand All @@ -137,8 +151,42 @@ public Transaction sell(Share share, Player player) {
Sale sale = new Sale(share, this.week);
sale.commit(player);

notifyObservers();

Share shareToSell;

if (sellQuantity.compareTo(originalShare.getQuantity()) < 0) {

/**
* Delsalg:
* Original mengde - mengde som selges = gjenværende mengde
*/

player.getPortfolio().removeShare(originalShare);

BigDecimal remainderShare = originalShare.getQuantity().subtract(sellQuantity);

player.getPortfolio().addShare(new Share(originalShare.getStock(), remainderShare, originalShare.getPurchasePrice()));

/**
* Legger delmengden midlertidig til i portfolio slik at Sale.commit() finner den
*/

shareToSell = new Share(originalShare.getStock(), sellQuantity, originalShare.getPurchasePrice());

player.getPortfolio().addShare(shareToSell);

}

else {
// Fullstendig salg: hele andelen selges som normalt
shareToSell = originalShare;
}

// Salgstransaksjon via fabrikken
Transaction sale = TransactionFactory.createSale(shareToSell, this.week);

sale.commit(player);
notifyObservers();
return sale;
}

Expand Down
45 changes: 39 additions & 6 deletions src/main/java/View/MainGameScene.java
Original file line number Diff line number Diff line change
Expand Up @@ -289,22 +289,55 @@ protected void updateItem(Share s, boolean empty) {

updateHoldingsList(holdingsList);

// Antall Rad
HBox quantityRow = new HBox(8);
quantityRow.setAlignment(Pos.CENTER_LEFT);
TextField quantityField = new TextField();
quantityField.setPromptText("Antall");
quantityField.setPrefWidth(120);
quantityRow.getChildren().addAll(new Label("Quantity to sell:"), quantityField);

// Fyll inn maks anntall automatisk når man velger en holding
holdingsList.getSelectionModel().selectedItemProperty().addListener((obs, old, selected) -> {
if (selected != null) {
quantityField.setText(selected.getQuantity().toPlainString());
}
});

Button sellBtn = new Button("Sell Selected");
sellBtn.setOnAction(e -> {
Share selected = holdingsList.getSelectionModel().getSelectedItem();
if (selected == null) {
alert("Error", "Select a holding to sell");
return;
}
Transaction trans = exchange.sell(selected, player); // observer fires refresh
if (trans != null && trans.isCommitted()) {
showConfirmation("Sale successful", trans);
} else {
alert("Failed", "Could not complete sale");

try {
BigDecimal quantity = new BigDecimal(quantityField.getText().trim());

if (quantity.compareTo(BigDecimal.ZERO) <= 0) {
alert("Error", "Quantity must be greater than zero");
return;
}

Transaction trans = exchange.sell(selected, quantity, player); // observer fires refresh

if (trans != null && trans.isCommitted()) {
showConfirmation("Sale successful", trans);
}

else {
alert("Failed", "Could not complete sale. Check quantity.");
}
}

catch (NumberFormatException ex) {
alert("Error", "Enter a valid number for quantity");
}
});

box.getChildren().addAll(heading, holdingsList, sellBtn);
box.getChildren().addAll(heading, holdingsList, quantityRow, sellBtn);

return box;
}

Expand Down

0 comments on commit 2e7f3b8

Please sign in to comment.