コード例 #1
0
        public void Verify_ApproveCompetition()
        {
            try
            {
                Browser.Start();
                CompetitionDetails details = CreateCompetition(ConfigurationManager.AppSettings["UN1"]);
                Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN2"], ConfigurationManager.AppSettings["UN2Password"]);

                Pages.CompetitionPage.ClickCompetitionLink();
                Pages.CompetitionPage.SelectCompetition(details.Title);
                Pages.CompetitionDetailsPage.ParticipatePage.RegisterForChallange();

                Pages.HomePage.ClickLogOff();
                Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN1"], ConfigurationManager.AppSettings["UN1Password"]);

                Pages.MyCodaLabPage.ClickMyCodaLabLink();
                Pages.MyCodaLabPage.SelectCompetitionOptionlink(MyCodaLabPageOps.CompetitionOptionLinks.Participants, details.Title);
                Pages.MyCodaLabPage.ChangeStatus(MyCodaLabPageOps.RequestTo.Approve, ConfigurationManager.AppSettings["UN2"]);

                Pages.HomePage.ClickLogOff();
                Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN2"], ConfigurationManager.AppSettings["UN2Password"]);

                Pages.MyCodaLabPage.ClickMyCodaLabLink();
                Pages.MyCodaLabPage.SelectTab(MyCodaLabPageOps.MyCodaLabTabs.CompetitionIParticipateIn);

                Assert.IsTrue(Pages.MyCodaLabPage.IsCompetitionPresent(details.Title), "Competition was not present in the \"Competition I participate in\" page");
                Assert.IsTrue(StringUtilities.CompareStrings(Pages.MyCodaLabPage.GetParticipantStatus(details.Title), Constants.StaticStrings.MyCodaLabPage.ParticipantApproved, true, true),
                              "Competition status was not as approved in \"Competition I participate in\" page");
            }
            catch (Exception ex)
            {
                LogException(ex);
                throw;
            }
        }
コード例 #2
0
        public void QualifyByeMatches(CompetitionDetails details, CompetitionSection section)
        {
            var competitionMatchesRepository = ServiceProvider.Get <ICompetitionMatchesRepository>();
            var sectionMatches = details.Matches.Where(m => m.Section == section && (m.Player1Code == BYE || m.Player2Code == BYE)).Select(m => competitionMatchesRepository.GetMatch(m.Id)).ToArray();

            foreach (var match in sectionMatches)
            {
                match.Result = MatchResult.Win;
                if (match.Player1Code == BYE)
                {
                    match.Winner = MatchWinner.Player2;
                }
                else if (match.Player2Code == BYE)
                {
                    match.Winner = MatchWinner.Player1;
                }


                UpdateMatchResult(new MatchScoreUpdateInfo()
                {
                    MatchId = match.Id, Result = match.Result, Winner = match.Winner
                });
                Qualify(match);
            }
        }
コード例 #3
0
        public void Verify_RequestCompetition()
        {
            try
            {
                Browser.Start();
                CompetitionDetails details = CreateCompetition(ConfigurationManager.AppSettings["UN1"]);
                Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN2"], ConfigurationManager.AppSettings["UN2Password"]);

                Pages.CompetitionPage.ClickCompetitionLink();
                Pages.CompetitionPage.SelectCompetition(details.Title);
                Pages.CompetitionDetailsPage.ParticipatePage.RegisterForChallange();
                Assert.IsTrue(Pages.CompetitionDetailsPage.ParticipatePage.IsRegisteringPending(), "Registration was not sent for approval");

                Pages.HomePage.ClickLogOff();
                Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN1"], ConfigurationManager.AppSettings["UN1Password"]);

                Pages.MyCodaLabPage.ClickMyCodaLabLink();
                Pages.MyCodaLabPage.SelectCompetitionOptionlink(MyCodaLabPageOps.CompetitionOptionLinks.Participants, details.Title);

                List <ParticipantDetails> allparticipants = Pages.MyCodaLabPage.GetAllParticipants();
                foreach (var item in allparticipants)
                {
                    if (StringUtilities.CompareStrings(ConfigurationManager.AppSettings["UN2"], item.ParticipantName, true, true))
                    {
                        Assert.IsTrue(StringUtilities.CompareStrings(item.StatusMessage, Constants.StaticStrings.ParticipantPage.ParticipationPendingApproval, true, true),
                                      "Status message was not as expected");
                    }
                }
            }
            catch (Exception ex)
            {
                LogException(ex);
                throw;
            }
        }
コード例 #4
0
        private void backBtn_Click(object sender, EventArgs e)
        {
            CompetitionDetails frm = new CompetitionDetails(comp);

            frm.Show();
            Hide();
        }
コード例 #5
0
        private void oldCompCbox_SelectedIndexChanged(object sender, EventArgs e)
        {
            comp = new Competition();
            CompetitionDetails CompDetails = new CompetitionDetails(comp.GetCompettion(oldCompCbox.SelectedItem.ToString()));

            if (CompDetails.Visible == false)
            {
                CompDetails.Show();
            }
        }
コード例 #6
0
        private DrawGeneratorInfo GetGenerateInfo(CompetitionDetails details, HebrewWordInverter inverter)
        {
            var result = GetDefaultGenerateInfo();

            result.DrawTitle      = inverter.Invert(details.Name);
            result.DrawType       = inverter.Invert(details.SitePhone) + ", " + inverter.Invert(details.Site);
            result.DrawOtherInfo  = inverter.Invert(details.MainRefereePhone) + ", " + inverter.Invert(details.MainRefereeName);
            result.DocumentAuthor = "Simple. SAMS - ITA " + DateTime.Now.Year.ToString();

            return(result);
        }
コード例 #7
0
        public void Verify_CompetitionCreateWithPhases()
        {
            try
            {
                Browser.Start();
                Pages.LoginPage.Login();

                DataSetDetails dataSetDetails1 = new DataSetDetails()
                {
                    AccessString = StringUtilities.GetRandomPlainString(10), BlobURL = StringUtilities.GetRandomPlainString(10), DataSetType = PhaseDetailsPageOps.DataSetType.AzureBlob
                };
                DataSetDetails dataSetDetails2 = new DataSetDetails()
                {
                    AccessString = StringUtilities.GetRandomPlainString(10), BlobURL = StringUtilities.GetRandomPlainString(10), DataSetType = PhaseDetailsPageOps.DataSetType.AzureBlobSharedAccessSignature
                };

                List <DataSetDetails> dsDetails = new List <DataSetDetails>();
                dsDetails.Add(dataSetDetails1);
                dsDetails.Add(dataSetDetails2);

                CompPhaseDetails phaseDetails = new CompPhaseDetails()
                {
                    DataSets = dsDetails, MaxSubmissions = 10, StartDate = DateTime.Now.Date.ToString("MM/dd/yyyy"), Titile = StringUtilities.GetRandomPlainString(10)
                };

                Pages.MyCodaLabPage.ClickMyCodaLabLink();
                CompetitionDetails details = Pages.MyCodaLabPage.CreateCompetition(phaseDetails);
                this.competitionTitle = phaseDetails.Titile;
                Pages.MyCodaLabPage.SelectCompetitionOptionlink(MyCodaLabPageOps.CompetitionOptionLinks.Edit, details.Title);
                Pages.MyCodaLabPage.CreatePage.SelectTab(CompetitionCreatePageOps.Tab.PhaseDetails);

                List <CompPhaseDetails> actual = Pages.MyCodaLabPage.CreatePage.PhaseDetailsPage.GetAllPhaseDetails();

                Assert.AreEqual <string>(phaseDetails.Titile, actual[0].Titile, "Phase details are not as expected");
                Assert.AreEqual <string>(phaseDetails.StartDate, actual[0].StartDate, "Start date was not as expected");
                Assert.AreEqual <int>(phaseDetails.MaxSubmissions, actual[0].MaxSubmissions, "Maximum submissions are not as expected");
                Assert.AreEqual <MI_UI_Framework.PageOperations.PhaseDetailsPageOps.DataSetType>(phaseDetails.DataSets[0].DataSetType, actual[0].DataSets[0].DataSetType,
                                                                                                 "Dataset type is not as expected");
                Assert.AreEqual <string>(phaseDetails.DataSets[0].BlobURL, actual[0].DataSets[0].BlobURL, "Blob URL is not as expected");
                Assert.AreEqual <string>(phaseDetails.DataSets[0].AccessString, actual[0].DataSets[0].AccessString, "Access string is not as expected");
                Assert.IsTrue(!string.IsNullOrEmpty(actual[0].DataSets[0].DownloadURL), "Download URL was not generated");

                Assert.AreEqual <MI_UI_Framework.PageOperations.PhaseDetailsPageOps.DataSetType>(phaseDetails.DataSets[1].DataSetType, actual[0].DataSets[1].DataSetType,
                                                                                                 "Dataset type is not as expected");
                Assert.AreEqual <string>(phaseDetails.DataSets[1].BlobURL, actual[0].DataSets[1].BlobURL, "Blob URL is not as expected");
                Assert.AreEqual <string>(phaseDetails.DataSets[1].AccessString, actual[0].DataSets[1].AccessString, "Access string is not as expected");
                this.deleteCompetition = true;
            }
            catch (Exception ex)
            {
                LogException(ex);
                throw;
            }
        }
コード例 #8
0
        private MatchPlayerViewModel GetPlayer(MatchPlayer player, CompetitionDetails competition)
        {
            var result = default(MatchPlayerViewModel);

            if (player.IsNotNull())
            {
                var cp = competition.Players.FirstOrDefault(p => p.Id == player.Id);
                if (cp.IsNotNull())
                {
                    result      = new MatchPlayerViewModel(player);
                    result.Rank = cp.CompetitionRank;
                }
            }
            return(result);
        }
コード例 #9
0
    private CompetitionPosition[] PositionFinalPlayersInCompetition(CompetitionDetails details, CompetitionPlayer[] players)
    {
        var positioningEngine     = new FinalPositioningEngine();
        var positioningParameters = new FinalPositioningParameters
        {
            QualifyingToFinal = details.Type.QualifyingToFinalPlayersCount,
            Players           = (from p in players select new Simple.SAMS.CompetitionEngine.Player
            {
                Id = p.Id,
                Rank = p.CompetitionRank,
                AccumulatedScore = p.AccumulatedScore.GetValueOrDefault(),
                AverageScore = p.AverageScore.GetValueOrDefault()
            }).ToArray <Simple.SAMS.CompetitionEngine.Player>()
        };

        return(positioningEngine.Evaluate(positioningParameters));
    }
コード例 #10
0
    private UpdatePlayerPositionInfo[] GetQualifyingPlayersPositions(CompetitionDetails details)
    {
        var items          = Enumerable.Empty <UpdatePlayerPositionInfo>();
        var orderedMatches = (from m in details.Matches
                              where m.Section == CompetitionSection.Qualifying
                              orderby m.Position
                              select m).Take <MatchHeaderInfo>((details.Type.QualifyingPlayersCount / 2)).ToArray <MatchHeaderInfo>();
        var qualifyingPlayers = (from p in details.Players
                                 where p.Section == CompetitionSection.Qualifying
                                 select p).ToArray <CompetitionPlayer>();

        if (qualifyingPlayers.Length > 0)
        {
            items = GetUpdatePlayerPositionInfos(PositionQualifyingPlayers(details, qualifyingPlayers), orderedMatches);
        }
        return(items.ToArray <UpdatePlayerPositionInfo>());
    }
コード例 #11
0
 public void CompetitionDetails_Verify_LoginPromptForRegister()
 {
     try
     {
         Browser.Start();
         CompetitionDetails details = Pages.MyCodaLabPage.CreateCompetition(1)[0];
         Pages.CompetitionPage.ClickCompetitionLink();
         this.competitionTitle = details.Title;
         EnterCompetitionDetailsPage();
         Pages.CompetitionDetailsPage.ParticipatePage.RegisterForChallange();
         Assert.IsTrue(Pages.LoginPage.IsUserNameFiledVisible(), "Control did not prompt for username and password when user tried to register for competition");
     }
     catch (Exception ex)
     {
         LogException(ex);
         throw;
     }
 }
コード例 #12
0
    private CompetitionPosition[] PositionQualifyingPlayers(CompetitionDetails details, CompetitionPlayer[] qualifyingPlayers)
    {
        var qualifyingPositioningEngine     = new QualifyingPositioningEngine();
        var qualifyingPositioningParameters = new QualifyingPositionParameters
        {
            PlayersCount    = details.Type.QualifyingPlayersCount,
            QualifyingCount = details.Type.QualifyingToFinalPlayersCount,
            Players         = (from p in qualifyingPlayers.Take <CompetitionPlayer>(details.Type.QualifyingPlayersCount) select new Simple.SAMS.CompetitionEngine.Player
            {
                Id = p.Id,
                Rank = p.CompetitionRank,
                AverageScore = p.AverageScore.GetValueOrDefault(),
                AccumulatedScore = p.AccumulatedScore.GetValueOrDefault()
            }).ToArray <Simple.SAMS.CompetitionEngine.Player>()
        };

        return(qualifyingPositioningEngine.Evaluate(qualifyingPositioningParameters));
    }
