public void GetIndividualScoreByIdIncludingTeamscan_ShouldReturnIndividualScore_WhenIndividualScoreExists()
        {
            var id = Guid.NewGuid();

            var individualScore = new IndividualScore
            {
                Id                  = id,
                TeamMemberId        = teamMemberId,
                TeamscanId          = teamscanId,
                ScoreTrust          = 0,
                ScoreAccountability = 0,
                ScoreCommitment     = 0,
                ScoreConflict       = 0,
                ScoreResults        = 0,
                HasAnswered         = false
            };

            _unitOfWork.Setup(x => x.IndividualScoreRepository.GetIndividualScoreByIdIncludingTeamscan(id)).Returns(individualScore);

            var result = _service.GetIndividualScoreByIdIncludingTeamscan(id);

            Assert.Equal(id, result.Id);
            Assert.Equal(teamMemberId, result.TeamMemberId);
            Assert.Equal(teamscanId, result.TeamscanId);
        }
        public void CalculateTeamscore_ShouldReturnCalculatedTeamscan()
        {
            var id = Guid.NewGuid();

            var updatedScore = new IndividualScore()
            {
                Id                  = id,
                TeamscanId          = teamscanId,
                TeamMemberId        = teamMemberId,
                ScoreTrust          = scoreTrust,
                ScoreAccountability = scoreAccountability,
                ScoreCommitment     = scoreCommitment,
                ScoreConflict       = scoreConflict,
                ScoreResults        = scoreResults,
                HasAnswered         = true,
            };

            _unitOfWork.Setup(x => x.IndividualScoreRepository.GetAllAnsweredByTeamscan(teamscanId)).Returns(Enumerable.Empty <IndividualScore>());

            var result = _service.CalculateTeamscore(teamscanId, updatedScore, true);

            Assert.Equal(teamscanId, result.Id);
            Assert.Equal(scoreTrust, result.ScoreTrust);
            Assert.Equal(scoreAccountability, result.ScoreAccountability);
            Assert.Equal(scoreCommitment, result.ScoreCommitment);
            Assert.Equal(scoreConflict, result.ScoreConflict);
            Assert.Equal(scoreResults, result.ScoreResults);
            Assert.Equal(DateTime.Today, result.EndDate);
        }
        public void UpdateTeamscore(int teamscanId, IndividualScore updatedScore)
        {
            var teamscanToUpdate = _unitOfWork.TeamscanRepository.GetById(teamscanId);

            if (teamscanToUpdate == null)
            {
                throw new Exception($"Teamscan not found");
            }

            if (teamscanToUpdate.EndDate != null)
            {
                throw new Exception($"Teamscan is finished");
            }

            var  notAnsweredList    = _unitOfWork.IndividualScoreRepository.GetAll(score => score.HasAnswered == false && score.TeamscanId == teamscanId && score.Id != updatedScore.Id);
            bool isTeamscanFinished = notAnsweredList.Count() == 0 ? true : false;

            var calculatedTeamscan = CalculateTeamscore(teamscanId, updatedScore, isTeamscanFinished);

            _unitOfWork.TeamscanRepository.UpdateScores(_mapper.Map <Teamscan>(calculatedTeamscan));

            if (isTeamscanFinished)
            {
                UpdateLastTeamscanOfTeam(teamscanToUpdate.TeamId, calculatedTeamscan.EndDate, teamscanId);
            }
        }
        public TeamscanUpdateDto CalculateTeamscore(int teamscanId, IndividualScore updatedScore, bool isTeamscanFinished)
        {
            decimal sumTrust = 0, sumConflict = 0, sumCommitment = 0, sumAccountability = 0, sumResults = 0;
            var     individualScores = _unitOfWork.IndividualScoreRepository.GetAllAnsweredByTeamscan(teamscanId).ToList();

            individualScores.Add(updatedScore);
            int totalScores = individualScores.Count();

            individualScores.ForEach(score => sumTrust          += score.ScoreTrust);
            individualScores.ForEach(score => sumConflict       += score.ScoreConflict);
            individualScores.ForEach(score => sumCommitment     += score.ScoreCommitment);
            individualScores.ForEach(score => sumAccountability += score.ScoreAccountability);
            individualScores.ForEach(score => sumResults        += score.ScoreResults);

            TeamscanUpdateDto teamscanUpdateDto = new TeamscanUpdateDto
            {
                Id                  = teamscanId,
                EndDate             = isTeamscanFinished ? DateTime.Today : null,
                ScoreTrust          = totalScores != 0 ? Math.Round(sumTrust / totalScores, 2) : 0,
                ScoreConflict       = totalScores != 0 ? Math.Round(sumConflict / totalScores, 2) : 0,
                ScoreCommitment     = totalScores != 0 ? Math.Round(sumCommitment / totalScores, 2) : 0,
                ScoreAccountability = totalScores != 0 ? Math.Round(sumAccountability / totalScores, 2) : 0,
                ScoreResults        = totalScores != 0 ? Math.Round(sumResults / totalScores, 2) : 0
            };

            return(teamscanUpdateDto);
        }
