Esempio n. 1
0
        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));
        }
Esempio n. 3
0
        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);
                }
            }
        }
Esempio n. 6
0
 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);
 }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }