Ejemplo n.º 1
0
        public ActionResult EditPlayers(string rosterId, RosterPlayersViewModel vm)
        {
            if (ModelState.IsValid == false)
            {
                return(EditPlayers(rosterId));
            }
            Roster roster = DocumentSession.Load <Roster>(rosterId);

            if (roster == null)
            {
                throw new HttpException(404, "Roster not found");
            }

            var update = new Roster.Update(
                Roster.ChangeType.EditPlayers,
                User.CustomIdentity.PlayerId ?? User.CustomIdentity.Email)
            {
                Preliminary = vm.Preliminary
            };
            List <string> players = null;

            if (roster.IsFourPlayer)
            {
                players = new List <string>
                {
                    vm.Player1,
                    vm.Player2,
                    vm.Player3,
                    vm.Player4
                };
            }
            else
            {
                players = new List <string>
                {
                    vm.Table1Player1,
                    vm.Table1Player2,
                    vm.Table2Player1,
                    vm.Table2Player2,
                    vm.Table3Player1,
                    vm.Table3Player2,
                    vm.Table4Player1,
                    vm.Table4Player2
                };
            }

            if (vm.Reserve1 != null && DocumentSession.Load <Player>(vm.Reserve1) != null)
            {
                players.Add(vm.Reserve1);
                if (vm.Reserve2 != null && DocumentSession.Load <Player>(vm.Reserve2) != null)
                {
                    players.Add(vm.Reserve2);
                }
            }

            // case where reserve1 is unselected while reserve2 is selected
            if (vm.Reserve2 != null &&
                players.Find(x => x == vm.Reserve2) == null &&
                DocumentSession.Load <Player>(vm.Reserve2) != null)
            {
                players.Add(vm.Reserve2);
            }

            update.Players = players;

            if (vm.TeamLeader != null && DocumentSession.Load <Player>(vm.TeamLeader) != null)
            {
                update.TeamLeader = vm.TeamLeader;
            }
            else
            {
                update.TeamLeader = new Some <string>(null);
            }

            roster.UpdateWith(Trace.CorrelationManager.ActivityId, update);

            return(RedirectToAction("View", new { season = roster.Season, turn = roster.Turn }));
        }
Ejemplo n.º 2
0
        private async Task <IHttpActionResult> Handle(VerifyMatchMessage message)
        {
            Roster roster = DocumentSession.Load <Roster>(message.RosterId);

            if (roster.IsVerified && message.Force == false)
            {
                return(Ok());
            }
            WebsiteConfig websiteConfig = DocumentSession.Load <WebsiteConfig>(WebsiteConfig.GlobalId);
            HeadInfo      result        = await bitsClient.GetHeadInfo(roster.BitsMatchId);

            ParseHeaderResult header = BitsParser.ParseHeader(result, websiteConfig.ClubId);

            // chance to update roster values
            var update = new Roster.Update(
                Roster.ChangeType.VerifyMatchMessage,
                "system")
            {
                OilPattern = header.OilPattern,
                Date       = header.Date,
                Opponent   = header.Opponent,
                Location   = header.Location
            };

            if (roster.MatchResultId != null)
            {
                // update match result values
                BitsMatchResult bitsMatchResult = await bitsClient.GetBitsMatchResult(roster.BitsMatchId);

                Player[] players = DocumentSession.Query <Player, PlayerSearch>()
                                   .ToArray()
                                   .Where(x => x.PlayerItem?.LicNbr != null)
                                   .ToArray();
                var parser = new BitsParser(players);
                if (roster.IsFourPlayer)
                {
                    MatchResult4 matchResult = EventStoreSession.Load <MatchResult4>(roster.MatchResultId);
                    Parse4Result parseResult = parser.Parse4(bitsMatchResult, websiteConfig.ClubId);
                    update.Players = GetPlayerIds(parseResult);
                    bool isVerified = matchResult.Update(
                        PublishMessage,
                        roster,
                        parseResult.TeamScore,
                        parseResult.OpponentScore,
                        roster.BitsMatchId,
                        parseResult.CreateMatchSeries(),
                        players);
                    update.IsVerified = isVerified;
                }
                else
                {
                    MatchResult matchResult = EventStoreSession.Load <MatchResult>(roster.MatchResultId);
                    ParseResult parseResult = parser.Parse(bitsMatchResult, websiteConfig.ClubId);
                    update.Players = GetPlayerIds(parseResult);
                    var resultsForPlayer = DocumentSession.Query <ResultForPlayerIndex.Result, ResultForPlayerIndex>()
                                           .Where(x => x.Season == roster.Season)
                                           .ToArray()
                                           .ToDictionary(x => x.PlayerId);
                    MatchSerie[] matchSeries = parseResult.CreateMatchSeries();
                    bool         isVerified  = matchResult.Update(
                        PublishMessage,
                        roster,
                        parseResult.TeamScore,
                        parseResult.OpponentScore,
                        matchSeries,
                        parseResult.OpponentSeries,
                        players,
                        resultsForPlayer);
                    update.IsVerified = isVerified;
                }
            }

            roster.UpdateWith(Trace.CorrelationManager.ActivityId, update);
            return(Ok());
        }