예제 #5
0
        /// <summary>
        /// 获取分数输出总表
        /// </summary>
        /// <param name="departScoreList"></param>
        /// <param name="startDate">开始年月</param>
        /// <param name="stopDate">结束年月</param>
        /// <param name="exception"></param>
        /// <returns>查询到非空结果返回true,否则返回false</returns>
        public static bool GetScoreResult(ref List <DepartScore> departScoreList, string startDate, string stopDate, ref string exception)
        {
            IndividualScore individual1  = new IndividualScore("高1", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual2  = new IndividualScore("高2", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual3  = new IndividualScore("高3", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual4  = new IndividualScore("高4", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual5  = new IndividualScore("高5", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual6  = new IndividualScore("高6", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual7  = new IndividualScore("高7", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual8  = new IndividualScore("高8", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual9  = new IndividualScore("高9", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual10 = new IndividualScore("高10", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual11 = new IndividualScore("高11", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual12 = new IndividualScore("高12", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual13 = new IndividualScore("高13", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual14 = new IndividualScore("高14", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual15 = new IndividualScore("高15", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual16 = new IndividualScore("高16", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual17 = new IndividualScore("高17", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual18 = new IndividualScore("高18", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual19 = new IndividualScore("高19", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual20 = new IndividualScore("高20", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual21 = new IndividualScore("高21", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual22 = new IndividualScore("高22", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual23 = new IndividualScore("高23", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual24 = new IndividualScore("高24", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual25 = new IndividualScore("高25", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual26 = new IndividualScore("高26", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual27 = new IndividualScore("高27", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual28 = new IndividualScore("高28", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual29 = new IndividualScore("高29", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual30 = new IndividualScore("高30", 22.3f, 33.4f, 34.9f, 33.8f);
            IndividualScore individual31 = new IndividualScore("高31", 22.3f, 33.4f, 34.9f, 33.8f);

            OfficeScore office1  = new OfficeScore("处室1", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office2  = new OfficeScore("处室2", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office3  = new OfficeScore("处室3", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office4  = new OfficeScore("处室4", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office5  = new OfficeScore("处室5", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office6  = new OfficeScore("处室6", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office7  = new OfficeScore("处室7", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office8  = new OfficeScore("处室8", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office9  = new OfficeScore("处室9", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office10 = new OfficeScore("处室10", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office11 = new OfficeScore("处室11", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office12 = new OfficeScore("处室12", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);
            OfficeScore office13 = new OfficeScore("处室13", 33.9f, 78.8f, 89.2f, 45.6f, 78.4f, 78.9f);

            DepartScore depart1 = new DepartScore("部系1", 89.4f, 87.3f, 78.9f);
            DepartScore depart2 = new DepartScore("部系2", 89.4f, 87.2f, 78.9f);
            DepartScore depart3 = new DepartScore("部系3", 89.4f, 87.7f, 78.9f);

            office1.Staff.Add(individual1);
            office1.Staff.Add(individual2);
            office1.Staff.Add(individual3);
            office2.Staff.Add(individual4);
            office2.Staff.Add(individual5);
            office2.Staff.Add(individual6);
            office3.Staff.Add(individual7);
            office3.Staff.Add(individual8);
            office3.Staff.Add(individual9);
            office3.Staff.Add(individual10);
            office4.Staff.Add(individual11);
            office4.Staff.Add(individual12);
            office5.Staff.Add(individual13);
            office5.Staff.Add(individual14);
            office5.Staff.Add(individual15);
            office5.Staff.Add(individual16);
            office5.Staff.Add(individual17);
            office6.Staff.Add(individual18);
            office6.Staff.Add(individual19);
            office6.Staff.Add(individual20);
            office6.Staff.Add(individual21);
            office7.Staff.Add(individual22);
            office7.Staff.Add(individual23);
            office8.Staff.Add(individual24);
            office9.Staff.Add(individual25);
            office9.Staff.Add(individual26);
            office10.Staff.Add(individual27);
            office11.Staff.Add(individual28);
            office11.Staff.Add(individual29);
            office12.Staff.Add(individual30);
            office13.Staff.Add(individual31);

            depart1.OfficeList.Add(office1);
            depart1.OfficeList.Add(office2);
            depart1.OfficeList.Add(office3);
            depart2.OfficeList.Add(office4);
            depart2.OfficeList.Add(office5);
            depart2.OfficeList.Add(office6);
            depart2.OfficeList.Add(office7);
            depart2.OfficeList.Add(office8);
            depart3.OfficeList.Add(office9);
            depart3.OfficeList.Add(office10);
            depart3.OfficeList.Add(office11);
            depart3.OfficeList.Add(office12);
            depart3.OfficeList.Add(office13);

            departScoreList.Add(depart1);
            departScoreList.Add(depart2);
            departScoreList.Add(depart3);
            return(true);
        }
예제 #6
0
    private void UpdatePlayerContent()
    {
        int golferID = int.Parse(DropDown_PlayerSelect.SelectedValue);

        if (golferID == 0)
        {
            return;
        }
        string golferName = DatabaseFunctions.GetGolferName(golferID);

        Scoring.LeagueStats LeagueStats = (Scoring.LeagueStats)Session["LeagueStats"];
        List <int>          CourseIDs   = DatabaseFunctions.GetCourseIDs(leagueID);

        //Build Course Statistics
        Table ScoreCardsTable = new Table();

        ScoreCardsTable.CellPadding = 40;
        foreach (int courseID in CourseIDs)
        {
            if (LeagueStats.NumRoundsByGolferAndCourse[courseID][golferID] == 0)
            {
                break;
            }
            CourseInfo courseInfo = DatabaseFunctions.GetCourseInfoFromCourseID(courseID);

            Table scoreCardTable = BuildEmptyScoreCardTable(courseInfo);

            //Title Row
            TableRow  titleRow = new TableRow();
            TableCell cell     = AddCell(titleRow, "Number of Rounds Played : " + LeagueStats.NumRoundsByGolferAndCourse[courseID][golferID]);//DatabaseFunctions.GetGolferName(golferID) +
            cell.ColumnSpan = 11;
            cell.Font.Size  = 18;
            cell.Font.Bold  = true;
            titleRow.Cells.Add(cell);
            scoreCardTable.Rows.AddAt(1, titleRow);

            scoreCardTable.BorderStyle = BorderStyle.Solid;
            scoreCardTable.BorderWidth = 5;

            AddScoreCardRow(scoreCardTable, "Best Score", LeagueStats.BestScoresByHole[courseID][golferID]);
            AddScoreCardRow(scoreCardTable, "Worst Score", LeagueStats.WorstScoresByHole[courseID][golferID]);
            AddScoreCardRow(scoreCardTable, "Average Score", roundDecimalList(LeagueStats.AverageScoresByHole[courseID][golferID]));
            AddScoreCardRow(scoreCardTable, "Skins Won", listOfIntToByte(LeagueStats.SkinsByCourseID[courseID][golferID]));

            TableRow  scoreCardHolderRow  = new TableRow();
            TableCell scoreCardHolderCell = new TableCell();
            scoreCardHolderCell.Controls.Add(scoreCardTable);
            scoreCardHolderRow.Cells.Add(scoreCardHolderCell);
            ScoreCardsTable.Rows.Add(scoreCardHolderRow);
        }
        CourseStats.Controls.Add(ScoreCardsTable);

        //Build Graph for scores and handicaps

        FontFamily fontFamily = new FontFamily("Arial");
        Font       titlefont  = new Font(fontFamily, 16, FontStyle.Bold, GraphicsUnit.Pixel);

        Chart chartScores = new Chart();

        chartScores.Width            = 800;
        chartScores.Height           = 500;
        chartScores.ImageStorageMode = ImageStorageMode.UseImageLocation;
        //chartScores.Legends.Add(new Legend("Default"));
        //chartScores.Legends["Default"].Docking = Docking.Bottom;
        //chartScores.Legends["Default"].Font = new System.Drawing.Font("Arial", 16, FontStyle.Bold);
        chartScores.BorderSkin           = new BorderSkin();
        chartScores.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
        chartScores.BorderSkin.PageColor = Color.Transparent;
        chartScores.Titles.Add(new Title("Scores for " + golferName, Docking.Top, titlefont, Color.Black));
        ChartArea chartArea = new ChartArea();

        chartArea.Name = "ChartArea1";
        chartArea.AxisX.ScaleBreakStyle.Enabled = true;
        chartArea.AxisY.IsStartedFromZero       = false;
        chartScores.ChartAreas.Add(chartArea);


        Chart chartHandicaps = new Chart();

        chartHandicaps.Width            = 800;
        chartHandicaps.Height           = 500;
        chartHandicaps.ImageStorageMode = ImageStorageMode.UseImageLocation;
        //chartHandicaps.Legends.Add(new Legend("Default"));
        //chartHandicaps.Legends["Default"].Docking = Docking.Bottom;
        //chartHandicaps.Legends["Default"].Font = new System.Drawing.Font("Arial", 16, FontStyle.Bold);
        chartHandicaps.BorderSkin           = new BorderSkin();
        chartHandicaps.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
        chartHandicaps.BorderSkin.PageColor = Color.Transparent;
        chartHandicaps.Titles.Add(new Title("Handicap for " + golferName, Docking.Top, titlefont, Color.Black));
        ChartArea chartArea2 = new ChartArea();

        chartArea2.Name = "ChartArea2";
        chartArea2.AxisX.ScaleBreakStyle.Enabled = true;
        chartArea2.AxisX.ScaleBreakStyle.CollapsibleSpaceThreshold = 10;
        chartHandicaps.ChartAreas.Add(chartArea2);

        Series series = new Series("Handicap");

        series.ChartType   = SeriesChartType.Point;
        series.XValueType  = ChartValueType.Date;
        series.MarkerSize  = 20;
        series.MarkerStyle = MarkerStyle.Diamond;
        chartHandicaps.Series.Add(series);

        series             = new Series("Scores");
        series.ChartType   = SeriesChartType.Point;
        series.XValueType  = ChartValueType.Date;
        series.MarkerSize  = 20;
        series.MarkerStyle = MarkerStyle.Star6;
        chartScores.Series.Add(series);

        //List<int> scores = new List<int>();
        //List<int> handicaps = new List<int>();
        //List<DateTime> dates = new List<DateTime>();

        List <IndividualScore>      scores     = new List <IndividualScore>();
        Dictionary <int, EventInfo> eventInfos = DatabaseFunctions.GetEventsWithScores(leagueID);

        foreach (int eventID in LeagueStats.ScoreByEvent[golferID].Keys)
        {
            IndividualScore score = new IndividualScore();
            //DateTime? eventDateTime = DatabaseFunctions.GetEventDate(eventID);
            DateTime  eventDateTime = DateTime.Parse(eventInfos[eventID].Date);
            DataPoint point         = new DataPoint();
            point.SetValueXY(eventDateTime, LeagueStats.ScoreByEvent[golferID][eventID]);
            chartScores.Series["Scores"].Points.Add(point);

            DataPoint point2 = new DataPoint();
            point2.SetValueXY(eventDateTime, LeagueStats.handicaps[golferID][eventID]);
            chartHandicaps.Series["Handicap"].Points.Add(point2);

            score.Handicap   = LeagueStats.handicaps[golferID][eventID];
            score.Score      = LeagueStats.ScoreByEvent[golferID][eventID];
            score.date       = eventDateTime;
            score.CourseName = eventInfos[eventID].CourseName;
            score.SeasonName = eventInfos[eventID].SeasonName;
            score.EventName  = eventInfos[eventID].EventName;

            scores.Add(score);
            //dates.Add((DateTime)eventDateTime);
            //scores.Add(LeagueStats.ScoreByEvent[golferID][eventID]);
            //handicaps.Add(LeagueStats.handicaps[golferID][eventID]);
        }

        Graph.Controls.Add(chartScores);
        Graph.Controls.Add(chartHandicaps);

        //BuildPlayerHandicapTable(scores, handicaps, dates);
        PopulateScoreGrid(scores.OrderBy(x => x.date).ToList());
        lbGridTitle.Text = "Scores for " + golferName;
    }