コード例 #13
0
        private CompetitionDetails GetCompetitionDetails(Func <CompetitionsDataContext, Competition> queryCompetitionDetails, Func <IQueryable <Match>, IQueryable <Match> > filterMatches = null)
        {
            var result = default(CompetitionDetails);

            UseDataContext(
                dataContext =>
            {
                dataContext.ObjectTrackingEnabled = false;
                dataContext.LoadOptions           = GetCompetitionsLoadOptions();

                var competitionData = queryCompetitionDetails(dataContext);
                if (competitionData.IsNotNull())
                {
                    result = new CompetitionDetails();
                    MapCompetitionDataToHeader(competitionData, result);

                    result.MainRefereeName  = competitionData.MainReferee;
                    result.MainRefereePhone = competitionData.MainRefereePhone;
                    result.Site             = competitionData.Site;
                    result.SitePhone        = competitionData.SitePhone;

                    var dataPlayers =
                        dataContext.CompetitionPlayers.Where(cp => cp.CompetitionId == competitionData.Id && cp.Player.RowStatus == 0).ToArray().AsEnumerable();

                    var players    = dataPlayers.Select(dataEntity => MapDataCompetitionPlayer(dataEntity, competitionData.Id));
                    players        = SortByRank(players);
                    result.Players = players.ToArray();

                    var matches = dataContext.Matches.Where(m => m.CompetitionId == competitionData.Id && m.RowStatus == 0);

                    if (filterMatches.IsNotNull())
                    {
                        matches = filterMatches(matches);
                    }

                    result.Matches =
                        matches.Select(m => m.MapFromData()).ToArray();
                }
            });

            return(result);
        }
コード例 #14
0
        public string Generate(CompetitionDetails details, CompetitionSection section)
        {
            var name         = string.Format("{0}-{1}-{2}-{3}", details.Name, details.Id, Guid.NewGuid(), section);
            var outputPath   = Path.Combine(m_targetPath, name + ".pdf");
            var infoPath     = Path.Combine(m_targetPath, name + ".pcdf");
            var playersPath  = Path.Combine(m_targetPath, name + ".players.csv");
            var schedulePath = Path.Combine(m_targetPath, name + ".schedule.csv");
            var inverter     = new HebrewWordInverter();
            var info         = GetGenerateInfo(details, inverter);

            var players = details.Players.Where(p => p.Section == section).ToArray();
            var matches = details.Matches.Where(m => m.Section == section).ToArray();

            SavePlayers(players, playersPath, inverter);
            SaveSchedule(matches, players, schedulePath);
            info.DataParticipantsFile = playersPath;
            info.DataScheduleFile     = schedulePath;

            info.Write(infoPath);
            GeneratePdf(infoPath, outputPath);
            return(outputPath);
        }
コード例 #15
0
        public MatchHeaderInfo[] BuildMatches(CompetitionType competitionType, CompetitionDetails competitionDetails)
        {
            var helper   = new KnockoutMatchProvisioningEngineHelper();
            var pMatches = helper.ProvisionMatches(competitionType.PlayersCount,
                                                   competitionType.QualifyingToFinalPlayersCount,
                                                   competitionDetails.Players.Length);
            var fMatches = pMatches.Where(m => m.SectionCode == "MD").ToArray();
            var qMatches = pMatches.Where(m => m.SectionCode == "Q").ToArray();

            var rankedPlayersCount = competitionType.PlayersCount - competitionType.QualifyingToFinalPlayersCount;
            var qPlayersCount      = competitionDetails.Players.Length - rankedPlayersCount;

            if (qPlayersCount <= competitionType.QualifyingToFinalPlayersCount)
            {
                qPlayersCount = 0;
            }
            var matches                   = new List <MatchHeaderInfo>();
            var finalPlayersCount         = PlayersCountCalculator.CalculatePlayersCount(rankedPlayersCount);
            var qualifyingPlayersCount    = PlayersCountCalculator.CalculatePlayersCount(qPlayersCount);
            var finalSectionMatches       = CreateSectionMatches(finalPlayersCount, CompetitionSection.Final).ToArray();
            var qualifyingSectionMatches  = CreateSectionMatches(qualifyingPlayersCount, CompetitionSection.Qualifying, competitionType.QualifyingToFinalPlayersCount).ToArray();
            var consolationSectionMatches = CreateConselationMatches(finalPlayersCount);

            for (var i = 0; i < fMatches.Length; i++)
            {
                finalSectionMatches[i].Player1Code = fMatches[i].Player1Code;
                finalSectionMatches[i].Player2Code = fMatches[i].Player2Code;
            }
            for (var i = 0; i < qMatches.Length; i++)
            {
                qualifyingSectionMatches[i].Player1Code = qMatches[i].Player1Code;
                qualifyingSectionMatches[i].Player2Code = qMatches[i].Player2Code;
            }

            matches.AddRange(qualifyingSectionMatches);
            matches.AddRange(finalSectionMatches);
            matches.AddRange(consolationSectionMatches);
            return(matches.ToArray());
        }
