public void AddScore(Card card, CardPlayerScore score) { if (score == null || score.HoleNumber <= 0 || score.HoleNumber > card.CourseData.Holes.Count() || score.CardPlayer.Id.Equals(Guid.Empty) || score.Score <= 0) { return; } CalculatePoints(card, score); var existing = card.CardPlayers.FirstOrDefault(x => x.Id.Equals(score.CardPlayer.Id)).CardPlayerScores.SingleOrDefault(x => x.HoleNumber == score.HoleNumber); if (existing != null) { existing.Score = score.Score; existing.Points = score.Points; } else { card.CardPlayers.FirstOrDefault(x => x.Id.Equals(score.CardPlayer.Id)).CardPlayerScores.Add(score); } }
private void CalculatePoints(Card card, CardPlayerScore score) { var hole = card.CourseData.Holes.SingleOrDefault(x => x.Number == score.HoleNumber); var playerScore = card.CardPlayers.SingleOrDefault(x => x.Id.Equals(score.CardPlayer.Id)); var extraStrokes = CalculateExtraStrokes(playerScore.RoundHandicap, hole.Index); var points = 2 + (hole.Par + extraStrokes - score.Score); score.Points = points > 0 ? points : 0; }