public void Finish() { AssertOnGoingVoting(); var maxVotes = Votes.Select(y => y.Value).Max(); AssertOnlyOneWinner(); Winner = Votes.Single(x => x.Value == maxVotes).Key; void AssertOnlyOneWinner() { if (Votes.Count(x => x.Value == maxVotes) != 1) { throw new InvalidOperationException("Can't finish voting, only one winner is allowed"); } } }
public JudmentDocument ToJudmentDocument() { var judmentDocument = new JudmentDocument ( ID, ProcessNumber, JudmentText.Text.Clean(), DecisionText == null ? null : DecisionText.Text.Clean(), new List <Party>(Parties.Select(x => new PartyModel(x.ID, x.Name, x.Type).ToParty())), new ReportModel(Report.ID, Report.Reporter, Report.Text.Clean()).ToReportText(), new Minister(0, Report.Reporter), Report.Reporter, new List <Vote>(Votes.Select(x => new VoteModel(x.ID, x.Text.Clean()).ToVote())), string.Join(" ", RawText.Select(x => x.Clean()).ToArray()) ); judmentDocument.Parties.Select(x => x.JudmentDocument = new JudmentDocument(judmentDocument)).ToList(); judmentDocument.Votes.Select(x => x.JudmentDocument = new JudmentDocument(judmentDocument)).ToList(); return(judmentDocument); }
public int CalculateScore() { return(Votes?.Select(v => v.Type).Cast <int>().Sum() ?? 0); }