Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 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();
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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();
        }
Beispiel #7
0
        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);
        }
Beispiel #10
0
        private static int GetExistingVoteValue(VoteKey key)
        {
            var existingVote = ActiveRecordMediator <TVoteOnPost> .FindByPrimaryKey(key, false);

            return(GradeVote(existingVote));
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }