public static List <PlayerBetSummary> GetPlayerStandingsForSeason(int seasonID) { var season = SeasonService.GetSeason(seasonID); var summaries = new List <PlayerBetSummary>(); if (season == null) { return(summaries); } var seasonBets = BetService.GetAllBetsForSeason(seasonID); var playerGroups = seasonBets.GroupBy(x => x.PlayerName); foreach (var group in playerGroups) { var summary = new PlayerBetSummary(); var wins = group.Where(x => x.Result == Result.Win); var notWins = group.Where(x => x.Result != Result.Win); var currentLoss = notWins.Sum(x => x.Stake); var currentProfit = wins.Sum(x => (x.Stake * x.Odds) - x.Stake); summary.PlayerName = group.Key; summary.TotalBets = group.Count(); summary.BetsWon = wins.Count(); summary.CashResult = GetCurrentCash(season.StartingCash, season.MinimumCash, currentProfit, currentLoss); summaries.Add(summary); } return(summaries); }
public static Event ResolveMatchDraw(int eventID, string oneOfTheFighters) { var otherFighter = new BetLine(); using (var session = RavenDocStore.Store.OpenSession()) { var fullEvent = session.Load <Event>(eventID); if (fullEvent == null) { throw new Exception("event not found. id: " + eventID); } var fighter = fullEvent.BetLines.FirstOrDefault(x => x.FighterName == oneOfTheFighters); if (fighter == null) { throw new Exception("bet line not found for event: " + eventID + ", name: " + oneOfTheFighters); } otherFighter = fullEvent.BetLines .Where(x => x.MatchNumber == fighter.MatchNumber) .FirstOrDefault(x => x.FighterName != oneOfTheFighters); if (otherFighter == null) { throw new Exception("other fighter not found for " + oneOfTheFighters + ". Match Number: " + fighter.MatchNumber); } fighter.Result = Result.Lose; otherFighter.Result = Result.Lose; session.SaveChanges(); } EventService.CheckForZeroOutRefunds(eventID); BetService.ResolveAllBetsAsDraw(eventID, oneOfTheFighters, otherFighter.FighterName); return(EventService.GetFullEvent(eventID)); }
public static List <PlayerBetSummary> GetPlayerBetSummariesForEvents(int seasonID) { var summaries = new List <PlayerBetSummary>(); // get all bets for the given season var seasonBets = BetService.GetAllBetsForSeason(seasonID); // group bets by eventid var eventBets = seasonBets.GroupBy(x => x.EventID); foreach (var evt in eventBets) { // group by playername var groupedBets = evt.GroupBy(x => x.PlayerName); // assemble summaries foreach (var group in groupedBets) { var summary = new PlayerBetSummary(); var wins = group.Where(x => x.Result == Result.Win); var notWins = group.Where(x => x.Result != Result.Win); var currentLoss = notWins.Sum(x => x.Stake); var currentProfit = wins.Sum(x => (x.Stake * x.Odds) - x.Stake); summary.PlayerName = group.Key; summary.TotalBets = group.Count(); summary.BetsWon = wins.Count(); summary.CashResult = currentProfit - currentLoss; summary.EventID = evt.Key; summaries.Add(summary); } } return(summaries); }
public static Event ResolveMatch(int eventID, String winnerName) { var loser = new BetLine(); using (var session = RavenDocStore.Store.OpenSession()) { var fullEvent = session.Load <Event>(eventID); if (fullEvent == null) { throw new Exception("event not found. id: " + eventID); } var winner = fullEvent.BetLines.FirstOrDefault(x => x.FighterName == winnerName); if (winner == null) { throw new Exception("bet line not found for event: " + eventID + ", winner: " + winnerName); } loser = fullEvent.BetLines .Where(x => x.MatchNumber == winner.MatchNumber) .FirstOrDefault(x => x.FighterName != winnerName); if (loser == null) { throw new Exception("loser not found for " + winnerName + ". Match Number: " + winner.MatchNumber); } winner.Result = Result.Win; loser.Result = Result.Lose; session.SaveChanges(); } EventService.CheckForZeroOutRefunds(eventID); BetService.ResolveAllBets(eventID, winnerName, loser.FighterName); return(EventService.GetFullEvent(eventID)); }
public static void CheckForZeroOutRefunds(int eventID) { var fullEvent = new Event(); using (var session = RavenDocStore.Store.OpenSession()) { fullEvent = session.Load <Event>(eventID); } if (fullEvent == null) { throw new Exception("event not found for id: " + eventID); } // only zero-out if all the bets on this event have been resolved if (fullEvent.BetLines.Any(x => x.Result == Result.TBD)) { return; } var playerBets = BetService.GetBetsForEvent(eventID).GroupBy(x => x.PlayerName); foreach (var player in playerBets) { var stats = SeasonService.GetCurrentPlayerStats(fullEvent.SeasonID, player.Key); if (stats.CashResult < 0) { var amount = 0 - stats.CashResult; BetService.IssueRefund(eventID, player.Key, amount); } } }
public static void ResolveAllBetsAsDraw(int eventID, String fighter1, String fighter2) { using (var session = RavenDocStore.Store.OpenSession()) { var eventBets = session.Query <Bet>() .Where(x => x.EventID == eventID) .ToList(); var bets = eventBets .Where(x => x.IndividualBets.Select(b => b.FighterName).Contains(fighter1) || x.IndividualBets.Select(b => b.FighterName).Contains(fighter2)) .ToList(); foreach (var bet in bets) { var indv1 = bet.IndividualBets.FirstOrDefault(x => x.FighterName == fighter1); var indv2 = bet.IndividualBets.FirstOrDefault(x => x.FighterName == fighter2); if (indv1 != null) { indv1.Result = Result.Lose; } if (indv2 != null) { indv2.Result = Result.Lose; } } session.SaveChanges(); } BetService.ResolveAllFullBets(eventID); }
public static void ResolveAllBets(int eventID, String winnerName, String loserName) { using (var session = RavenDocStore.Store.OpenSession()) { var eventBets = session.Query <Bet>() .Where(x => x.EventID == eventID) .ToList(); var winBets = eventBets .Where(x => x.IndividualBets.Select(b => b.FighterName).Contains(winnerName)) .ToList(); var loseBets = eventBets .Where(x => x.IndividualBets.Select(b => b.FighterName).Contains(loserName)) .ToList(); foreach (var win in winBets) { var bet = win.IndividualBets.FirstOrDefault(x => x.FighterName == winnerName); bet.Result = Result.Win; } foreach (var lose in loseBets) { var bet = lose.IndividualBets.FirstOrDefault(x => x.FighterName == loserName); bet.Result = Result.Lose; } session.SaveChanges(); } BetService.ResolveAllFullBets(eventID); }
public static PlayerBetSummary GetCurrentPlayerStats(int seasonID, string playerName) { var summary = new PlayerBetSummary(); var season = SeasonService.GetSeason(seasonID); var myBets = BetService.GetAllBetsForSeason(seasonID) .Where(x => x.PlayerName == playerName); var wins = myBets.Where(x => x.Result == Result.Win); var notWins = myBets.Where(x => x.Result != Result.Win); var currentLoss = notWins.Sum(x => x.Stake); var currentProfit = wins.Sum(x => (x.Stake * x.Odds) - x.Stake); summary.PlayerName = playerName; summary.TotalBets = myBets.Count(); summary.BetsWon = wins.Count(); summary.CashResult = GetCurrentCash(season.StartingCash, season.MinimumCash, currentProfit, currentLoss); return(summary); }