diff --git a/src/main/java/edu/ntnu/idi/idatt/Launcher.java b/src/main/java/edu/ntnu/idi/idatt/Launcher.java index 18c49a6..a7030b1 100644 --- a/src/main/java/edu/ntnu/idi/idatt/Launcher.java +++ b/src/main/java/edu/ntnu/idi/idatt/Launcher.java @@ -11,16 +11,16 @@ public final class Launcher { * Entry point of application. */ static void main() { - Application.launch(StockGame.class); + Application.launch(Millions.class); } - public static final class StockGame extends Application { + public static final class Millions extends Application { @Override public void start(Stage stage) { - stage.setWidth(1200); - stage.setHeight(700); - stage.setTitle("Stock Game"); + stage.setWidth(1440); + stage.setHeight(820); + stage.setTitle("Millions"); SceneManager.init(stage, SceneFactory.createStartView()); stage.show(); diff --git a/src/main/java/edu/ntnu/idi/idatt/model/Newspaper.java b/src/main/java/edu/ntnu/idi/idatt/model/market/Newspaper.java similarity index 97% rename from src/main/java/edu/ntnu/idi/idatt/model/Newspaper.java rename to src/main/java/edu/ntnu/idi/idatt/model/market/Newspaper.java index 4651b30..2271042 100644 --- a/src/main/java/edu/ntnu/idi/idatt/model/Newspaper.java +++ b/src/main/java/edu/ntnu/idi/idatt/model/market/Newspaper.java @@ -1,4 +1,4 @@ -package edu.ntnu.idi.idatt.model; +package edu.ntnu.idi.idatt.model.market; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/edu/ntnu/idi/idatt/model/market/Stock.java b/src/main/java/edu/ntnu/idi/idatt/model/market/Stock.java index fc64df5..74b9dd0 100644 --- a/src/main/java/edu/ntnu/idi/idatt/model/market/Stock.java +++ b/src/main/java/edu/ntnu/idi/idatt/model/market/Stock.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Random; -import edu.ntnu.idi.idatt.model.Newspaper; import edu.ntnu.idi.idatt.model.enums.NewspaperEnum; /** diff --git a/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java index 47819d5..f9552fa 100644 --- a/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java +++ b/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java @@ -63,7 +63,7 @@ public BigDecimal calculateTax() { BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity)) .subtract(calculateCommision()); // (gross - tax - buy costs) - return profit.multiply(taxPercentage); + return profit.max(BigDecimal.ZERO).multiply(taxPercentage); } diff --git a/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java b/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java index 94626d1..9bf250c 100644 --- a/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java +++ b/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java @@ -128,6 +128,36 @@ public static boolean loadSession(String playerName) { return false; } + /** + * Method to remove current session + */ + public static void removeSession() { + // don't save if current session is null accidentally + if (UserSession.getInstance().getPlayer() == null || UserSession.getInstance().getExchange() == null) { + return; + } + + // Load all sessions + List bundles = loadAllSessions(); + + try (Writer writer = new FileWriter(StorageFile.getStorageFile().toFile())) { + + // Append current session + SessionBundle existing = bundles.stream() + .filter(s -> s.getPlayer().getName().equals(UserSession.getInstance().getPlayer().getName())) + .findFirst().orElse(null); + + if (existing != null) { + bundles.remove(bundles.indexOf(existing)); + } + + gson.toJson(bundles, writer); + + } catch (IOException e) { + throw new RuntimeException("Failed to remove current session!", e); + } + } + /** * Method for serialization of all sessions. * diff --git a/src/main/java/edu/ntnu/idi/idatt/view/SceneFactory.java b/src/main/java/edu/ntnu/idi/idatt/view/SceneFactory.java index 5eb1390..a7d5d3e 100644 --- a/src/main/java/edu/ntnu/idi/idatt/view/SceneFactory.java +++ b/src/main/java/edu/ntnu/idi/idatt/view/SceneFactory.java @@ -2,6 +2,7 @@ import edu.ntnu.idi.idatt.model.market.Stock; import edu.ntnu.idi.idatt.session.UserSession; +import edu.ntnu.idi.idatt.storage.SessionManager; import edu.ntnu.idi.idatt.view.entry.StartController; import edu.ntnu.idi.idatt.view.entry.StartModel; import edu.ntnu.idi.idatt.view.entry.StartView; @@ -14,6 +15,9 @@ import edu.ntnu.idi.idatt.view.primary.exchange.ExchangeController; import edu.ntnu.idi.idatt.view.primary.exchange.ExchangeModel; import edu.ntnu.idi.idatt.view.primary.exchange.ExchangeView; +import edu.ntnu.idi.idatt.view.primary.finish.FinishController; +import edu.ntnu.idi.idatt.view.primary.finish.FinishModel; +import edu.ntnu.idi.idatt.view.primary.finish.FinishView; import edu.ntnu.idi.idatt.view.primary.stock.StockController; import edu.ntnu.idi.idatt.view.primary.stock.StockModel; import edu.ntnu.idi.idatt.view.primary.stock.StockView; @@ -148,4 +152,16 @@ public static Parent createNewspaperView(String symbol) { return view.getInstance(); } + public static Parent createFinishView() { + + FinishModel model = new FinishModel(); + FinishView view = new FinishView(); + FinishController controller = new FinishController(model); + + view.setController(controller); + + SessionManager.removeSession(); + return view.getInstance(); + } + } diff --git a/src/main/java/edu/ntnu/idi/idatt/view/components/AbstractViewUI.java b/src/main/java/edu/ntnu/idi/idatt/view/components/AbstractViewUI.java index 8c1a119..1f45c17 100644 --- a/src/main/java/edu/ntnu/idi/idatt/view/components/AbstractViewUI.java +++ b/src/main/java/edu/ntnu/idi/idatt/view/components/AbstractViewUI.java @@ -59,9 +59,9 @@ public void createUIComponents() { navigation = new VBox(); navigation.setMaxHeight(Double.MAX_VALUE); navigation.getStyleClass().add("dark"); - navigation.setPrefWidth(150); // ScrollPane's affect this massively - navigation.setMaxWidth(150); - navigation.setMinWidth(150); + navigation.setPrefWidth(300); // ScrollPane's affect this massively + navigation.setMaxWidth(300); + navigation.setMinWidth(300); header = new HBox(); header.getStyleClass().add("light"); diff --git a/src/main/java/edu/ntnu/idi/idatt/view/components/elements/RecieptComponent.java b/src/main/java/edu/ntnu/idi/idatt/view/components/elements/RecieptComponent.java new file mode 100644 index 0000000..fc156d1 --- /dev/null +++ b/src/main/java/edu/ntnu/idi/idatt/view/components/elements/RecieptComponent.java @@ -0,0 +1,104 @@ +package edu.ntnu.idi.idatt.view.components.elements; + +import java.util.List; + +import edu.ntnu.idi.idatt.model.transaction.Purchase; +import edu.ntnu.idi.idatt.model.transaction.Sale; +import edu.ntnu.idi.idatt.model.transaction.Transaction; +import edu.ntnu.idi.idatt.service.transaction.PurchaseCalculator; +import edu.ntnu.idi.idatt.service.transaction.SaleCalculator; +import edu.ntnu.idi.idatt.view.components.primitives.ActionEventHandler; +import edu.ntnu.idi.idatt.view.components.ui.UICompositor; +import edu.ntnu.idi.idatt.view.util.CssUtils; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; + +public class RecieptComponent extends VBox { + + private Button doneButton; + + public RecieptComponent(Transaction transaction) { + + Label title = new Label("Reciept"); + CssUtils.apply(title, CssUtils.BIG_TEXT_32); + + Label operation = new Label(); + String operationString = "Transaction type: %s, week: %d"; + + Label shareName = new Label(String.format("Share: %s", transaction.getShare().getStock().toString())); + Label shareAmount = new Label(String.format("Amount: %.3f", transaction.getShare().getQuantity())); + + Label gross = new Label(); + String grossString = "Gross: %.2f $"; + + Label tax = new Label(); + String taxString = "Taxes: %.2f $"; + + Label comission = new Label(); + String comissionString = "Comission: %.2f $"; + + Label total = new Label(); + String totalString = "Total: %.2f $"; + + Label profits = new Label(); + + List