コード例 #16
0
        public CompetitionDetails CreateCompetition(string userName)
        {
            CompetitionDetails details = new CompetitionDetails();

            if (ConfigurationManager.AppSettings["UseUI"] == "1")
            {
                if (!Pages.HomePage.GetLoggedInUserName().Contains(userName))
                {
                    Pages.HomePage.ClickLogOff();
                    Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN1"], ConfigurationManager.AppSettings["UN1Password"]);
                }

                details = Pages.MyCodaLabPage.CreateCompetition(isPublic: true);
                Pages.HomePage.ClickLogOff();
            }
            else
            {
                details = DBUtils.InsertCompetitions(ConfigurationManager.AppSettings["UN1"])[0];
            }

            return(details);
        }
コード例 #17
0
        public void Verify_LearnTheDetailsEdit()
        {
            try
            {
                Browser.Start();
                Pages.LoginPage.Login();
                Pages.MyCodaLabPage.ClickMyCodaLabLink();

                CompetitionDetails details = Pages.MyCodaLabPage.CreateCompetition(1)[0];
                Pages.MyCodaLabPage.SelectCompetitionOptionlink(MyCodaLabPageOps.CompetitionOptionLinks.Edit, details.Title);

                Pages.MyCodaLabPage.CreatePage.SelectTab(CompetitionCreatePageOps.Tab.Details);
                string overViewText = StringUtilities.GetRandomPlainString(20);
                Pages.MyCodaLabPage.CreatePage.DetailsPage.SetTextIntoLDSubTabTextArea(overViewText);
                Pages.MyCodaLabPage.CreatePage.ClickSave();
                Pages.MyCodaLabPage.CreatePage.DetailsPage.SelectLDSubTab(1);
                string evaluationText = StringUtilities.GetRandomPlainString(20);
                Pages.MyCodaLabPage.CreatePage.DetailsPage.SetTextIntoLDSubTabTextArea(evaluationText);
                Pages.MyCodaLabPage.CreatePage.ClickSave();
                Pages.MyCodaLabPage.CreatePage.ClickNext();
                Pages.MyCodaLabPage.CreatePage.PublishPage.PublishCompetition();
                Pages.MyCodaLabPage.CreatePage.ClickFinish();

                Pages.MyCodaLabPage.SelectCompetitionOptionlink(MyCodaLabPageOps.CompetitionOptionLinks.Edit, details.Title);
                Pages.MyCodaLabPage.CreatePage.SelectTab(CompetitionCreatePageOps.Tab.Details);
                Assert.IsTrue(StringUtilities.CompareStrings(overViewText, Pages.MyCodaLabPage.CreatePage.DetailsPage.GetTextFromLDSubTabTextArea(), true, true),
                              "Text in the overview tab was not as expected");

                Pages.MyCodaLabPage.CreatePage.DetailsPage.SelectLDSubTab(1);
                Assert.IsTrue(StringUtilities.CompareStrings(evaluationText, Pages.MyCodaLabPage.CreatePage.DetailsPage.GetTextFromLDSubTabTextArea(), true, true),
                              "Text in the evaluation tab was not as expected");
            }
            catch (Exception ex)
            {
                LogException(ex);
                throw;
            }
        }
