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); }
/// <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); }
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; }