/// <summary> /// Tells us whether we have already voted on this federation member. /// </summary> /// <param name="voteKey">See <see cref="VoteKey"/>.</param> /// <param name="federationMemberBytes">The bytes to compare <see cref="VotingData.Data"/> against.</param> /// <returns><c>True</c> if we have already voted or <c>false</c> otherwise.</returns> public bool AlreadyVotingFor(VoteKey voteKey, byte[] federationMemberBytes) { List <Poll> approvedPolls = this.GetApprovedPolls(); if (approvedPolls.Any(x => !x.IsExecuted && x.VotingData.Key == voteKey && x.VotingData.Data.SequenceEqual(federationMemberBytes) && x.PubKeysHexVotedInFavor.Any(v => v.PubKey == this.federationManager.CurrentFederationKey.PubKey.ToHex()))) { // We've already voted in a finished poll that's only awaiting execution. return(true); } List <Poll> pendingPolls = this.GetPendingPolls(); if (pendingPolls.Any(x => x.VotingData.Key == voteKey && x.VotingData.Data.SequenceEqual(federationMemberBytes) && x.PubKeysHexVotedInFavor.Any(v => v.PubKey == this.federationManager.CurrentFederationKey.PubKey.ToHex()))) { // We've already voted in a pending poll. return(true); } List <VotingData> scheduledVotes = this.GetScheduledVotes(); if (scheduledVotes.Any(x => x.Key == voteKey && x.Data.SequenceEqual(federationMemberBytes))) { // We have the vote queued to be put out next time we mine a block. return(true); } return(false); }
private void WriteAttendInfo(XmlTextWriter xmlWriter, int scannerSerialNumber, Voting.Election election) { foreach (var blank in _electionManager.SourceData.Blanks) { if (election != null && _electionManager.SourceData.GetBlankIdByElectionNumber(election.ElectionId) != blank.Id) { continue; } var mask = new VoteKey { ScannerSerialNumber = scannerSerialNumber, BlankId = blank.Id }; xmlWriter.WriteStartElement("Bulletin"); xmlWriter.WriteAttributeString("id", blank.Id); xmlWriter.WriteAttributeString("n", XmlConvert.ToString(blank.Marker)); mask.BlankType = BlankType.Valid; xmlWriter.WriteAttributeString("Valid", XmlConvert.ToString(VotingResults.VotesCount(mask))); mask.BlankType = BlankType.NoMarks; xmlWriter.WriteAttributeString("NoMarks", XmlConvert.ToString(VotingResults.VotesCount(mask))); mask.BlankType = BlankType.TooManyMarks; xmlWriter.WriteAttributeString("TooManyMarks", XmlConvert.ToString(VotingResults.VotesCount(mask))); mask.BlankType = BlankType.BadMode; xmlWriter.WriteAttributeString("BadMode", XmlConvert.ToString(VotingResults.VotesCount(mask))); xmlWriter.WriteEndElement(); } }
public void CreateOrUpdateVote(int userId, int postId, VoteType voteType) { var key = new VoteKey { UserId = userId, PostId = postId }; int existingVoteValue = GetExistingVoteValue(key); int voteDiff = GradeVote(voteType) - existingVoteValue; var vote = new TVoteOnPost { Key = key, Vote = voteType }; try { ActiveRecordMediator <TVoteOnPost> .Create(vote); } catch (GenericADOException) { ActiveRecordMediator <TVoteOnPost> .Update(vote); } // todo - use this instead of the above // http://stackoverflow.com/questions/2077949/castle-activerecord-save-is-throwing-stalestateexception // ActiveRecordMediator<TVoteOnPost>.Save(vote); UpdateVotesOnAnswer(postId, voteDiff); }
private void WriteScannersInfo(XmlTextWriter xmlWriter, Voting.Election election) { var scannerArr = _scannersInfo.GetScannerInfos(); foreach (var scanner in scannerArr) { var intScannerSerialNumber = Convert.ToInt32(scanner.SerialNumber); xmlWriter.WriteStartElement("Scanner"); xmlWriter.WriteAttributeString("n", scanner.SerialNumber); var mask = new VoteKey { ScannerSerialNumber = intScannerSerialNumber, BlankType = BlankType.Bad, }; var nufCount = VotingResults.VotesCount(mask); xmlWriter.WriteAttributeString("nuf", XmlConvert.ToString(nufCount)); if (election != null) { WriteAttendInfo(xmlWriter, intScannerSerialNumber, election); } else { foreach (var el in _electionManager.SourceData.Elections) { WriteAttendInfo(xmlWriter, intScannerSerialNumber, el); } } xmlWriter.WriteEndElement(); } }
public NextActivityKey ReceivedBulletinsCountInCurrentModeMoreThenZero( WorkflowExecutionContext context, ActivityParameterDictionary parameters) { var key = new VoteKey { BlankType = BlankType.All, VotingMode = _electionManager.CurrentVotingMode, ScannerSerialNumber = _scannerManager.IntSerialNumber }; var count = _votingResultManager.VotingResults.VotesCount(key); return(count > 0 ? BpcNextActivityKeys.Yes : BpcNextActivityKeys.No); }
private void WriteElectionInfo(XmlTextWriter xmlWriter, Voting.Election election) { xmlWriter.WriteStartElement("Election"); xmlWriter.WriteAttributeString("n", election.ExternalNumber); xmlWriter.WriteAttributeString("parentid", election.ParentComittee.ParentID); xmlWriter.WriteAttributeString("e-mail", election.ParentComittee.EMail); if (!_isPreliminaryProtocol) { foreach (var line in election.Protocol.Lines) { xmlWriter.WriteStartElement("Line"); xmlWriter.WriteAttributeString("n", XmlConvert.ToString(line.Num)); if (!string.IsNullOrEmpty(line.AdditionalNum)) { xmlWriter.WriteAttributeString("a", line.AdditionalNum); } xmlWriter.WriteString(XmlConvert.ToString(line.Value.GetValueOrDefault(0))); xmlWriter.WriteEndElement(); } } var showDisabledCandidates = !string.IsNullOrEmpty(election.Protocol.DisabledString); foreach (var candidate in election.Candidates) { if (candidate.Disabled && !showDisabledCandidates) { continue; } xmlWriter.WriteStartElement("Candidate"); xmlWriter.WriteAttributeString("n", candidate.Id); if (candidate.Disabled) { xmlWriter.WriteAttributeString("disabled", XmlConvert.ToString(true)); } var mask = new VoteKey { ElectionNum = election.ElectionId, CandidateId = candidate.Id }; var votesCount = VotingResults.VotesCount(mask); xmlWriter.WriteString(XmlConvert.ToString(votesCount)); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); }
public void RemoveVote(int voterId, int postId) { var key = new VoteKey(voterId, postId); var voteOnQuestion = new TVoteOnPost { Key = key }; try { int votesDelta = -GetExistingVoteValue(key); ActiveRecordMediator <TVoteOnPost> .Delete(voteOnQuestion); UpdateVotesOnAnswer(postId, votesDelta); } catch (ObjectNotFoundException) { // swallow it, the deleted object is really not there } }
public IActionResult GetExecutedPolls([FromQuery] VoteKey voteType, [FromQuery] string pubKeyOfMemberBeingVotedOn = "") { try { IEnumerable <Poll> polls = this.votingManager.GetExecutedPolls().Where(v => v.VotingData.Key == voteType); IEnumerable <PollViewModel> models = polls.Select(x => new PollViewModel(x, this.pollExecutor)); if (!string.IsNullOrEmpty(pubKeyOfMemberBeingVotedOn)) { models = models.Where(m => m.VotingDataString.Contains(pubKeyOfMemberBeingVotedOn)); } return(this.Json(models)); } catch (Exception e) { this.logger.LogError("Exception occurred: {0}", e.ToString()); return(ErrorHelpers.BuildErrorResponse(HttpStatusCode.BadRequest, e.Message, e.ToString())); } }
public CollateralFederationMember CollateralAddressOwner(VotingManager votingManager, VoteKey voteKey, string address) { CollateralFederationMember member = (this.federationMembers.Cast <CollateralFederationMember>().FirstOrDefault(x => x.CollateralMainchainAddress == address)); if (member != null) { return(member); } List <Poll> approvedPolls = votingManager.GetApprovedPolls(); member = approvedPolls .Where(x => !x.IsExecuted && x.VotingData.Key == voteKey) .Select(x => this.GetMember(x.VotingData)) .FirstOrDefault(x => x.CollateralMainchainAddress == address); if (member != null) { return(member); } List <Poll> pendingPolls = votingManager.GetPendingPolls(); member = pendingPolls .Where(x => x.VotingData.Key == voteKey) .Select(x => this.GetMember(x.VotingData)) .FirstOrDefault(x => x.CollateralMainchainAddress == address); if (member != null) { return(member); } List <VotingData> scheduledVotes = votingManager.GetScheduledVotes(); member = scheduledVotes .Where(x => x.Key == voteKey) .Select(x => this.GetMember(x)) .FirstOrDefault(x => x.CollateralMainchainAddress == address); return(member); }
private static int GetExistingVoteValue(VoteKey key) { var existingVote = ActiveRecordMediator <TVoteOnPost> .FindByPrimaryKey(key, false); return(GradeVote(existingVote)); }
private List <BasePlainElement> CreateProtocolBodyTable( ProtocolText protocolTemplate, Election election, bool final, bool printResults) { int lineNumber = election.Protocol.GetLatestLineNumber(final); string disabled = election.Protocol.DisabledString; bool showDisabled = !string.IsNullOrEmpty(disabled); bool delimiter = false; var table = new List <BasePlainElement>(); foreach (var voteLine in protocolTemplate.VoteLines) { var mask = new VoteKey { ElectionNum = election.ElectionId }; switch (voteLine.Type) { case VoteLineType.Vote: foreach (Candidate currentCand in election.Candidates) { if ((currentCand.Id == voteLine.ID) && (!currentCand.Disabled || showDisabled)) { lineNumber++; mask.CandidateId = currentCand.Id; int votesCount = _votingResultManager.VotingResults.VotesCount(mask); table.Add(new LineClause( new[] { lineNumber.ToString(), currentCand.GetInitials(!currentCand.NoneAbove), currentCand.Disabled ? disabled : (printResults ? votesCount.ToString() : "0"), currentCand.Disabled ? "" : (printResults ? "(" + CustomRusNumber.Str(votesCount, true).Trim() + ")" : CustomRusNumber.Str(0, true).Trim()) }, voteLine.FontSize, voteLine.Bold, voteLine.Italic, delimiter)); delimiter = false; break; } } break; case VoteLineType.Line: if (string.CompareOrdinal(voteLine.ID, VoteTextLine.TOTAL_RECEIVED_VOTETEXTLINE_ID) == 0) { var value = _votingResultManager.VotingResults.VotesCount( new VoteKey( BlankType.AllButBad, null, null, null, null, _electionManager.SourceData.GetBlankIdByElectionNumber(election.ElectionId))); var text = string.IsNullOrEmpty(voteLine.Text) ? VoteTextLine.TOTAL_RECEIVED_VOTETEXTLINE_DEFAULT_TEXT : voteLine.Text; table.Add(new LineClause( new[] { "", text, printResults ? value.ToString() : "0", printResults ? "(" + CustomRusNumber.Str(value, true).Trim() + ")" : CustomRusNumber.Str(0, true).Trim() }, voteLine.FontSize, voteLine.Bold, voteLine.Italic, delimiter)); } else { foreach (Line currentLine in election.Protocol.Lines) { if (currentLine.Id == voteLine.ID) { int value = final && currentLine.Value.HasValue ? currentLine.Value.Value : 0; table.Add(new LineClause( new[] { currentLine.Num + currentLine.AdditionalNum, currentLine.Name, printResults ? value.ToString() : "0", printResults ? "(" + CustomRusNumber.Str(value, true).Trim() + ")" : CustomRusNumber.Str(0, true).Trim() }, voteLine.FontSize, voteLine.Bold, voteLine.Italic, delimiter)); break; } } } delimiter = false; break; case VoteLineType.Delimiter: delimiter = true; break; } } return(table); }
private List <KeyValuePair <VoteKey, bool> > GetVoteKeysForAdding( VotingResult votingResult, VotingMode votingMode, int scannerSerialNumber) { Logger.LogVerbose(Message.Common_DebugCall); var keys = new List <KeyValuePair <VoteKey, bool> >(); var sourceData = _electionManager.SourceData; var blank = (0 <= votingResult.BulletinNumber && votingResult.BulletinNumber < sourceData.Blanks.Length) ? sourceData.Blanks[votingResult.BulletinNumber] : null; var bulletinVote = new VoteKey { ScannerSerialNumber = scannerSerialNumber, VotingMode = votingMode, BlankId = (blank != null ? blank.Id : votingResult.BulletinNumber.ToString()), BlankType = votingResult.BlankType, }; if (bulletinVote.BlankType == BlankType.Valid) { if (votingResult.SectionsMarks == null || votingResult.SectionsValidity == null) { bulletinVote.BlankType = BlankType.NoMarks; } else { var invalid = true; for (var sectionIndex = 0; sectionIndex <= votingResult.SectionsMarks.GetUpperBound(0); sectionIndex++) { if (votingResult.SectionsValidity[sectionIndex] && votingResult.SectionsMarks[sectionIndex] != null && votingResult.SectionsMarks[sectionIndex].Length > 0) { invalid = false; break; } } if (invalid) { bulletinVote.BlankType = BlankType.NoMarks; } } } if (bulletinVote.BlankType == BlankType.Valid) { bool isBulletinAdded = false; for (var sectionIndex = 0; sectionIndex <= votingResult.SectionsMarks.GetUpperBound(0); sectionIndex++) { if (!votingResult.SectionsValidity[sectionIndex]) { continue; } for (var markIndex = 0; markIndex < votingResult.SectionsMarks[sectionIndex].Length; markIndex++) { VoteKey candidateVote; if (!isBulletinAdded && markIndex == 0) { candidateVote = bulletinVote; isBulletinAdded = true; } else { candidateVote = new VoteKey { ScannerSerialNumber = scannerSerialNumber, BlankId = blank.Id, VotingMode = votingMode } }; candidateVote.ElectionNum = blank.Sections[sectionIndex]; candidateVote.CandidateId = sourceData.GetElectionByNum(blank.Sections[sectionIndex]). Candidates[votingResult.SectionsMarks[sectionIndex][markIndex]].Id; keys.Add(new KeyValuePair <VoteKey, bool>(candidateVote, false)); } } } else { keys.Add(new KeyValuePair <VoteKey, bool>(bulletinVote, false)); } return(keys); }