コード例 #18
0
    private UpdatePlayerPositionInfo[] GetFinalPlayersPositions(CompetitionDetails details)
    {
        var items          = Enumerable.Empty <UpdatePlayerPositionInfo>();
        var orderedMatches = (from m in details.Matches
                              where m.Section == CompetitionSection.Final
                              orderby m.Position
                              select m).Take <MatchHeaderInfo>(details.Type.PlayersCount / 2).ToArray();

        var finalPlayers = (from p in details.Players
                            where p.Section == CompetitionSection.Final
                            select p).ToArray <CompetitionPlayer>();

        if (details.Type.QualifyingPlayersCount > 0)
        {
            finalPlayers = finalPlayers.Take(details.Type.PlayersCount - details.Type.QualifyingToFinalPlayersCount).ToArray();
        }
        if (finalPlayers.Length > 0)
        {
            var finalPositions = PositionFinalPlayersInCompetition(details, finalPlayers);
            items = GetUpdatePlayerPositionInfos(finalPositions, orderedMatches);
        }
        return(items.ToArray <UpdatePlayerPositionInfo>());
    }
コード例 #19
0
        public void Verify_PendingApproval()
        {
            try
            {
                Browser.Start();
                CompetitionDetails details = CreateCompetition(ConfigurationManager.AppSettings["UN1"]);
                Pages.LoginPage.Login(ConfigurationManager.AppSettings["UN2"], ConfigurationManager.AppSettings["UN2Password"]);

                Pages.CompetitionPage.ClickCompetitionLink();
                Pages.CompetitionPage.SelectCompetition(details.Title);
                Pages.CompetitionDetailsPage.ParticipatePage.RegisterForChallange();

                Pages.MyCodaLabPage.ClickMyCodaLabLink();
                Pages.MyCodaLabPage.SelectTab(MyCodaLabPageOps.MyCodaLabTabs.CompetitionIParticipateIn);

                Assert.IsTrue(StringUtilities.CompareStrings(Pages.MyCodaLabPage.GetParticipantStatus(details.Title), Constants.StaticStrings.MyCodaLabPage.ParticipantPendingApproval, true, true),
                              "Competition status was not as pending in \"Competition I participate in\" page");
            }
            catch (Exception ex)
            {
                LogException(ex);
                throw;
            }
        }
コード例 #20
0
        public string Generate(CompetitionDetails competition, CompetitionSection section)
        {
            var result = string.Empty;
            var map    = new Dictionary <int, Queue <MatchHeaderInfo> >();

            var sectionMatches = competition.Matches.Where(m => m.Section == section);

            foreach (var match in sectionMatches)
            {
                var matches = default(Queue <MatchHeaderInfo>);
                if (map.TryGetValue(match.Round, out matches))
                {
                    matches.Enqueue(match);
                }
                else
                {
                    matches = new Queue <MatchHeaderInfo>();
                    matches.Enqueue(match);
                    map[match.Round] = matches;
                }
            }
            var rounds = map.Keys.Max();

            using (var stringWriter = new StringWriter())
                using (var htmlWriter = new HtmlTextWriter(stringWriter))
                {
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Html);
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Head);

                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Href, VirtualPathUtility.ToAbsolute("~/Static/Css/bracket.css"));
                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Type, "text/css");
                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Rel, "stylesheet");
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Link);
                    htmlWriter.RenderEndTag();

                    htmlWriter.RenderEndTag();
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Body);

                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "header");
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                    htmlWriter.Write(competition.Name);
                    htmlWriter.RenderEndTag();

                    if (competition.MainRefereeName.NotNullOrEmpty())
                    {
                        htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "referee");
                        htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                        htmlWriter.Write(competition.MainRefereeName);
                        if (competition.MainRefereePhone.NotNullOrEmpty())
                        {
                            htmlWriter.Write(", ");
                            htmlWriter.Write(competition.MainRefereePhone);
                        }
                        htmlWriter.RenderEndTag();
                    }

                    if (competition.Site.NotNullOrEmpty())
                    {
                        htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "site");
                        htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                        htmlWriter.Write(competition.Site);
                        if (competition.SitePhone.NotNullOrEmpty())
                        {
                            htmlWriter.Write(", ");
                            htmlWriter.Write(competition.SitePhone);
                        }
                        htmlWriter.RenderEndTag();
                    }

                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "rounds clearfix");
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                    foreach (var round in sectionMatches.Select(m => m.Round).Distinct())
                    {
                        htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "round");
                        htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                        htmlWriter.Write(HtmlExtensions.RoundName(null, round));
                        htmlWriter.RenderEndTag();
                    }
                    htmlWriter.RenderEndTag();
                    var tournamentMatches = sectionMatches.Count();
                    if (tournamentMatches > 8)
                    {
                        tournamentMatches = ((tournamentMatches / 16) + 1) * 16;
                    }
                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "tournament" + tournamentMatches + "-wrap");
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                    htmlWriter.AddAttribute(HtmlTextWriterAttribute.Class, "round6-top winner6");
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Div);
                    htmlWriter.RenderEndTag();

                    WriteRound(htmlWriter, 6, 0, map);

                    htmlWriter.RenderEndTag();
                    htmlWriter.RenderEndTag();
                    htmlWriter.RenderEndTag();
                    htmlWriter.Flush();
                    result = stringWriter.ToString();
                }

            return(result);
        }
コード例 #21
0
    public UpdatePlayerPositionInfo[] PositionPlayers(CompetitionDetails details, CompetitionSection section)
    {
        var helper       = new KnockoutMatchProvisioningEngineHelper();
        var engine       = new KnockoutCalculationEngine();
        var output       = engine.Calculate(details.Type.PlayersCount, details.Type.QualifyingToFinalPlayersCount, details.Players.Length);
        var sectionCodes =
            section == CompetitionSection.Final
                ? helper.GenerateMainDrawCodesQueue(output.TotalMainDrawPlayers, output.ActualMainDrawPlayers,
                                                    details.Type.QualifyingToFinalPlayersCount)
                : helper.GenerateQualifyingDrawCodes(output.TotalQualifyingPlayers, output.ActualQualifyingPlayers);

        var sectionPlayers = details.Players.Where(p => p.Section == section);
        var items          = new List <UpdatePlayerPositionInfo>();

        if (sectionCodes.Count > 0 && sectionPlayers.Any())
        {
            var map = new Dictionary <string, int>();
            foreach (var competitionPlayer in sectionPlayers)
            {
                map[sectionCodes.Dequeue()] = competitionPlayer.Id;
            }
            var sectionMatches = details.Matches.Where(m => m.Section == section);



            foreach (
                var match in sectionMatches.Where(m => m.Player1Code.NotNullOrEmpty() || m.Player2Code.NotNullOrEmpty())
                )
            {
                int playerId;
                if (match.Player1Code.NotNullOrEmpty())
                {
                    if (map.TryGetValue(match.Player1Code, out playerId))
                    {
                        items.Add(new UpdatePlayerPositionInfo()
                        {
                            MatchId  = match.Id,
                            PlayerId = playerId,
                            Position = 0
                        });
                    }
                }
                if (match.Player2Code.NotNullOrEmpty())
                {
                    if (map.TryGetValue(match.Player2Code, out playerId))
                    {
                        items.Add(new UpdatePlayerPositionInfo()
                        {
                            MatchId  = match.Id,
                            PlayerId = playerId,
                            Position = 1
                        });
                    }
                }
            }
        }
        return(items.ToArray());

        if (details.Type.QualifyingPlayersCount > 0 && section == CompetitionSection.Qualifying)
        {
            items.AddRange(this.GetQualifyingPlayersPositions(details));
        }
        if (section == CompetitionSection.Final)
        {
            items.AddRange(this.GetFinalPlayersPositions(details));
        }
        return((from item in items
                where item.IsNotNull <UpdatePlayerPositionInfo>()
                select item).ToArray <UpdatePlayerPositionInfo>());
    }
コード例 #22
0
    public UpdatePlayerPositionInfo AddPlayerToSection(int playerId, CompetitionSection section, CompetitionDetails details)
    {
        var result = default(UpdatePlayerPositionInfo);


        // rounds are in descending order, so first will be the max
        var maxRound = details.Matches.Where(m => m.Section == section).Max(m => m.Round);
        var match    =
            details.Matches.FirstOrDefault(
                m => m.Section == section && m.Round == 1 && (m.Player1.IsNull() || m.Player2.IsNull()));

        if (match.IsNotNull())
        {
            result          = new UpdatePlayerPositionInfo();
            result.MatchId  = match.Id;
            result.PlayerId = playerId;
            result.Position = match.Player1.IsNull() ? 0 : 1;
        }

        return(result);
    }