Sfoglia il codice sorgente

Now with old results and new Avarage calculation

Axel Nordh 3 anni fa
parent
commit
992aead9c0

+ 3 - 1
Odds/src/mysql/Mysql.java

@@ -126,7 +126,7 @@ public class Mysql {
 		return id;
 	}
 
-	public int getLeagueId(int sportId, int countryId, String leagueName) throws SQLException {
+	public int getLeagueId(int sportId, int countryId, String leagueName) {
 		final String sql = "SELECT id FROM League WHERE name = ? AND countryId = ? AND sportId = ?";
 		int id = -1;
 		try (PreparedStatement stat = conn.prepareStatement(sql)) {
@@ -139,6 +139,8 @@ public class Mysql {
 			while (rs.next()) {
 				id = rs.getInt("id");
 			}
+		} catch (SQLException e) {
+			e.printStackTrace();
 		}
 		return id;
 	}

+ 0 - 8
OddsJavaFx/.classpath

@@ -13,14 +13,6 @@
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFx"/>
-	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-		</attributes>
-	</classpathentry>
 	<classpathentry kind="src" output="target/classes" path="src">
 		<attributes>
 			<attribute name="optional" value="true"/>

+ 3 - 0
OddsJavaFx/.vscode/settings.json

@@ -0,0 +1,3 @@
+{
+  "java.configuration.updateBuildConfiguration": "automatic"
+}

+ 15 - 0
OddsJavaFx/pom.xml

@@ -14,6 +14,21 @@
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.10.1</version>
       </plugin>
+	        <plugin>
+        <groupId>org.openjfx</groupId>
+          <artifactId>javafx-maven-plugin</artifactId>
+          <version>0.0.6</version>
+          <executions>
+              <execution>
+                  <!-- Default configuration for running -->
+                  <!-- Usage: mvn clean javafx:run -->
+                  <id>default-cli</id>
+                  <configuration>
+                      <mainClass>application.Main</mainClass>
+                  </configuration>
+              </execution>
+          </executions>
+        </plugin>
     </plugins>
   </build>
    <dependencies>

+ 36 - 11
OddsJavaFx/src/controllers/MainController.java

@@ -5,6 +5,7 @@ import java.time.LocalDate;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.ResourceBundle;
 
@@ -55,14 +56,13 @@ public class MainController implements Initializable {
 	@FXML private Button showMatchStatsButton;
 	@FXML private TextField avgLeagueHomeScoreTxt;
 	@FXML private TextField avgLeagueAwayScoreTxt;
-	@FXML private TextField league0Goals;
-	@FXML private TextField league1Goal;
-	@FXML private TextField league1Goals;
-	@FXML private TextField league2Goals;
-	@FXML private TextField league3Goals;
-	@FXML private TextField league4Goals;
-	@FXML private TextField league5Goals;
-	@FXML private TextField league6Goals;
+	@FXML public TextField league0Goals;
+	@FXML public TextField league1Goals;
+	@FXML public TextField league2Goals;
+	@FXML public TextField league3Goals;
+	@FXML public TextField league4Goals;
+	@FXML public TextField league5Goals;
+	@FXML public TextField league6Goals;
 
 	@FXML private Pane glass;
 
@@ -157,6 +157,7 @@ public class MainController implements Initializable {
 			homeTeamSelector.setDisable(false);
 			awayTeamSelector.setDisable(false);
 			showMatchStatsButton.setDisable(false);
+			league6Goals.setText("0"); // Reset because adding
 			if (GuiMysql.getInstance().getParsingStarted(getCountryIdFromSelector(), getLeagueIdFromSelector())) {
 				getLeagueInfoButton.setDisable(true);
 				getMoreLeagueInfo.setDisable(false);
@@ -164,7 +165,7 @@ public class MainController implements Initializable {
 				getLeagueInfoButton.setDisable(false);
 				getMoreLeagueInfo.setDisable(true);
 			}
-			matchTabController.filterLeagueMatches(leagueSelector.getValue());
+			matchTabController.filterLeagueMatches(leagueSelector.getValue(), getCountryIdFromSelector());
 			updateStatsTableButton.setDisable(false);
 			final List<Float> leagueAvareges = GuiMysql.getInstance().getLeagueAvarages(getLeagueIdFromSelector(),
 					getCountryIdFromSelector());
@@ -172,6 +173,19 @@ public class MainController implements Initializable {
 			avgLeagueHomeScoreTxt.setText(leagueAvareges.get(0).toString());
 			avgLeagueAwayScoreTxt.setText(leagueAvareges.get(1).toString());
 
+			Map<Integer, Integer> goalAvgTheSeason = GuiMysql.getInstance()
+					.getGoalAvgThisSeason(getLeagueIdFromSelector(), getCountryIdFromSelector());
+
+			league0Goals.setText(goalAvgTheSeason.getOrDefault(0, 0).toString());
+			league1Goals.setText(goalAvgTheSeason.getOrDefault(1, 0).toString());
+			league2Goals.setText(goalAvgTheSeason.getOrDefault(2, 0).toString());
+			league3Goals.setText(goalAvgTheSeason.getOrDefault(3, 0).toString());
+			league4Goals.setText(goalAvgTheSeason.getOrDefault(4, 0).toString());
+			league5Goals.setText(goalAvgTheSeason.getOrDefault(5, 0).toString());
+			for (int i = 6; i < goalAvgTheSeason.size(); i++) {
+				addToMoreThan6Goals(goalAvgTheSeason.getOrDefault(i, 0));
+			}
+
 		} else {
 			getMoreLeagueInfo.setDisable(true);
 			getLeagueInfoButton.setDisable(true);
@@ -180,6 +194,18 @@ public class MainController implements Initializable {
 		}
 	}
 
+	private void addToMoreThan6Goals(Integer goals) {
+		String startValue = league6Goals.getText();
+		int intStartValue;
+		if (startValue.length() <= 0) {
+			intStartValue = 0;
+		} else {
+			intStartValue = Integer.parseInt(startValue);
+		}
+
+		league6Goals.setText(String.valueOf(intStartValue + goals));
+	}
+
 	@FXML private void resetFilter() {
 		sportSelector.setValue(SPORT);
 		countrySelector.setValue("Country");
@@ -204,7 +230,7 @@ public class MainController implements Initializable {
 	}
 
 	@FXML private void updateStatsTable() {
-		statTabController.setOverUnderTable(getLeagueIdFromSelector());
+		statTabController.setOverUnderTable(getLeagueIdFromSelector(), "");
 	}
 
 	@FXML private void getMoreLeagueInfo() {
@@ -239,5 +265,4 @@ public class MainController implements Initializable {
 				getLeagueIdFromSelector());
 		matchStatTabController.setLeagueStandingsTable(getLeagueIdFromSelector(), season, getCountryIdFromSelector());
 	}
-
 }

+ 160 - 23
OddsJavaFx/src/controllers/MatchTabController.java

@@ -19,20 +19,29 @@ import com.google.common.collect.Lists;
 import data.GuiMysql;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import javafx.scene.control.Button;
+import javafx.scene.control.TableCell;
 import javafx.scene.control.TableColumn;
+import javafx.scene.control.TablePosition;
 import javafx.scene.control.TableView;
 import javafx.scene.control.cell.MapValueFactory;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.control.cell.TextFieldTableCell;
+import javafx.util.Callback;
+import javafx.util.converter.FloatStringConverter;
+import javafx.util.converter.IntegerStringConverter;
+import objects.BetDTO;
+import objects.Constants;
 import objects.League;
 import objects.SoccerMatch;
 import objects.TeamResults;
 
 @SuppressWarnings("rawtypes") public class MatchTabController implements Initializable {
 
-	private static final String LEAGUE = "league";
-	private static final String HOME_WIN = "homeWin";
-	private static final String AWAY_WIN = "awayWin";
+	@FXML private TableView<Map<String, Object>> matchTable;
 	@FXML TableColumn<Map, String> gameDateColumn = new TableColumn<>("Gamedate");
 	@FXML TableColumn<Map, String> homeTeamColumn = new TableColumn<>("Home Team");
 	@FXML TableColumn<Map, String> awayTeamColumn = new TableColumn<>("Away Team");
@@ -49,11 +58,25 @@ import objects.TeamResults;
 	@FXML TableColumn<Map, String> countryColumn = new TableColumn<>("Country");
 	@FXML TableColumn<Map, String> leagueColumn = new TableColumn<>("League");
 
-	@FXML TableColumn<Map, String> homeWinColumn = new TableColumn<>(HOME_WIN);
+	@FXML TableColumn<Map, String> homeWinColumn = new TableColumn<>(Constants.HOME_WIN);
 	@FXML TableColumn<Map, String> drawColumn = new TableColumn<>("draw");
-	@FXML TableColumn<Map, String> awayWinColumn = new TableColumn<>(AWAY_WIN);
+	@FXML TableColumn<Map, String> awayWinColumn = new TableColumn<>(Constants.AWAY_WIN);
+	@FXML TableColumn<Map, String> scoringScore = new TableColumn<>("scoringScore");
 
-	@FXML private TableView<Map<String, Object>> matchTable;
+	@FXML TableColumn<Map, Boolean> addToBetSlip = new TableColumn<>("addToBetslip");
+
+	@FXML private TableView<BetDTO> activeBettingTable;
+	private final ObservableList<BetDTO> betObservableList = FXCollections.observableArrayList();
+
+	@FXML TableColumn<BetDTO, Integer> betSeries = new TableColumn<>("Bet series");
+	@FXML TableColumn<BetDTO, String> gameDate = new TableColumn<>("Game date");
+	@FXML TableColumn<BetDTO, String> match = new TableColumn<>("Match");
+	@FXML TableColumn<BetDTO, String> betType = new TableColumn<>("Bet type");
+	@FXML TableColumn<BetDTO, Float> bet = new TableColumn<>("Bet amount");
+	@FXML TableColumn<BetDTO, Float> odds = new TableColumn<>("Odds");
+	@FXML TableColumn<BetDTO, String> result = new TableColumn<>("Result");
+	@FXML TableColumn<BetDTO, String> winAmount = new TableColumn<>("Win amount");
+	@FXML TableColumn<BetDTO, Void> submitButton = new TableColumn<>("Submit row");
 
 	private ObservableList<Map<String, Object>> coutryFilteredMatches;
 	private List<SoccerMatch> upcomingMatches;
@@ -74,11 +97,92 @@ import objects.TeamResults;
 		avgScoreAwayColumn.setCellValueFactory(new MapValueFactory<>("avgScoreAway"));
 		avgConcededAwayColumn.setCellValueFactory(new MapValueFactory<>("avgConcededAway"));
 		countryColumn.setCellValueFactory(new MapValueFactory<>("country"));
-		leagueColumn.setCellValueFactory(new MapValueFactory<>(LEAGUE));
+		leagueColumn.setCellValueFactory(new MapValueFactory<>(Constants.LEAGUE));
 
-		homeWinColumn.setCellValueFactory(new MapValueFactory<>(HOME_WIN));
+		homeWinColumn.setCellValueFactory(new MapValueFactory<>(Constants.HOME_WIN));
 		drawColumn.setCellValueFactory(new MapValueFactory<>("draw"));
-		awayWinColumn.setCellValueFactory(new MapValueFactory<>(AWAY_WIN));
+		awayWinColumn.setCellValueFactory(new MapValueFactory<>(Constants.AWAY_WIN));
+		scoringScore.setCellValueFactory(new MapValueFactory<>("scoringScore"));
+
+		betSeries.setCellValueFactory(new PropertyValueFactory<>("betSeries"));
+		gameDate.setCellValueFactory(new PropertyValueFactory<>("gameDate"));
+		match.setCellValueFactory(new PropertyValueFactory<>("match"));
+		betType.setCellValueFactory(new PropertyValueFactory<>("betType"));
+		bet.setCellValueFactory(new PropertyValueFactory<>("bet"));
+		odds.setCellValueFactory(new PropertyValueFactory<>("odds"));
+		result.setCellValueFactory(new PropertyValueFactory<>("result"));
+		winAmount.setCellValueFactory(new PropertyValueFactory<>("winAmount"));
+
+		makeColumnsEditable();
+
+		activeBettingTable.getColumns().addAll(betSeries, gameDate, match, betType, bet, odds, result, winAmount);
+		activeBettingTable.setItems(betObservableList);
+
+		activeBettingTable.setEditable(true);
+
+		addSubmitButtonToTable();
+
+		addActiveBetsFromDatabase();
+
+	}
+
+	private void addActiveBetsFromDatabase() {
+		betObservableList.addAll(GuiMysql.getInstance().getBetSeries(false));
+	}
+
+	private void makeColumnsEditable() {
+		betSeries.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));
+		betSeries.setOnEditCommit(
+				e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setBetSeries(e.getNewValue()));
+
+		gameDate.setCellFactory(TextFieldTableCell.forTableColumn());
+		gameDate.setOnEditCommit(
+				e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setGameDate(e.getNewValue()));
+
+		match.setCellFactory(TextFieldTableCell.forTableColumn());
+		match.setOnEditCommit(
+				e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setMatch(e.getNewValue()));
+		betType.setCellFactory(TextFieldTableCell.forTableColumn());
+		betType.setOnEditCommit(
+				e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setBetType(e.getNewValue()));
+		bet.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConverter()));
+		bet.setOnEditCommit(
+				e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setBet(e.getNewValue()));
+		odds.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConverter()));
+		odds.setOnEditCommit(
+				e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setOdds(e.getNewValue()));
+	}
+
+	private void addSubmitButtonToTable() {
+		Callback<TableColumn<BetDTO, Void>, TableCell<BetDTO, Void>> cellFactory = new Callback<TableColumn<BetDTO, Void>, TableCell<BetDTO, Void>>() {
+			@Override public TableCell<BetDTO, Void> call(final TableColumn<BetDTO, Void> param) {
+				final TableCell<BetDTO, Void> cell = new TableCell<BetDTO, Void>() {
+
+					private final Button btn = new Button("Submit");
+					{
+						btn.setOnAction((ActionEvent event) -> {
+							BetDTO data = getTableView().getItems().get(getIndex());
+							GuiMysql.getInstance().addBetSeries(data);
+						});
+					}
+
+					@Override public void updateItem(Void item, boolean empty) {
+						super.updateItem(item, empty);
+						if (empty) {
+							setGraphic(null);
+						} else {
+							setGraphic(btn);
+						}
+					}
+				};
+				return cell;
+			}
+		};
+
+		submitButton.setCellFactory(cellFactory);
+
+		activeBettingTable.getColumns().add(submitButton);
+
 	}
 
 	public void setMatches(List<SoccerMatch> upcomingMatches) {
@@ -106,13 +210,9 @@ import objects.TeamResults;
 			match.put("goalsAway",
 					GuiMysql.getInstance().round(BigDecimal.valueOf(avgAwayTeamGoals.get(0) + avgHomeTeamGoals.get(1)),
 							GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
-			match.put("goalDiff",
-					GuiMysql.getInstance()
-							.round(BigDecimal.valueOf((avgHomeTeamGoals.get(0) + avgAwayTeamGoals.get(1))
-									- (avgAwayTeamGoals.get(0) + avgHomeTeamGoals.get(1))),
-									GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
+
 			match.put("country", soccerMatch.getHomeTeam().getCountryName());
-			match.put(LEAGUE, soccerMatch.getHomeTeam().getTeamLeague());
+			match.put(Constants.LEAGUE, soccerMatch.getHomeTeam().getTeamLeague());
 
 			final DecimalFormat df = new DecimalFormat("#.##");
 			df.setRoundingMode(RoundingMode.CEILING);
@@ -145,29 +245,44 @@ import objects.TeamResults;
 			final float awayWinPercent = (homeTeamResults.getLosses() + awayTeamResults.getWins())
 					/ Float.valueOf(homeTeamResults.getCount() + Float.valueOf(awayTeamResults.getCount())) * 100;
 
-			match.put(HOME_WIN, String.format(FLOAT_FORMAT, homeWinPercent) + "("
+			match.put(Constants.HOME_WIN, String.format(FLOAT_FORMAT, homeWinPercent) + "("
 					+ String.format(FLOAT_FORMAT, (100 / homeWinPercent) * betMargin) + ")");
 			match.put("draw", String.format(FLOAT_FORMAT, drawPercent) + "("
 					+ String.format(FLOAT_FORMAT, (100 / drawPercent) * betMargin) + ")");
-			match.put(AWAY_WIN, String.format(FLOAT_FORMAT, awayWinPercent) + "("
+			match.put(Constants.AWAY_WIN, String.format(FLOAT_FORMAT, awayWinPercent) + "("
 					+ String.format(FLOAT_FORMAT, (100 / awayWinPercent) * betMargin) + ")");
 
+			List<Float> avgHomeScoreThisSeason = GuiMysql.getInstance().getAvgHomeScoreThisSeason(
+					soccerMatch.getHomeTeam().getTeamId(), soccerMatch.getHomeTeam().getCountryId(),
+					soccerMatch.getHomeTeam().getTeamLeagueId());
+			List<Float> avgAwayScoreThisSeason = GuiMysql.getInstance().getAvgAwayScoreThisSeason(
+					soccerMatch.getAwayTeam().getTeamId(), soccerMatch.getAwayTeam().getCountryId(),
+					soccerMatch.getAwayTeam().getTeamLeagueId());
+
+			match.put("scoringScore", (avgHomeScoreThisSeason.get(0) * avgAwayScoreThisSeason.get(1))
+					+ (avgAwayScoreThisSeason.get(0) * avgHomeScoreThisSeason.get(1)));
+
+			match.put("goalDiff",
+					GuiMysql.getInstance()
+							.round(BigDecimal.valueOf((avgHomeScoreThisSeason.get(0) * avgAwayScoreThisSeason.get(1))
+									+ (avgAwayScoreThisSeason.get(0) * avgHomeScoreThisSeason.get(1))),
+									GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
+			match.put("addToBetslip", false);
+
 			matches.add(match);
 		}
-
 		matchTable.getItems().addAll(matches);
-
 	}
 
-	public void filterLeagueMatches(String filterByName) {
+	public void filterLeagueMatches(String filterByName, int countryId) {
 		List<SoccerMatch> filteredMatches = upcomingMatches.stream()
+				.filter(p -> p.getHomeTeam().getCountryId() == countryId)
 				.filter(p -> p.getHomeTeam().getTeamLeague().equals(filterByName)).toList();
 		matchTable.getItems().clear();
 		setMatches(new ArrayList<>(filteredMatches));
 	}
 
 	public void filterCountryMatches(String filterByName) {
-
 		List<SoccerMatch> filteredMatches = upcomingMatches.stream()
 				.filter(p -> p.getHomeTeam().getCountryName().equals(filterByName)).toList();
 
@@ -195,8 +310,8 @@ import objects.TeamResults;
 	public List<String> getLeaguesFromSelection() {
 		final ArrayList<String> leagues = Lists.newArrayList();
 		coutryFilteredMatches.forEach(f -> {
-			if (!leagues.contains(f.get(LEAGUE))) {
-				leagues.add((String) f.get(LEAGUE));
+			if (!leagues.contains(f.get(Constants.LEAGUE))) {
+				leagues.add((String) f.get(Constants.LEAGUE));
 			}
 		});
 		return leagues;
@@ -214,5 +329,27 @@ import objects.TeamResults;
 
 	public void setUpcomingMatches(List<SoccerMatch> upcomingMatches) {
 		this.upcomingMatches = upcomingMatches;
+		matchTable.getItems().clear();
+		setMatches(new ArrayList<>(upcomingMatches));
 	}
+
+	@FXML public void addRowAction(ActionEvent event) {
+		ObservableList<TablePosition> selectedCells = matchTable.getSelectionModel().getSelectedCells();
+		if (selectedCells.size() > 0) {
+			Map<String, Object> selectedRow = matchTable.getItems().get(selectedCells.get(0).getRow());
+			BetDTO betDTO = new BetDTO();
+			betDTO.setHomeTeam(selectedRow.get("homeTeam").toString());
+			betDTO.setAwayTeam(selectedRow.get("awayTeam").toString());
+			betDTO.setGameDate(selectedRow.get("gameDate").toString());
+			betDTO.setBetSeries(-1);
+			betDTO.setMatch(selectedRow.get("homeTeam").toString(), selectedRow.get("awayTeam").toString());
+			betDTO.setBetType("O/U 1.5");
+			betDTO.setWinAmount(-1);
+
+			betObservableList.add(betDTO);
+		} else {
+			System.out.println("No row selected");
+		}
+	}
+
 }

+ 190 - 28
OddsJavaFx/src/controllers/PastResultsController.java

@@ -1,9 +1,14 @@
 package controllers;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URL;
-import java.time.LocalDate;
+import java.text.DecimalFormat;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.ResourceBundle;
 
@@ -17,39 +22,88 @@ import javafx.collections.ObservableList;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
-import javafx.scene.control.Button;
 import javafx.scene.control.ComboBox;
 import javafx.scene.control.DatePicker;
-import javafx.scene.control.ScrollPane;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.cell.MapValueFactory;
 import javafx.scene.layout.AnchorPane;
+import objects.Constants;
+import objects.SoccerMatch;
 
-public class PastResultsController implements Initializable {
+@SuppressWarnings("rawtypes") public class PastResultsController implements Initializable {
 
 	@FXML AnchorPane basePane;
-	@FXML Button getResults;
-	@FXML ScrollPane resultsPanel;
+	@FXML TableView<Map<String, Object>> matchTable;
 	@FXML DatePicker date;
-	@FXML ComboBox<String> sportSelector;
 	@FXML ComboBox<String> countrySelector;
 	@FXML ComboBox<String> leagueSelector;
 
+	@FXML TableColumn<Map, String> gameDateColumn = new TableColumn<>("Gamedate");
+	@FXML TableColumn<Map, String> homeTeamColumn = new TableColumn<>("Home Team");
+	@FXML TableColumn<Map, String> awayTeamColumn = new TableColumn<>("Away Team");
+	@FXML TableColumn<Map, Float> odds1Column = new TableColumn<>("odds 1");
+	@FXML TableColumn<Map, Float> oddsXColumn = new TableColumn<>("odds X");
+	@FXML TableColumn<Map, Float> odds2Column = new TableColumn<>("odds 2");
+	@FXML TableColumn<Map, Float> goalsHomeColumn = new TableColumn<>("Goals home");
+	@FXML TableColumn<Map, Float> goalsAwayColumn = new TableColumn<>("Goals away");
+	@FXML TableColumn<Map, Float> goalDiff = new TableColumn<>("Difference");
+	@FXML TableColumn<Map, Float> avgScoreHomeColumn = new TableColumn<>("Avg score home");
+	@FXML TableColumn<Map, Float> avgConcededHomeColumn = new TableColumn<>("Avg conceded home");
+	@FXML TableColumn<Map, Float> avgScoreAwayColumn = new TableColumn<>("Avg score away");
+	@FXML TableColumn<Map, Float> avgConcededAwayColumn = new TableColumn<>("Avg conceded away");
+
+	@FXML TableColumn<Map, String> avgHomeScoredSeason = new TableColumn<>("AvgHomeScoredThisSeason");
+	@FXML TableColumn<Map, String> avgHomeConcededSeason = new TableColumn<>("AvgHomeConcededThisSeason");
+
+	@FXML TableColumn<Map, String> avgAwayScoredSeason = new TableColumn<>("AvgAwayScoredThisSeason");
+	@FXML TableColumn<Map, String> avgAwayConcededSeason = new TableColumn<>("AvgAwayConcededThisSeason");
+
+	@FXML TableColumn<Map, String> sumScoringColumn = new TableColumn<>("Sum scoring");
+	@FXML TableColumn<Map, String> drawColumn = new TableColumn<>("draw");
+	@FXML TableColumn<Map, String> awayWinColumn = new TableColumn<>(Constants.AWAY_WIN);
+
 	ObservableList<String> sports = FXCollections.observableArrayList();
 	ObservableList<String> countries = FXCollections.observableArrayList();
 	ObservableList<String> leagues = FXCollections.observableArrayList();
 
 	private final ArrayList<SimpleEntry<Integer, String>> sportsList = Lists.newArrayList();
 	private final ArrayList<SimpleEntry<Integer, String>> countriesList = Lists.newArrayList();
+	private final ArrayList<SimpleEntry<Integer, String>> leaguesList = Lists.newArrayList();
+
+	GuiMysql db = GuiMysql.getInstance();
 
 	@Override public void initialize(URL arg0, ResourceBundle arg1) {
+		gameDateColumn.setCellValueFactory(new MapValueFactory<>("gameDate"));
+		homeTeamColumn.setCellValueFactory(new MapValueFactory<>("homeTeam"));
+		awayTeamColumn.setCellValueFactory(new MapValueFactory<>("awayTeam"));
+		odds1Column.setCellValueFactory(new MapValueFactory<>("odds1"));
+		oddsXColumn.setCellValueFactory(new MapValueFactory<>("oddsX"));
+		odds2Column.setCellValueFactory(new MapValueFactory<>("odds2"));
+		goalsHomeColumn.setCellValueFactory(new MapValueFactory<>("goalsHome"));
+		goalsAwayColumn.setCellValueFactory(new MapValueFactory<>("goalsAway"));
+		goalDiff.setCellValueFactory(new MapValueFactory<>("goalDiff"));
+		avgScoreHomeColumn.setCellValueFactory(new MapValueFactory<>("avgScoreHome"));
+		avgConcededHomeColumn.setCellValueFactory(new MapValueFactory<>("avgConcededHome"));
+		avgScoreAwayColumn.setCellValueFactory(new MapValueFactory<>("avgScoreAway"));
+		avgConcededAwayColumn.setCellValueFactory(new MapValueFactory<>("avgConcededAway"));
+
+		avgHomeScoredSeason.setCellValueFactory(new MapValueFactory<>("avgScoredHomeSeason"));
+		avgHomeConcededSeason.setCellValueFactory(new MapValueFactory<>("avgConcededHomeSeason"));
+		avgAwayScoredSeason.setCellValueFactory(new MapValueFactory<>("avgScoredAwaySeason"));
+		avgAwayConcededSeason.setCellValueFactory(new MapValueFactory<>("avgConcededAwaySeason"));
+
+		sumScoringColumn.setCellValueFactory(new MapValueFactory<>("sumScoring"));
+		drawColumn.setCellValueFactory(new MapValueFactory<>("draw"));
+		awayWinColumn.setCellValueFactory(new MapValueFactory<>(Constants.AWAY_WIN));
 
-		getResults.setDisable(true);
 		basePane.setPrefWidth(0.0);
 		basePane.setPrefHeight(0.0);
 
-		resultsPanel.setPrefHeight(0.0);
-
-		date.valueProperty()
-				.addListener((ov, oldValue, newValue) -> getResults.setDisable(newValue.isAfter(LocalDate.now())));
+		date.valueProperty().addListener((ov, oldValue, newValue) -> {
+			clear();
+			getCountriesAtDate();
+		});
 
 		sportsList.addAll(GuiMysql.getInstance().getSports());
 		sports.add(MainController.SPORT);
@@ -59,40 +113,148 @@ public class PastResultsController implements Initializable {
 			}
 		}
 
-		sportSelector.setItems(sports);
 		countrySelector.setItems(countries);
 		leagueSelector.setItems(leagues);
 
 	}
 
+	private void clear() {
+		matchTable.getItems().clear();
+		countriesList.clear();
+		leaguesList.clear();
+		countries.clear();
+		leagues.clear();
+	}
+
+	private void getCountriesAtDate() {
+		countriesList.clear();
+		countriesList.addAll(GuiMysql.getInstance().getCountriesBySport(db.getSportId(MainController.SPORT),
+				date.getValue().toString()));
+
+		countriesList.forEach(c -> countries.add(c.getValue()));
+	}
+
+	private void getLeaguesAtDate(int countryId) {
+		leaguesList.clear();
+		leaguesList.addAll(db.getLeaguesByDate(db.getSportId("soccer"), countryId, date.getValue().toString()));
+
+		leaguesList.forEach(l -> leagues.add(l.getValue()));
+	}
+
 	@FXML private void getResults() {
 		throw new NotImplementedException();
 	}
 
 	@FXML private void countrySelected(ActionEvent event) {
-		throw new NotImplementedException();
+		if (getCountryIdFromSelector() != null) {
+			getLeaguesAtDate(getCountryIdFromSelector());
+			leagueSelector.setDisable(false);
+		}
 	}
 
-	@FXML private void sportSelected(ActionEvent event) {
-		if (sportSelector.getValue() != null && !sportSelector.getValue().equals("Sport")) {
-			countrySelector.setDisable(false);
-			final int sportId = getSportIdFromName(sportSelector.getValue());
+	private Integer getCountryIdFromSelector() {
+		Optional<SimpleEntry<Integer, String>> o = countriesList.stream()
+				.filter(p -> p.getValue().equals(countrySelector.getValue())).findFirst();
+		return o.isPresent() ? o.get().getKey() : null;
+	}
+
+	private Integer getLeagueIdFromSelector() {
+		Optional<SimpleEntry<Integer, String>> o = leaguesList.stream()
+				.filter(p -> p.getValue().equals(leagueSelector.getValue())).findFirst();
+		return o.isPresent() ? o.get().getKey() : null;
+	}
 
-			// GetCuntries by Sport needed
-			countriesList.clear();
-			countriesList.addAll(GuiMysql.getInstance().getCountriesBySport(sportId, date.getValue().toString()));
+	@FXML private void leagueSelected(ActionEvent event) {
+		if (getCountryIdFromSelector() != null) {
+			List<SoccerMatch> matchesList = db.getMatches(db.getSportId(MainController.SOCCER),
+					getCountryIdFromSelector(), db.getLeagueId(db.getSportId(MainController.SOCCER),
+							getCountryIdFromSelector(), leagueSelector.getValue()),
+					date.getValue().toString(), "ASC", true);
 
-			countriesList.forEach(c -> countries.add(c.getValue()));
+			ObservableList<Map<String, Object>> matches = FXCollections.<Map<String, Object>>observableArrayList();
+
+			for (final SoccerMatch soccerMatch : matchesList) {
+
+				final Map<String, Object> match = new HashMap<>();
+				match.put("homeTeam", soccerMatch.getHomeTeam().getTeamName());
+				match.put("awayTeam", soccerMatch.getAwayTeam().getTeamName());
+				match.put("odds1", soccerMatch.getOdds1());
+				match.put("oddsX", soccerMatch.getOddsX());
+				match.put("odds2", soccerMatch.getOdds2());
+
+				final List<Float> avgHomeTeamGoals = calculateAvgHomeScore(soccerMatch.getHomeTeam().getTeamId());
+				final List<Float> avgAwayTeamGoals = calculateAvgAwayScore(soccerMatch.getAwayTeam().getTeamId());
+
+				final List<Float> avgHomeTeamGoalsThisSeason = calculateAvgHomeScoreThisSeason(
+						soccerMatch.getHomeTeam().getTeamId(), soccerMatch.getHomeTeam().getCountryId(),
+						soccerMatch.getHomeTeam().getTeamLeagueId());
+				final List<Float> avgAwayTeamGoalsThisSeason = calculateAvgAwayScoreThisSeason(
+						soccerMatch.getAwayTeam().getTeamId(), soccerMatch.getAwayTeam().getCountryId(),
+						soccerMatch.getAwayTeam().getTeamLeagueId());
+
+				match.put("gameDate", soccerMatch.getGameDate().toString());
+				match.put("avgScoreHome", avgHomeTeamGoals.get(0));
+				match.put("avgConcededHome", avgHomeTeamGoals.get(1));
+				match.put("avgScoreAway", avgAwayTeamGoals.get(0));
+				match.put("avgConcededAway", avgAwayTeamGoals.get(1));
+
+				match.put("avgScoredHomeSeason", avgHomeTeamGoalsThisSeason.get(0));
+				match.put("avgConcededHomeSeason", avgHomeTeamGoalsThisSeason.get(1));
+
+				match.put("avgScoredAwaySeason", avgAwayTeamGoalsThisSeason.get(0));
+				match.put("avgConcededAwaySeason", avgAwayTeamGoalsThisSeason.get(1));
+
+				match.put("sumScoring", avgHomeTeamGoalsThisSeason.get(0) * avgAwayTeamGoalsThisSeason.get(1)
+						+ avgAwayTeamGoalsThisSeason.get(0) * avgHomeTeamGoalsThisSeason.get(1));
+
+				match.put("goalsHome",
+						GuiMysql.getInstance()
+								.round(BigDecimal
+										.valueOf(avgHomeTeamGoalsThisSeason.get(0) + avgAwayTeamGoalsThisSeason.get(1)),
+										GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
+				match.put("goalsAway",
+						GuiMysql.getInstance()
+								.round(BigDecimal
+										.valueOf(avgAwayTeamGoalsThisSeason.get(0) + avgHomeTeamGoalsThisSeason.get(1)),
+										GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
+
+				match.put("goalDiff", GuiMysql.getInstance().round(
+						BigDecimal.valueOf((avgHomeTeamGoalsThisSeason.get(0) * avgAwayTeamGoalsThisSeason.get(1))
+								+ (avgAwayTeamGoalsThisSeason.get(0) * avgHomeTeamGoalsThisSeason.get(1))),
+						GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
+				match.put("country", soccerMatch.getHomeTeam().getCountryName());
+				match.put(Constants.LEAGUE, soccerMatch.getHomeTeam().getTeamLeague());
+
+				final DecimalFormat df = new DecimalFormat("#.##");
+				df.setRoundingMode(RoundingMode.CEILING);
+
+//			final League leagueInfo = GuiMysql.getInstance().getLeagueInfo(soccerMatch.getHomeTeam().getTeamLeague());
+
+				matches.add(match);
+			}
+			matchTable.getItems().addAll(matches);
 		}
 	}
 
-	private int getSportIdFromName(String value) {
-		Optional<SimpleEntry<Integer, String>> o = sportsList.stream().filter(p -> p.getValue().equals(value))
-				.findFirst();
-		return o.isPresent() ? o.get().getKey() : null;
+	private List<Float> calculateAvgHomeScore(int teamId) {
+		return GuiMysql.getInstance().getAvgHomeScore(teamId);
 	}
 
-	@FXML private void leagueSelected(ActionEvent event) {
-		throw new NotImplementedException();
+	private List<Float> calculateAvgAwayScore(int teamId) {
+		return GuiMysql.getInstance().getAvgAwayScore(teamId);
+	}
+
+	private List<Float> calculateAvgHomeScoreThisSeason(int teamId, int countryId, int leagueId) {
+		return GuiMysql.getInstance().getAvgHomeScoreThisSeason(teamId, countryId, leagueId,
+				date.getValue().toString());
+	}
+
+	private List<Float> calculateAvgAwayScoreThisSeason(int teamId, int countryId, int leagueId) {
+		return GuiMysql.getInstance().getAvgAwayScoreThisSeason(teamId, countryId, leagueId,
+				date.getValue().toString());
+	}
+
+	@FXML private void updateStatsTable() {
+		StatisticsTabController.getInstance().setOverUnderTable(getLeagueIdFromSelector(), date.getValue().toString());
 	}
 }

+ 16 - 3
OddsJavaFx/src/controllers/StatisticsTabController.java

@@ -39,6 +39,19 @@ import objects.OverUnder;
 
 	private ObservableList<Map<String, Object>> statLines;
 
+	private static StatisticsTabController instance;
+
+	public static StatisticsTabController getInstance() {
+		if (instance == null) {
+			synchronized (StatisticsTabController.class) {
+				if (instance == null) {
+					instance = new StatisticsTabController();
+				}
+			}
+		}
+		return instance;
+	}
+
 	@Override public void initialize(URL arg0, ResourceBundle arg1) {
 		diffColumn.setCellValueFactory(new MapValueFactory<>("diff"));
 		u05.setCellValueFactory(new MapValueFactory<>("u05"));
@@ -57,11 +70,11 @@ import objects.OverUnder;
 		o65.setCellValueFactory(new MapValueFactory<>("o65"));
 
 		statLines = FXCollections.<Map<String, Object>>observableArrayList();
-
+		instance = this;
 	}
 
-	public void setOverUnderTable(int leagueId) {
-		final List<OverUnder> statsOverUnder = GuiMysql.getInstance().getStatsOverUnder(leagueId);
+	public void setOverUnderTable(int leagueId, String gameDate) {
+		final List<OverUnder> statsOverUnder = GuiMysql.getInstance().getStatsOverUnder(leagueId, gameDate);
 
 		statLines.clear();
 		for (final OverUnder ou : statsOverUnder) {

+ 253 - 34
OddsJavaFx/src/data/GuiMysql.java

@@ -7,11 +7,15 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.AbstractMap;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.jetty.util.log.Log;
 
@@ -19,6 +23,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
 import mysql.Mysql;
+import objects.BetDTO;
 import objects.Constants;
 import objects.League;
 import objects.OverUnder;
@@ -54,7 +59,8 @@ public class GuiMysql extends Mysql {
 			final ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID), rs.getString("name"));
+				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID),
+						rs.getString("name"));
 				sports.add(entry);
 			}
 		} catch (final SQLException e) {
@@ -73,7 +79,8 @@ public class GuiMysql extends Mysql {
 			final ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID), rs.getString("name"));
+				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID),
+						rs.getString("name"));
 				countries.add(entry);
 			}
 		} catch (final SQLException e) {
@@ -93,7 +100,8 @@ public class GuiMysql extends Mysql {
 			final ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID), rs.getString("name"));
+				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID),
+						rs.getString("name"));
 				leagues.add(entry);
 			}
 		} catch (final SQLException e) {
@@ -161,7 +169,7 @@ public class GuiMysql extends Mysql {
 
 	public List<Float> getAvgHomeScore(int teamId) {
 		final ArrayList<Float> returnValue = Lists.newArrayList();
-		final String sql = "SELECT AVG(homeScore) as avgScored, AVG(awayScore) as avgConceded FROM SoccerResults WHERE homeScore != -1 && homeTeamId = ?";
+		final String sql = "SELECT AVG(homeScore) as avgScored, AVG(awayScore) as avgConceded FROM SoccerResults WHERE homeScore != -1 AND homeTeamId = ?";
 		try (PreparedStatement stat = conn.prepareStatement(sql)) {
 			stat.setInt(1, teamId);
 
@@ -179,9 +187,68 @@ public class GuiMysql extends Mysql {
 		return returnValue;
 	}
 
+	public List<Float> getAvgHomeScoreThisSeason(int teamId, int countryId, int leagueId) {
+		return getAvgHomeScoreThisSeason(teamId, countryId, leagueId, "");
+	}
+
+	public List<Float> getAvgHomeScoreThisSeason(int teamId, int countryId, int leagueId, String gameDate) {
+		final ArrayList<Float> returnValue = Lists.newArrayList();
+		final String sql = "SELECT AVG(homeScore) as avgScoredSeason, AVG(awayScore) as avgConcededSeason FROM SoccerResults WHERE homeScore != -1 AND homeTeamId = ? AND season = ? AND DATE(gameDate) < ? ORDER BY gameDate ASC";
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setInt(1, teamId);
+
+			if (Strings.isNullOrEmpty(gameDate)
+					|| getSeasonFromDate(countryId, leagueId, gameDate).equals(getLastSeason(countryId, leagueId))) {
+				stat.setString(2, getLastSeason(countryId, leagueId));
+			} else {
+				String seasonFromDate = getSeasonFromDate(countryId, leagueId, gameDate);
+				stat.setString(2, seasonFromDate);
+			}
+			if (Strings.isNullOrEmpty(gameDate)) {
+				stat.setString(3, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+			} else {
+				stat.setString(3, gameDate);
+			}
+
+			final ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				returnValue.add(rs.getFloat("avgScoredSeason"));
+				returnValue.add(rs.getFloat("avgConcededSeason"));
+			}
+
+		} catch (final SQLException e) {
+			e.printStackTrace();
+		}
+
+		return returnValue;
+	}
+
+	private String getSeasonFromDate(int countryId, int leagueId, String gameDate) {
+		String sql = "SELECT season FROM SoccerResults WHERE DATE(gameDate) = ? AND countryId = ? AND leagueId = ? LIMIT 1";
+		String returnValue = "";
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			if (Strings.isNullOrEmpty(gameDate)) {
+				stat.setString(1, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+			} else {
+				stat.setString(1, gameDate);
+			}
+			stat.setInt(2, countryId);
+			stat.setInt(3, leagueId);
+
+			ResultSet rs = stat.executeQuery();
+			while (rs.next()) {
+				returnValue = rs.getString("season");
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+		return returnValue;
+	}
+
 	public List<Float> getAvgAwayScore(int teamId) {
 		final ArrayList<Float> returnValue = Lists.newArrayList();
-		final String sql = "SELECT AVG(homeScore) as avgConceded, AVG(awayScore) as avgScored FROM SoccerResults WHERE awayScore != -1 && awayTeamId = ?";
+		final String sql = "SELECT AVG(homeScore) as avgConceded, AVG(awayScore) as avgScored FROM SoccerResults WHERE awayScore != -1 AND awayTeamId = ?";
 		try (PreparedStatement stat = conn.prepareStatement(sql)) {
 			stat.setInt(1, teamId);
 
@@ -199,13 +266,48 @@ public class GuiMysql extends Mysql {
 		return returnValue;
 	}
 
+	public List<Float> getAvgAwayScoreThisSeason(int teamId, int countryId, int leagueId) {
+		return getAvgAwayScoreThisSeason(teamId, countryId, leagueId, "");
+	}
+
+	public List<Float> getAvgAwayScoreThisSeason(int teamId, int countryId, int leagueId, String gameDate) {
+		final ArrayList<Float> returnValue = Lists.newArrayList();
+		final String sql = "SELECT AVG(homeScore) as avgConcededSeason, AVG(awayScore) as avgScoredSeason FROM SoccerResults WHERE awayScore != -1 AND awayTeamId = ? AND season = ? AND DATE(gameDate) < ? ORDER BY gameDate ASC";
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setInt(1, teamId);
+			if (Strings.isNullOrEmpty(gameDate)
+					|| getSeasonFromDate(countryId, leagueId, gameDate).equals(getLastSeason(countryId, leagueId))) {
+				stat.setString(2, getLastSeason(countryId, leagueId));
+			} else {
+				String seasonFromDate = getSeasonFromDate(countryId, leagueId, gameDate);
+				stat.setString(2, seasonFromDate);
+			}
+			if (Strings.isNullOrEmpty(gameDate)) {
+				stat.setString(3, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+			} else {
+				stat.setString(3, gameDate);
+			}
+
+			final ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				returnValue.add(rs.getFloat("avgScoredSeason"));
+				returnValue.add(rs.getFloat("avgConcededSeason"));
+			}
+
+		} catch (final SQLException e) {
+			e.printStackTrace();
+		}
+
+		return returnValue;
+	}
+
 	public List<Float> getLeagueAvarages(int leagueId, int countryId) {
 		final ArrayList<Float> returnValue = Lists.newArrayList();
 		final String sql = "SELECT AVG(homeScore) avgHomeScore, AVG(awayScore) as avgAwayScore"
 				+ " FROM SoccerResults WHERE leagueId = ? AND countryId = ?";
 
-		final String goalsSql = "SELECT (homeScore + awayScore) as totalGoals, count(*) as count FROM SoccerResults  WHERE leagueId = ? AND countryId = ? AND season = ? GROUP BY totalGoals ORDER BY totalGoals asc";
-		try (PreparedStatement stat = conn.prepareStatement(sql); PreparedStatement goalStmt = conn.prepareStatement(goalsSql)) {
+		try (PreparedStatement stat = conn.prepareStatement(sql);) {
 			stat.setInt(1, leagueId);
 			stat.setInt(2, countryId);
 
@@ -215,46 +317,106 @@ public class GuiMysql extends Mysql {
 				returnValue.add(rs.getFloat("avgAwayScore"));
 			}
 
+		} catch (final SQLException e) {
+			e.printStackTrace();
+		}
+
+		return returnValue;
+	}
+
+	public Map<Integer, Integer> getGoalAvgThisSeason(int leagueId, int countryId) {
+		Map<Integer, Integer> returnValue = new HashMap<>();
+		final String goalsSql = "SELECT (homeScore + awayScore) as totalGoals, count(*) as count FROM SoccerResults  WHERE leagueId = ? AND countryId = ? AND season = ? GROUP BY totalGoals ORDER BY totalGoals asc";
+		try (PreparedStatement goalStmt = conn.prepareStatement(goalsSql)) {
 			goalStmt.setInt(1, leagueId);
 			goalStmt.setInt(2, countryId);
 			goalStmt.setString(3, getLastSeason(countryId, leagueId));
 
 			final ResultSet goalRs = goalStmt.executeQuery();
+
 			while (goalRs.next()) {
-				// TODO Not done!
-			}
+				int tg = goalRs.getInt("totalGoals");
+				if (tg < 0) {
+					continue;
+				}
+				int numGoals = goalRs.getInt("count");
 
-		} catch (final SQLException e) {
+				returnValue.put(tg, numGoals);
+			}
+		} catch (SQLException e) {
 			e.printStackTrace();
 		}
-
 		return returnValue;
 	}
 
 	public List<OverUnder> getStatsOverUnder(int leagueId) {
+		return getStatsOverUnder(leagueId, "");
+	}
 
-		final DecimalFormat df = new DecimalFormat("##.##");
-		df.setRoundingMode(RoundingMode.HALF_DOWN);
-		final ArrayList<OverUnder> result = Lists.newArrayList();
+	private List<String> getAllSeasons(int leagueId) {
+		List<String> returnValue = new ArrayList<String>();
+		String sql = "SELECT distinct(season) FROM SoccerResults WHERE leagueId = ?";
 
-		final String sql = "SELECT ((sHome.avgScored + sAway.avgConceded) - (sAway.avgScored + sHome.avgConceded)) as diff, (homeScore + awayScore) as numGoals "
-				+ "FROM SoccerResults "
-				+ "INNER JOIN (SELECT homeTeamId, AVG(homeScore) as avgScored, AVG(awayScore) as avgConceded FROM SoccerResults WHERE homeScore != -1 && homeTeamId = SoccerResults.homeTeamId GROUP BY homeTeamId) as sHome ON SoccerResults.homeTeamId = sHome.homeTeamId "
-				+ "INNER JOIN (SELECT awayTeamId, AVG(homeScore) as avgConceded, AVG(awayScore) as avgScored FROM SoccerResults WHERE awayScore != -1 && awayTeamId = SoccerResults.awayTeamId GROUP BY awayTeamId) as sAway ON SoccerResults.awayTeamId = sAway.awayTeamId "
-				+ "WHERE homeScore != -1 AND awayScore != -1 AND leagueId = ? " + "ORDER BY diff ASC";
 		try (PreparedStatement stat = conn.prepareStatement(sql)) {
 			stat.setInt(1, leagueId);
-			final ResultSet rs = stat.executeQuery();
+
+			ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				final float diff = rs.getFloat("diff");
-				final int numGoals = rs.getInt("numGoals");
-				final Float formatted = round(BigDecimal.valueOf(diff), INCREMENT, RoundingMode.HALF_UP).floatValue();
+				returnValue.add(rs.getString("season"));
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+		return returnValue;
+	}
 
-				final OverUnder entry = result.stream().filter(ou -> ou.getKey().compareTo(formatted) == 0).findFirst()
-						.orElse(new OverUnder(formatted));
-				entry.addGoalStat(numGoals);
-				result.add(entry);
+	public List<OverUnder> getStatsOverUnder(int leagueId, String gameDate) {
+
+		final DecimalFormat df = new DecimalFormat("##.##");
+		df.setRoundingMode(RoundingMode.HALF_DOWN);
+		final ArrayList<OverUnder> result = Lists.newArrayList();
+
+		final String sql = "SELECT ((sHome.avgScored * sAway.avgConceded) + (sAway.avgScored * sHome.avgConceded)) as diff, (homeScore + awayScore) as numGoals "
+				+ "FROM SoccerResults "
+				+ "INNER JOIN (SELECT homeTeamId, AVG(homeScore) as avgScored, AVG(awayScore) as avgConceded FROM SoccerResults WHERE homeScore != -1 AND homeTeamId = SoccerResults.homeTeamId AND DATE(gameDate) < ? AND season = ? AND leagueId = ? GROUP BY homeTeamId) as sHome ON SoccerResults.homeTeamId = sHome.homeTeamId "
+				+ "INNER JOIN (SELECT awayTeamId, AVG(homeScore) as avgConceded, AVG(awayScore) as avgScored FROM SoccerResults WHERE awayScore != -1 AND awayTeamId = SoccerResults.awayTeamId AND DATE(gameDate) < ? AND season = ? AND leagueId = ? GROUP BY awayTeamId) as sAway ON SoccerResults.awayTeamId = sAway.awayTeamId "
+				+ "WHERE homeScore != -1 AND awayScore != -1 AND leagueId = ? AND DATE(gameDate) < ? AND season = ? "
+				+ "ORDER BY diff ASC";
+		List<String> allSeasons = getAllSeasons(leagueId);
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			final String dateString;
+			if (Strings.isNullOrEmpty(gameDate)) {
+				dateString = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+			} else {
+				dateString = gameDate;
+			}
+			for (String season : allSeasons) {
+				stat.setString(1, dateString);
+				stat.setString(2, season);
+				stat.setInt(3, leagueId);
+				stat.setString(4, dateString);
+				stat.setString(5, season);
+				stat.setInt(6, leagueId);
+
+				stat.setInt(7, leagueId);
+				stat.setString(8, dateString);
+				stat.setString(9, season);
+
+				final ResultSet rs = stat.executeQuery();
+
+				while (rs.next()) {
+					final float diff = rs.getFloat("diff");
+					final int numGoals = rs.getInt("numGoals");
+					final Float formatted = round(BigDecimal.valueOf(diff), INCREMENT, RoundingMode.HALF_UP)
+							.floatValue();
+
+					final OverUnder entry = result.stream().filter(ou -> ou.getKey().compareTo(formatted) == 0)
+							.findFirst().orElse(new OverUnder(formatted));
+					entry.addGoalStat(numGoals);
+					result.add(entry);
+				}
 			}
 		} catch (final SQLException e) {
 			e.printStackTrace();
@@ -300,8 +462,8 @@ public class GuiMysql extends Mysql {
 			final ResultSet rs = stat.executeQuery();
 			while (rs.next()) {
 				final TeamStanding ts = new TeamStanding(rs.getString("teamName"), rs.getInt("wins"), rs.getInt("lost"),
-						rs.getInt("draws"), rs.getInt("score"), rs.getFloat(Constants.HOME_SCORE), rs.getFloat(Constants.AWAY_SCORE),
-						rs.getFloat("goal_diff"));
+						rs.getInt("draws"), rs.getInt("score"), rs.getFloat(Constants.HOME_SCORE),
+						rs.getFloat(Constants.AWAY_SCORE), rs.getFloat("goal_diff"));
 				result.add(ts);
 			}
 
@@ -435,7 +597,7 @@ public class GuiMysql extends Mysql {
 		final ArrayList<SimpleEntry<Integer, String>> result = new ArrayList<>();
 		try (PreparedStatement stat = conn.prepareStatement(sql)) {
 			if (date.equals("")) {
-				stat.setString(1, "DATE(NOW())");
+				stat.setString(1, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
 			} else {
 				stat.setString(1, date);
 			}
@@ -463,7 +625,8 @@ public class GuiMysql extends Mysql {
 			final ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID), rs.getString("name"));
+				final SimpleEntry<Integer, String> entry = new SimpleEntry<>(rs.getInt(Constants.ID),
+						rs.getString("name"));
 				leagues.add(entry);
 			}
 		} catch (final SQLException e) {
@@ -472,18 +635,23 @@ public class GuiMysql extends Mysql {
 		return leagues;
 	}
 
-	public List<SoccerMatch> getMatches(int sportId, Integer countryId, Integer leagueId, String date, String order) {
+	public List<SoccerMatch> getMatches(int sportId, Integer countryId, Integer leagueId, String date, String order,
+			boolean exactDate) {
 		final ArrayList<SoccerMatch> matches = Lists.newArrayList();
 		final String dateSql;
 		final String orderSql = " ORDER BY gameDate " + order;
 		if (date.equals("")) {
 			dateSql = "DATE(gameDate) = DATE(NOW()) ";
 		} else {
-			dateSql = "DATE(gameDate) <= '" + date + "' ";
+			if (exactDate) {
+				dateSql = "DATE(gameDate) = '" + date + "' ";
+			} else {
+				dateSql = "DATE(gameDate) <= '" + date + "' ";
+			}
 		}
 		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
 				+ "FROM SoccerResults as res " + "Join Team as hTeam ON res.homeTeamId = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + dateSql + "AND res.leagueId = ? "
+				+ "Join Team as aTeam ON res.awayTeamId = aTeam.id " + "WHERE " + dateSql + "AND res.leagueId = ? "
 				+ "AND res.countryId = ? " + orderSql;
 
 		try (PreparedStatement stat = conn.prepareStatement(sql)) {
@@ -649,4 +817,55 @@ public class GuiMysql extends Mysql {
 			e.printStackTrace();
 		}
 	}
+
+	public List<BetDTO> getBetSeries(boolean includeInactive) {
+		List<BetDTO> result = new ArrayList<>();
+		String sql = "SELECT ab.*, sr.gameDate as gameDate, sr.id as gameId, sr.homeScore as homeScore, sr.awayScore as awayScore, "
+				+ "ht.name as homeTeam, aw.name as awayTeam " + "FROM ActiveBets ab "
+				+ "INNER JOIN SoccerResults sr ON ab.gameId = sr.id " + "INNER JOIN Team ht ON sr.homeTeamId = ht.id "
+				+ "INNER JOIN Team aw ON sr.awayTeamId = aw.id " + "WHERE done = ?";
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setBoolean(1, includeInactive);
+
+			ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				BetDTO dto = new BetDTO();
+				dto.setHomeTeam(rs.getString("homeTeam"));
+				dto.setAwayTeam(rs.getString("awayTeam"));
+				dto.setBet(rs.getFloat("bet"));
+				dto.setBetType(rs.getString("betType"));
+				dto.setBetSeries(rs.getInt("series"));
+				dto.setGameId(rs.getInt("gameId"));
+				dto.setMatch(rs.getString("homeTeam"), rs.getString("awayTeam"));
+				dto.setOdds(rs.getFloat("odds"));
+				dto.setResult(rs.getInt("homeScore"), rs.getInt("AwayScore"));
+				dto.setGameDate(rs.getString("gameDate"));
+				dto.setWinAmount(rs.getFloat("odds") * rs.getFloat("bet"));
+				result.add(dto);
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
+	public void addBetSeries(BetDTO bet) {
+		String sql = "INSERT INTO ActiveBets (series, gameId, betType, bet, odds, done) VALUES (?, ?, ?, ?, ?, ?)";
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setInt(1, bet.getBetSeries());
+			stat.setInt(2, bet.getGameId());
+			stat.setString(3, bet.getBetType());
+			stat.setFloat(4, bet.getBet());
+			stat.setFloat(5, bet.getOdds());
+			stat.setBoolean(6, false);
+
+			stat.execute();
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+	}
 }

+ 49 - 24
OddsJavaFx/src/fxml/MatchTabBuilder.fxml

@@ -1,33 +1,58 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.SplitPane?>
 <?import javafx.scene.control.TableColumn?>
 <?import javafx.scene.control.TableView?>
 <?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.text.Text?>
 
-<AnchorPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MatchTabController">
+<AnchorPane xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MatchTabController">
 	<children>
-	   <TableView fx:id="matchTable" layoutX="110.0" layoutY="93.0" prefHeight="546.0" prefWidth="893.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
-	     <columns>
-	       <TableColumn fx:id="gameDateColumn" editable="false" prefWidth="75.0" text="Game date" />
-	       <TableColumn fx:id="homeTeamColumn" editable="false" prefWidth="75.0" text="Home team" />
-	       <TableColumn fx:id="awayTeamColumn" prefWidth="75.0" text="Away team" />
-	       <TableColumn fx:id="odds1Column" prefWidth="75.0" text="Odds 1" />
-	       <TableColumn fx:id="oddsXColumn" prefWidth="75.0" text="Odds X" />
-	       <TableColumn fx:id="odds2Column" prefWidth="75.0" text="Odds 2" />
-	       <TableColumn fx:id="goalsHomeColumn" prefWidth="75.0" text="Goals home" />
-	       <TableColumn fx:id="goalsAwayColumn" prefWidth="75.0" text="Goals away" />
-	       <TableColumn fx:id="goalDiff" prefWidth="75.0" text="Difference" />
-	       <TableColumn fx:id="avgScoreHomeColumn" prefWidth="75.0" text="Avg score home" />
-	       <TableColumn fx:id="avgConcededHomeColumn" prefWidth="75.0" text="Avg conceded home" />
-	       <TableColumn fx:id="avgScoreAwayColumn" prefWidth="75.0" text="Avg score away" />
-	       <TableColumn fx:id="avgConcededAwayColumn" prefWidth="75.0" text="Avg conceded away" />
-	       <TableColumn fx:id="countryColumn" prefWidth="75.0" text="Country" />
-	       <TableColumn fx:id="leagueColumn" prefWidth="75.0" text="League" />
-	       
-	       <TableColumn fx:id="homeWinColumn" prefWidth="75.0" text="Home Win" />
-	       <TableColumn fx:id="drawColumn" prefWidth="75.0" text="Draw" />
-	       <TableColumn fx:id="awayWinColumn" prefWidth="75.0" text="Away win" />
-	     </columns>
-	   </TableView>
+      <SplitPane dividerPositions="0.7305764411027569" orientation="VERTICAL" prefHeight="800.0" prefWidth="1000.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+        <items>
+          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="700.0" prefWidth="1000.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+               <children>
+            	   <TableView fx:id="matchTable" prefHeight="580.0" prefWidth="1427.0">
+            	     <columns>
+            	       <TableColumn fx:id="gameDateColumn" editable="false" prefWidth="75.0" text="Game date" />
+            	       <TableColumn fx:id="homeTeamColumn" editable="false" prefWidth="75.0" text="Home team" />
+            	       <TableColumn fx:id="awayTeamColumn" prefWidth="75.0" text="Away team" />
+            	       <TableColumn fx:id="odds1Column" prefWidth="75.0" text="Odds 1" />
+            	       <TableColumn fx:id="oddsXColumn" prefWidth="75.0" text="Odds X" />
+            	       <TableColumn fx:id="odds2Column" prefWidth="75.0" text="Odds 2" />
+            	       <TableColumn fx:id="goalsHomeColumn" prefWidth="75.0" text="Goals home" />
+            	       <TableColumn fx:id="goalsAwayColumn" prefWidth="75.0" text="Goals away" />
+            	       <TableColumn fx:id="goalDiff" prefWidth="75.0" text="Difference" />
+            	       <TableColumn fx:id="avgScoreHomeColumn" prefWidth="75.0" text="Avg score home" />
+            	       <TableColumn fx:id="avgConcededHomeColumn" prefWidth="75.0" text="Avg conceded home" />
+            	       <TableColumn fx:id="avgScoreAwayColumn" prefWidth="75.0" text="Avg score away" />
+            	       <TableColumn fx:id="avgConcededAwayColumn" prefWidth="75.0" text="Avg conceded away" />
+            	       <TableColumn fx:id="countryColumn" prefWidth="75.0" text="Country" />
+            	       <TableColumn fx:id="leagueColumn" prefWidth="75.0" text="League" />
+            	       
+            	       <TableColumn fx:id="homeWinColumn" prefWidth="75.0" text="Home Win" />
+            	       <TableColumn fx:id="drawColumn" prefWidth="75.0" text="Draw" />
+            	       <TableColumn fx:id="awayWinColumn" prefWidth="75.0" text="Away win" />
+            	       <TableColumn fx:id="scoringScore" prefWidth="75.0" text="Scoring score" />
+            	     </columns>
+            	   </TableView>
+               </children>
+            </AnchorPane>
+          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="229.0" prefWidth="998.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+               <children>
+                  <HBox prefHeight="23.0" prefWidth="998.0">
+                     <children>
+                        <Button mnemonicParsing="false" onAction="#addRowAction" text="Add New Row" />
+                        <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Över Score 5,8 och båda lagen har över 1 i score concede" wrappingWidth="303.486328125" />
+                     </children>
+                  </HBox>
+               
+                  <TableView fx:id="activeBettingTable" layoutY="25.0" prefHeight="189.0" prefWidth="998.0" />
+               </children>
+            </AnchorPane>
+        </items>
+      </SplitPane>
 	</children>
 </AnchorPane>

+ 1 - 1
OddsJavaFx/src/fxml/OddsFxBuilder.fxml

@@ -74,7 +74,7 @@
                         <TextField fx:id="avgLeagueAwayScoreTxt" editable="false" />
                         <TextField editable="false" />
                         <TextField fx:id="league0Goals" editable="false" />
-                        <TextField fx:id="league1Goal" editable="false" />
+                        <TextField fx:id="league1Goals" editable="false" />
                         <TextField fx:id="league2Goals" editable="false" />
                         <TextField fx:id="league3Goals" editable="false" />
                         <TextField fx:id="league4Goals" editable="false" />

+ 33 - 8
OddsJavaFx/src/fxml/PastResults.fxml

@@ -1,14 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.DatePicker?>
-<?import javafx.scene.control.ScrollPane?>
 <?import javafx.scene.control.ComboBox?>
+<?import javafx.scene.control.DatePicker?>
+<?import javafx.scene.control.TableColumn?>
+<?import javafx.scene.control.TableView?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.FlowPane?>
 <?import javafx.scene.layout.VBox?>
+<?import javafx.scene.control.Button?>
+
 
-<AnchorPane fx:id="basePane" prefHeight="414.0" prefWidth="736.0" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.PastResultsController">
+<AnchorPane fx:id="basePane" prefHeight="414.0" prefWidth="736.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.PastResultsController">
    <children>
       <VBox prefHeight="414.0" prefWidth="736.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
          <children>
@@ -17,17 +19,40 @@
                   <FlowPane maxHeight="30.0" minHeight="30.0" prefHeight="30.0" prefWidth="598.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                      <children>
                         <DatePicker fx:id="date" prefHeight="30.0" prefWidth="209.0" />
-                        <Button fx:id="getResults" mnemonicParsing="false" prefHeight="30.0" prefWidth="96.0" text="GetResults" onAction="#getResults" />
-                        <ComboBox id="SportComboBox" fx:id="sportSelector" onAction="#sportSelected" prefHeight="25.0" prefWidth="200.0" promptText="Sport" />
-            		    <ComboBox id="CountryComboBox" fx:id="countrySelector" disable="true" onAction="#countrySelected" prefHeight="25.0" prefWidth="200.0" promptText="Country" />
+            		    <ComboBox id="CountryComboBox" fx:id="countrySelector" onAction="#countrySelected" prefHeight="25.0" prefWidth="200.0" promptText="Country" />
                         <ComboBox id="LeagueComboBox" fx:id="leagueSelector" disable="true" onAction="#leagueSelected" prefHeight="25.0" prefWidth="200.0" promptText="League" />
+                        <Button mnemonicParsing="false" onAction="#updateStatsTable" text="Update Statistics" />
                      </children>
                   </FlowPane>
                </children>
             </AnchorPane>
           <AnchorPane>
                <children>
-                  <ScrollPane fx:id="resultsPanel" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
+               	   <TableView fx:id="matchTable" prefHeight="546.0" prefWidth="893.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+				     <columns>
+				       <TableColumn fx:id="gameDateColumn" editable="false" prefWidth="75.0" text="Game date" />
+				       <TableColumn fx:id="homeTeamColumn" editable="false" prefWidth="75.0" text="Home team" />
+				       <TableColumn fx:id="awayTeamColumn" prefWidth="75.0" text="Away team" />
+				       <TableColumn fx:id="odds1Column" prefWidth="75.0" text="Odds 1" />
+				       <TableColumn fx:id="oddsXColumn" prefWidth="75.0" text="Odds X" />
+				       <TableColumn fx:id="odds2Column" prefWidth="75.0" text="Odds 2" />
+				       <TableColumn fx:id="goalsHomeColumn" prefWidth="75.0" text="Goals home" />
+				       <TableColumn fx:id="goalsAwayColumn" prefWidth="75.0" text="Goals away" />
+				       <TableColumn fx:id="goalDiff" prefWidth="75.0" text="Difference" />
+				       <TableColumn fx:id="avgScoreHomeColumn" prefWidth="75.0" text="Avg score home" />
+				       <TableColumn fx:id="avgConcededHomeColumn" prefWidth="75.0" text="Avg conceded home" />
+				       <TableColumn fx:id="avgScoreAwayColumn" prefWidth="75.0" text="Avg score away" />
+				       <TableColumn fx:id="avgConcededAwayColumn" prefWidth="75.0" text="Avg conceded away" />
+				       <TableColumn fx:id="avgHomeScoredSeason" prefWidth="75.0" text="HomeScoredSeason" />
+				       <TableColumn fx:id="avgHomeConcededSeason" prefWidth="75.0" text="HomeConcededSeason" />
+				       <TableColumn fx:id="avgAwayScoredSeason" prefWidth="75.0" text="AwayScoredSeason" />
+				       <TableColumn fx:id="avgAwayConcededSeason" prefWidth="75.0" text="AwayConcededSeason" />
+				       
+				       <TableColumn fx:id="sumScoringColumn" prefWidth="75.0" text="Sum scoring" />
+				       <TableColumn fx:id="drawColumn" prefWidth="75.0" text="Draw" />
+				       <TableColumn fx:id="awayWinColumn" prefWidth="75.0" text="Away win" />
+				     </columns>
+				   </TableView>
                </children>
             </AnchorPane>
          </children>

+ 131 - 0
OddsJavaFx/src/objects/BetDTO.java

@@ -0,0 +1,131 @@
+package objects;
+
+public class BetDTO {
+	int betSeries;
+	String match;
+	String betType;
+	float bet;
+	float odds;
+	String result;
+	String homeTeam;
+	String awayTeam;
+	int gameId;
+	String gameDate;
+	float winAmount;
+
+	public BetDTO(int betSeries, String match, String betType, float bet, float odds, String result) {
+		super();
+		this.betSeries = betSeries;
+		this.match = match;
+		this.betType = betType;
+		this.bet = bet;
+		this.odds = odds;
+		this.result = result;
+	}
+
+	public BetDTO() {
+	}
+
+	public int getBetSeries() {
+		return betSeries;
+	}
+
+	public void setBetSeries(int betSeries) {
+		this.betSeries = betSeries;
+	}
+
+	public String getMatch() {
+		return match;
+	}
+
+	public void setMatch(String match) {
+		this.match = match;
+	}
+
+	public String getBetType() {
+		return betType;
+	}
+
+	public void setBetType(String betType) {
+		this.betType = betType;
+	}
+
+	public float getBet() {
+		return bet;
+	}
+
+	public void setBet(float bet) {
+		this.bet = bet;
+	}
+
+	public float getOdds() {
+		return odds;
+	}
+
+	public void setOdds(float odds) {
+		this.odds = odds;
+	}
+
+	public String getResult() {
+		return result;
+	}
+
+	public void setResult(String result) {
+		this.result = result;
+	}
+
+	public String getHomeTeam() {
+		return homeTeam;
+	}
+
+	public void setHomeTeam(String homeTeam) {
+		this.homeTeam = homeTeam;
+	}
+
+	public String getAwayTeam() {
+		return awayTeam;
+	}
+
+	public void setAwayTeam(String awayTeam) {
+		this.awayTeam = awayTeam;
+	}
+
+	public int getGameId() {
+		return gameId;
+	}
+
+	public void setGameId(int gameId) {
+		this.gameId = gameId;
+	}
+
+	public void setMatch(String homeTeamName, String awayTeamName) {
+		this.match = homeTeamName + " - " + awayTeamName;
+	}
+
+	public void setResult(int homeScore, int awayScore) {
+		this.result = homeScore + " - " + awayScore;
+	}
+
+	public String getGameDate() {
+		return gameDate;
+	}
+
+	public void setGameDate(String gameDate) {
+		this.gameDate = gameDate;
+	}
+
+	public float getWinAmount() {
+		return winAmount;
+	}
+
+	public void setWinAmount(float winAmount) {
+		this.winAmount = winAmount;
+	}
+
+	@Override public String toString() {
+		return "Series " + betSeries + " match: " + match + " betType: " + betType + " bet: " + bet + " odds: " + odds
+				+ " result: " + result + " homeTeam: " + homeTeam + " awayTeam: " + awayTeam + "gameId: " + gameId
+				+ " gameDate: " + gameDate;
+	}
+
+}

+ 21 - 16
OddsJavaFx/src/objects/Constants.java

@@ -2,30 +2,35 @@ package objects;
 
 public class Constants {
 
-    private Constants() {}
+	private Constants() {
+	}
 
-    public static final String LEAGUE_ID = "leagueId";
-    public static final String COUNTRY_ID = "countryId";
-    public static final String SPORT_ID = "sportId";
+	public static final String LEAGUE_ID = "leagueId";
+	public static final String COUNTRY_ID = "countryId";
+	public static final String SPORT_ID = "sportId";
 
 	public static final String HOME_TEAM_ID = "homeTeamId";
-    public static final String HOME_TEAM_NAME = "homeTeamName";
+	public static final String HOME_TEAM_NAME = "homeTeamName";
 	public static final String AWAY_TEAM_ID = "awayTeamId";
-    public static final String AWAY_TEAM_NAME = "awayTeamName";
+	public static final String AWAY_TEAM_NAME = "awayTeamName";
 
-    public static final String LEAGUE_NAME = "leagueName";
-    public static final String COUNTRY_NAME = "countryName";
+	public static final String LEAGUE_NAME = "leagueName";
+	public static final String COUNTRY_NAME = "countryName";
 
-    public static final String HOME_SCORE = "homeScore";
-    public static final String AWAY_SCORE = "awayScore";
+	public static final String HOME_SCORE = "homeScore";
+	public static final String AWAY_SCORE = "awayScore";
 
-    public static final String ID = "id";
+	public static final String ID = "id";
 
-    public static final String ODDS_1 = "odds1";
-    public static final String ODDS_X = "oddsX";
-    public static final String ODDS_2 = "odds2";
+	public static final String ODDS_1 = "odds1";
+	public static final String ODDS_X = "oddsX";
+	public static final String ODDS_2 = "odds2";
 
-    public static final String GAME_DATE = "gameDate";
+	public static final String GAME_DATE = "gameDate";
 
-    public static final String SEASON = "season";
+	public static final String SEASON = "season";
+
+	public static final String HOME_WIN = "homeWin";
+	public static final String AWAY_WIN = "awayWin";
+	public static final String LEAGUE = "league";
 }

+ 2 - 2
OddsJavaFx/src/tests/LastResultsTest.java

@@ -108,7 +108,7 @@ public class LastResultsTest extends TestClass {
 		float bestBankResult = 1000f;
 
 		final List<SoccerMatch> matches = GuiMysql.getInstance().getMatches(sportId, countryId, leagueId,
-				LocalDate.now().atStartOfDay().format(DateTimeFormatter.ISO_DATE), "ASC");
+				LocalDate.now().atStartOfDay().format(DateTimeFormatter.ISO_DATE), "ASC", false);
 
 		final LocalDateTime currentDate = matches.get(0).getGameDate();
 		LocalDate localDate = currentDate.toLocalDate();
@@ -183,6 +183,6 @@ public class LastResultsTest extends TestClass {
 	}
 
 	public List<SoccerMatch> getMatches(int leagueId) {
-		return GuiMysql.getInstance().getMatches(sportId, countryId, leagueId, date, "ASC");
+		return GuiMysql.getInstance().getMatches(sportId, countryId, leagueId, date, "ASC", false);
 	}
 }